首页 > 解决方案 > 带有嵌套布尔数组的logical_and

问题描述

我有一个(非常长的)a带有k True条目的布尔数组和一个b长度为的布尔数组k。我想得到一个布尔数组cTrue当且仅当a“和”bTrue

import numpy

a = numpy.array([False, False, True, False, True, False])
b = numpy.array([True, False])

assert numpy.sum(a) == len(b)  # guaranteed

c = numpy.zeros(len(a), dtype=bool)
idx_b = 0
for k in range(len(a)):
    if a[k]:
        if b[idx_b]:
            c[k] = True
        idx_b += 1

print(c)
[False False  True False False False]

这里使用了一个循环,但我认为布尔索引必须有一种更快的方法,但我不能完全理解它。

有什么提示吗?

标签: pythonarraysnumpy

解决方案


只需用自身屏蔽输入数组(自屏蔽?)并分配 -

a[a] = b

如果您需要在新数组中输出,请复制输入数组并对其执行屏蔽。


推荐阅读