我在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
改组?
答案 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)
。这应该有用。