matlab flatten,Numpy中扁平化函数ravel()和flatten()的区别
在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()的区别相关推荐
- python中tile的用法_Python:numpy中的tile函数
在学习机器学习实教程时,实现KNN算法的代码中用到了numpy的tile函数,因此对该函数进行了一番学习: tile函数位于python模块 numpy.lib.shape_base中,他的功能是重复 ...
- python观察日志(part24)--列表和numpy数组扁平化
学习笔记,仅供参考,有错必究 参考文献:python–列表.数组扁平化:你知道如何将python中嵌套的列表扁平化吗? 列表扁平化 方案1 print(sum([[1, 2, 3], ["s ...
- Numpy中使用astype函数将字符串格式数据转换为数值数据类型
Numpy中使用astype函数将字符串格式数据转换为数值数据类型 目录 Numpy中使用astype函数将字符串格式数据转换为数值数据类型 numpy是什么?numpy和list有哪些区别? Num ...
- python grid函数_详解numpy中的meshgrid函数用法
numpy中的meshgrid函数的使用 numpy官方文档meshgrid函数帮助文档https://docs.scipy.org/doc/numpy/reference/generated/num ...
- Numpy中使用astype函数转换numpy数组数据类型
Numpy中使用astype函数转换numpy数组数据类型 目录 Numpy中使用astype函数转换numpy数组数据类型 numpy是什么?numpy和list有哪些区别? Numpy中使用ast ...
- Python使用numpy中的hstack函数水平堆叠(horizontally stack)数组实战
Python使用numpy中的hstack函数水平堆叠(horizontally stack)数组实战 目录 Python使用numpy中的hstack函数水平堆叠(horizontally stac ...
- Numpy中np.mashgri() 函数介绍及2种应用场景
@[toc](Numpy中np.mashgri() 函数介绍及2种应用场景 文章目录:) 近期在好几个地方都看到meshgrid的使用,虽然之前也注意到meshgrid的用法. 但总觉得印象不深刻,不 ...
- js 数组去重、扁平化函数
1.数组扁平化(又称数组降维) flat() 方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回 const test = ["a", ...
- 数组扁平化/函数柯理化
要知道如果数组是二维或者三维甚至是多维数组,如果想直接取里面一个两个还好, 如果想一次性取很多个或者取出全部那么就很麻烦了,所以这时候就有了数组扁平化或者说函数柯理化,其意思就是将多维数组里面的每一个 ...
最新文章
- SAP 差旅报销集成方案的实现
- 创建docker用户组并加入
- java 取pdf表格内容数据_Java 在PDF中添加表格
- optee的栈指针和栈内存的介绍
- 对象的当前状态使该操作无效 说明: 执行当前 Web 请求期间,出现未处理的异常。...
- java 文件流关闭 finally,关于java:为什么需要在“ finally”内关闭文件,而仍将其嵌入在“ try / catch”块内?...
- [GAN学习系列3]采用深度学习和 TensorFlow 实现图片修复(下)
- socket-select函数
- java jni 原理_JNI的实现原理
- 封装直传阿里云存储文件上传控件
- 【LoadRunner】解决LR11无法录制Chrome浏览器脚本问题
- shǎ崽 OrOrOrOrz
- ConnectivityManager
- 第一阶段冲刺阶段项目总结
- 实验一:端口扫描(X-scan)
- 第一易,唯一难,为什么它是ofo、天学网的不二选择
- Visual studio code 使用 Team Foundation Server - Windows
- Snapper转换器的捕捉类型
- css超出显示...(单行、多行)
- js创建对象,构造函数,this,原型,继承
热门文章
- GPS网的基线计算以及平差处理(使用Python绘制误差椭圆,C++处理数据并输出Qxx矩阵)
- c语言求纯粹合数,纯粹合数是哪些?
- c语言调色板5个参数,R语言中的颜色以及色板
- spring --jia包依赖坐标收集
- 数据分析——Kettle插件开发异常信息总结
- 用让新海诚本人惊讶的 AI 模型制作属于你的动漫视频
- seo是什么意思?包含哪些方面?
- 微型linux系统测试网卡,自制一个小型Linux(附带网络功能)
- php5.6 ecshop,PHP 5.6以上版本运行 ecshop不兼容问题解决方案
- 解析各类生鲜电商模式,哪家买菜最强?