NumPy 数组的复制与视图
复制与视图的区别
复制与视图的主要区别在于,复制是一个全新的数组,而视图只是原始数组的一个视图。
复制拥有数据,对复制的任何修改都不会影响原始数组,对原始数组的任何修改也不会影响复制。
视图不拥有数据,对视图的任何修改都会影响原始数组,对原始数组的任何修改也会影响视图。
复制 (COPY)
示例
制作一个副本,修改原始数组,然后显示两个数组
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x = arr.copy()
arr[0] = 42
print(arr)
print(x)
自己动手试一试 »
副本不应该受到原始数组更改的影响。
视图 (VIEW)
示例
制作一个视图,修改原始数组,然后显示两个数组
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
属性指向原始对象。
示例
打印 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
。
视图返回原始数组。