我正在使用numpy中的3D矩阵。我实际上是使用ctypes将这些矩阵传递给C进行一些计算,然后返回结果。现在的事情是,我的结果是正确的(我在纸上做了数学运算来验证),但是它不是我想要的形式。
这是一个例子。我有以下形式的3D数组:
array([[[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8]],
[[ 9, 10, 11],
[12, 13, 14],
[15, 16, 17]],
[[18, 19, 20],
[21, 22, 23],
[24, 25, 26]]])
我需要将其转换为所有2D子矩阵的第i列形成一个新的2D子矩阵的形式,如下所示:
array([[[ 0, 9, 18],
[ 3, 12, 21],
[ 6, 15, 24]],
[[ 1, 10, 19],
[ 4, 13, 22],
[ 7, 16, 25]],
[[2, 11, 20],
[5, 14, 23],
[8, 17, 26]]])
我尝试使用
np.rot90
,np.flipud
,np.fliplr
的各种组合,但无济于事。任何帮助,将不胜感激。非常感谢!
最佳答案
所需的输出是初始数组,其中轴的顺序相反。这就是NumPy将转置概括为任意维数组的方式,因此您可以为此使用T
属性:
In [3]: x
Out[3]:
array([[[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8]],
[[ 9, 10, 11],
[12, 13, 14],
[15, 16, 17]],
[[18, 19, 20],
[21, 22, 23],
[24, 25, 26]]])
In [4]: x.T
Out[4]:
array([[[ 0, 9, 18],
[ 3, 12, 21],
[ 6, 15, 24]],
[[ 1, 10, 19],
[ 4, 13, 22],
[ 7, 16, 25]],
[[ 2, 11, 20],
[ 5, 14, 23],
[ 8, 17, 26]]])