【问题标题】:Shuffle a numpy array随机播放一个 numpy 数组
【发布时间】:2014-04-21 00:28:34
【问题描述】:

我有一个想要随机播放的二维 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]]

【问题讨论】:

    标签: python random numpy shuffle


    【解决方案1】:

    您可以告诉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 将被洗牌到洗牌矩阵中的第 3 行和第 3 列
    【解决方案2】:

    你可以洗牌a.flat:

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

    【讨论】:

      【解决方案3】:

      我认为这非常重要需要注意。
      您可以使用random.shuffle(a) 如果 a 是一维 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 数组

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-07
        相关资源
        最近更新 更多