数组的副本和视图之间的主要区别在于,副本是一个新数组,而视图只是原始数组的视图。
副本拥有数据和对副本所做的任何更改都不会影响原始数组,对原始数组所做的任何更改也不会影响副本。
风景不拥有数据和对视图所做的任何更改都会影响原始数组,而对原始数组所做的任何更改都会影响视图。
制作副本,更改原始数组,然后显示两个数组:
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)
亲自试一试 »
视图应该受到对原始数组所做的更改的影响。
创建视图、更改视图并显示两个数组:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x = arr.view()
x[0] = 31
print(arr)
print(x)
亲自试一试 »
原始数组应该受到对视图所做的更改的影响。
如上所述,副本拥有数据和视图不拥有数据,但是我们如何检查呢?
每个 NumPy 数组都有属性base
返回None
如果数组拥有数据。
否则,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
。
视图返回原始数组。
截取页面反馈部分,让我们更快修复内容!也可以直接跳过填写反馈内容!