洗一个numpy阵列

时间:2014-03-15 16:38:13

标签: python random numpy shuffle

我有一个2-d 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]]

3 个答案:

答案 0 :(得分:13)

您可以告诉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]])

答案 1 :(得分:7)

您可以随机播放a.flat

>>> np.random.shuffle(a.flat)
>>> a
array([[6, 1, 2],
       [3, 5, 0],
       [7, 8, 4]])

答案 2 :(得分:3)

我认为这是非常重要来注意 你可以使用random.shuffle(a) 如果a是1-D numpy数组。 如果是N-D(其中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的已知bug(或功能?)。

因此,仅使用 numpy.random.shuffle(a) numpy数组