Python/numpy copy vs view
来自菜鸟教程
<languages />
NumPy数组复制与视图
复制和查看之间的区别
副本和数组视图之间的主要区别在于副本是一个新数组,而该视图只是原始数组的视图。
副本 owns 数据和对副本所做的任何更改都不会影响原始阵列,对原始数组所做的任何更改也不会影响副本。
风景 does not own 数据和对该视图所做的任何更改都会影响原始数组,而对原始数组所做的任何更改也会影响该视图。
复制:
例
制作副本,更改原始数组,然后显示两个数组:
import numpy as np arr = np.array([1, 2, 3, 4, 5]) x = arr.copy() arr[0] = 42 print(arr) print(x)
副本不应受到对原始阵列所做更改的影响。
视图:
例
进行查看,更改原始数组,然后显示两个数组:
import numpy as np arr = np.array([1, 2, 3, 4, 5]) x = arr.view() arr[0] = 42 print(arr) print(x)
视图应该受到对原始数组所做更改的影响。
在VIEW中进行更改:
例
创建视图,更改视图,并显示两个数组:
import numpy as np arr = np.array([1, 2, 3, 4, 5]) x = arr.view() x[0] = 31 print(arr) print(x)
原始数组应该受到对视图所做更改的影响。
检查数组是否拥有数据
如上所述,副本 owns 数据和视图 does not own 数据,但是我们如何检查呢?
每个NumPy数组都有该属性
base
返回
None
如果数组拥有数据。
否则,
base
属性是指原始对象。
例
打印base属性的值以检查数组是否拥有其数据:
import numpy as np arr = np.array([1, 2, 3, 4, 5]) x = arr.copy() y = arr.view() print(x.base) print(y.base)
副本返回
None
.
该视图返回原始数组。