【Python】NumPy 中 ravel() 正确打开方式

最近在看书时,对numpy的ravel()的有些疑惑,书上这样写到“如果结果中的值在原始数组中是连续的,则ravel 不会生成底层数值的副本”,度娘后,发现大部分的说法都是得到原数组的视图,但是按照书上的说法,是可以产生副本的,只要结果的值在原始数组中不连续。

刚开始不太理解,这里所谓的连续是指什么?后来发现,这个连续是指的是元素顺序,reval()中有个参数【order】,这个参数指定了重塑顺序。

In [58]: arr2
Out[58]:
array([[ 1,  1, -1],[ 0, -3,  6]])     # arr2 默认安装C顺序展开
In [59]: arr3 = np.ravel(arr2,order = 'C')     # C顺序,即是按行方向顺序
In [60]: arr3
Out[60]: array([ 1,  1, -1,  0, -3,  6])    # arr2,arr3都是按照C顺序展开
In [72]: arr3.base is arr2        # arr3基于arr2
Out[72]: True
In [73]: np.may_share_memory(arr2,arr3)   # arr3,arr2共享内存,则arr3为arr2的视图
Out[73]: True
In [62]: arr4 = np.ravel(arr2,order = 'F')   #arr4 按照F顺序,即是列顺序重塑
In [63]: arr4
Out[63]: array([ 1,  0,  1, -3, -1,  6])    #可以看出顺序与arr2的不同
In [64]: arr4.base is arr2         #arr4 不是基于arr2
Out[64]: False
In [65]: np.may_share_memory(arr2,arr4)     #arr4,arr2  不共享内存
Out[65]: False
In [74]: arr4.flags.owndata   #arr4拥有自己的数据,说明独立于arr2,是一个副本
Out[74]: True
In [66]: arr5 = np.ravel(arr2.T, order='A')  #A顺序,应该是针对于转置后的重塑
In [67]: arr5
Out[67]: array([ 1,  1, -1,  0, -3,  6])   #得到结果顺序与arr2的一致,也是C顺序
In [68]: np.may_share_memory(arr2,arr5)    # arr5,arr2共享内存,则arr5为arr2的视图
Out[68]: True
In [69]: arr6 = np.ravel(arr2.swapaxes(0,1), order='K')  #A顺序,应该是针对于轴交换后的重塑
In [70]: arr6
Out[70]: array([ 1,  1, -1,  0, -3,  6]) #得到结果顺序与arr2的一致,也是C顺序
In [71]: np.may_share_memory(arr2,arr6) # arr6,arr2共享内存,则arr6为arr2的视图
Out[71]: True

所以ravel()的结果不一定就是原数组的视图,这个要看具体的情况,不过一般重塑都是使用默认的order参数,按照C顺序重塑,但是使用时也要注意,避免错把视图当做副本,修改视图影响原本的数组。
或者直接使用flatten(),不管参数【order】如何都是,返回一份拷贝,对拷贝所做的修改不会影响(reflects)原始数组,
最后,也可以通过reshape(-1)使原多维数组转化为一维数组,reshape(x, y)使其转化为其他形状,不过注意使用reshape()都是返回原始数组的视图。

总结下,
1,reshape() 返回原始数组的视图;
2,ravel() 返回原始数据的视图或者副本,只有在参数order = ‘F’时返回副本;
3,flatten() 返回原始数组的副本;

以上有错误的,可以评论指出,拍砖!!!

【Python】NumPy 中 ravel() 正确打开方式相关推荐

  1. Python Matplotlib绘图的正确打开方式

    Python Matplotlib绘图的正确打开方式 文章目录 Python Matplotlib绘图的正确打开方式 1.先搞懂fig.axes.axis `Figure` `Axes` `Axis` ...

  2. HttpClient在.NET Core中的正确打开方式

    问题来源 长期以来,.NET开发者都通过下面的方式发送http请求: using (var httpClient = new HttpClient()) {     var response = aw ...

  3. 巨省显存的重计算技巧在TF、Keras中的正确打开方式

    一只小狐狸带你解锁 炼丹术&NLP 秘籍 作者:苏剑林(来自追一科技,人称"苏神") 前言 在前不久的文章<BERT重计算:用22.5%的训练时间节省5倍的显存开销( ...

  4. YOLOv3 提升 5.91 mAP,IoU在目标检测中的正确打开方式

    点击我爱计算机视觉标星,更快获取CVML新技术 论文提出了IoU-based的DIoU loss和CIoU loss,以及建议使用DIoU-NMS替换经典的NMS方法,充分地利用IoU的特性进行优化. ...

  5. python四舍五入round_四舍五入就用round( )?Python四舍五入的正确打开方式!

    四舍五入就用round( )?Python四舍五入的正确打开方式! 2018-09-22 21:40 阅读数 4 <>round( )函数简介 菜鸟教程中介绍到,round() 函数作用就 ...

  6. log python_基于Python log 的正确打开方式

    保存代码到文件:logger.py import os import logbook from logbook.more import ColorizedStderrHandler import sm ...

  7. python论文参考文献名称_Word的正确打开方式(附毕业论文模板)

       ----点击蓝字关注我呀---- 三年前的我搞毕业设计,第一次接触这玩意儿,一脸懵逼 好在我朱哥搞过大创(还是国家级的),当时给我各种科普单片机的知识 搞大创的好处就是当我们不知道是画机械图还是 ...

  8. 腾讯案例实战!聊聊设计中「需求」的正确打开方式

    吹斯坦 · 粥:入行早期是带交互设计团队,近两年负责产品团队,对于"需求"的接受方和给予方角色都有过扮演,今天想和大家探讨一下"需求的正确打开方式". 每次探讨 ...

  9. python中的文件打开方式

    r: 以只读方式打开文件.文件的指针将会放在文件的开头.这是默认模式. rb: 以二进制格式打开一个文件用于只读.文件指针将会放在文件的开头.这是默认模式. r+: 打开一个文件用于读写.文件指针将会 ...

最新文章

  1. javascript的typeof返回哪些数据类型
  2. python跨文件全局变量_Python跨文件全局变量的实现方法示例
  3. HTML转PDF(C#---itextsharp)(转自别人的文章)
  4. pppoe-环境下的mtu和mss
  5. 【英语学习】【English L06】U06 Banking L6 Do you use online banking?
  6. linux nfs用的用户权限,权限 – Linux特定用户安装NFS
  7. 新手如何检查MacBook电池的运行状况
  8. 《集体智慧编程》第8章 构建价格模型 个人笔记
  9. mysql dbutil_DBUtil
  10. 永恒之蓝漏洞复现(包括常见问题处理)和修复方案
  11. cordova打包APP更改图标和APP名字
  12. win7 计算机不显示u盘启动不了,Win7系统下bios中找不到U盘启动项如何解决
  13. 国际音标IPA、DJ音标和美国KK音标对照表
  14. speedoffice(PPT)怎么设置文字竖向
  15. 连接问题:ORA-3136:inbound connection timed out
  16. 光子计算机应用领域,光子计算机离我们还有多远?
  17. Vim中快速定位到某一行的方法
  18. 精神心理科医生:双相抑郁与单相抑郁的鉴别
  19. CollageIt - [照片拼贴,照片整合]
  20. $ NON-NLS-1 $是什么意思?

热门文章

  1. Beethoven, Mozart, Chopin on my iPhone 4S
  2. 如何选购台式电脑和笔记本?购买时应注意什么
  3. HTML5plus 移动 App开发入门
  4. python 抓取lol主播排行
  5. python 离线翻译软件_简单翻译软件
  6. 企业成长能力分析的指标是什么
  7. GC9A01-TFT屏幕驱动(整理有stm32/51单片机/arduino等驱动代码)
  8. Debian 9 配置 OpenConnect(兼容Cisco AnyConnect)
  9. 完美解决:ERROR: the following packages/stacks could not have their rosdep keys resolvedto system depend
  10. 导出Excel功能代码