如何转置3D np数组中的每个元素

Dis*_*ous 6 python numpy

给定一个3D数组a,我想在第一个索引中的每个元素上调用np.tranpose.
例如,给定数组:

array([[[1, 1, 1, 1],
        [1, 1, 1, 1],
        [1, 1, 1, 1]],

       [[2, 2, 2, 2],
        [2, 2, 2, 2],
        [2, 2, 2, 2]],

       [[3, 3, 3, 3],
        [3, 3, 3, 3],
        [3, 3, 3, 3]])
Run Code Online (Sandbox Code Playgroud)

我想要:

array([[[1, 1, 1],
        [1, 1, 1],
        [1, 1, 1],
        [1, 1, 1]],

       [[2, 2, 2],
        [2, 2, 2],
        [2, 2, 2],
        [2, 2, 2]],

       [[3, 3, 3],
        [3, 3, 3],
        [3, 3, 3],
        [3, 3, 3]]])
Run Code Online (Sandbox Code Playgroud)

基本上我想转置数组中的每个元素.我试图重塑它,但我找不到一个好方法.通过它循环并在每个上调用转置将太慢.有什么建议?

Chr*_*ler 11

您可以使用内置的numpy transpose方法并直接指定要转置的轴

>>> a = np.array([[[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]],
                  [[2, 2, 2, 2], [2, 2, 2, 2], [2, 2, 2, 2]],
                  [[3, 3, 3, 3], [3, 3, 3, 3], [3, 3, 3, 3]]])

>>> print(a.transpose((0, 2, 1)))

[[[1 1 1]
  [1 1 1]
  [1 1 1]
  [1 1 1]]

 [[2 2 2]
  [2 2 2]
  [2 2 2]
  [2 2 2]]

 [[3 3 3]
  [3 3 3]
  [3 3 3]
  [3 3 3]]]
Run Code Online (Sandbox Code Playgroud)