沿轴折叠蒙版数组 - 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])
我有一个二维掩码数组,我想对 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])