numpy logical_and:意外行为

时间:2014-06-16 22:35:38

标签: python numpy

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

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

如果你AND他们在一起,你会得到以下结果:

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 个答案:

答案 0 :(得分:11)

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

在大多数情况下,使用&更清晰,更简单:

b4 = b1 & b2 & b3

答案 1 :(得分:5)

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

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

输出参数对determining output type和一般效率非常有用。

答案 2 :(得分:1)

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

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