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

滤波器numpy数组基1-0掩码

  •  0
  • user16971617  · 技术社区  · 2 年前

    假设我有一个numpy ndarray的形状(172,40,20)和一个1-0的形状面具(172,40)。我想做一些类似于bitwise_and的事情:保留那些掩码值为1的值,而其他值设置为0,掩码值为0。

    有没有一种方法可以做到不循环? 例如

    a3D = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
    print(a3D.shape)
    mask = np.array([[1, 0], [0, 1]])
    print(mask.shape)
    # (2, 2, 2)
    # (2, 2)
    
    # my func
    result = bitwise_and(a3D, mask) 
    
    # result = np.array([[[1, 2], [0, 0]], [[0, 0], [7, 8]]])
    
    2 回复  |  直到 2 年前
        1
  •  1
  •   wjandrea senderle    2 年前

    您可以使用 np.where() :

    np.where(mask[:, :, np.newaxis], a3D, 0)
    
    [[[1 2]
      [0 0]]
    
     [[0 0]
      [7 8]]]
    
        2
  •  1
  •   Brian61354270    2 年前

    只需使用掩码将数组索引为 boolean indices :

    result = a3D.copy()
    result[mask == 0, :] = 0
    print(result)
    

    输出

    [[[1 2]
      [0 0]]
    
     [[0 0]
      [7 8]]]