在numpy中改组数组的问题?

时间:2017-04-29 15:51:10

标签: python arrays numpy

我在numpy

中改组阵列时遇到了这个不寻常的问题
arr = np.arange(9).reshape((3, 3))
print "Original constant array"
print arr
new_arr=arr
for i in range(3):        
    np.random.shuffle(new_arr)
    print "Obtained constant array"
    print arr
    print "randomized array"
    print new_arr

arr是我保留的原始数组,并创建了新数组new_arr以供进一步计算。但代码显示此输出

Original constant array
[[0 1 2]
 [3 4 5]
 [6 7 8]]
Obtained constant array
[[6 7 8]
 [0 1 2]
 [3 4 5]]
randomized array
[[6 7 8]
 [0 1 2]
 [3 4 5]]

我只想随机化new_arr而不是arr。为什么会发生这种情况以及如何阻止arr改组?

2 个答案:

答案 0 :(得分:1)

使用

new_arr = np.copy(arr)

而不是

new_arr = arr

执行new_arr=arr时,您基本上为数组创建了引用new_arr arr

例如

(取自numpy copy docs):

Create an array x, with a reference y and a copy z:
>>> x = np.array([1, 2, 3])
>>> y = x
>>> z = np.copy(x)

Note that, when we modify x, y changes, but not z:
>>> x[0] = 10
>>> x[0] == y[0]
True
>>> x[0] == z[0]
False

答案 1 :(得分:1)

当您说new_arr=arr时,它会复制引用 - 它不会执行深层复制。然后当你改变arr时,它也会改变new_arr。

试试new_arr = np.copy(arr)。这应该有用。