为什么断言np.nan == np.nan会导致错误?

时间:2017-06-05 11:04:49

标签: python numpy

如果

assert 1 == 1

很好,那么为什么:

assert np.nan == np.nan

导致断言错误?

更令人困惑的是,这没关系:

assert np.nan != np.nan

测试nan的最佳方式是什么?

2 个答案:

答案 0 :(得分:10)

NaN具有与自身不相同的属性,您应使用np.isnan来测试NaN值,此处np.isnan(np.nan)将产生True

In[5]:
np.nan == np.nan

Out[5]: False

In[6]:
np.nan != np.nan

Out[6]: True

In[7]:
np.isnan(np.nan)

Out[7]: True

正如@ŁukaszRogalski指出的那样,is在这里也可行:

In [10]: np.nan is np.nan

Out[10]: True

答案 1 :(得分:1)

使用math.isnan(value)NaN与自身不相等,因为它表示失败,并且可能没有以相同的方式生成。我不确定文档中缺少isnan的原因,但它在CPython 3.4和2.7中都有。