代码之家  ›  专栏  ›  技术社区  ›  Max Collier

沿python中的numpy轴折叠mask数组

  •  2
  • Max Collier  · 技术社区  · 7 年前

    我有一个二维的蒙版数组,我想使用逻辑或运算沿着0轴折叠这些蒙版 True . 我想知道是否有一个麻木的功能来完成这个过程。我的代码看起来像:

    >>> all_masks
    array([[False, False, False, ..., False, False, False],
           [False, False, False, ..., False, False, False],
           [False, False, False, ..., False, False, False],
           [False,  True, False, ..., False,  True, False],
           [False, False, False, ..., False, False, False],
           [False,  True, False, ..., False,  True, False]])
    
    >>> all_masks.shape
    (6, 870)
    
    >>> output_mask
    array([False, True, False, ..., False, True, False])
    
    >>> output_mask.shape
    (870,)
    

    我已经实现 output_mask 这个过程通过使用for循环。然而,我知道使用for循环会使我的代码变慢(并且有点混乱),所以我想知道这个过程是否可以通过numpy或类似的函数来完成?

    使用for循环折叠遮罩的代码:

    mask_out = np.zeros(all_masks.shape[1], dtype=bool)
    for mask in all_masks:
        mask_out = mask_out | mask
    
    return mask_out
    
    2 回复  |  直到 7 年前
        1
  •  3
  •   iz_    7 年前

    你可以使用 ndarray.any :

    all_masks = np.array([[False, False, False, False, False, False],
                          [False, False, False, False, False, False],
                          [False, False, False, False, False, False],
                          [False,  True, False, False,  True, False],
                          [False, False, False, False, False, False],
                          [False,  True, False, False,  True, False]])
    
    all_masks.any(axis=0)
    

    输出:

    array([False,  True, False, False,  True, False])
    
        2
  •  3
  •   unutbu    7 年前

    你可以使用 np.logical_or.reduce :

    In [200]: all_masks = np.array([[False, False, False, False, False, False],
           [False, False, False, False, False, False],
           [False, False, False, False, False, False],
           [False,  True, False, False,  True, False],
           [False, False, False, False, False, False],
           [False,  True, False, False,  True, False]])
    
    In [201]: np.logical_or.reduce(all_masks, axis=0)
    Out[207]: array([False,  True, False, False,  True, False])
    

    np.logical_or 是一个 ufunc 每个UFunc都有一个 reduce method .