我正在使用random.shuffle
对一个二维的numpy
数组进行洗牌。但是遇到了以下问题:
import numpy as np
from random import shuffle as sf
b = np.array([1,2,3,4,5])
print b
# [1 2 3 4 5]
sf(b)
print b
# [1 4 5 3 2]
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
print a
# [[1 2 3]
# [4 5 6]
# [7 8 9]]
sf(a)
print a
# [[1 2 3]
# [4 5 6]
# [1 2 3]]
结果显示,当对一维数组进行洗牌时,一切正常。但是当对二维数组进行洗牌时,结果就变得奇怪了。
为什么原始数组的第三行被抛弃了,而第一行被复制了两次?
我知道可能会有解决此问题的方法,例如首先对表示行 ID 的一维数据进行洗牌,然后按照洗牌后的 ID 顺序提取二维数组。但我确实想搞清楚
random.shuffle
的实现情况,或者我的代码哪里出了问题。