Python 如何在不干扰原始阵列的情况下替换复制阵列的元素?
我是python的新手,这让我困惑了一段时间 我写了下面的代码:Python 如何在不干扰原始阵列的情况下替换复制阵列的元素?,python,numpy,Python,Numpy,我是python的新手,这让我困惑了一段时间 我写了下面的代码: pool = np.array([[1,1],[1,1]]) def ringDisc(data): data_new = data data_new[1] = 0 return data_new print(pool) print(ringDisc(pool)) print(pool) 我希望第一次打印的结果应该是[[1,1],[1,1]],第二次打印的结果应该是[[1,1],[0,0],最后一次打
pool = np.array([[1,1],[1,1]])
def ringDisc(data):
data_new = data
data_new[1] = 0
return data_new
print(pool)
print(ringDisc(pool))
print(pool)
我希望第一次打印的结果应该是[[1,1],[1,1]]
,第二次打印的结果应该是[[1,1],[0,0]
,最后一次打印的结果应该是[[1,1],[1,1]]
但我从中得到的是[[1,1],[1,1]]
<代码>[[1,1],[0,0]]<代码>[[1,1],[0,0]]
有人能帮我解释一下为什么我的代码不能按我想要的方式运行吗?非常感谢 您可以执行以下操作:
data_new = np.copy(data)
内置ringDisc
因此,通过此更改,代码如下所示:
import numpy as np
pool = np.array([[1, 1], [1, 1]])
def ringDisc(data):
data_new = np.copy(data)
data_new[1] = 0
return data_new
print(pool)
print(ringDisc(pool))
print(pool)
结果是:
[[1 1], [1 1]]
[[1 1], [0 0]]
[[1 1], [1 1]]
正如所料。在numpy视图中,复制是两个不同的概念,在您的情况下,您需要修改数据的副本 正如@Rafael提到的,你可以做这样的事情。
pool=np.array([[1,1],[1,1]])
def环形光盘(数据):
data_new=np.copy(data)#对于“为什么会发生这种情况”(这不是很直观,实际上是一个非常复杂的问题):在python中,pool
,data
,data_new
都引用相同的对象。没有一个步骤可以复制。@GPhilo当我写下这个awnser时,现有的代码还不存在@Rafael仅将data\u new=np.copy(data)
作为awser放入。我还把它竖起了。没问题!很高兴这对你有帮助。@维罗尼卡,如果解决了你的问题,请考虑接受这个答案或任何其他答案,通过点击相应的答案旁边的“嘀嗒”按钮来解决你的问题。