洗一个numpy阵列

Art*_*örk 10 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]]
Run Code Online (Sandbox Code Playgroud)

DSM*_*DSM 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]])
Run Code Online (Sandbox Code Playgroud)


NPE*_*NPE 7

你可以洗牌a.flat:

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


Tem*_*mak 6

我认为这一点非常重要
您可以使用random.shuffle(a) ifa是一维 numpy 数组。如果它是 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]]
Run Code Online (Sandbox Code Playgroud)

这是numpy 的一个已知错误(或功能?)。

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