numpy中的洗牌数组有问题吗?

2024-05-14 14:20:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个不寻常的问题,在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洗牌?你知道吗


Tags: innumpynewfornp数组arrayprint
2条回答

使用

new_arr = np.copy(arr)

而不是

new_arr = arr

执行new_arr=arr时,基本上是为数组arr创建一个引用new_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

当你说new_arr=arr时,它复制引用而不是深度复制。当你改变arr时,它也改变了新的arr。你知道吗

试试new_arr = np.copy(arr)。这应该管用。你知道吗

相关问题 更多 >

    热门问题