手把手教你學numpy,今後數據處理再也不慌【三】

本文始發於我的公衆號:TechFlow,原創不易,求個關注web


今天是numpy專題的第三篇,咱們來聊聊numpy當中的索引。數組

上篇的末尾其實咱們簡單地提到了索引,可是沒有過多深刻。沒有過多深刻的緣由也很簡單,由於numpy當中關於索引的用法實在是不少,並非咱們想的那樣用一個下標去獲取數據就完事了。機器學習

因此我整理了一下相關的用法,把關於索引的使用簡單分紅了幾類,咱們一個一個來看。編輯器

切片索引

切片咱們都熟悉,用冒號將兩個數隔開,表示一個區間的上界和下界。經過這種方式訪問這個區間內的全部元素。函數

這一點咱們以前介紹過,咱們簡單回顧一下。學習

這是一維數組的切片,既然一維數組能夠切片,那麼一樣高維數組也能夠切片。咱們來看一個二維的數組的切片:spa

咱們生成了一個3 x 4的二維數組,而後經過切片獲取了它的1-2數據。因爲咱們是對行切片,默認保留這一行的全部數據。3d

若是咱們並不須要全部數據,而是隻須要某一列的固定數據,能夠寫成這樣:code

這一行代碼的意思是對於行咱們獲取1-3行固定第二列的數據,咱們用表格表示的話大概是下面這個樣子:blog

咱們也能夠對兩個維度同時切片,這樣能夠獲得更加複雜的數據:

這樣切片得到的數據大概是這樣的:

也就是說在numpy的數組當中各個維度是分開的,每個維度都支持切片。咱們能夠根據咱們的須要切片或者是固定下標來獲取咱們想要的切片。

bool型索引

numpy當中還有一個很是好用的索引方式叫作bool型索引。前文介紹廣播的時候曾經介紹過,當咱們將兩個大小不一致的數組進行計算的時候,numpy會自動幫咱們將它們廣播成大小一致的狀況再進行運算。

而邏輯判斷其實也是一種運算,因此若是咱們將邏輯運算應用在numpy數組上的話一樣會獲得一個numpy數組,只不過是bool類型的numpy數組。

咱們來看一個例子:

咱們建立了一個numpy的數組,而後將它和整數4進行比較,numpy會將這個運算廣播到其中每個元素當中,而後返回獲得一個bool類型的numpy數組。

這個bool類型的數組能夠做爲索引,傳入另一個數組當中,只有bool值爲true的行纔會被保留。

咱們發現只有第4行和第6行的數據被保留了,也就是bool值爲true的行號被保留了。這是很是有用的數據獲取方式,咱們能夠直接將判斷條件放入索引當中進行數據的過濾,若是應用熟練了會很是方便。

再舉個例子,假如咱們要根據二維數據的第一列的數據進行過濾,僅僅保留第一列數據大於0.5的。若是按照傳統的方法咱們須要用一個循環去過濾,可是使用bool類型索引,咱們能夠只須要一行搞定:

arr[arr[:, 0] > 0.5]

若是有多個條件,咱們能夠用位運算的與或非進行鏈接。在Python當中位運算的與或非分別用符號&, |, ~表示。

舉個例子,好比咱們想要篩選出arr數組當中第1列大於0.5,而且第二列小於0.5的數據,咱們能夠寫成這樣:

arr[(arr[:, 0] > 0.5) & (arr[:, 1] < 0.5)]

若是咱們想求這個條件的相反條件,咱們固然能夠將判斷條件反過來寫,可是也能夠經過~符號直接取反:

arr[~((arr[:, 0] > 0.5) & (arr[:, 1] < 0.5))]

花式索引

除了bool索引以外,numpy當中還支持一種花式索引。

所謂的花式索引,意思是說支持將另一個數組當作是索引來訪問數據

舉個很簡單的例子:

從上面的例子咱們能夠看出來,咱們把idx這個數組當中的值當作了索引進行了數據的訪問。而且有重複值也沒有關係,numpy不會進行去重。

經過數組訪問數據有什麼用呢?其實很是有用,在咱們作機器學習的過程中,咱們常常涉及到一個採樣的問題。咱們每次訓練並非全量的數據,不然很是慢,有時候甚至是不可能完成的,由於數據量太大了。咱們每每是抽取出一批數據做爲一個batch來訓練的,這個在以前批量梯度降低的文章當中曾經提到過。

那麼一個batch的數據是怎麼抽取的呢?就是這樣抽取的,咱們會調用np中的一個函數叫作choice,咱們用它來從全部樣本的下標當中抽取咱們指定數量的下標。

有了下標數組以後,咱們用一下花式索引就能夠拿到對應的所有數據了,若是你看過大牛寫的深度學習的代碼,裏面幾乎都是這樣實現的。

總結

今天關於numpy當中索引的使用和介紹就到這裏,僅僅看介紹可能感覺並不明顯。但若是上手用numpy作過一次數據處理和實現過機器學習的模型,相信必定能夠感覺到它的易用性和強大的功能。索引這個功能很是經常使用,也很是重要,在後序的pandas庫當中一樣沿用了numpy中對於索引的設定和功能。所以這既是重要的基本功,也是爲後面的學習打基礎。

若是喜歡本文,能夠的話,請點個關注,給我一點鼓勵,也方便獲取更多文章。

相關文章
相關標籤/搜索