我正在使用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.rot90np.flipudnp.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]]])

10-01 23:00
查看更多