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

时间:2016-11-09 04:33:13

标签: 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]])

我想:

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]]])

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

1 个答案:

答案 0 :(得分: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]]]