我有一个布尔掩码列表,通过对数据帧应用不同的搜索条件获得。下面是一个包含4个掩码的示例列表:
mask_list = [mask1, mask2, mask3, mask4]
我想找到列表中所有掩码的逻辑or。换句话说
^{pr2}$对于包含任意数量掩码的列表,有没有一种简洁的方法来实现这一点?我知道我可以写一个for循环,如下所示,但是有没有一种更短、更具Python式风格的方法来实现这一点呢?在
for i in range(len(mask_list)):
if i == 0:
temp_mask_or = mask_list[i]
else:
temp_mask_or = temp_mask_or | mask_list[i]
我通常在组合蒙版时使用与您类似的循环,可能稍有不同:
如果这还不够短,你可以利用你只是或使用面具这一事实,并将它们视为int(它们在引擎盖下面):
^{pr2}$如果你看一下
sum(mask_list)
,你会发现它只是一个整数列表。在关于后一种方法,我不知道的一个可能的警告是,当您试图求和超过255个掩码时,它是否会遇到问题,其中至少有一个(相同的)元素总是
True
(即1
)。存储np.bool
的底层整数类型只有8位,这样就可以达到整数限制。也许numpy/Python在继续之前会自动将所有内容转换为16位整数类型,但我不知道这一点。在编辑:我会留下后一项,但很容易检查:
因此,即使是一个短的掩码列表的总和也被转换成64位整数(然后可以很容易地将其转换为布尔掩码数组),并且您不会轻易地遇到整数限制。在
您可以使用reduce:
or_(x,y)
表示x|y
,因此这将起作用:编辑:正如JoeCondron建议的那样,您可以使用
operator.or_
代替numpy.logical_or
,这会产生相同的结果,但速度更快。在相关问题 更多 >
编程相关推荐