如何使用重新排序重塑numpy数组?

时间:2019-05-21 15:02:15

标签: python numpy

我有一个1 x 2 x 3的阵列:

>>> a = np.array([[[1,2,3],[4,5,6]]])
>>> a
array([[[1, 2, 3],
        [4, 5, 6]]])
>>> a.shape
(1, 2, 3)

我想将其重塑为(3,1,2),但使原来的dim 3的元素现在沿dim1。我希望结果看起来像这样:

>>> new_a
array([[[1, 4]],
       [[2, 5]],
       [[3, 6]]])

当我只使用重塑时,我得到了正确的形状,但是元素的顺序相同,而不是我想要的:

>>> a.reshape((3,1,2))
array([[[1, 2]],
       [[3, 4]],
       [[5, 6]]])

我该如何实现?

3 个答案:

答案 0 :(得分:2)

只需使用np.transpose-

a.transpose(2,0,1)

样品运行-

In [347]: a
Out[347]: 
array([[[1, 2, 3],
        [4, 5, 6]]])

In [348]: a.transpose(2,0,1)
Out[348]: 
array([[[1, 4]],

       [[2, 5]],

       [[3, 6]]])

或者:

使用np.moveaxis-

np.moveaxis(a,2,0)

使用np.rollaxis-

np.rollaxis(a,2,0)

答案 1 :(得分:1)

有几种方法,但是transpose()可能是最简单的方法:

array.transpose(2,0,1)

答案 2 :(得分:0)

import einops
einops.rearrange(x, 'x y z -> z x y')

最好使用一些有意义的轴名称代替xyz(例如宽度,高度等)