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

Python 为什么断言np.nan==np.nan会导致错误?,python,numpy,Python,Numpy,如果 好的,那么为什么: assert 1 == 1 导致断言错误 更令人困惑的是,这没关系: assert np.nan == np.nan 测试nan的最佳方法是什么?nan具有自身不相等的属性,您应该使用它来测试nan值,这里np.isnan(np.nan)将产生True: assert np.nan != np.nan 使用np.isnan(值)。不与自身进行比较,因为它表示失败,并且可能不是以相同的方式生成的。我不确定为什么CPython文档中缺少isnan,但它在CPython

如果

好的,那么为什么:

assert 1 == 1
导致断言错误

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

assert np.nan == np.nan

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

nan
具有自身不相等的属性,您应该使用它来测试
nan
值,这里
np.isnan(np.nan)
将产生
True

assert np.nan != np.nan

使用
np.isnan(值)
。不与自身进行比较,因为它表示失败,并且可能不是以相同的方式生成的。我不确定为什么CPython文档中缺少
isnan
,但它在CPython 3.4和2.7的
math
中都存在,并且在
numpy
中作为ufunc存在

因为
NaN
!=
NaN
,它是浮点数规范的一部分。测试身份(
运算符),不相等。
不是一个好主意:
a=np.float(1e150)/1e-250
b=np.float(-1e150)/1e-250a+b是np.nan产生
False
。这是因为
np.nan
是nan的一个例子,而不是nan。
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