手把手教你學Numpy,這些api不容錯過

2022-01-11 00:01:40 字數 2666 閱讀 1967

在日常的工作當中,我們經常需要通過一系列值來了解特徵的分布情況。比較常用的有均值、方差、標準差、百分位數等等。前面幾個都比較好理解,簡單介紹一下這個百分位數,它是指將元素從小到大排列之後,排在第x%位上的值。我們一般常用的是25%,50%和75%這三個值,通過這幾個值,我們很容易對於整個特徵的分布有乙個大概的了解。

前面三個指標:均值、方差、標準差都很好理解,我們直接看**就行。

median和percentile分別是求中位數與百分位數,它們不是numpy當中array的函式,而是numpy的庫函式。所以我們需要把array當做引數傳入。percentile這個函式還需要額外傳入乙個int,表示我們想要得到的百分位數,比如我們想要知道50%位置上的數,則輸入50。

除了這些之外,我們還會經常用到sum,min,max,argmin,argmax這幾個函式。sum,min,max很好理解,argmin和argmax的意思是獲取最小值和最大值的索引

這裡返回的索引有點奇怪,和我們想的不同,居然不是乙個二維的索引而是一維的。實際上numpy的內部會將高維陣列轉化成一維之後再進行這個操作,我們可以reshape一下陣列來進行驗證:

這些只是api的基本用法,numpy當中支援的功能不僅如此。我們觀察一下這些函式會發現,它們的作用域都是一組資料,返回的是一組資料通過某種運算得到的結果。舉個例子,比如sum,是對一組資料的**。std計算的是一組資料的標準差,這樣的函式我們稱為聚合函式

numpy當中的聚合函式在使用的時候允許傳入軸這個引數,限制它聚合的範圍。我們通過axis這個引數來控制,axis=0表示對列聚合,axis=1表示對行聚合。我們死記的話總是會搞混淆,實際上axis傳入的也是乙個索引,表示第幾個索引的索引。我們的二維陣列的shape是[行, 列],其中的第0位是行,第1位是列,可以認為axis是這個索引向量的乙個索引。

我們可以來驗證一下:

可以看到axis=0和axis=1返回的向量的長度是不同的,因為以列為單位聚合只有4列,所以得到的是乙個1 x 4的結果。而以行為單位聚合有5行,所以是乙個1 x 5的向量。

除了上面介紹的這些函式之外,還有cumsum和cumprod這兩個api。其中cumsum是用來對陣列進行累加運算,而cumprod是進行的累乘運算。只是在實際工作當中,很少用到,我就不展開細講了,感興趣的同學可以查閱api文件了解一下。

我們之前在python的入門文章當中曾經提到過,在python中true和false完全等價於1和0。那麼在上面這些計算的方法當中,如果存在bool型別的值,都會被轉化成1和0進行的計算。

我們靈活運用這點會非常方便,舉個例子,假設我們要統計一批資料當中有多少條大於0。我們利用sum會非常方便:

bool陣列除了可以應用上面這些基本的運算api之外,還有專門的兩個api,也非常方便。乙個叫做any,乙個叫做all。any的意思是只要陣列當中有乙個是true,那麼結果就是true。可以認為是is there any true in the array的意思,同樣,all就是說只有陣列當中都是true,結果才是true。對應的英文自然是are the values in the array all true。

這個只要理解了,基本上很難忘記。

python原生的陣列可以排序,numpy當中的陣列自然也不例外。我們只需要呼叫sort方法就可以排序了,不過有一點需要注意,numpy中的sort預設是乙個inplace的方法。也就是說我們呼叫完了sort之後,原陣列的值就自動變化了。

如果寫成了arr = arr.sort()會得到乙個none,千萬要注意。

同樣,我們也可以通過傳入軸這個引數來控制它的排序範圍,可以做到對每一列排序或者是對每一行排序,我們來看個例子:

這個是對列排序,如果傳入0則是對行排序,這個應該不難理解。

numpy當中還提供了一些面向集合的api,相比於針對各種計算的api,這些方法用到的情況比較少。常用的一般只有unique和in1d

unique顧名思義就是去重的api,可以返回一維array去重且排序之後的結果。我們來看個例子:

它等價於:

set(sorted(arr))

in1d是用來判斷集合內的元素是否在另外乙個集合當中,函式會返回乙個bool型的陣列。我們也可以來看個例子:

除了這兩個api之外,還有像是計算並集並排序的union1d,計算差集的setdiff1d,計算兩個集合交集並排序的intersect1d等等。這些api的使用頻率實在是不高,所以就不贅述了。用到的時候再去查閱即可。

今天我們聊了numpy當中很多常用的計算api,這些api在我們日常做機器學習和資料分析的時候經常用到。比如分析特徵分布的時候,如果資料量很大是不適合作圖或者是視覺化觀察的。這個時候可以從中位數、均值、方差和幾個關鍵百分位點入手,再比如在我們使用softmax多分類的時候,也會用到argmax來獲取分類的結果。

總之,今天的內容非常關鍵,在numpy整體的應用當中佔比很高,希望大家都能熟悉它們的基本用法。這樣即使以後忘記,用到的時候再查閱也還來得及。

本文使用 mdnice 排版

手把手教你學Python之元組

目錄 元組的建立 元組和列表的聯絡與區別 生成器推導式 元組是python中內建的有序不可變序列,元組的所有元素放在一對圓括號 中,並使用逗號隔開,元組中元素的型別可以相同也可以不同。建立元組的兩種方式 注意 當元組中只包含乙個元素時,元素後面的逗號不能省略,否則系統會將其看做是其他資料型別。例如包...

手把手教你OA選型

oa選型永遠是oa行業的重要焦點,在選型問題上困擾了很多客戶,雲全oa從這幾個方面教你如何選型。了解研發技術 技術是硬道理。只有過關的技術才會研發出過硬的產品。如果技術不過關,後期將會帶來一系列的問題。同時需要考慮技術的先進性。在現如今社會發展日新月異,今天還遙遙領先的管理模式也許明天就會被淘汰。所...

手把手教你玩轉git

使用以上來寫git命令。mkdir xx 建立乙個空目錄 xx指目錄名 pwd 顯示當前目錄的路徑。git init 把當前的目錄變成可以管理的git倉庫,生成隱藏.git檔案。git add xx 把xx檔案新增到暫存區去。git commit m xx 提交檔案 m 後面的是注釋。git sta...