[英]Shuffle a numpy array
我有一個想要洗牌的二維 numpy 數組。 是將其重塑為 1-d、洗牌並再次重塑為 2-d 的最佳方法還是可以在不重塑的情況下進行洗牌?
僅使用 random.shuffle 不會產生預期結果,而 numpy.random.shuffle 僅會隨機播放行:
import random
import numpy as np
a=np.arange(9).reshape((3,3))
random.shuffle(a)
print a
[[0 1 2]
[3 4 5]
[3 4 5]]
a=np.arange(9).reshape((3,3))
np.random.shuffle(a)
print a
[[6 7 8]
[3 4 5]
[0 1 2]]
你可以告訴np.random.shuffle
對扁平化的版本采取行動:
>>> a = np.arange(9).reshape((3,3))
>>> a
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> np.random.shuffle(a.flat)
>>> a
array([[3, 5, 8],
[7, 6, 2],
[1, 4, 0]])
你可以洗牌a.flat
:
>>> np.random.shuffle(a.flat)
>>> a
array([[6, 1, 2],
[3, 5, 0],
[7, 8, 4]])
我認為這一點非常重要。
如果a
是一維 numpy 數組,則可以使用random.shuffle(a)
。 如果它是 ND(其中 N > 2)比
random.shuffle(a)
會破壞你的數據並返回一些隨機的東西。 正如你在這里看到的:
import random
import numpy as np
a=np.arange(9).reshape((3,3))
random.shuffle(a)
print a
[[0 1 2]
[3 4 5]
[3 4 5]]
這是 numpy 的一個已知錯誤(或功能?)。
因此,僅將numpy.random.shuffle(a)
用於numpy arrays 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.