【问题标题】:Shuffle groups of rows of a 2D array - NumPy随机播放二维数组的行组 - NumPy
【发布时间】:2017-01-30 11:43:58
【问题描述】:

假设我有一个 (50, 5) 数组。有没有办法让我根据数据点的行/序列的分组来对其进行洗牌,即不是洗牌每一行,而是洗牌,比如 5 行?

谢谢

【问题讨论】:

    标签: numpy multidimensional-array shuffle


    【解决方案1】:

    方法 #1: 这是一种基于组大小重塑为 3D 数组的方法,索引到具有从 np.random.permutation 获得的混洗索引的块的索引,最后重塑回2D -

    N = 5 # Blocks of N rows
    M,n = a.shape[0]//N, a.shape[1]
    out = a.reshape(M,-1,n)[np.random.permutation(M)].reshape(-1,n)
    

    示例运行 -

    In [141]: a
    Out[141]: 
    array([[89, 26, 12],
           [97, 60, 96],
           [94, 38, 54],
           [41, 63, 29],
           [88, 62, 48],
           [95, 66, 32],
           [28, 58, 80],
           [26, 35, 89],
           [72, 91, 38],
           [26, 70, 93]])
    
    In [142]: N = 2 # Blocks of N rows
    
    In [143]: M,n = a.shape[0]//N, a.shape[1]
    
    In [144]: a.reshape(M,-1,n)[np.random.permutation(M)].reshape(-1,n)
    Out[144]: 
    array([[94, 38, 54],
           [41, 63, 29],
           [28, 58, 80],
           [26, 35, 89],
           [89, 26, 12],
           [97, 60, 96],
           [72, 91, 38],
           [26, 70, 93],
           [88, 62, 48],
           [95, 66, 32]])
    

    方法 #2: 也可以简单地使用 np.random.shuffle 进行原位更改 -

    np.random.shuffle(a.reshape(M,-1,n))
    

    示例运行 -

    In [156]: a
    Out[156]: 
    array([[15, 12, 14],
           [55, 39, 35],
           [73, 78, 36],
           [54, 52, 32],
           [83, 34, 91],
           [42, 11, 98],
           [27, 65, 47],
           [78, 75, 82],
           [33, 52, 93],
           [87, 51, 80]])
    
    In [157]: N = 2 # Blocks of N rows
    
    In [158]: M,n = a.shape[0]//N, a.shape[1]
    
    In [159]: np.random.shuffle(a.reshape(M,-1,n))
    
    In [160]: a
    Out[160]: 
    array([[15, 12, 14],
           [55, 39, 35],
           [27, 65, 47],
           [78, 75, 82],
           [73, 78, 36],
           [54, 52, 32],
           [33, 52, 93],
           [87, 51, 80],
           [83, 34, 91],
           [42, 11, 98]])
    

    【讨论】:

      猜你喜欢
      • 2017-10-07
      • 1970-01-01
      • 1970-01-01
      • 2014-04-21
      • 2012-12-25
      • 1970-01-01
      • 2017-08-12
      • 2018-10-31
      • 1970-01-01
      相关资源
      最近更新 更多