重要的是要知道什么时候我们在处理共享数组视图,什么时候我们有数组数据的副本。
例如,切片会创建一个视图。这意味着,如果将切片赋值给一个变量,然后更改底层数组,那么该变量的值也会随之更改。
我们将从著名的 Lena 图像中创建一个数组,复制数组,创建视图,最后修改视图。
您可能知道这两种方法,即按值传递和按引用传递。
这需要三个步骤,让我们来看看是如何完成的。
现在,我们来创建 Lena 数组的副本(按值传递)和视图(按引用传递):
首先, 创建 Lena 数组的副本(按值传递):

第二步: 创建数组的视图(通过引用传递):

第三步: 使用(flat)迭代器将视图的所有值设置为 0:

最终的结果是,只有一张图片(与副本相关的图片)显示了 Lena 。其他图像则完全消失:

#### 你现在需要知道发生了什么?
如您所见,通过在程序末尾更改视图,我们改变了原始的 Lena 数组。
这样就出现了三个蓝色(如果是黑白图片,则为空白)图像。
复制的数组不受影响。重要的是要记住,( 视图 )不是只读的,而( 复制 )是只读的。
参考文献
有关 NumPy view() 方法的文档,请访问 http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.view.html。