我正在尝试使用两个或多个numpy数组的logical_and
。我知道numpy有函数logical_and()
,但我发现简单的运算符&
返回相同的结果,并且更容易使用。
例如,考虑三个numpy数组a、b和c。是否
np.logical_and(a, np.logical_and(b,c))
等同于
a & b & c
?
如果它们(或多或少)相等,那么使用logical_and()
的优点是什么?
我正在尝试使用两个或多个numpy数组的logical_and
。我知道numpy有函数logical_and()
,但我发现简单的运算符&
返回相同的结果,并且更容易使用。
例如,考虑三个numpy数组a、b和c。是否
np.logical_and(a, np.logical_and(b,c))
等同于
a & b & c
?
如果它们(或多或少)相等,那么使用logical_and()
的优点是什么?
@user1121588在评论中已经回答了大部分问题,但为了全面回答...
"位与"运算符(&
)在布尔数组上的行为与logical_and
类似,但它不像使用logical_and
那样清晰表达意图,并且在处理非平凡情况(可能是紧缩或稀疏数组)时会导致得到错误答案的可能性。
要在多个数组上使用logical_and,请执行以下操作:
np.logical_and.reduce([a, b, c])
其中的参数是一个数组列表,您可以将其中尽可能多的数组一起使用 logical_and
函数。这些数组应该具有相同的形状。
&
等)比相应的函数(例如 logical_and
)要快得多。对我来说,它们的差异大约是4倍。 - Torben545&
代替logical_and
,并找到了一个NumPy v1.15手册中的记录:
如果您知道您有布尔参数,您可以使用NumPy的位运算符,但是要小心括号,像这样:
z = (x > 1) & (x < 2)
。缺少NumPy运算符形式的logical_and
和logical_or
是Python设计不幸的后果。
因此,人们也可以使用~
来表示logical_not
,|
用于logical_or
。