我试图使用两个或更多numpy数组的logical_and
。我知道numpy有函数logical_and()
,但我发现简单的运算符&
返回相同的结果,并且可能更容易使用。
例如,考虑三个numpy数组a,b和c。是
np.logical_and(a, np.logical_and(b,c))
相当于
a & b & c
?
如果它们(或多或少)相同,那么使用logical_and()
的优势是什么?
答案 0 :(得分:10)
@ user1121588在评论中回答了大部分内容,但要完全回答......
“Bitwise和”(&
)与布尔数组上的logical_and
行为大致相同,但它不会传达意图以及使用logical_and
,并提高了可能性在非平凡的情况下获得误导性答案(可能是打包或稀疏数组)。
要在多个数组上使用logical_and,请执行以下操作:
np.logical_and.reduce([a, b, c])
其中参数是您希望logical_and
一起组成的数组的列表。它们应该都是相同的形状。
答案 1 :(得分:3)
我一直在搜索一些官方确认书,确认我可以在NumPy bool数组上使用&而不是logical_and,并发现了一个in the NumPy v1.15 Manual:“如果您知道自己有布尔参数,则可以摆脱使用NumPy的按位运算符,但请注意括号,例如:z =(x> 1)&(x <2)。缺少NumPy运算符形式的logical_and和logical_or是Python设计的不幸结果。” 。因此,也可以将〜用作logical_not和|用于逻辑或。