代码之家  ›  专栏  ›  技术社区  ›  TaxpayersMoney

将数据从二维numpy阵列转换为三维numpy阵列

  •  2
  • TaxpayersMoney  · 技术社区  · 6 年前

    如果我有一个2d数组,如:

    array([[ 0,  1,  2,  3],
           [ 4,  5,  6,  7],
           [ 8,  9, 10, 11]])
    

    我想最终得到一个3d阵列,如:

    array([[[0, 4, 8],
            [1, 5, 9]],
    
           [[2, 6, 10],
            [3, 7, 11]]])
    

    我应该如何重塑阵列以获得我想要的?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Divakar    6 年前

    Reshape and permute axes -

    In [11]: a  # Input array
    Out[11]: 
    array([[ 0,  1,  2,  3],
           [ 4,  5,  6,  7],
           [ 8,  9, 10, 11]])
    
    In [12]: a.reshape(-1,2,2).transpose(1,2,0)
    Out[12]: 
    array([[[ 0,  4,  8],
            [ 1,  5,  9]],
    
           [[ 2,  6, 10],
            [ 3,  7, 11]]])
    

    具有 np.moveaxis -

    np.moveaxis(a.reshape(-1,2,2), 0,-1)
    

    将其推广,并假设希望沿第一个轴的长度为列数的一半-

    In [16]: m,n = a.shape
    
    In [17]: a.reshape(m,-1,2).transpose(1,2,0)
    Out[17]: 
    array([[[ 0,  4,  8],
            [ 1,  5,  9]],
    
           [[ 2,  6, 10],
            [ 3,  7, 11]]])
    

    如果长度应该是 2 -

    In [15]: a.reshape(m,2,-1).transpose(1,2,0)
    Out[15]: 
    array([[[ 0,  4,  8],
            [ 1,  5,  9]],
    
           [[ 2,  6, 10],
            [ 3,  7, 11]]])