代码之家  ›  专栏  ›  技术社区  ›  Sun Bear

如何填充3D np的i、j轴。数组没有填充其k轴?

  •  0
  • Sun Bear  · 技术社区  · 4 年前

    我有一张3D地图。

    >>> b = np.arange(27).reshape(3,3,3)
    >>> b
    array([[[ 0,  1,  2],
            [ 3,  4,  5],
            [ 6,  7,  8]],
    
           [[ 9, 10, 11],
            [12, 13, 14],
            [15, 16, 17]],
    
           [[18, 19, 20],
            [21, 22, 23],
            [24, 25, 26]]])
    

    Numpy pad函数返回5x5x5数组:

    >>> np.pad(b, (1, 1), constant_values=0)
    array([[[ 0,  0,  0,  0,  0],
            [ 0,  0,  0,  0,  0],
            [ 0,  0,  0,  0,  0],
            [ 0,  0,  0,  0,  0],
            [ 0,  0,  0,  0,  0]],
    
           [[ 0,  0,  0,  0,  0],
            [ 0,  0,  1,  2,  0],
            [ 0,  3,  4,  5,  0],
            [ 0,  6,  7,  8,  0],
            [ 0,  0,  0,  0,  0]],
    
           [[ 0,  0,  0,  0,  0],
            [ 0,  9, 10, 11,  0],
            [ 0, 12, 13, 14,  0],
            [ 0, 15, 16, 17,  0],
            [ 0,  0,  0,  0,  0]],
    
           [[ 0,  0,  0,  0,  0],
            [ 0, 18, 19, 20,  0],
            [ 0, 21, 22, 23,  0],
            [ 0, 24, 25, 26,  0],
            [ 0,  0,  0,  0,  0]],
    
           [[ 0,  0,  0,  0,  0],
            [ 0,  0,  0,  0,  0],
            [ 0,  0,  0,  0,  0],
            [ 0,  0,  0,  0,  0],
            [ 0,  0,  0,  0,  0]]])
    

    但是,我想要一个5x5x3阵列,如下所示:

    array([[[ 0,  0,  0,  0,  0],
            [ 0,  0,  1,  2,  0],
            [ 0,  3,  4,  5,  0],
            [ 0,  6,  7,  8,  0],
            [ 0,  0,  0,  0,  0]],
    
           [[ 0,  0,  0,  0,  0],
            [ 0,  9, 10, 11,  0],
            [ 0, 12, 13, 14,  0],
            [ 0, 15, 16, 17,  0],
            [ 0,  0,  0,  0,  0]],
    
           [[ 0,  0,  0,  0,  0],
            [ 0, 18, 19, 20,  0],
            [ 0, 21, 22, 23,  0],
            [ 0, 24, 25, 26,  0],
            [ 0,  0,  0,  0,  0]]])
    

    我如何实现上述目标?

    2 回复  |  直到 4 年前
        1
  •  2
  •   richardec    4 年前

    你可以使用 ((0,0),(1,1),(1,1)) 代替 (1,1) :

    np.pad(b, ((0,0),(1,1),(1,1)), constant_values=0)
    

    ...或者干脆删掉第一个和最后一个项目:

    np.pad(b, (1,1), constant_values=0)[1:-1]
    
        2
  •  1
  •   J27avier    4 年前

    可能不是最优雅的解决方案,但:

    >>> np.pad(b, (1,1), constant_values=0)[1:-1,:,:]
     
    array([[[ 0,  0,  0,  0,  0],
            [ 0,  0,  1,  2,  0],
            [ 0,  3,  4,  5,  0],
            [ 0,  6,  7,  8,  0],
            [ 0,  0,  0,  0,  0]],
    
           [[ 0,  0,  0,  0,  0],
            [ 0,  9, 10, 11,  0],
            [ 0, 12, 13, 14,  0],
            [ 0, 15, 16, 17,  0],
            [ 0,  0,  0,  0,  0]],
    
           [[ 0,  0,  0,  0,  0],
            [ 0, 18, 19, 20,  0],
            [ 0, 21, 22, 23,  0],
            [ 0, 24, 25, 26,  0],
            [ 0,  0,  0,  0,  0]]])
    
    

    对我有用。