当尝试对可能包含nan值(如numpy中定义)的数据求逻辑表达式时,我得到一些令人惊讶的结果。我想了解为什么会出现这种结果以及如何实施正确的方法。我不明白的是为什么这些表达式求值的价值:from numpy import nannan and True>>> True# this is wrong.. I would expect to evaluate to nanTrue and nan>>> nan# OKnan and False>>> False# OK regardless the value of the first element # the expression should evaluate to FalseFalse and nan>>> False#ok同样适用于or:True or nan>>> True #OKnan or True>>> nan #wrong the expression is TrueFalse or nan>>> nan #OKnan or False>>> nan #OK如何实现(以有效的方式)正确的布尔函数,同时处理nan值?
2 回答

隔江千里
TA贡献1906条经验 获得超10个赞
在评估包含的逻辑表达式时and
,我们必须评估and
运算符两侧都存在的表达式。而对于or
运算符,如果第一个表达式为True,则无需检查第二个表达式的正确性
例如,在评估表达式时2>2 and 3==3
,首先我们应该检查第一个表达式是否2>2
为True。如果第一个表达式为False,则由于AND
运算符而无需检查第二个表达式,并且该表达式的结果将为FALSE,因为第一个表达式为FALSE。而如果表达式为2==2 AND 3==3
,则由于第一个表达式2==2
为True,则我们无需检查第二个表达式的正确性,并且由于此处第二个表达式也为True,因此输出为TRUE。
在中nan and True
,由于nan
是True且由于AND
运算符,所以python现在将评估第二个表达式并返回第二个表达式的值。因此,在这里您将获得TRUE
输出。将相同的逻辑应用于时True and nan
,您可以期望将其nan
作为输出。
在OR
operator中,如果我们看第一个表达式就足够了,因此“True or nan
将返回True
添加回答
举报
0/150
提交
取消