国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

關于Python中Inf與Nan的判斷問題詳解

2019-11-25 16:22:11
字體:
來源:轉載
供稿:網友

大家都知道 在Python 中可以用如下方式表示正負無窮:

float("inf") # 正無窮float("-inf") # 負無窮

利用 inf(infinite) 乘以 0 會得到 not-a-number(NaN) 。如果一個數超出 infinite,那就是一個 NaN(not a number)數。在 NaN 數中,它的 exponent 部分為可表達的最大值,即 FF(單精度)、7FF(雙精度)和 7FFF(擴展雙精度)。 NaN 數與 infinite 數的區別是:infinite 數的 significand 部分為 0 值(擴展雙精度的 bit63 位為 1);而 NaN 數的 significand 部分不為 0 值。

我們先看看如下的代碼:

>>> inf = float("inf")>>> ninf = float("-inf")>>> nan = float("nan")>>> inf is infTrue>>> ninf is ninfTrue>>> nan is nanTrue>>> inf == infTrue>>> ninf == ninfTrue>>> nan == nanFalse>>> inf is float("inf")False>>> ninf is float("-inf")False>>> nan is float("nan")False>>> inf == float("inf")True>>> ninf == float("-inf")True>>> nan == float("nan")False

如果你沒有嘗試過在 Python 中判斷一個浮點數是否為 NaN,對以上的輸出結果肯定會感到詫異。首先,對于正負無窮和 NaN 自身與自身用 is 操作,結果都是 True,這里好像沒有什么問題;但是如果用 == 操作,結果卻不一樣了, NaN 這時變成了 False。如果分別用 float 重新定義一個變量來與它們再用 is 和 == 比較,結果仍然出人意料。出現這種情況的原因稍稍有些復雜,這里就不贅術了,感興趣可以查閱相關資料。

如果你希望正確的判斷 Inf 和 Nan 值,那么你應該使用 math 模塊的 math.isinf math.isnan 函數:

>>> import math>>> math.isinf(inf)True>>> math.isinf(ninf)True>>> math.isnan(nan)True>>> math.isinf(float("inf"))True>>> math.isinf(float("-inf"))True>>> math.isnan(float("nan"))True

這樣便準確無誤了。既然我在談論這個問題,就是再忠告:不要在 Python 中試圖用 is 和 == 來判斷一個對象是否是正負無窮或者 NaN。你就乖乖的用 math 模塊吧,否則就是引火燒身。

當然也有別的方法來作判斷,以下用 NaN 來舉例,但仍然推薦用 math 模塊,免得把自己弄糊涂。

用對象自身判斷自己

>>> def isnan(num):...  return num != num... >>> isnan(float("nan"))True

用 numpy 模塊的函數

>>> import numpy as np>>> >>> np.isnan(np.nan)True>>> np.isnan(float("nan"))True>>> np.isnan(float("inf"))False

Numpy 的 isnan 函數還可以對整個 list 進行判斷:

>>> lst = [1, float("nan"), 2, 3, np.nan, float("-inf"), 4, np.nan]>>> lst[1, nan, 2, 3, nan, -inf, 4, nan]>>> np.isnan(lst)array([False, True, False, False, True, False, False, True], dtype=bool)

這里的 np.isnan 返回布爾值數組,如果對應位置為 NaN,返回 True,否則返回 False。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 正蓝旗| 余姚市| 蓬莱市| 陈巴尔虎旗| 绥宁县| 江华| 华阴市| 贵定县| 湛江市| 贵溪市| 织金县| 云南省| 增城市| 苍梧县| 上栗县| 霍林郭勒市| 山东| 榕江县| 东乌珠穆沁旗| 综艺| 丰顺县| 大城县| 岳阳市| 甘洛县| 安丘市| 钟祥市| 六枝特区| 临漳县| 句容市| 措美县| 石阡县| 老河口市| 息烽县| 遂平县| 垦利县| 东辽县| 仙居县| 宽城| 翁牛特旗| 翁牛特旗| 望城县|