Python程序設(shè)計-第14章-高級科學(xué)計算庫課件_第1頁
Python程序設(shè)計-第14章-高級科學(xué)計算庫課件_第2頁
Python程序設(shè)計-第14章-高級科學(xué)計算庫課件_第3頁
Python程序設(shè)計-第14章-高級科學(xué)計算庫課件_第4頁
Python程序設(shè)計-第14章-高級科學(xué)計算庫課件_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

程序設(shè)計第14章高級科學(xué)計算庫SciPy第14章高級科學(xué)計算庫SciPy一、初識SciPy二、數(shù)值積分模塊(integrate)三、插值模塊(interpolate)四、概率統(tǒng)計模塊(stats)五、優(yōu)化模塊(optimize)六、其它常用模塊本章目錄第14章高級科學(xué)計算庫SciPy本章學(xué)習(xí)目標(biāo)了解SciPy庫的三種安裝方式掌握數(shù)值積分模塊的使用掌握插值模塊的使用掌握概率統(tǒng)計模塊的使用掌握優(yōu)化模塊的使用掌握其他常用模塊的使用思維導(dǎo)圖第14章高級科學(xué)計算庫SciPy5《Python程序設(shè)計》第14章高級科學(xué)計算庫SciPy14.1初識SciPy14.1.1SciPy特點SciPy(讀作“SighPie”)是一個免費的開源Python庫,其構(gòu)建于NumPy庫之上,并在NunPy的基礎(chǔ)上增加了數(shù)學(xué)、科學(xué)以及工程等眾多領(lǐng)域計算中常用的方法模塊,例如線性代數(shù)、常微分方程求解、信號處理、圖像處理、稀疏矩陣等。MATLAB和Scilab功能都比較強大,但兩者都屬于商業(yè)軟件,收費昂貴并且不允許修改源碼。與MATLAB和Scilab相比,SciPy具有免費開源、功能強大、簡單易學(xué)易用等優(yōu)點。此外,SciPy基于Python編程語言實現(xiàn),代碼可讀性、可維護(hù)性也比較好。定義:優(yōu)點:6《Python程序設(shè)計》第14章高級科學(xué)計算庫SciPySciPy與其他計算庫的對比:表14-1SciPy和MATLAB、Scilab優(yōu)缺點對比

SciPyMATLAB、Scilab優(yōu)點開源免費,代碼可讀性強、可維護(hù)性好,易學(xué)易用功能更加強大,專業(yè)性強缺點代碼運行效率不如MATLAB好,功能不如MATLAB豐富商業(yè)化,價格昂貴,源碼不允許修改14.1.1SciPy特點7《Python程序設(shè)計》第14章高級科學(xué)計算庫SciPy14.1.2SciPy安裝方法一:使用Python軟件自帶的包管理工具pip進(jìn)行安裝。命令:pipinstallscipy8《Python程序設(shè)計》第14章高級科學(xué)計算庫SciPy方法二:利用Annoconda虛擬環(huán)境進(jìn)行SciPy庫的安裝。命令:condainstallscipy14.1.2SciPy安裝9《Python程序設(shè)計》第14章高級科學(xué)計算庫SciPy14.1.3SciPy簡單實例

求解矩陣行列式計算矩陣的行列式可以直接使用SciPy中l(wèi)inalg模塊的det方法,該方法將矩陣作為輸入并返回一個標(biāo)量值。10《Python程序設(shè)計》第14章高級科學(xué)計算庫SciPy14.1.4SciPy使用基礎(chǔ)模塊名功能說明cluster層次聚類模塊,包含矢量量化,k-means算法等constants數(shù)學(xué)科學(xué)常量模塊,里面提供了大量數(shù)學(xué)科學(xué)常量fftpack快速傅里葉變換模塊,可以進(jìn)行FFT/DCT/DST等操作integrate積分模塊,求多重積分、高斯積分、解常微分方程等interpolate插值模塊,提供各種一維、二維、N維插值算法,包括B樣條插值、徑向基函數(shù)插值等ioIO模塊,提供操作多種文件的接口,如matlab文件、IDL文件、Wav(音頻)文件、ARFF文件等。misc圖像操作模塊,提供圖像打開保存、翻轉(zhuǎn),旋轉(zhuǎn),剪裁等操作linalg線性代數(shù)模塊,提供各種線性代數(shù)中的常規(guī)操作SciPy主要模塊11《Python程序設(shè)計》第14章高級科學(xué)計算庫SciPy14.1.4SciPy使用基礎(chǔ)模塊名功能說明ndimage多維圖像處理模塊optimize優(yōu)化模塊,包含各種優(yōu)化算法。用來求有/無約束的多元標(biāo)量函數(shù)最小值算法、最小二乘法,求有/無約束的單變量函數(shù)最小值算法,還有解各種復(fù)雜方程的算法signal信號處理模塊,包括樣條插值,卷積,差分等濾波方法,F(xiàn)IR/IIR濾波,中值、排序、維納、希爾伯特等濾波器,各種譜分析算法等sparse稀疏矩陣模塊,提供了大型稀疏矩陣計算中的各種算法spatial空間結(jié)構(gòu)模塊,提供了一些空間相關(guān)的數(shù)據(jù)結(jié)構(gòu)和算法,如Delaunay三角剖分,共面點,凸包,維諾圖,KD樹等special特殊函數(shù)模塊,包含有各種特殊的數(shù)學(xué)函數(shù),可以直接調(diào)用,如立方根方法、指數(shù)方法、Gamma方法等stats統(tǒng)計模塊,提供了一些統(tǒng)計學(xué)上常用的方法SciPy主要模塊12《Python程序設(shè)計》第14章高級科學(xué)計算庫SciPy14.2數(shù)值積分模塊(integrate)

14.2.1常用積分方法egrate模塊主要提供了數(shù)值積分和常微分方程組求解算法數(shù)值積分包含一重積分、多重積分及固定采樣積分求解算法;常微分方程求解算法提供了基于odeint函數(shù)和基于ode類的方法。13《Python程序設(shè)計》第14章高級科學(xué)計算庫SciPyegrate模塊主要提供針對兩類積分的求解方法給定函數(shù)對象求積分對固定采樣樣本數(shù)值求積分。14.2.1常用積分方法傳統(tǒng)手工計算積分問題是一項非常繁瑣的過程,工程應(yīng)用中通常都會利用SciPy等類似的數(shù)據(jù)分析工具。SciPy庫已經(jīng)封裝好大量計算各種積分的方法,可以很大程度上提升工作效率。14《Python程序設(shè)計》第14章高級科學(xué)計算庫SciPyegrate模塊提供了許多求解積分的方法,下表為常用方法。函數(shù)名功能說明quad一重積分求解方法dblquad二重積分求解方法tplquad三重積分求解方法nquadn重積分求解方法?xed_quad對func(x)做N維高斯積分quadrature求給定容限范圍內(nèi)的高斯積分romberg對函數(shù)做Romberg積分表14-3常用積分函數(shù)1.給定對象函數(shù)求積分方法14.2.1常用積分方法從表中可以看到一重積分方法quad和二重積分方法dblquad可以滿足數(shù)值積分的大部分需求。15《Python程序設(shè)計》第14章高級科學(xué)計算庫SciPy一重積分方法quad參數(shù)名描述func被積函數(shù)a積分下限b積分上限argsfunc函數(shù)需要的額外參數(shù),例如quad(func,a,b,args=(1,))。args參數(shù)必須以元組的形式傳入定義:quad(func,a,b,args=(),...)1.給定對象函數(shù)求積分方法16《Python程序設(shè)計》第14章高級科學(xué)計算庫SciPy二重積分dblquad定義:dblquad(func,a,b,gfun,hfun,args=(),...)1.給定對象函數(shù)求積分方法參數(shù)名描述func被積函數(shù)a積分下限b積分上限gfun積分區(qū)間下限hfun積分區(qū)間上限argsfunc函數(shù)需要的額外參數(shù),例如quad(func,a,b,args=(1,))。args參數(shù)必須以元組的形式傳入17《Python程序設(shè)計》第14章高級科學(xué)計算庫SciPyegrate模塊中提供的采樣樣本求積分的常用方法,如下表方法名描述trapz采用梯形法則求積分cumtrapz采用梯形法則求累計積分simps采用辛氏法則從樣本中計算積分romb采用Romberg積分法從(2**k+1)均勻間隔樣本中計算積分2.固定采樣樣本求積分采樣(sampling)是指把時間域或空間域的連續(xù)量轉(zhuǎn)化成離散量的過程。在數(shù)學(xué)中函數(shù)的積分值就是函數(shù)與坐標(biāo)軸圍成的圖形的面積。因此把連續(xù)量轉(zhuǎn)換成離散量后,就可以采用分割法求每部分面積然后求其累計值,進(jìn)而估計出原函數(shù)的積分值。18《Python程序設(shè)計》第14章高級科學(xué)計算庫SciPytrapz方法是Scipy中利用分割法求面積的方法。定義:trapz(y,x=None,dx=1.0,axis=-1)參數(shù)名描述y被積分的數(shù)值序列xy中元素的間距,若x為None,則y元素的間距默認(rèn)為dx。x默認(rèn)為Nonedx標(biāo)量。默認(rèn)為1axis整數(shù)類型。積分軸2.固定采樣樣本求積分表14-6trapz方法參數(shù)19《Python程序設(shè)計》第14章高級科學(xué)計算庫SciPy14.2.2常微分方程方法微分方程,指表示未知函數(shù)的導(dǎo)數(shù)以及自變量之間關(guān)系的方程。未知函數(shù)是一元函數(shù)的微分方程稱作常微分方程,未知函數(shù)是多元函數(shù)的微分方程稱作偏微分方程。微分方程中出現(xiàn)的未知函數(shù)最高階導(dǎo)數(shù)的階數(shù),稱作微分方程的階。微分方程的數(shù)學(xué)定義式如下:F(x,y,y′,y′′...y(n))=0方法名描述odeint解常微分方程的通用函數(shù)ode使用VODE和ZVODE的方式進(jìn)行ode求解微分方程complex_ode將復(fù)數(shù)值的ode轉(zhuǎn)化為實數(shù)并求解微分方程表14-7求解微分方程的方法odeint是基于函數(shù)的API,ode類是面向?qū)ο蟮腁PI。通常odeint更好上手,而ode類則更靈活一些。20《Python程序設(shè)計》第14章高級科學(xué)計算庫SciPy14.3插值模塊(interpolate)插值是通過已知的離散數(shù)據(jù)求未知數(shù)據(jù)的方法。與擬合不同,插值要求曲線通過所有的已知數(shù)據(jù)。插值是離散函數(shù)逼近的重要方法,利用它可通過函數(shù)在有限個點處的取值狀況,估算出函數(shù)在其它點處的近似值。若函數(shù)f(x)在自變量x(離散值)所對應(yīng)的函數(shù)值已知,求解出一個適當(dāng)?shù)奶囟ê瘮?shù)p(x),使得p(x)在x處所取的函數(shù)值等于f(x)在x處的已知值。從而用p(x)來估計f(x)在這些x值之間的數(shù)所對應(yīng)的函數(shù)值,這種方法稱為插值法。插值與擬合插值的數(shù)學(xué)定義21《Python程序設(shè)計》第14章高級科學(xué)計算庫SciPy14.3.1一維插值方法interpld是一個類,其構(gòu)造函數(shù)定義如下__init__(x,y,kind='linear',...)參數(shù)名描述xarray_like類型。一維的真實數(shù)據(jù)yarray_like類型。是一個N維的數(shù)據(jù)其長度必須等于沿某個插值軸的x的長度kind插值類型。可選??梢允亲址蛘麛?shù)的kind類型:zero、nearest階梯插值,相當(dāng)于0階B樣條曲線,slinear、linear線性插值,用一條直線連接所有的取樣點,相當(dāng)于一階B樣條曲線,quadratic、cubic二階和三階B樣條曲線,更高階的曲線可以直接使用整數(shù)值指定axis指定沿y的某個軸進(jìn)行插值。默認(rèn)是沿著y的最后一個軸進(jìn)行插值22《Python程序設(shè)計》第14章高級科學(xué)計算庫SciPy14.3.1一維插值方法(1)首先生成離散值x(2)將x帶入上面函數(shù)計算出對應(yīng)的函數(shù)值(3)通過erp1d方法求解出函數(shù)p(x),interp1d是一個類,其返回值是一個函數(shù)。(4)生成新的樣本點xnew,并通過(3)求解出的p(x)函數(shù)計算出ynew,實現(xiàn)插值。通過函數(shù)

來演示一維插值的過程。圖14-7interp1d方法插值23《Python程序設(shè)計》第14章高級科學(xué)計算庫SciPy14.3.2多維插值方法griddata方法

griddata(points,values,xi,method='linear',fill_value=nan)參數(shù)名描述points表示K維空間中的坐標(biāo),它可以是形狀為(N,K)的數(shù)組,也可以是一個有K個數(shù)組的序列,N為數(shù)據(jù)的點數(shù)values每個點對應(yīng)的值xi需要進(jìn)行插值運算的坐標(biāo),其形狀為(M,K),M為需要進(jìn)行插值運算的坐標(biāo)的數(shù)量method參數(shù)有三個選項:'nearest'、‘linear’、'cubic',分別對應(yīng)0階、1階以及3階插值24《Python程序設(shè)計》第14章高級科學(xué)計算庫SciPy14.4概率統(tǒng)計模塊(stats)

概率分布隨機(jī)變量分為連續(xù)型和離散型。在SciPy庫中所有的連續(xù)隨機(jī)變量都是rv_continuous的派生類對象,而所有的離散隨機(jī)變量都是rv_discrete的派生類對象。屬性名描述rvs對隨機(jī)變量進(jìn)行隨機(jī)取值,產(chǎn)生服從某種分布的一個樣本集。,可以通過size參數(shù)指定輸出的樣本集大小pdf隨機(jī)變量的概率密度函數(shù)。產(chǎn)生對應(yīng)x的某種分布的y值cdf隨機(jī)變量的累積分布函數(shù),它是概率密度函數(shù)的積分sf隨機(jī)變量的生存函數(shù),它的值是1-cdf(t)ppf累積分布函數(shù)的反函數(shù)stats計算隨機(jī)變量的期望值和方差fit對一組隨機(jī)取樣進(jìn)行擬合,找出最適合取樣數(shù)據(jù)的概率密度函數(shù)的系數(shù)。如stats.norm.fit(x)就是將x看成是某個norm分布的抽樣,求出其最好的擬合參數(shù)(mean,std)25《Python程序設(shè)計》第14章高級科學(xué)計算庫SciPy14.4.1連續(xù)型隨機(jī)變量方法連續(xù)型隨機(jī)變量是指如果隨機(jī)變量x的所有可能取值不可以逐個列舉出來,而是取數(shù)軸上某一區(qū)間內(nèi)的任一點的隨機(jī)變量。正態(tài)分布函數(shù)是連續(xù)型的隨機(jī)變量函數(shù):

loc為期望值,即對稱軸位置,scale為標(biāo)準(zhǔn)差,即開口大小。SciPy中的正態(tài)分布函數(shù)默認(rèn)loc=0,scale=1,即標(biāo)準(zhǔn)正太分布。26《Python程序設(shè)計》第14章高級科學(xué)計算庫SciPy隨機(jī)變量分為離散型隨機(jī)變量與連續(xù)型隨機(jī)變量兩種離散型隨機(jī)變量與連續(xù)型隨機(jī)變量都是由隨機(jī)變量取值范圍(或者說取值形式)確定,變量取值只能取離散型的自然數(shù),就是離散型隨機(jī)變量。二項分布:

泊松分布:14.4.2離散型隨機(jī)變量方法27《Python程序設(shè)計》第14章高級科學(xué)計算庫SciPy14.4.3常用統(tǒng)計方法函數(shù)名描述describe計算傳遞的數(shù)組的幾個描述性統(tǒng)計信息gmean計算沿指定軸的幾何平均值hmean計算沿指定軸的調(diào)和平均值kurtosis計算數(shù)據(jù)集的峰度(Fisher或Pearson)kurtosistest測試數(shù)據(jù)集是否具有正常峰度mode返回傳遞的數(shù)組中的模態(tài)(最常見)值的數(shù)組moment計算樣本平均值的第n個時刻normaltest測試樣本是否與正態(tài)分布不同skew計算數(shù)據(jù)集的偏度28《Python程序設(shè)計》第14章高級科學(xué)計算庫SciPy14.4.3常用統(tǒng)計方法函數(shù)名描述skewtest測試偏斜是否與正態(tài)分布不同kstat返回第n個k統(tǒng)計量(到目前為止1<=n<=4)kstatvar返回k統(tǒng)計量方差的無偏估計tmean計算修剪的平均值tvar計算修剪的方差tmin計算修剪的最小值tmax計算修剪后的最大值tstd計算修剪的樣品標(biāo)準(zhǔn)偏差tsem計算平均值的修剪標(biāo)準(zhǔn)誤差entropy計算給定概率值的分布的熵29《Python程序設(shè)計》第14章高級科學(xué)計算庫SciPy14.5優(yōu)化模塊(optimize)

找到函數(shù)的局部或全局最小值以及求方程解的問題都屬于優(yōu)化問題。optimize模塊中包含:leastsq擬合方法函數(shù)最小值方法解方程及方程組的方法fsolve。30《Python程序設(shè)計》第14章高級科學(xué)計算庫SciPy14.5.1leastsq擬合所謂擬合是指已知某函數(shù)的若干離散函數(shù)值{f1,f2,…,fn},通過調(diào)整該函數(shù)中待定系數(shù)f(λ1,λ2,…,λn),使得該函數(shù)與已知點集的差別(最小二乘意義)最小。如果待定函數(shù)是線性,叫做線性擬合或者線性回歸(主要在統(tǒng)計中),否則叫做非線性擬合或者非線性回歸。表達(dá)式也可以是分段函數(shù),這種情況下叫做樣條擬合。最小二乘擬合的定義:如果f(x)是一個線性函數(shù)f(x)=k*x+b,參數(shù)k和b是未知量,需要確定它們的值。如果將參數(shù)k,b用p表示的話,那么擬合的目的是要找到p值使得如下公式中的S函數(shù)最?。?/p>

leastsq擬合的定義:最小二乘擬合的定義:31《Python程序設(shè)計》第14章高級科學(xué)計算庫SciPySciPy的optimize模塊中提供了最小二乘擬合方法leastsq。

其定義如下:leastsq(func,x0,args=(),…)參數(shù)名描述func定義實際函數(shù)值與函數(shù)預(yù)測值之間的差值x0多維數(shù)組。最小化函數(shù)的初始設(shè)置參數(shù)args元組類型??蛇x。func函數(shù)需要的額外參數(shù)14.5.1leastsq擬合32《Python程序設(shè)計》第14章高級科學(xué)計算庫SciPyfromscipy.optimizeimportleastsq#導(dǎo)入最小二乘擬合方法leastsqdeffunc_leastsq(x,p):a,b=preturna*x+b#定義需要擬合的函數(shù):a*x+bdefresiduals(p,y,x):returny-func(x,p)#實驗數(shù)據(jù)x,y和擬合函數(shù)的差,p為擬合方法需要找到的系數(shù)x=np.linspace(-2,2,100)a,b=2,0#真實函數(shù)參數(shù)y0=func_leastsq(x,[a,b])#真實數(shù)據(jù)值y1=y0+0.2*np.random.randn(len(x))#加入噪聲之后的實驗數(shù)據(jù)值

p0=[1,1]#參數(shù)的初始化值result=leastsq(residuals,p0,args=(y1,x))#args為需要擬合的實驗數(shù)據(jù)print("真實參數(shù):",[a,b])print("擬合參數(shù)",result[0])plt.plot(x,y0,'r.',label="Realdata")plt.plot(x,y1,label="Datawithnoisy")plt.plot(x,func(x,result[0]),'b+',label="Fittingdata")plt.legend()plt.show()33《Python程序設(shè)計》第14章高級科學(xué)計算庫SciPy14.5.2函數(shù)最小值方法對于在x上定義的實值函數(shù),x中的所有x,如果滿足f(x1)>=f(x),那么x1就是全局最大點。類似地,對于x中的所有x,如果f(x1)<=f(x),那么x1就是全局最小點。最大點處的函數(shù)值稱為函數(shù)的最大值,最小點處的函數(shù)值稱為函數(shù)的最小值。SciPy中的模塊optimize中提供了多種求解最小值的方法:fminfmin_powellfmin_cgfmin_bfgsfmin_ncg

brute等最大值與最小值:前5種優(yōu)化函數(shù)如果所求函數(shù)存在局部最小值和全局最小值,如果初始值選取不當(dāng)就會得到局部最小值,而不是全局最小值。34《Python程序設(shè)計》fmin方法其定義:fmin(func,x0,args=(),…)參數(shù)名描述func定義求解最小值的函數(shù)x0多維數(shù)組。假設(shè)的最小值args元組類型??蛇x。func函數(shù)需要的額外參數(shù)第14章高級科學(xué)計算庫SciPy14.5.2函數(shù)最小值方法35《Python程序設(shè)計》第14章高級科學(xué)計算庫SciPyfsolve方法隸屬于optimize模塊,其作用是求解方程及方程組的解。fsolve方法定義如下:fsolve(func,x0,args=(),…)fsolve方法中常用參數(shù)有兩個:func(x)是計算方程組誤差的函數(shù),它的參數(shù)x是一個矢量,表示方程組的各個未知數(shù)的一組可能解,func返回將x代入方程組之后得到的誤差;x0為未知數(shù)矢量的初始值。參數(shù)名描述func定義方程組的誤差函數(shù)x0多維數(shù)組。func(x)=0的根的最初估計值args元組類型??蛇x。func函數(shù)需要的額外參數(shù)14.5.2函數(shù)最小值方法36《Python程序設(shè)計》第14章高級科學(xué)計算庫SciPy14.5.3fsolve求解非線性方程組37《Python程序設(shè)計》第14章高級科學(xué)計算庫SciPy14.6其它常用模塊

14.6.1線性代數(shù)模塊(linalg

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論