如何在不干扰原始数组的情况下替换复制数组的元素?

时间:2019-10-28 13:27:56

标签: 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]],最后一个应该是[[1,1],[1,1]]

但是我从中得到的是[[1,1],[1,1]][[1,1],[0,0]]; [[1,1],[0,0]]

有人可以帮助我,并解释为什么我的代码无法按我想要的方式工作吗?非常感谢!

2 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

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]]

符合预期。

答案 1 :(得分:0)

在numpy视图和副本中,有两个不同的概念,在这种情况下,您想修改数据的副本。 An interesting article about that

如@Rafael所述,您可以这样做。

pool = np.array([[1,1],[1,1]])

def ringDisc(data):
    data_new = np.copy(data) # <===== Here 
    data_new[1] = 0
    return data_new

print(pool)
print(ringDisc(pool))
print(pool)