【发布时间】:2013-06-20 19:58:19
【问题描述】:
我在尝试评估时得到了一些令人惊讶的结果
可能包含 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 值?
【问题讨论】:
-
在旁注中,您想要的对于
numpy当前的工作方式没有多大意义。NaN是一个纯浮点值。布尔数组不能容纳NaNs。因此,有一个逻辑比较返回NaN基本上会破坏一切。为了解决这个问题,引入了一个特殊的np.na(不同于np.nan)值,并且已被暂时删除。它可以满足您的需求:github.com/numpy/numpy.org/blob/master/NA-overview.rst -
@JoeKington 感谢您的评论。很高兴知道,不幸的是,在这种情况下,我必须使用返回 nan 值的第三方模块的结果,所以我没有太多选择。
-
这完全违反直觉,并导致意想不到的结果......真是麻烦
-
Fwiw 在我的情况下,我用
df['value'].shift(-1).fillna(100)<0搞砸了它
标签: python python-2.7 numpy boolean nan