我有一个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]]])
我该如何实现?
答案 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')
最好使用一些有意义的轴名称代替x
,y
,z
(例如宽度,高度等)