Python在没有就地替换的情况下复制数组

时间:2017-07-14 03:14:39

标签: python arrays numpy replace

我对numpy数组有中等经验,我不记得之前发生过这种情况,例如:

y=np.array([1,2,3])
yy=y[:]
yy[2]=4
print y

并提供

[1,2,4]

为什么会这样?我尝试使用numpy.copy,它仍在替换原始数组

2 个答案:

答案 0 :(得分:3)

我不确定使用np.copy时发生了什么,但您不应该看到修改原始数组效果:

In [1]: import numpy as np

In [2]: y = np.array([1,2,3])

In [3]: yy = y.copy()

In [4]: yy[2] = 4

In [5]: print y
[1 2 3]

In [6]: print yy
[1 2 4]

In [7]: zz = np.copy(y)

In [8]: zz[2] = 5

In [9]: print zz
[1 2 5]

In [10]: print y
[1 2 3]

答案 1 :(得分:2)

您正在寻找copy.deepcopy

In [108]: import copy

In [109]: yy = copy.deepcopy(y)

In [110]: yy[2] = 4

In [111]: y
Out[111]: array([1, 2, 3])

deepcopy将递归复制一直到最深层次的嵌套。

请注意,对于1D数组,深度复制可能会被过度杀死,因此在这种情况下,您可以使用copy.copy进行浅层复制。

编辑:虽然copy.*copy面对np.copy时可能看起来多余,但在特殊情况下,您可能会看到它们的有用性,其中您可能拥有dtype=object的数组(由@hpaulj发现)。