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

4

我有一个1x2x3的数组:

>>> 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),但是让原始维度3上的元素现在沿着维度1。 我希望结果看起来像这样:

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

使用reshape函数时,可以得到正确的形状,但元素顺序并不符合要求。

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

我该如何达成这个目标?

3个回答

3

只需使用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
有几种方法,但是transpose()可能是最简单的:
array.transpose(2,0,1)

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

最好使用一些有意义的轴名称,而不是 xyz(例如宽度、高度等)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接