【问题标题】:Numpy shuffle 3-D numpy array by rowNumpy shuffle 3-D numpy array by row
【发布时间】:2019-07-19 07:38:15
【问题描述】:

假设我有以下 3D 矩阵:

1 1 1

2 2 2

3 3 3

及其背后(第三维):

啊啊啊

b b b

c c c

如果我是正确的定义如下:

import numpy as np
x = np.array([[[1,1,1], 
               [2,2,2], 
               [3,3,3]],
              [["a","a","a"],
               ["b","b","b"],
               ["c","c","c"]]])

我想按行随机打乱我的 3D 数组,变成这样:

2 2 2

1 1 1

3 3 3

后面:

b b b

啊啊啊

c c c

*注意a总是属于1,b属于2,c属于3(相同的行)

我如何做到这一点?

【问题讨论】:

    标签: python arrays numpy row shuffle


    【解决方案1】:

    使用np.random.shuffle

    import numpy as np
    
    x = np.array([[[1,1,1], 
                   [2,2,2], 
                   [3,3,3]],
                  [["a","a","a"],
                   ["b","b","b"],
                   ["c","c","c"]]])
    
    ind = np.arange(x.shape[1])
    np.random.shuffle(ind)
    
    x[:, ind, :]
    

    输出:

    array([[['1', '1', '1'],
            ['3', '3', '3'],
            ['2', '2', '2']],
    
           [['a', 'a', 'a'],
            ['c', 'c', 'c'],
            ['b', 'b', 'b']]], dtype='<U21')
    

    【讨论】:

    • 你先生是个英雄!
    【解决方案2】:

    在将第二个轴作为第一个轴后,只需使用 np.random.shuffle,因为 shuffle 函数沿第一个轴工作并就地进行改组 -

    np.random.shuffle(x.swapaxes(0,1))
    

    示例运行 -

    In [203]: x
    Out[203]: 
    array([[['1', '1', '1'],
            ['2', '2', '2'],
            ['3', '3', '3']],
    
           [['a', 'a', 'a'],
            ['b', 'b', 'b'],
            ['c', 'c', 'c']]], dtype='<U21')
    
    In [204]: np.random.shuffle(x.swapaxes(0,1))
    
    In [205]: x
    Out[205]: 
    array([[['3', '3', '3'],
            ['2', '2', '2'],
            ['1', '1', '1']],
    
           [['c', 'c', 'c'],
            ['b', 'b', 'b'],
            ['a', 'a', 'a']]], dtype='<U21')
    

    正如我们在this Q&amp;A 中发现的那样,这应该非常有效。

    另外,另外两种置换轴的方法是 -

    np.moveaxis(x,0,1)
    x.transpose(1,0,2)
    

    【讨论】:

      猜你喜欢
      • 2021-05-16
      • 2013-03-06
      • 2019-09-27
      • 2019-04-07
      • 2018-07-18
      • 2021-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多