Python 如何在保持顺序的同时重塑数组?

Python 如何在保持顺序的同时重塑数组?,python,arrays,numpy,reshape,Python,Arrays,Numpy,Reshape,我正在尝试将数组的形状从(a,b,c)改为(b,c,a),这样,如果我的表是b,而我的新表是B1,那么0和a之间的一些n的b[n,:,:]=B1[:,:,n]。 比如我试过这样的东西 B=np.array([[[1],[2],[23]],[[2],[4],[21]],[[6],[45],[61]],[[1],[34],[231]]]) B1=np.reshape(B,(3,1,4)) 但是 B[1,:,:]=数组([2],[4],[21]]) B1[:,:,1]=数组([2],[21],[1]

我正在尝试将数组的形状从
(a,b,c)
改为
(b,c,a)
,这样,如果我的表是b,而我的新表是B1,那么0和a之间的一些n的
b[n,:,:]=B1[:,:,n]
。 比如我试过这样的东西

B=np.array([[[1],[2],[23]],[[2],[4],[21]],[[6],[45],[61]],[[1],[34],[231]]])
B1=np.reshape(B,(3,1,4))
但是

B[1,:,:]=数组([2],[4],[21]])

B1[:,:,1]=数组([2],[21],[1]])
这不是我想要的,我希望他们是平等的。如有任何建议,将不胜感激

In [207]: B=np.array([[[1],[2],[23]],[[2],[4],[21]],[[6],[45],[61]],[[1],[34],[231]]])         
In [208]: B                                                                                    
Out[208]: 
array([[[  1],
        [  2],
        [ 23]],

       [[  2],
        [  4],
        [ 21]],

       [[  6],
        [ 45],
        [ 61]],

       [[  1],
        [ 34],
        [231]]])
In [209]: B.shape                                                                              
Out[209]: (4, 3, 1)
重塑
保持顺序,只需重新排列尺寸:

In [210]: B.reshape(3,1,4)                                                                     
Out[210]: 
array([[[  1,   2,  23,   2]],

       [[  4,  21,   6,  45]],

       [[ 61,   1,  34, 231]]])
请注意,您可以按照创建
B
时使用的相同顺序阅读
1,2,23,2,…

转置
是一种不同的操作:

In [211]: B.transpose(1,2,0)                                                                   
Out[211]: 
array([[[  1,   2,   6,   1]],

       [[  2,   4,  45,  34]],

       [[ 23,  21,  61, 231]]])
In [212]: _.shape                                                                              
Out[212]: (3, 1, 4)
In [213]: __.ravel()                                                                           
Out[213]: array([  1,   2,   6,   1,   2,   4,  45,  34,  23,  21,  61, 231])
1,2,23,…
顺序仍然存在-如果您向下读取行。但混乱的秩序已经改变

In [216]: B.transpose(1,2,0).ravel(order='F')                                                  
Out[216]: array([  1,   2,  23,   2,   4,  21,   6,  45,  61,   1,  34, 231])

In [217]: B[1,:,:]                                                                             
Out[217]: 
array([[ 2],
       [ 4],
       [21]])
In [218]: B.transpose(1,2,0)[:,:,1]                                                            
Out[218]: 
array([[ 2],
       [ 4],
       [21]])

rollaxis
在这里似乎是一个相关的特例。