复制的NumPy数组的神秘行为

时间:2016-06-06 12:12:28

标签: python arrays numpy

使用数组副本时,我注意到了一些意外行为。例如,我有一个NumPy数组(a):

import numpy as np
a = np.random.randint(9, size=(4,4))

输出:

array([[3, 4, 4, 3],
       [0, 0, 4, 2],
       [6, 3, 1, 6],
       [1, 5, 5, 5]])

然后,我制作了这个数组的副本(b)来操作副本并保持原始原样:

b = a #copy of the array
b[b == 2] = 0 #manipulating the copy

但是,现在看来原始版本和副本都已更改:

b = array([[3, 4, 4, 3],
           [0, 0, 4, 0],
           [6, 3, 1, 6],
           [1, 5, 5, 5]])

a = array([[3, 4, 4, 3],
           [0, 0, 4, 0],
           [6, 3, 1, 6],
           [1, 5, 5, 5]])

我不明白为什么在仅将操作应用于副本时更改原始数组。这与我对Matlab或R的期望完全不同。有没有办法防止这种行为?

1 个答案:

答案 0 :(得分:2)

使用b = a,您只复制对象的引用而不是对象本身。看看这个copy函数。简而言之,你需要做b = a.copy()