提问者:小点点

Numpylogical_and:意外行为


假设我给你以下布尔数组:

b1 = np.array([ True,  True, False,  True ])
b2 = np.array([ True, False, False,  True ])
b3 = np.array([ True,  True,  True, False ])

如果您将它们放在一起,您会期望得到以下结果:

b4 = np.array([ True, False, False, False ])

对吗?如果不是,请解释。如果我们同意,那么,为什么会发生以下情况?

>>> np.logical_and(b1, b2, b3)
array([ True, False, False,  True ])

np.logical_and(np.logical_and(b1, b2),b3)确实给出了预期的结果。


共3个答案

匿名用户

查看np.logical_and的留档。与大多数NumPy运算符函数一样,第三个参数是一个out参数,指定目标数组。它不是操作数!将b3放在那里只会覆盖b3的内容。

使用

b4 = b1 & b2 & b3

匿名用户

np的第三个参数。logical_and是可选的out参数,它存储操作的结果。

也就是说,调用np.logical_and(b1, b2,b3)np.logical_and(b1,b2)的结果覆盖b3

输出参数对于确定输出类型和一般效率很有用。

匿名用户

logical_and()是一个二元运算符,对于你的问题,你可以使用:

np.all([b1, b2, b3], axis=0)
np.logical_and.reduce([b1, b2, b3], axis=0)