2017-06-05 59 views
3

如果爲什麼斷言np.nan == np.nan會導致錯誤?

assert 1 == 1 

是好的,那麼爲什麼:

assert np.nan == np.nan 

原因斷言錯誤?

什麼是更加混亂,這是確定:

assert np.nan != np.nan 

什麼是測試nan的最佳方式?

+6

因爲'NaN'!='NaN',它是浮點數規範的一部分。測試_identity_('is'運算符),而不是_equality_。 –

回答

8

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 

正如@盧卡斯Rogalski指出,is這裏也將工作:

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

Out[10]: True 
1

使用math.isnan(value)NaN不會與自身等同,因爲它表示失敗,並且可能沒有以相同方式生成。我不確定爲什麼isnan在文檔中缺失,但它在CPython 3.4和2.7中都存在。

相關問題