1. 程式人生 > >Python精講Numpy基礎,大牛筆記詳細解釋

Python精講Numpy基礎,大牛筆記詳細解釋

以前總認為Numpy是渣渣,直到深入接觸以後才知道功能這麼強大。堪比Matlab啊。果然是人生苦短,我用Python。所以本文作為一個記錄&筆記,文章內容大多數取自網路以&官網快速入門等(文末有參考連結,如有侵權請聯絡本人改正),希望可以幫助大家快速入門Numpy。如果你有Matlab基礎,那麼你能很快看懂本文!!!(本文長期更新!!!)

 

一個栗子

Python精講Numpy基礎,大牛筆記詳細解釋

建立矩陣

對於Python中的numpy模組,一般用其提供的ndarray物件。 建立一個ndarray物件很簡單,只要將一個list作為引數即可。 例如:

Python精講Numpy基礎,大牛筆記詳細解釋

矩陣行數列數

Python精講Numpy基礎,大牛筆記詳細解釋

矩陣按行列選取

矩陣的擷取和list相同,可以通過[](方括號)來擷取

Python精講Numpy基礎,大牛筆記詳細解釋

矩陣按條件擷取

Python精講Numpy基礎,大牛筆記詳細解釋

按條件擷取應用較多的是對矩陣中滿足一定條件的元素變成特定的值。 例如將矩陣中大於6的元素變成0

Python精講Numpy基礎,大牛筆記詳細解釋

Stacking together different arrays

矩陣的合併可以通過numpy中的hstack方法和vstack方法實現:

Python精講Numpy基礎,大牛筆記詳細解釋

  • 矩陣的合併也可以通過concatenatef方法。

  1. np.concatenate( (a1,a2), axis=0 ) 等價於 np.vstack( (a1,a2) )

  2. np.concatenate( (a1,a2), axis=1 ) 等價於 np.hstack( (a1,a2) )

通過函式建立矩陣

 

arange

Python精講Numpy基礎,大牛筆記詳細解釋

linspace/ logspace

Python精講Numpy基礎,大牛筆記詳細解釋

ones、zeros、eye、empty

ones建立全1矩陣 ,zeros建立全0矩陣 ,eye建立單位矩陣 ,empty建立空矩陣(實際有值)

Python精講Numpy基礎,大牛筆記詳細解釋

Python精講Numpy基礎,大牛筆記詳細解釋

fromstring

fromstring()方法可以將字串轉化成ndarray物件,需要將字串數字化時這個方法比較有用,可以獲得字串的ascii碼序列。

Python精講Numpy基礎,大牛筆記詳細解釋

random

Python精講Numpy基礎,大牛筆記詳細解釋

fromfunction

fromfunction()方法可以根據矩陣的行號列號生成矩陣的元素。 例如建立一個矩陣,矩陣中的每個元素都為行號和列號的和。

Python精講Numpy基礎,大牛筆記詳細解釋

矩陣的運算

 

常用矩陣運算子

Numpy中的ndarray物件過載了許多運算子,使用這些運算子可以完成矩陣間對應元素的運算。

運算子說明+矩陣對應元素相加-矩陣對應元素相減*矩陣對應元素相乘/矩陣對應元素相除,如果都是整數則取商%矩陣對應元素相除後取餘數**矩陣每個元素都取n次方,如**2:每個元素都取平方

Python精講Numpy基礎,大牛筆記詳細解釋

常用矩陣函式

同樣地,numpy中也定義了許多函式,使用這些函式可以將函式作用於矩陣中的每個元素。 表格中預設匯入了numpy模組,即 import numpy as np 。a為ndarray物件。

常用矩陣函式說明np.sin(a)對矩陣a中每個元素取正弦,sin(x)np.cos(a)對矩陣a中每個元素取餘弦,cos(x)np.tan(a)對矩陣a中每個元素取正切,tan(x)np.arcsin(a)對矩陣a中每個元素取反正弦,arcsin(x)np.arccos(a)對矩陣a中每個元素取反餘弦,arccos(x)np.arctan(a)對矩陣a中每個元素取反正切,arctan(x)np.exp(a)對矩陣a中每個元素取指數函式,exnp.sqrt(a)對矩陣a中每個元素開根號

  • 當矩陣中的元素不在函式定義域範圍內,會產生RuntimeWarning,結果為nan(not a number)

矩陣乘法(點乘)

矩陣乘法必須滿足矩陣乘法的條件,即第一個矩陣的列數等於第二個矩陣的行數。 矩陣乘法的函式為 dot 。

Python精講Numpy基礎,大牛筆記詳細解釋

矩陣的轉置 a.T

Python精講Numpy基礎,大牛筆記詳細解釋

矩陣的轉置還有更簡單的方法,就是a.T。

Python精講Numpy基礎,大牛筆記詳細解釋

矩陣的逆

設A是數域上的一個n階方陣,若在相同數域上存在另一個n階矩陣B,使得: AB=BA=E。 則我們稱B是A的逆矩陣,而A則被稱為可逆矩陣。

求矩陣的逆需要先匯入numpy.linalg,用linalg的inv函式來求逆。矩陣求逆的條件是矩陣應該是方陣。

Python精講Numpy基礎,大牛筆記詳細解釋

矩陣資訊獲取(如均值等)

最值

獲得矩陣中元素最大最小值的函式分別是max和min,可以獲得整個矩陣、行或列的最大最小值。

Python精講Numpy基礎,大牛筆記詳細解釋

平均值

獲得矩陣中元素的平均值可以通過函式mean()。同樣地,可以獲得整個矩陣、行或列的平均值。

Python精講Numpy基礎,大牛筆記詳細解釋

方差

方差的函式為var(),方差函式var()相當於函式mean(abs(x - x.mean())**2),其中x為矩陣。

Python精講Numpy基礎,大牛筆記詳細解釋

標準差

標準差的函式為std()。 std()相當於sqrt(mean(abs(x - x.mean())**2)),或相當於sqrt(x.var())。

Python精講Numpy基礎,大牛筆記詳細解釋

中值

中值指的是將序列按大小順序排列後,排在中間的那個值,如果有偶數個數,則是排在中間兩個數的平均值。中值的函式是median(),呼叫方法為numpy.median(x,[axis]),axis可指定軸方向,預設axis=None,對所有數取中值。

Python精講Numpy基礎,大牛筆記詳細解釋

求和

矩陣求和的函式是sum(),可以對行,列,或整個矩陣求和

Python精講Numpy基礎,大牛筆記詳細解釋

累積和

某位置累積和指的是該位置之前(包括該位置)所有元素的和。例如序列[1,2,3,4,5],其累計和為[1,3,6,10,15],即第一個元素為1,第二個元素為1+2=3,……,第五個元素為1+2+3+4+5=15。矩陣求累積和的函式是cumsum(),可以對行,列,或整個矩陣求累積和。

Python精講Numpy基礎,大牛筆記詳細解釋

極差

Python精講Numpy基礎,大牛筆記詳細解釋

百分位數

Python精講Numpy基礎,大牛筆記詳細解釋

序號引數及描述1.a 輸入陣列2.q 要計算的百分位數,在 0 ~ 100 之間3.axis 沿著它計算百分位數的軸

加權平均值

Python精講Numpy基礎,大牛筆記詳細解釋

Shape Manipulation

Changing the shape of an array

Python精講Numpy基礎,大牛筆記詳細解釋

陣列的形狀可以用以下方式改變。Note that the following three commands all return a modified array, but do not change the original array:

Python精講Numpy基礎,大牛筆記詳細解釋

The reshape function returns its argument with a modified shape, whereas the ndarray.resize method modifies the array itself:

Python精講Numpy基礎,大牛筆記詳細解釋

If a dimension is given as -1 in a reshaping operation, the other dimensions are automatically calculated:

Python精講Numpy基礎,大牛筆記詳細解釋

Splitting one array into several smaller ones

Using hsplit, you can split an array along its horizontal axis, either by specifying the number of equally shaped arrays to return, or by specifying the columns after which the division should occur:

Python精講Numpy基礎,大牛筆記詳細解釋

Copies and Views

When operating and manipulating arrays, their data is sometimes copied into a new array and sometimes not. This is often a source of confusion for beginners. There are three cases:

No Copy At All

a = b,改變b就相當於改變a,或者相反。

Python精講Numpy基礎,大牛筆記詳細解釋

View or Shallow Copy

Different array objects can share the same data. The view method creates a new array object that looks at the same data.

Python精講Numpy基礎,大牛筆記詳細解釋

Slicing an array returns a view of it:

Python精講Numpy基礎,大牛筆記詳細解釋

Python精講Numpy基礎,大牛筆記詳細解釋

Deep Copy

The copy method makes a complete copy of the array and its data.

Python精講Numpy基礎,大牛筆記詳細解釋

曼德勃羅

Python精講Numpy基礎,大牛筆記詳細解釋

Python精講Numpy基礎,大牛筆記詳細解釋