沿轴折叠蒙版数组 - Python 中的 Numpy

Collapse mask array along axis - Numpy in Python

我有一个二维掩码数组,我想对 True 的值使用逻辑或运算沿轴 0 折叠它。我想知道是否有一个 numpy 函数来完成这个过程。我的代码看起来像:

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

我已经通过使用 for 循环实现了 output_mask 这个过程。但是我知道使用 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

您可以使用 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 is a ufunc, and every ufunc has a reduce method

您可以使用 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])