将 Numpy 数组从 (3, 2, 3) 重塑为 (3, 3, 2)

Reshaping Numpy Array from (3, 2, 3) to (3, 3, 2)

我有以下形状为 (3, 2, 3) 的 3d numpy 数组。

[
 [[ 0  1  2]
  [ 3  4  5]]

 [[ 6  7  8]
  [ 9 10 11]]

 [[12 13 14]
  [15 16 17]]
             ]

但是,我需要按以下顺序重塑为 (3, 3, 2):

[
 [[ 0  3]
  [ 6  9]
  [12 15]]

 [[ 1  4]
  [ 7 10]
  [13 16]]

 [[ 2  5]
  [ 8 11]
  [14 17]]
          ]

我目前正在使用 Jupyter 进行大量试验和错误。

感谢您的任何建议!

要定义原始数组,可以使用:

np.arange(18).reshape(3,2,3)

正如@Divakar 在评论中提到的,您可以使用:

np.arange(18).reshape(3,2,3).transpose(2,0,1)

得到想要的结果。

来自 np.transpose documentation:

axes: By default, reverse the dimensions, otherwise permute the axes according to the values given.

2,0,1 是从 (3,2,3) 形状到 (3,3,2) 所需的排列。它还会将 (3400, 7, 100) 形状转换为 (100, 3400, 7).

另一种方法是使用np.rollaxis(来自@Divakar 的另一个提示):

np.rollaxis(np.arange(18).reshape(3,2,3),2)