Python numpy.nan和逻辑函数:错误的结果

当尝试对可能包含nan值(如numpy中定义)的数据求逻辑表达式时,我得到一些令人惊讶的结果。


我想了解为什么会出现这种结果以及如何实施正确的方法。


我不明白的是为什么这些表达式求值的价值:


from numpy import nan


nan and True

>>> True

# this is wrong.. I would expect to evaluate to nan


True and nan

>>> nan

# OK


nan and False

>>> False

# OK regardless the value of the first element 

# the expression should evaluate to False


False and nan

>>> False

#ok

同样适用于or:


True or nan

>>> True #OK


nan or True

>>> nan #wrong the expression is True


False or nan

>>> nan #OK


nan or False

>>> nan #OK

如何实现(以有效的方式)正确的布尔函数,同时处理nan值?


慕娘9325324
浏览 225回答 2
2回答

隔江千里

在评估包含的逻辑表达式时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作为输出。在ORoperator中,如果我们看第一个表达式就足够了,因此“True or nan将返回True
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python