Numpy shuffle 3D Numpy数组

2024-04-20 13:28:59 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有以下3D矩阵:

1 1 1

2 2 2

三三三

在它后面(第三维度):

a a a a

b b b b

c c 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

三三三

后面:

b b b b

a a a a

c c c c c

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

我如何做到这一点?你知道吗


Tags: importnumpy定义asnp矩阵数组array
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')

在将第二个轴作为第一个轴后,只需使用^{},因为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')

正如我们在^{}中发现的那样,这应该是相当有效的。你知道吗

或者,其他两种排列轴的方法是-

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

相关问题 更多 >