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