Python:将初始numpy数组分配给另一个变量,更改新变量的少数元素会更改初始numpy数组

时间:2018-06-10 18:30:39

标签: python arrays numpy

我需要对初始3x3阵列(比如'x')进行计算,稍后我需要再进行进一步的计算。所以,我有另一个变量('y')来复制'x'(y = x),对'y'进行计算,然后使用x进行后续处理。但不知何故,'y'的地址变为'x',即使我最初将其分配给'x'

import numpy as np

x = np.random.rand(3,3)
y = np.random.rand(3,3)

print 'y',id(y)

y = x
y[1][1] = -y[1][1]

print x[1][1] + y[1][1]  #This needs to be 0.
print 'x',id(x)
print 'y',id(y)

在上面的代码中,我需要第9行('x [1] [1] + y [1] [1]'),打印0,但给出的是2次-x [1] [1 ]。这个问题背后的原因是什么,如果你可以建议一些方法来避免这个问题?

1 个答案:

答案 0 :(得分:1)

因为y=x仅复制引用,而不会创建数组的另一个副本

您应该用

替换该行
y = x[:]

否则,更改x也会更改y,反之亦然。

但是,此方法仅适用于常规list而非numpy数组。这是可能的(也更明确和可读):

y = np.copy(x)

如果你想自己检查一下,你可以在完成任务后print id(y)print id(x),看看在你的情况下它们是相同的,而在真实副本中它们是不同的