在Numpy中经常使用到的操作由扁平化操作,Numpy提供了两个函数进行此操作,他们的功能相同,但在内存上有很大的不同.

先来看这两个函数的使用:

from numpy import *

a = arange(12).reshape(3,4)

print(a)

# [[ 0 1 2 3]

# [ 4 5 6 7]

# [ 8 9 10 11]]

print(a.ravel())

# [ 0 1 2 3 4 5 6 7 8 9 10 11]

print(a.flatten())

# [ 0 1 2 3 4 5 6 7 8 9 10 11]

可以看到这两个函数实现的功能一样,但我们在平时使用的时候flatten()更为合适.在使用过程中flatten()分配了新的内存,但ravel()返回的是一个数组的视图.视图是数组的引用(说引用不太恰当,因为原数组和ravel()返回后的数组的地址并不一样),在使用过程中应该注意避免在修改视图时影响原本的数组.这是什么意思咧,我们通过代码来具体解释:

from numpy import *

a = arange(12).reshape(3,4)

print(a)

# [[ 0 1 2 3]

# [ 4 5 6 7]

# [ 8 9 10 11]]

# 创建一个和a相同内容的数组b

b = a.copy()

c = a.ravel()

d = b.flatten()

# 输出c和d数组

print(c)

# [ 0 1 2 3 4 5 6 7 8 9 10 11]

print(d)

# [ 0 1 2 3 4 5 6 7 8 9 10 11]

# 可以看到c和d数组都是扁平化后的数组,具有相同的内容

print(a is c)

# False

print(b is d)

# False

# 可以看到以上a,b,c,d是四个不同的对象

# 但因为c是a的一种展示方式,虽然他们是不同的对象,但在修改c的时候,a中相应的数也改变了

c[1] = 99

d[1] = 99

print(a)

# [[ 0 99 2 3]

# [ 4 5 6 7]

# [ 8 9 10 11]]

print(b)

# [[ 0 1 2 3]

# [ 4 5 6 7]

# [ 8 9 10 11]]

print(c)

# [ 0 99 2 3 4 5 6 7 8 9 10 11]

print(d)

# [ 0 99 2 3 4 5 6 7 8 9 10 11]

通过以上的分析,在实际应用中应尽量使用flatten()函数,这样避免意外的错误.

承接Matlab、Python和C++的编程,机器学习、计算机视觉的理论实现及辅导,本科和硕士的均可,咸鱼交易,专业回答请走知乎,详谈请联系QQ号757160542,非诚勿扰。

本文同步分享在 博客“于小勇”(CSDN)。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

matlab flatten,Numpy中扁平化函数ravel()和flatten()的区别相关推荐

  1. python中tile的用法_Python:numpy中的tile函数

    在学习机器学习实教程时,实现KNN算法的代码中用到了numpy的tile函数,因此对该函数进行了一番学习: tile函数位于python模块 numpy.lib.shape_base中,他的功能是重复 ...

  2. python观察日志(part24)--列表和numpy数组扁平化

    学习笔记,仅供参考,有错必究 参考文献:python–列表.数组扁平化:你知道如何将python中嵌套的列表扁平化吗? 列表扁平化 方案1 print(sum([[1, 2, 3], ["s ...

  3. Numpy中使用astype函数将字符串格式数据转换为数值数据类型

    Numpy中使用astype函数将字符串格式数据转换为数值数据类型 目录 Numpy中使用astype函数将字符串格式数据转换为数值数据类型 numpy是什么?numpy和list有哪些区别? Num ...

  4. python grid函数_详解numpy中的meshgrid函数用法

    numpy中的meshgrid函数的使用 numpy官方文档meshgrid函数帮助文档https://docs.scipy.org/doc/numpy/reference/generated/num ...

  5. Numpy中使用astype函数转换numpy数组数据类型

    Numpy中使用astype函数转换numpy数组数据类型 目录 Numpy中使用astype函数转换numpy数组数据类型 numpy是什么?numpy和list有哪些区别? Numpy中使用ast ...

  6. Python使用numpy中的hstack函数水平堆叠(horizontally stack)数组实战

    Python使用numpy中的hstack函数水平堆叠(horizontally stack)数组实战 目录 Python使用numpy中的hstack函数水平堆叠(horizontally stac ...

  7. Numpy中np.mashgri() 函数介绍及2种应用场景

    @[toc](Numpy中np.mashgri() 函数介绍及2种应用场景 文章目录:) 近期在好几个地方都看到meshgrid的使用,虽然之前也注意到meshgrid的用法. 但总觉得印象不深刻,不 ...

  8. js 数组去重、扁平化函数

    1.数组扁平化(又称数组降维) flat() 方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回 const test = ["a", ...

  9. 数组扁平化/函数柯理化

    要知道如果数组是二维或者三维甚至是多维数组,如果想直接取里面一个两个还好, 如果想一次性取很多个或者取出全部那么就很麻烦了,所以这时候就有了数组扁平化或者说函数柯理化,其意思就是将多维数组里面的每一个 ...

最新文章

  1. SAP 差旅报销集成方案的实现
  2. 创建docker用户组并加入
  3. java 取pdf表格内容数据_Java 在PDF中添加表格
  4. optee的栈指针和栈内存的介绍
  5. 对象的当前状态使该操作无效 说明: 执行当前 Web 请求期间,出现未处理的异常。...
  6. java 文件流关闭 finally,关于java:为什么需要在“ finally”内关闭文件,而仍将其嵌入在“ try / catch”块内?...
  7. [GAN学习系列3]采用深度学习和 TensorFlow 实现图片修复(下)
  8. socket-select函数
  9. java jni 原理_JNI的实现原理
  10. 封装直传阿里云存储文件上传控件
  11. 【LoadRunner】解决LR11无法录制Chrome浏览器脚本问题
  12. shǎ崽 OrOrOrOrz
  13. ConnectivityManager
  14. 第一阶段冲刺阶段项目总结
  15. 实验一:端口扫描(X-scan)
  16. 第一易,唯一难,为什么它是ofo、天学网的不二选择
  17. Visual studio code 使用 Team Foundation Server - Windows
  18. Snapper转换器的捕捉类型
  19. css超出显示...(单行、多行)
  20. js创建对象,构造函数,this,原型,继承

热门文章

  1. GPS网的基线计算以及平差处理(使用Python绘制误差椭圆,C++处理数据并输出Qxx矩阵)
  2. c语言求纯粹合数,纯粹合数是哪些?
  3. c语言调色板5个参数,R语言中的颜色以及色板
  4. spring --jia包依赖坐标收集
  5. 数据分析——Kettle插件开发异常信息总结
  6. 用让新海诚本人惊讶的 AI 模型制作属于你的动漫视频
  7. seo是什么意思?包含哪些方面?
  8. 微型linux系统测试网卡,自制一个小型Linux(附带网络功能)
  9. php5.6 ecshop,PHP 5.6以上版本运行 ecshop不兼容问题解决方案
  10. 解析各类生鲜电商模式,哪家买菜最强?