NumPy array kopie vs view

Het verschil tussen een kopie en een view

Het belangrijkste verschil tussen een kopie en een arrayview is dat een kopie een nieuwe array is, terwijl de view alleen een weergave van het oorspronkelijke array is.

De kopie heeft gegevens, elke wijziging die wordt aangebracht in de kopie beïnvloedt niet het oorspronkelijke array, en elke wijziging die wordt aangebracht in het oorspronkelijke array beïnvloedt niet de kopie.

视图不拥有数据,对视图所做的任何更改都会影响原始数组,而对原始数组所做的任何更改都会影响视图。

副本:

实例

进行复制,更改原始数组并显示两个数组:

import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x = arr.copy()
arr[0] = 61
print(arr) 
print(x)

运行实例

该副本不应受到对原始数组所做更改的影响。

视图:

实例

创建视图,更改原始数组,然后显示两个数组:

import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x = arr.view()
arr[0] = 61
print(arr) 
print(x)

运行实例

视图应该受到对原始数组所做更改的影响。

在视图中进行更改:

实例

创建视图,更改视图,并显示两个数组:

import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x = arr.view()
x[0] = 31
print(arr) 
print(x)

运行实例

原始数组应该受到对视图所做更改的影响。

检查数组是否拥有数据

如上所述,副本拥有数据,而视图不拥有数据,但是我们如何检查呢?

每个 NumPy 数组都有一个属性 base,如果该数组拥有数据,则这个 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

视图返回原始数组。