Python:如何将布尔Numpy数组相加

5

我有三个列表,如下所示:

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

我希望将数组相加,以便新数组只有在所有对应的元素都是False时才会出现False。例如,输出应该为:
d = np.array([True, True, False, True])

然而,d = np.add(a,b,c) 返回:
d = np.array([True, True, False, False])

为什么会出现这种情况,我该如何解决?谢谢!
4个回答

13

np.add 的第三个参数是一个可选的数组,用于存放输出结果。该函数只能将两个数组相加。

只需使用常规运算符(或者考虑使用按位逻辑运算符,因为你想进行布尔逻辑运算而不是加法):

d = a | b | c

如果您需要一个可变数量的输入,可以使用any函数:

d = np.any(inputs, axis=0)

1
将布尔数组相加不会产生整数数组,您需要手动进行类型转换。 - seberg
什么...嗯。你说得对。我本来以为它可以的。已经修复了。 - user2357112

6

我个人正在使用np.logical_and函数。

针对所提出的问题:

In [3]: a = np.array([True, True, False, False])
   ...: b = np.array([False, False, False, False])
   ...: c = np.array([False, False, False, True])

In [4]: np.logical_and(a,b,c)
Out[4]: array([False, False, False, False], dtype=bool)

5

还有一种简单直接的解决方案。

a + b + c

导致
array([ True,  True, False,  True], dtype=bool)

-4
>>> a=[True, True, False, False]
>>> b=[False, False, False, False]
>>> c=[False, False, False, True]
>>> map(sum, zip(a,b,c))
[1, 1, 0, 1]
>>>

1
这对我来说是最好的选择,因为我可以传递可变数量的数组进行求和。即 map(bool,map(sum, zip(*X))),其中 X = [a,b,c,...]。谢谢! - Joe Flip
2
@JoeFlip:这里使用的是列表而不是numpy数组。性能会大幅下降,广播语义将消失,切片也无法正常工作。np.any是更好的选择。 - user2357112

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接