我們一起來學習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學習教程)一遍過
建立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學習教程會繼續為大家更新!大家哪裡有不清楚的地方可以留言或者私信!