【问题标题】:How to reshape an array while preserving order?如何在保持顺序的同时重塑数组?
【发布时间】:2020-06-09 15:58:36
【问题描述】:

我正在尝试将形状从 (a,b,c) 重塑为 (b,c,a) 的数组,这样如果我的表是 B 并且我的新表是 B1 则 B[n,:,:]=B1[:,:,n] 为介于 0 和 a 之间的某个 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,:,:]=array([[ 2],[ 4],[21]])

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

【问题讨论】:

    标签: python arrays numpy reshape


    【解决方案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)
    

    reshape保持顺序,只是重新排列维度的大小:

    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,...

    transpose 是不同的操作:

    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 在这里似乎是一个相关的特例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    相关资源
    最近更新 更多