以前總認(rèn)為Numpy是渣渣,直到深入接觸以后才知道功能這么強(qiáng)大闪湾〕甯剩堪比Matlab啊。果然是人生苦短途样,我用Python江醇。所以本文作為一個(gè)記錄&筆記,文章內(nèi)容大多數(shù)取自網(wǎng)絡(luò)以&官網(wǎng)快速入門等(文末有參考鏈接何暇,如有侵權(quán)請(qǐng)聯(lián)系本人改正)陶夜,希望可以幫助大家快速入門Numpy。如果你有Matlab基礎(chǔ)裆站,那么你能很快看懂本文B墒省!6舨濉(本文長(zhǎng)期更新!>佬蕖8斐啊)
一個(gè)栗子
創(chuàng)建矩陣
對(duì)于Python中的numpy模塊扣草,一般用其提供的ndarray對(duì)象了牛。 創(chuàng)建一個(gè)ndarray對(duì)象很簡(jiǎn)單,只要將一個(gè)list作為參數(shù)即可辰妙。 例如:
矩陣行數(shù)列數(shù)
矩陣按行列選取
矩陣的截取和list相同密浑,可以通過[](方括號(hào))來截取
矩陣按條件截取
按條件截取應(yīng)用較多的是對(duì)矩陣中滿足一定條件的元素變成特定的值尔破。 例如將矩陣中大于6的元素變成0
Stacking together different arrays
矩陣的合并可以通過numpy中的hstack方法和vstack方法實(shí)現(xiàn):
- 矩陣的合并也可以通過concatenatef方法。
np.concatenate( (a1,a2), axis=0 ) 等價(jià)于 np.vstack( (a1,a2) )
np.concatenate( (a1,a2), axis=1 ) 等價(jià)于 np.hstack( (a1,a2) )
通過函數(shù)創(chuàng)建矩陣
arange
linspace/ logspace
ones、zeros絮姆、eye醉冤、empty
ones創(chuàng)建全1矩陣 ,zeros創(chuàng)建全0矩陣 篙悯,eye創(chuàng)建單位矩陣 蚁阳,empty創(chuàng)建空矩陣(實(shí)際有值)
fromstring
fromstring()方法可以將字符串轉(zhuǎn)化成ndarray對(duì)象韵吨,需要將字符串?dāng)?shù)字化時(shí)這個(gè)方法比較有用,可以獲得字符串的ascii碼序列移宅。
random
fromfunction
fromfunction()方法可以根據(jù)矩陣的行號(hào)列號(hào)生成矩陣的元素葛假。 例如創(chuàng)建一個(gè)矩陣堪藐,矩陣中的每個(gè)元素都為行號(hào)和列號(hào)的和。
矩陣的運(yùn)算
常用矩陣運(yùn)算符
Numpy中的ndarray對(duì)象重載了許多運(yùn)算符倔喂,使用這些運(yùn)算符可以完成矩陣間對(duì)應(yīng)元素的運(yùn)算。
運(yùn)算符說明+矩陣對(duì)應(yīng)元素相加-矩陣對(duì)應(yīng)元素相減矩陣對(duì)應(yīng)元素相乘/矩陣對(duì)應(yīng)元素相除靖苇,如果都是整數(shù)則取商%矩陣對(duì)應(yīng)元素相除后取余數(shù)矩陣每個(gè)元素都取n次方席噩,如*2:每個(gè)元素都取平方
常用矩陣函數(shù)
同樣地贤壁,numpy中也定義了許多函數(shù)悼枢,使用這些函數(shù)可以將函數(shù)作用于矩陣中的每個(gè)元素。 表格中默認(rèn)導(dǎo)入了numpy模塊脾拆,即 import numpy as np 馒索。a為ndarray對(duì)象。
常用矩陣函數(shù)說明np.sin(a)對(duì)矩陣a中每個(gè)元素取正弦,sin(x)np.cos(a)對(duì)矩陣a中每個(gè)元素取余弦,cos(x)np.tan(a)對(duì)矩陣a中每個(gè)元素取正切,tan(x)np.arcsin(a)對(duì)矩陣a中每個(gè)元素取反正弦,arcsin(x)np.arccos(a)對(duì)矩陣a中每個(gè)元素取反余弦,arccos(x)np.arctan(a)對(duì)矩陣a中每個(gè)元素取反正切,arctan(x)np.exp(a)對(duì)矩陣a中每個(gè)元素取指數(shù)函數(shù),exnp.sqrt(a)對(duì)矩陣a中每個(gè)元素開根號(hào)
- 當(dāng)矩陣中的元素不在函數(shù)定義域范圍內(nèi)名船,會(huì)產(chǎn)生RuntimeWarning绰上,結(jié)果為nan(not a number)
矩陣乘法(點(diǎn)乘)
矩陣乘法必須滿足矩陣乘法的條件,即第一個(gè)矩陣的列數(shù)等于第二個(gè)矩陣的行數(shù)渠驼。 矩陣乘法的函數(shù)為 dot 蜈块。
矩陣的轉(zhuǎn)置 a.T
矩陣的轉(zhuǎn)置還有更簡(jiǎn)單的方法疯趟,就是a.T拘哨。
矩陣的逆
設(shè)A是數(shù)域上的一個(gè)n階方陣信峻,若在相同數(shù)域上存在另一個(gè)n階矩陣B倦青,使得: AB=BA=E。 則我們稱B是A的逆矩陣盹舞,而A則被稱為可逆矩陣产镐。
求矩陣的逆需要先導(dǎo)入numpy.linalg,用linalg的inv函數(shù)來求逆踢步。矩陣求逆的條件是矩陣應(yīng)該是方陣癣亚。
矩陣信息獲然裼 (如均值等)
最值
獲得矩陣中元素最大最小值的函數(shù)分別是max和min述雾,可以獲得整個(gè)矩陣、行或列的最大最小值兼丰。
平均值
獲得矩陣中元素的平均值可以通過函數(shù)mean()。同樣地鳍征,可以獲得整個(gè)矩陣黍翎、行或列的平均值。
方差
方差的函數(shù)為var(),方差函數(shù)var()相當(dāng)于函數(shù)mean(abs(x - x.mean())**2),其中x為矩陣匣掸。
標(biāo)準(zhǔn)差
標(biāo)準(zhǔn)差的函數(shù)為std()氮双。 std()相當(dāng)于sqrt(mean(abs(x - x.mean())**2))碰酝,或相當(dāng)于sqrt(x.var())。
中值
中值指的是將序列按大小順序排列后送爸,排在中間的那個(gè)值,如果有偶數(shù)個(gè)數(shù)造挽,則是排在中間兩個(gè)數(shù)的平均值。中值的函數(shù)是median()弄痹,調(diào)用方法為numpy.median(x,[axis])饭入,axis可指定軸方向,默認(rèn)axis=None肛真,對(duì)所有數(shù)取中值谐丢。
求和
矩陣求和的函數(shù)是sum(),可以對(duì)行乾忱,列讥珍,或整個(gè)矩陣求和
累積和
某位置累積和指的是該位置之前(包括該位置)所有元素的和窄瘟。例如序列[1,2,3,4,5]衷佃,其累計(jì)和為[1,3,6,10,15],即第一個(gè)元素為1蹄葱,第二個(gè)元素為1+2=3氏义,……,第五個(gè)元素為1+2+3+4+5=15图云。矩陣求累積和的函數(shù)是cumsum()惯悠,可以對(duì)行,列竣况,或整個(gè)矩陣求累積和克婶。
極差
百分位數(shù)
序號(hào)參數(shù)及描述1.a 輸入數(shù)組2.q 要計(jì)算的百分位數(shù),在 0 ~ 100 之間3.axis 沿著它計(jì)算百分位數(shù)的軸
加權(quán)平均值
Shape Manipulation
Changing the shape of an array
數(shù)組的形狀可以用以下方式改變。Note that the following three commands all return a modified array, but do not change the original array:
The reshape function returns its argument with a modified shape, whereas the ndarray.resize method modifies the array itself:
If a dimension is given as -1 in a reshaping operation, the other dimensions are automatically calculated:
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:
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就相當(dāng)于改變a,或者相反勋陪。
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.
Slicing an array returns a view of it:
Deep Copy
The copy method makes a complete copy of the array and its data.
曼德勃羅