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

首頁 > 編程 > Python > 正文

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

2020-02-23 04:21:34
字體:
來源:轉載
供稿:網友

大家都知道 在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 進行判斷:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 镶黄旗| 民丰县| 淳化县| 紫金县| 屯门区| 大名县| 蓬安县| 广水市| 镇宁| 桐庐县| 会泽县| 新民市| 固始县| 华池县| 渭源县| 桂平市| 平原县| 巴东县| 苏尼特左旗| 平乐县| 武胜县| 穆棱市| 淮阳县| 绥德县| 平湖市| 沈丘县| 青铜峡市| 望城县| 古蔺县| 阿瓦提县| 南陵县| 大城县| 社会| 博客| 崇州市| 高唐县| 咸阳市| 沙雅县| 天门市| 镇宁| 西城区|