比較NaN和數字

2021-10-08 03:12:56 字數 1777 閱讀 4080

本書適合即將或者已經從事資料科學、機器學習、人工智慧等方向工作的朋友。書中詳細梳理了各種獲取資料、資料清洗、特徵工程等方向的技術和方法。

先看下面的**,有何感悟?

>>

>

import numpy as np

>>

>

min(

2, np.nan)

2>>

>

min(np.nan,2)

nan

是不是有點意思?

怎麼解釋?

首先要理解python中的min函式,根據它的官方文件,有這樣一句話:if multiple items are minimal, the function returns the first one encountered.

意思是說,min函式會返回它所遇到的第乙個最小的項——難道說最小項還可能有多個嗎?完全有可能。不過,還是要用更囉嗦的話把min的工作流程說一下,雖然文件中沒有說。它可能是從第一項開始迴圈,如果某項比它小,那麼當前最小的就是此項了,依次向後迴圈,直到最後。例如:[3, 4, 1, 1]

3是最小項,向後迴圈,3<4,返回true,則最小項還是3;

再迴圈,3<1,返回false,最小項就是1。

繼續迴圈,後面的1不比3小,那麼就返回前面那個1——當然,在這裡事實上兩個1是同乙個物件了。這裡僅僅是用此示例說明min函式的工作流程罷了。

理解了min的工作過程之後,再來看np.nan,它是python中表示缺失值的符號,並且,注意,它是浮點數型別。

>>

>

type

(np.nan)

<

class

'float'

>

因此,我們在資料科學中,會用它表示缺失值,這樣做不影響運算——請參考《資料準備和特徵工程》中詳細介紹。

在python規定,np.nan與數字比較,都會返回false,也就是說它既比任何數字大,又比任何數字小。

>>

>

1> np.nan

false

>>

> np.nan >

1false

>>

>

1< np.nan

false

>>

> np.nan <

1false

>>

> np.nan ==

1false

如果在min函式的引數列表中第乙個是np.nan,則它與後面的任何乙個數字比較,都會被視為最小值,因為沒有數字會「小於」它。另一方面,如果np.nan不在第乙個位置,又因為它不「小於」任何數字,那麼,就出現了本文開頭的**結果了。

與之類似,還有:

>>

>

max(

2, np.nan)

2>>

>

max(np.nan,2)

nan

結合上面的闡述,就可以解釋了。

php陣列和數字比較

乙個資料和乙個數字型別比較後不會報錯 a len time 2834 var dump a 3600 執行的結果是 true,既沒有報錯,而且還為 true,有點疑惑不解。int被強制轉換?都不是只要是與 array 比較,一定是 array 大,這是 php 內部規定的,詳細看附錄參考鏈結。字串會...

關於NaN的比較

wtf?nan nan,返回的結果是false?也許這是因為我們沒有使用嚴格等價 操作?var x math.sqrt 2 var y math.log 1 console.log x y false也不對。因為有很多方法來表示乙個非數字,所以乙個非數字不會等於另乙個為nan的非數字,它還是有一定道...

python中nan的比較

在用numpy.sum等方法計算列表時,當列表中無目標元素,得到的為空值nan。然而不同於none,它無法用 進行判斷。nan not a number 在數學表示上表示乙個無法表示的數,這裡一般還會有另乙個表述inf,inf和nan的不同在於,inf是乙個超過浮點表示範圍的浮點數 其本質仍然是乙個...