天天看點

不可不學Numpy,帶你快速撸Numpy代碼,(Python學習教程)一遍過

我們一起來學習Python資料分析的工具學習階段,包括Numpy,Pandas以及Matplotlib,它們是python進行科學計算,資料處理以及可視化的重要庫,在以後的資料分析路上會經常用到,是以一定要掌握,并且還要熟練!今天的Python學習教程先從Numpy開始!

本文目标

初識Numpy

  • ndarray的增删改查
  • ndarray切片與篩選
  • ndarray運算與排序

NumPy 簡介

NumPy 是 Numerical Python 的簡稱,它是 Python 中的科學計算基本軟體包。NumPy 為 Python 提供了大量數學庫,使我們能夠高效地進行數字計算。更多可點選Numpy官網檢視。

其實在前面的Python學習教程中就有跟大家講過Numpy!

關于Numpy需要知道的幾點:

  • NumPy 數組在建立時有固定的大小,不同于Python清單(可以動态增長)。更改ndarray的大小将建立一個新的數組并删除原始資料。
  • NumPy 數組中的元素都需要具有相同的資料類型,是以在存儲器中将具有相同的大小。數組的元素如果也是數組(可以是 Python 的原生 array,也可以是 ndarray)的情況下,則構成了多元數組。
  • NumPy 數組便于對大量資料進行進階數學和其他類型的操作。通常,這樣的操作比使用Python的内置序列可能更有效和更少的代碼執行。

是以,Numpy 的核心是ndarray對象,這個對象封裝了同質資料類型的n維數組。起名ndarray 的原因就是因為是 n-dimension-array 的簡寫。接下來本節所有的課程都是圍繞着ndarray來講的,理論知識較少,代碼量較多,是以大家在學習的時候,多自己動動手,嘗試自己去運作一下代碼。

不可不學Numpy,帶你快速撸Numpy代碼,(Python學習教程)一遍過

不可不學Numpy,帶你快速撸Numpy代碼,(Python學習教程)一遍過

建立ndarray

由python list建立

由numpy内置函數建立

通路、删除、增加ndarray中的元素

這裡主要是提供了一些通路、更改或增加ndarray中某一進制素的基礎方法。

通路&更改

類似于通路python list中元素的方式,按照元素的index進行通路或更改。

删除

可使用np.delete(ndarray, elements, axis)函數進行删除操作。

這裡需要注意的是axis這個參數,在2維資料中,axis = 0表示選擇行,axis = 1表示選擇列,但不能機械的認為0就表示行,1就表示列,注意前提2維資料中。

在三維資料中,axis = 0表示組,1表示行,2表示列。這是為什麼呢?提示一下,三位數組的shape中組、行和列是怎樣排序的?

是以,axis的指派一定要考慮數組的shape。

再有一點需要注意的是,如果你想讓原資料保留删除後的結果,需要重新指派一下才可以。

增加

往ndarray中增加元素的辦法跟python list也很類似,常用的有兩種:

一種是添加(append),就是将新增的元素添加到ndarray的尾部

文法為:np.append(ndarray, elements, axis)

參數和delete函數一緻,用法也一緻,這裡不再贅述

一種是插入(insert),可以讓新增元素插入到指定位置

文法為:np.insert(ndarray, index, elements, axis)

參數中就多了一個index,訓示的是插入新元素的位置。

這裡值得注意的是,不論是append還是insert,在往多元數組中插入元素時,一定要注意對應axis上的shape要一緻。再一個就是,和delete一樣,如果你想要更改原資料,需要重新指派。

切片和篩選

ndarray切片

前面學了選擇ndarray中的某個元素的方法,這裡我們學習擷取ndarray子集的方法——切片。

對于切片大家并不陌生,在list裡面我們也接觸過切片,一維的ndarray切片與list無異。需要注意的是,就是了解2維及多元ndarray切片。

2維矩陣切片

這裡可以看出,我們篩選了a矩陣中前三列的所有行,這是如何實作的呢?

切片的第一個元素:表示的是選擇所有行,第二個元素:-1表示的是從第0列至最後一列(不包含),是以結果如上所示。

再看一個例子:

篩選的是第2-3行的所有列。

一個常用的切片

以列的形式擷取最後一列資料:

以一維數組的形式擷取最後一列資料:

上面兩種方法經常會用到,前者的shape為(4,1),後者為(4,)。

ndarray篩選

選擇ndarray的對角線

所用函數為np.diag(ndarray, k=N),其中參數k的取值決定了按照哪一條對角線選擇資料。

預設k = 0,取主對角線;

k = 1時,取主對角線上面1行的元素;

k = -1時,取主對角線下面1行的元素。

思考:這個函數隻能選擇主對角線上的元素,那如果想要擷取副對角線上的元素呢?

嘗試自己搜尋一下關鍵詞numpy opposite diagonal尋找答案。

不建議你直接點getting the opposite diagonal of a numpy array。

提取ndarray中的唯一值

所用函數為np.unique(ndarray),注意unique也可以添加參數axis來控制評判唯一值的軸方向,不好了解可以看示例:

通過布爾運算篩選

這裡在中括号中添加篩選條件,當該條件的結果為True時(即滿足條件時),傳回該值。

這裡需要注意的是,當輸入多個篩選條件時,&表示與,|表示或,~表示非。

運算與排序

ndarray運算

集合運算

算術運算

我們可以通過+、-、*、/或np.add、np.substract、np.multiply 、np.divide來對兩個矩陣進行元素級的加減乘除運算,因為是元素級的運算,是以兩個矩陣的shape必須要一緻或者是可廣播(Broadcast)。

這裡所謂的可廣播,就是指雖然A和B兩個矩陣的shape不一緻,但是A可以拆分為整數個與B具有相同shape的矩陣,這樣在進行元素級别的運算時,就會先将A進行拆分,然後與B進行運算,結果再組合一起就可以。這裡的A就是“可廣播”矩陣。

上面涉及到的乘法是元素對應相乘,也就是點乘,那矩陣的叉乘呢?可以了解下numpy.matmul函數。

ndarray排序

我們使用np.sort()和ndarray.sort()來對ndarray進行排序。

相同的是:

二者都可以使用參數axis來決定依照哪個軸進行排序,axis = 0時按照列排序,axis = 1時按照行排序;

不同的是:

np.sort()不會更改原數組;ndarray.sort()會更改原數組。

更多的Python學習教程會繼續為大家更新!大家哪裡有不清楚的地方可以留言或者私信!