3 回答

TA贡献1862条经验 获得超7个赞
您的想法是正确的,但是附加到数组非常耗时,因为它每次都会重新分配整个缓冲区。相反,您可以只使用洗牌索引:
a = np.array([[1,2,3], [4,5,6], [7,8,9], [10,11,12]])
b = np.array([[100,200,300,400,500], [600,700,800,900,901], [101,102,103,104,105], [501,502,503,504,505]])
r = np.arange(4)
np.random.shuffle(r)
newa = a[r]
newb = b[r]

TA贡献1757条经验 获得超8个赞
我不是 100% 的性能,但我认为这可能更适合你:
newa = np.copy(a)
np.random.shuffle(newa)
newb = np.copy(b)
np.random.shuffle(newb)
您是否需要它们处于相同的随机顺序?因此,如果元素 1 移动到位置 3,newa该移动是否也发生在newb?这就是您的代码,但您没有在问题中指定。如果您想对两者进行相同的洗牌,则需要执行以下操作:
indexes = np.arrange(len(a))
np.random.shuffle(indexes)
newa = a[indexes]
newb = b[indexes]
这将比您拥有的更快,因为所有 append 调用都在减慢您的速度。

TA贡献1806条经验 获得超8个赞
在 numpy 本身中使用 shuffle 选项,效率会更高。
np.random.shuffle(a)
np.random.shuffle(b)
print(a)
#
[[ 4 5 6]
[10 11 12]
[ 7 8 9]
[ 1 2 3]]
print(b)
#
[[600 700 800 900 901]
[100 200 300 400 500]
[501 502 503 504 505]
[101 102 103 104 105]]
添加回答
举报