《Python数据分析》一2.7 创建数组的视图和拷贝

本节书摘来自异步社区《Python数据分析》一书中的第2章,第2.7节,作者【印尼】Ivan Idris,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.7 创建数组的视图和拷贝

在介绍ravel()函数的示例中,我们提到了视图的概念。不过,请不要与数据库中的视图概念混淆。在NumPy的世界里,视图不是只读的,因为你不可能守着基础数据一动不动。关键在于要知道,当前处理的是共享的数组视图,还是数组数据的副本。举例来说,可以取数组的一部分来生成视图。这意味着,如果先将数组的某部分赋给一个变量,然后修改原数组中相应位置的数据,那么这个变量的值也会随之变化。我们可以根据著名的莱娜(Lena)照片来创建数组,然后创建视图,随后修改它。这里,莱娜肖像的数组是从SciPy函数获得的。

1.创建一份莱娜数组的副本。

acopy = lena.copy()

2.为该数组创建一个视图。

aview = lena.view()

3.通过flat迭代器将视图中所有的值全部设为0``。

aview.flat = 0

最后,只有一幅图片可以看到该模特,而另一幅图片根本看不到她的影子,如图2-4所示。


284f9c392fce99953ce3fbea4d07cd02e6bb79d3

下面的代码(为了节约版面,这里没有注释,完整代码请看copy_view.py文件)很好地展示了数组的视图和副本的特点。

import scipy.misc
import matplotlib.pyplot as plt

lena = scipy.misc.lena()
acopy = lena.copy()
aview = lena.view()
plt.subplot(221)
plt.imshow(lena)
plt.subplot(222)
plt.imshow(acopy)
plt.subplot(223)
plt.imshow(aview)
aview.flat = 0
plt.subplot(224)
plt.imshow(aview)
plt.show()

可见,在程序结束部分修改视图,同时改变了原来的莱娜数组。这导致3副图片全部变蓝(如果阅读的是本书的印刷版,也可能显示为黑色),而复制的数组则没有任何变化。所以一定要记住:视图不是只读的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值