我有一个二维数组的蒙版,我想使用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
答案 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_or
是ufunc,每个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])