本書適合即將或者已經從事資料科學、機器學習、人工智慧等方向工作的朋友。書中詳細梳理了各種獲取資料、資料清洗、特徵工程等方向的技術和方法。
先看下面的**,有何感悟?
>>
>
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是乙個超過浮點表示範圍的浮點數 其本質仍然是乙個...