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 .
该视图返回原始数组。