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]]
添加回答
舉報