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

    xiaoxiao2024-01-10  169

    本节书摘来自异步社区《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所示。

    下面的代码(为了节约版面,这里没有注释,完整代码请看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)