我有一本书,上面写着:“知道我们何时处理共享数组视图以及何时拥有 数组数据的副本。“,但这本书从未明确说明这两件事中的任何一件。
有人可以给出一个非常简单的解释,共享数组视图是什么,以及数组数据的副本是什么?和差异?有人可以用一个简单的比喻来解释这个吗?谢谢!
答案 0 :(得分:4)
检查的一种方法是使用numpy的may_share_memory
:
In [11]: a = np.array([1, 2, 3])
In [12]: b = a[0:2]
In [13]: c = a.copy()
In [14]: np.may_share_memory(a, b)
Out[14]: True
In [15]: np.may_share_memory(a, c)
Out[15]: False
In [16]: np.may_share_memory(b, c)
Out[16]: False
重要的是,分配给副本不会影响原始数组,而更改视图则会:
In [21]: b[1] = 7
In [22]: a
Out[22]: array([1, 7, 3])
In [23]: c[1] = 11
In [24]: a
Out[24]: array([1, 7, 3])
In [25]: c
Out[25]: array([ 1, 11, 3])
答案 1 :(得分:2)
查看共享阵列是指在内存中共享的数组,用于多处理,而具有实际的数组数据,例如pickle。
如果你感兴趣的话,Here是一个更深入的对话链接。