我们假设我给你以下布尔数组:
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)
确实给出了预期的结果。
答案 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)