numpy.logical_and和&的区别

时间:2015-10-28 06:42:52

标签: numpy logical-operators

我试图使用两个或更多numpy数组的logical_and。我知道numpy有函数logical_and(),但我发现简单的运算符&返回相同的结果,并且可能更容易使用。

例如,考虑三个numpy数组a,b和c。是 np.logical_and(a, np.logical_and(b,c)) 相当于 a & b & c

如果它们(或多或少)相同,那么使用logical_and()的优势是什么?

2 个答案:

答案 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和|用于逻辑或。