共享数组视图和数组数据副本之间的定义和区别?

时间:2014-02-21 23:24:57

标签: python arrays numpy scipy

我有一本书,上面写着:“知道我们何时处理共享数组视图以及何时拥有 数组数据的副本。“,但这本书从未明确说明这两件事中的任何一件。

有人可以给出一个非常简单的解释,共享数组视图是什么,以及数组数据的副本是什么?和差异?有人可以用一个简单的比喻来解释这个吗?谢谢!

2 个答案:

答案 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是一个更深入的对话链接。