numpy shuffle 3-D numpy按行排列

时间:2019-07-19 07:38:15

标签: python arrays numpy row shuffle

假设我有以下3D矩阵:

1 1 1

2 2 2

3 3 3

及其后面(第3维):

a a a

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

a a a

c c c

*请注意,a始终属于1,b属于2和c属于3(同一行)

我该如何实现?

2 个答案:

答案 0 :(得分:2)

使用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')

答案 1 :(得分:1)

在将第二个轴作为第一个轴后,只需使用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&A中发现的那样,这应该非常有效。

或者,还有两种其他方式来置换轴-

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