Python math 庫提供許多對浮點數的數學運算函數,math模塊不支持復數運算,若需計算復數,可使用cmath模塊(本文不贅述)。
成都創新互聯2013年開創至今,先為碌曲等服務建站,碌曲等地企業,進行企業商務咨詢服務。為碌曲企業網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。
使用dir函數,查看math庫中包含的所有內容:
1) math.pi????# 圓周率π
2) math.e????#自然對數底數
3) math.inf? ? #正無窮大∞,-math.inf? ? #負無窮大-∞
4) math.nan? ? #非浮點數標記,NaN(not a number)
1) math.fabs(x)? ? #表示X值的絕對值
2) math.fmod(x,y)? ? #表示x/y的余數,結果為浮點數
3) math.fsum([x,y,z])? ? #對括號內每個元素求和,其值為浮點數
4) math.ceil(x)? ? #向上取整,返回不小于x的最小整數
5)math.floor(x)? ? #向下取整,返回不大于x的最大整數
6) math.factorial(x)? ? #表示X的階乘,其中X值必須為整型,否則報錯
7) math.gcd(a,b)? ? #表示a,b的最大公約數
8)? math.frexp(x)? ? ? #x = i *2^j,返回(i,j)
9) math.ldexp(x,i)? ? #返回x*2^i的運算值,為math.frexp(x)函數的反運算
10) math.modf(x)? ? #表示x的小數和整數部分
11) math.trunc(x)? ? #表示x值的整數部分
12) math.copysign(x,y)? ? #表示用數值y的正負號,替換x值的正負號
13) math.isclose(a,b,rel_tol =x,abs_tol = y)? ? #表示a,b的相似性,真值返回True,否則False;rel_tol是相對公差:表示a,b之間允許的最大差值,abs_tol是最小絕對公差,對比較接近于0有用,abs_tol必須至少為0。
14) math.isfinite(x)? ? #表示當x不為無窮大時,返回True,否則返回False
15) math.isinf(x)? ? #當x為±∞時,返回True,否則返回False
16) math.isnan(x)? ? #當x是NaN,返回True,否則返回False
1) math.pow(x,y)? ? #表示x的y次冪
2) math.exp(x)? ? #表示e的x次冪
3) math.expm1(x)? ? #表示e的x次冪減1
4) math.sqrt(x)? ? #表示x的平方根
5) math.log(x,base)? ? #表示x的對數值,僅輸入x值時,表示ln(x)函數
6) math.log1p(x)? ? #表示1+x的自然對數值
7) math.log2(x)? ? #表示以2為底的x對數值
8) math.log10(x)? ? #表示以10為底的x的對數值
1) math.degrees(x)? ? #表示弧度值轉角度值
2) math.radians(x)? ? #表示角度值轉弧度值
3) math.hypot(x,y)? ? #表示(x,y)坐標到原點(0,0)的距離
4) math.sin(x)? ? #表示x的正弦函數值
5) math.cos(x)? ? #表示x的余弦函數值
6) math.tan(x)? ? #表示x的正切函數值
7)math.asin(x)? ? #表示x的反正弦函數值
8)?math.acos(x)? ? #表示x的反余弦函數值
9)?math.atan(x)? ? #表示x的反正切函數值
10) math.atan2(y,x)? ? #表示y/x的反正切函數值
11) math.sinh(x)? ? #表示x的雙曲正弦函數值
12) math.cosh(x)? ? #表示x的雙曲余弦函數值
13) math.tanh(x)? ? #表示x的雙曲正切函數值
14) math.asinh(x)? ? #表示x的反雙曲正弦函數值
15) math.acosh(x)? ? #表示x的反雙曲余弦函數值
16) math.atanh(x)? ? #表示x的反雙曲正切函數值
1)math.erf(x)? ? #高斯誤差函數
2) math.erfc(x)? ? #余補高斯誤差函數
3) math.gamma(x)? ? #伽馬函數(歐拉第二積分函數)
4) math.lgamma(x)? ? #伽馬函數的自然對數
python做科學計算的特點:1. 科學庫很全。(推薦學習:Python視頻教程)
科學庫:numpy,scipy。作圖:matplotpb。并行:mpi4py。調試:pdb。
2. 效率高。
如果你能學好numpy(array特性,f2py),那么你代碼執行效率不會比fortran,C差太多。但如果你用不好array,那樣寫出來的程序效率就只能呵呵了。所以入門后,請一定花足夠多的時間去了解numpy的array類。
3. 易于調試。
pdb是我見過最好的調試工具,沒有之一。直接在程序斷點處給你一個截面,這只有文本解釋語言才能辦到。毫不夸張的說,你用python開發程序只要fortran的1/10時間。
4. 其他。
它豐富而且統一,不像C++的庫那么雜(好比pnux的各種發行版),python學好numpy就可以做科學計算了。python的第三方庫很全,但是不雜。python基于類的語言特性讓它比起fortran等更加容易規模化開發。
數值分析中,龍格-庫塔法(Runge-Kutta methods)是用于非線性常微分方程的解的重要的一類隱式或顯式迭代法。這些技術由數學家卡爾·龍格和馬丁·威爾海姆·庫塔于1900年左右發明。
龍格-庫塔(Runge-Kutta)方法是一種在工程上應用廣泛的高精度單步算法,其中包括著名的歐拉法,用于數值求解微分方程。由于此算法精度高,采取措施對誤差進行抑制,所以其實現原理也較復雜。
高斯積分是在概率論和連續傅里葉變換等的統一化等計算中有廣泛的應用。在誤差函數的定義中它也出現。雖然誤差函數沒有初等函數,但是高斯積分可以通過微積分學的手段解析求解。高斯積分(Gaussian integral),有時也被稱為概率積分,是高斯函數的積分。它是依德國數學家兼物理學家卡爾·弗里德里希·高斯之姓氏所命名。
洛倫茨吸引子及其導出的方程組是由愛德華·諾頓·洛倫茨于1963年發表,最初是發表在《大氣科學雜志》(Journal of the Atmospheric Sciences)雜志的論文《Deterministic Nonperiodic Flow》中提出的,是由大氣方程中出現的對流卷方程簡化得到的。
這一洛倫茨模型不只對非線性數學有重要性,對于氣候和天氣預報來說也有著重要的含義。行星和恒星大氣可能會表現出多種不同的準周期狀態,這些準周期狀態雖然是完全確定的,但卻容易發生突變,看起來似乎是隨機變化的,而模型對此現象有明確的表述。
更多Python相關技術文章,請訪問Python教程欄目進行學習!以上就是小編分享的關于python能做什么科學計算的詳細內容希望對大家有所幫助,更多有關python教程請關注環球青藤其它相關文章!
python的求
標準差
的函數是std,是numpy庫的成員,
如果非要
用sd函數求標準差,也不是不行(from
numpy
import
std
as
sd)。其參數是所需求標準差的矩陣或列表,
返回值
即標準差。示范如下:
import
numpy
as
np;
from
numpy
import
std
as
sd;
print([1,
2,3],"的標準差是);
print(sd([1,2,3]));
我的也一樣,不糾結這個。反正使用時指定精度就行了。
幫你試了,必須寫成這樣才行。二進制表示10進制的小數,10進制里很正常的
談談關于Python里面小數點精度控制的問題
十進制整數不會變成二進制小數,但十進制很短的小數的是可能變成二進制很長小數的。
例如0.54轉變成二進制是:
0.54=0.10001010001111010111000010100011110101110000101001B
還有一些十進制下一兩位小數,在二進制下無限循環小數的,只能取近似值。
線性模型(二)之多項式擬合
1. 多項式擬合問題
??多項式擬合(polynominal curve fitting)是一種線性模型,模型和擬合參數的關系是線性的。多項式擬合的輸入是一維的,即x=xx=x,這是多項式擬合和線性回歸問題的主要區別之一。
??多項式擬合的目標是構造輸入xx的MM階多項式函數,使得該多項式能夠近似表示輸入xx和輸出yy的關系,雖然實際上xx和yy的關系并不一定是多項式,但使用足夠多的階數,總是可以逼近表示輸入xx和輸出yy的關系的。
??多項式擬合問題的輸入可以表示如下:
D={(x1,y1),(x2,y2),...,(xi,yi),...,(xN,yN)}xi∈Ryi∈R
D={(x1,y1),(x2,y2),...,(xi,yi),...,(xN,yN)}xi∈Ryi∈R
??目標輸出是得到一個多項式函數:
f(x)=w1x1+w2x2+wixi+...+wMxM+b=(∑i=1Mwixi)+b
f(x)=w1x1+w2x2+wixi+...+wMxM+b=(∑i=1Mwixi)+b
其中MM表示最高階數為MM。
??可見在線性擬合的模型中,共包括了(M+1)(M+1)個參數,而該模型雖然不是輸入xx的線性函數,但卻是(M+1)(M+1)個擬合參數的線性函數,所以稱多項式擬合為線性模型。對于多項式擬合問題,其實就是要確定這(M+1)(M+1)個參數,這里先假設階數MM是固定的(MM是一個超參數,可以用驗證集來確定MM最優的值,詳細的關于MM值確定的問題,后面再討論),重點就在于如何求出這(M+1)(M+1)個參數的值。
2.優化目標
??多項式擬合是利用多項式函數逼近輸入xx和輸出yy的函數關系,通過什么指標來衡量某個多項式函數的逼近程度呢?(其實這就是誤差/損失函數)。擬合/回歸問題常用的評價指標是均方誤差(在機器學習中的模型評估與度量博客中,我進行了介紹)。多項式擬合問題也同樣采用該評價指標,以均方誤差作為誤差/損失函數,誤差函數越小,模型越好。
E(w,b)=1N∑i=1N[f(xi)?yi]2
E(w,b)=1N∑i=1N[f(xi)?yi]2
??系數1N1N是一常數,對優化結果無影響,可以去除,即將均方誤差替換為平方誤差:
E(w,b)=∑i=1N[f(xi)?yi]2
E(w,b)=∑i=1N[f(xi)?yi]2
?? 到這里,就成功把多項式擬合問題變成了最優化問題,優化問題可表示為:
argminw,bE(w,b)
arg?minw,b?E(w,b)
即需要求得參數{w1,...,wM,b}{w1,...,wM,b}的值,使得E(w,b)E(w,b)最小化。那么如何對該最優化問題求解呢?
3. 優化問題求解
3.1 求偏導,聯立方程求解
?? 直觀的想法是,直接對所有參數求偏導,令偏導為0,再聯立這M+1M+1個方程求解(因為共有M+1M+1個參數,故求偏導后也是得到M+1M+1個方程)。
E(w,b)=∑i=1N[f(xi)?yi]2=∑i=1N[(w1x1i+w2x2i+wixji+...+wMxMi+b)?yi]2
E(w,b)=∑i=1N[f(xi)?yi]2=∑i=1N[(w1xi1+w2xi2+wixij+...+wMxiM+b)?yi]2
利用E(w,b)E(w,b)對各個參數求偏導,如下:
?E(w,b)?wj?E(w,b)?b=2∑i=1N[(w1x1i+w2x2i+wixji+...+wMxMi+b)?yi]xji=2∑i=1N[(w1x1i+w2x2i+wixji+...+wMxMi+b)?yi]
?E(w,b)?wj=2∑i=1N[(w1xi1+w2xi2+wixij+...+wMxiM+b)?yi]xij?E(w,b)?b=2∑i=1N[(w1xi1+w2xi2+wixij+...+wMxiM+b)?yi]
求導之后,將各個點(xi,yi)(xi,yi)的值帶入偏導公式,聯立方程求解即可。
??針對該解法,可以舉個例子詳細說明,比如有兩個點(2,3),(5,8)(2,3),(5,8),需要利用二階多項式f(x)=w1x+w2x2+bf(x)=w1x+w2x2+b擬合。求解過程如下:
該二階多項式對參數求偏導得到
?E(w,b)?wj?E(w,b)?b=2∑i=12[(w1x1i+w2x2i+b)?yi]xji=[(w1x1+w2x21+b)?y1]xj1+[(w1x2+w2x22+b)?y2]xj2=2∑i=12[(w1x1i+w2x2i+b)?yi]=[(w1x1+w2x21+b)?y1]+[(w1x2+w2x22+b)?y2]
?E(w,b)?wj=2∑i=12[(w1xi1+w2xi2+b)?yi]xij=[(w1x1+w2x12+b)?y1]x1j+[(w1x2+w2x22+b)?y2]x2j?E(w,b)?b=2∑i=12[(w1xi1+w2xi2+b)?yi]=[(w1x1+w2x12+b)?y1]+[(w1x2+w2x22+b)?y2]
將點(2,3),(5,8)(2,3),(5,8)帶入方程,可以得到3個方程,
2b+7w1+29w2=117b+29w1+133w2=4629b+133w1+641w2=212
2b+7w1+29w2=117b+29w1+133w2=4629b+133w1+641w2=212
聯立這三個方程求解,發現有無窮多的解,只能得到3w1+21w2=53w1+21w2=5,這三個方程是線性相關的,故沒有唯一解。
??該方法通過求偏導,再聯立方程求解,比較復雜,看著也很不美觀。那么有沒有更加方便的方法呢?
3.2 最小二乘法
?? 其實求解該最優化問題(平方和的最小值)一般會采用最小二乘法(其實最小二乘法和求偏導再聯立方程求解的方法無本質區別,求偏導也是最小二乘法,只是這里介紹最小二乘的矩陣形式而已)。最小二乘法(least squares),從英文名非常容易想到,該方法就是求解平方和的最小值的方法。
??可以將誤差函數以矩陣的表示(NN個點,最高MM階)為:
∥Xw?y∥2
‖Xw?y‖2
其中,把偏置bb融合到了參數ww中,
w={b,w1,w2,...,wM}
w={b,w1,w2,...,wM}
XX則表示輸入矩陣,
??????11...1x1x2...xNx21x22...x2N............xM1xM2...xMN??????
[1x1x12...x1M1x2x22...x2M...............1xNxN2...xNM]
yy則表示標注向量,
y={y1,y2,...,yN}T
y={y1,y2,...,yN}T
因此,最優化問題可以重新表示為
minw∥Xw?y∥2
minw‖Xw?y‖2
對其求導,
?∥Xw?y∥2?w=?(Xw?y)T(Xw?y)?w=?(wTXT?yT)(Xw?y)?w=?(wTXTXw?yTXw?wTXTy+yTy)?w
?‖Xw?y‖2?w=?(Xw?y)T(Xw?y)?w=?(wTXT?yT)(Xw?y)?w=?(wTXTXw?yTXw?wTXTy+yTy)?w
在繼續對其求導之前,需要先補充一些矩陣求導的先驗知識(常見的一些矩陣求導公式可以參見轉載的博客),如下:
?xTa?x=a?ax?x=aT?xTA?x=Ax+ATx
?xTa?x=a?ax?x=aT?xTA?x=Ax+ATx
根據上面的矩陣求導規則,繼續進行損失函數的求導
?∥Xw?y∥2?w=?(wTXTXw?yTXw?wTXTy+yTy)?w=XTXw+(XTX)Tw?(yTX)T?XTy=2XTXw?2XTy
?‖Xw?y‖2?w=?(wTXTXw?yTXw?wTXTy+yTy)?w=XTXw+(XTX)Tw?(yTX)T?XTy=2XTXw?2XTy
其中XTXw=(XTX)TwXTXw=(XTX)Tw.令求導結果等于0,即可以求導問題的最小值。
2XTXw?2XTy=0w=(XTX)?1XTy
2XTXw?2XTy=0w=(XTX)?1XTy
??再利用最小二乘法的矩陣形式對前面的例子進行求解,用二階多項式擬合即兩個點(2,3),(5,8)(2,3),(5,8)。
表示輸入矩陣 XX和標簽向量yy
X=[1125425]y=[38]T
X=[1241525]y=[38]T
計算XTXXTX
XTX=???272972913329133641???
XTX=[272972913329133641]
矩陣求逆,再做矩陣乘法運算
但 XTXXTX不可逆,故無唯一解。
??關于矩陣的逆是否存在,可以通過判斷矩陣的行列式是否為0(det(A)=?0det(A)=?0 來判斷,也可以通過初等行變換,觀察矩陣的行向量是否線性相關,在這個例子下,矩陣不可逆,故有無窮多解。但如果新增一個點(4,7)(4,7),則就可以解了。
??其實這和數據集的點數和選擇的階數有關,如果點數小于階數則會出現無窮解的情況,如果點數等于階數,那么剛好有解可以完全擬合所有數據點,如果點數大于階數,則會求的近似解。
??那么對于點數小于階數的情況,如何求解?在python的多項式擬合函數中是可以擬合的,而且效果不錯,具體算法不是很了解,可以想辦法參考python的ployfit()函數的實現。
4. 擬合階數的選擇
?? 在前面的推導中,多項式的階數被固定了,那么實際場景下應該如何選擇合適的階數MM呢?
一般會選擇階數MM小于點數NN
把訓練數據分為訓練集合驗證集,在訓練集上,同時用不同的MM值訓練多個模型,然后選擇在驗證集誤差最小的階數script type="math/tex" id="MathJax-Element-5573"M/script
標題名稱:python計算誤差函數,python計算平均絕對誤差
轉載注明:http://vcdvsql.cn/article20/hedsjo.html
成都網站建設公司_創新互聯,為您提供域名注冊、微信小程序、服務器托管、網站導航、Google、網頁設計公司
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯