2011-02-18 149 views
12

鑑於以下NumPy的陣列,洗牌NumPy的陣列沿給定軸

> a = array([[1, 2, 3, 4, 5], [1, 2, 3, 4, 5],[1, 2, 3, 4, 5]]) 

它足夠簡單洗牌單行,

> shuffle(a[0]) 
> a 
array([[4, 2, 1, 3, 5],[1, 2, 3, 4, 5],[1, 2, 3, 4, 5]]) 

是否可以使用索引符號洗牌各行獨立?或者你必須遍歷數組。我想到的是,

> numpy.shuffle(a[:]) 
> a 
array([[4, 2, 3, 5, 1],[3, 1, 4, 5, 2],[4, 2, 1, 3, 5]]) # Not the real output 

雖然這顯然不起作用。

回答

17

您必須多次撥打numpy.random.shuffle(),因爲您正在獨立混洗幾個序列。 numpy.random.shuffle()適用於任何可變序列,實際上並不是ufunc。最短的和最有效的代碼洗牌一個二維陣列a的所有行分別大概是

map(numpy.random.shuffle, a) 
+0

謝謝,簡單,乾淨的解決方案。 – lafras 2011-02-21 11:22:20