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

时间:2019-01-14 01:39:05

标签: python arrays numpy mask boolean-operations

我有一个二维数组的蒙版,我想使用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

2 个答案:

答案 0 :(得分:3)

您可以使用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_orufunc,每个ufunc都有reduce method

答案 1 :(得分:3)

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