Python 按列重塑/调整(轴?)N维numpy数组的大小

Python 按列重塑/调整(轴?)N维numpy数组的大小,python,numpy,Python,Numpy,我需要重塑/调整大小(pivot?)[对不起,我对numpy相当陌生,使用它大约6周]一个基于列的numpy数组。 源numpy数组如下所示: [[[-0.98261404] [-0.98261404] [-0.95991508] ..., [-0.92496699] [-0.92731224] [-0.926328 ]] [[-0.91894622] [-0.91894622] [-0.92171439] ..., [-1.02966519]

我需要重塑/调整大小(pivot?)[对不起,我对numpy相当陌生,使用它大约6周]一个基于列的numpy数组。 源numpy数组如下所示:

[[[-0.98261404]
  [-0.98261404]
  [-0.95991508]
  ..., 
  [-0.92496699]
  [-0.92731224]
  [-0.926328  ]]

 [[-0.91894622]
  [-0.91894622]
  [-0.92171439]
  ..., 
  [-1.02966519]
  [-1.03908464]
  [-1.03527072]]

 [[-0.92201427]
  [-0.92201427]
  [-0.93004196]
  ..., 
  [-1.06750448]
  [-1.07838491]
  [-1.07398661]]

 [[-0.9233676 ]
  [-0.9233676 ]
  [-0.93250255]
  ..., 
  [-1.07617807]
  [-1.08736608]
  [-1.08284474]]

 [[-0.91913077]
  [-0.91913077]
  [-0.92023803]
  ..., 
 [-1.01886934]
 [-1.02782743]
 [-1.02419806]]]
我喜欢按如下方式重塑/调整上面的(轴?):

[[[-0.98261404]
  [-0.91894622]
  [-0.92201427]
  [-0.9233676 ]
  [-0.91913077]]
  ..., 
[[-0.926328  ]
 [-1.03527072]
 [-1.07398661]
 [-1.08284474]
 [-1.02419806]]]
最好的方法是什么?
谢谢

我相信你想要的是(考虑到我对它的理解是正确的):

作为
A
数据和
B
结果数组。这将转换/旋转最后2个轴。或者,你可以写

>>> B = np.swapaxes(A, 1, 2)
这是等效的(并且可能更容易阅读)。N维数组的扩展:

>>> B = np.swapaxes(A, a, b) # being `a` and `b` the axes

例如:

>>> import numpy as np
>>> A = np.random.rand(1, 2, 3)
>>> A
array([[[ 0.54766263,  0.95017886,  0.32949198],
        [ 0.76255173,  0.88943131,  0.78594731]]])

>>> np.swapaxes(A, 1, 2)
array([[[ 0.54766263,  0.76255173],
        [ 0.95017886,  0.88943131],
        [ 0.32949198,  0.78594731]]])

或者,您可以对数组进行
转置

>>> A.T # equivalent to np.transpose(A, (2, 1, 0)) 
array([[[ 0.54766263],
        [ 0.76255173]],

       [[ 0.95017886],
        [ 0.88943131]],

       [[ 0.32949198],
        [ 0.78594731]]])

按相反的顺序重新排列维度
(2,1,0)

假设您的数组是
a

那么这就应该起作用了:

x,y,z = a.shape
b = a.T #Transpose - get the indices grouped along the other axis
b = b.reshape(y, x, z) #Interchange the axes.
例如:

In [58]: a = np.random.random(20)

In [59]: a = a.reshape(4,5,1)

In [60]: a
Out[60]: 
array([[[ 0.40906066],
        [ 0.57160002],
        [ 0.22642471],
        [ 0.35845352],
        [ 0.26999423]],

       [[ 0.91962882],
        [ 0.62664991],
        [ 0.21286972],
        [ 0.39995373],
        [ 0.1141539 ]],

       [[ 0.03040894],
        [ 0.79666903],
        [ 0.72822631],
        [ 0.84388555],
        [ 0.23265895]],

       [[ 0.63548896],
        [ 0.50314843],
        [ 0.88547892],
        [ 0.49824574],
        [ 0.55835843]]])

In [61]: b = b.reshape(y, x, z)

In [62]: x,y,z = a.shape

In [63]: b = a.T

In [64]: b = b.reshape(y,x,z)

In [65]: b
Out[65]: 
array([[[ 0.40906066],
        [ 0.91962882],
        [ 0.03040894],
        [ 0.63548896]],

       [[ 0.57160002],
        [ 0.62664991],
        [ 0.79666903],
        [ 0.50314843]],

       [[ 0.22642471],
        [ 0.21286972],
        [ 0.72822631],
        [ 0.88547892]],

       [[ 0.35845352],
        [ 0.39995373],
        [ 0.84388555],
        [ 0.49824574]],

       [[ 0.26999423],
        [ 0.1141539 ],
        [ 0.23265895],
        [ 0.55835843]]])
In [58]: a = np.random.random(20)

In [59]: a = a.reshape(4,5,1)

In [60]: a
Out[60]: 
array([[[ 0.40906066],
        [ 0.57160002],
        [ 0.22642471],
        [ 0.35845352],
        [ 0.26999423]],

       [[ 0.91962882],
        [ 0.62664991],
        [ 0.21286972],
        [ 0.39995373],
        [ 0.1141539 ]],

       [[ 0.03040894],
        [ 0.79666903],
        [ 0.72822631],
        [ 0.84388555],
        [ 0.23265895]],

       [[ 0.63548896],
        [ 0.50314843],
        [ 0.88547892],
        [ 0.49824574],
        [ 0.55835843]]])

In [61]: b = b.reshape(y, x, z)

In [62]: x,y,z = a.shape

In [63]: b = a.T

In [64]: b = b.reshape(y,x,z)

In [65]: b
Out[65]: 
array([[[ 0.40906066],
        [ 0.91962882],
        [ 0.03040894],
        [ 0.63548896]],

       [[ 0.57160002],
        [ 0.62664991],
        [ 0.79666903],
        [ 0.50314843]],

       [[ 0.22642471],
        [ 0.21286972],
        [ 0.72822631],
        [ 0.88547892]],

       [[ 0.35845352],
        [ 0.39995373],
        [ 0.84388555],
        [ 0.49824574]],

       [[ 0.26999423],
        [ 0.1141539 ],
        [ 0.23265895],
        [ 0.55835843]]])