2011-02-18 83 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