随机播放一个numpy数组


问题内容

我有一个二维的numpy数组,我想改组。是将其重塑为1-d,重新排列并重新塑形为2d的最佳方法,还是可以重新整理而不重塑?

仅使用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]])