我对numpy数组有中等经验,我不记得之前发生过这种情况,例如:
y=np.array([1,2,3])
yy=y[:]
yy[2]=4
print y
并提供
[1,2,4]
为什么会这样?我尝试使用numpy.copy,它仍在替换原始数组
答案 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发现)。