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

标签 python arrays numpy

我需要对初始 3x3 数组(例如“x”)进行计算,稍后我将再次需要该数组进行进一步计算。因此,我有另一个变量('y')来复制'x'(y = x),对'y'进行计算,然后将x用于以后的目的。但不知何故,即使我最初将其分配为“x”以外的地址,“y”的地址也会更改为“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 ]。这个问题背后的原因是什么?您是否可以建议一些方法来避免这个问题?

最佳答案

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

您应该将该行替换为

y = x[:]

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

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

y = np.copy(x)

如果您想自己检查,您可以在分配后print id(y)print id(x),并在您的情况下查看它们是相同,但在真实副本中它们不同

关于Python:将初始 numpy 数组分配给另一个变量,更改新变量的几个元素会更改初始 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50786854/

相关文章:

python - Pycuda 2019.1,如何正确复制gpuarray?

python - 如何创建一个numpy列表数组?

javascript - 是否有可能以某种方式缩短 switch 语句?也许有一个循环?

python - Tkinter ScrolledText,当光标移动到给定行时如何自动更新滚动条?

C——指针+1的含义

python - 权限错误 : Using Image. 打开

python - 我是否应该始终在 `except` 语句中指定异常类型?

java - 绘制随机圆圈,将不与另一个圆圈相交的任何圆圈涂成红色

c# - C#如何从数据库读取数据并存储到数组

python - numpy 数组列表的形状