Python math 庫提供許多對浮點數的數學運算函數,math模塊不支持復數運算,若需計算復數,可使用cmath模塊(本文不贅述)。

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名注冊、虛擬主機、營銷軟件、網站建設、湘潭網站維護、網站推廣。
使用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)? ? #伽馬函數的自然對數
正態分布是高斯概率分布。高斯概率分布是反映中心極限定理原理的函數,該定理指出當隨機樣本足夠大時,總體樣本將趨向于期望值并且遠離期望值的值將不太頻繁地出現。高斯積分是高斯函數在整條實數線上的定積分。這三個主題,高斯函數、高斯積分和高斯概率分布是這樣交織在一起的,所以我認為最好嘗試一次性解決這三個主題(但是我錯了,這是本篇文章的不同主題)。本篇文章我們首先將研究高斯函數的一般定義是什么,然后將看一下高斯積分,其結果對于確定正態分布的歸一化常數是非常必要的。最后我們將使用收集的信息理解,推導出正態分布方程。
首先,讓我們了解高斯函數實際上是什么。高斯函數是將指數函數 exp(x) 與凹二次函數(例如 -(ax^2+bx+c) 或 -(ax^2+bx) 或只是-ax^2組成的函數。結果是一系列呈現“鐘形曲線”的形狀的函數。
兩個高斯函數的圖。第一個高斯(綠色)的λ=1和a=1。第二個(橙色)λ=2和a=1.5。兩個函數都不是標準化的。也就是說,曲線下的面積不等于1。
大多數人都熟悉這類曲線是因為它們在概率和統計中被廣泛使用,尤其是作為正態分布隨機變量的概率密度函數。在這些情況下,函數具有的系數和參數既可以縮放“鐘形”的振幅,改變其標準差(寬度),又可以平移平均值,所有這一切都是在曲線下的面積進行歸一化(縮放鐘形,使曲線下的面積總是等于1)的同時進行的。結果是一個高斯函數包含了一大堆的參數來影響這些結果。
如果將其認為是均值 = μ 且標準差 = σ 的正態分布方程。將其與高斯 λ exp(-ax^2) 的一般形式進行比較,我們可以看到:
前導系數 λ 有時表示為 1/Z,其中 Z=√2πσ 2,正是這樣的一個結果將我們帶到了本文的主要觀點之一:√2πσ 2有時被稱為一個自變量的正態分布的歸一化常數,而1/√2πσ2則被稱為歸一化常數。在這兩種情況下,公式中都有 π,它是從哪里來的?它通常與圓、徑向對稱和/或極坐標相關聯。單個變量的函數如何以 π 作為其在前導系數中的歸一化參數之一呢?
可以參考我們以前的文章,里面有非常詳細的描述
不定積分 ∫ exp(x^2) dx 不可能用初等函數求解。有沒有任何積分方法可以用來求解不定積分?
可以計算定積分,如上所述,首先對高斯函數求平方從而在 x 和 y 中產生一個具有徑向對稱二維圖的兩個變量函數。這樣能夠將直角坐標系轉換為極坐標,在此基礎上就可以使用更熟悉的積分方法(例如置換)進行積分。然后,簡單地取結果的平方根(因為我們在開始時對積分進行平方) 就得到了我們的答案,順便說一句,結果是是√π。
方法的第一步是對積分求平方——也就是說,我們將一維轉換為二維,這樣就可以使用多變量微積分的技術來求解積分
可以重寫為:
這兩個積分用x和y表示是等價的;所以它等同于x的單個積分的平方。因為變量x和y是獨立的,所以可以把它們移進或移出第二個積分符號,可以這樣寫:
如果你不熟悉如何解二重積分也不用擔心。只需先使用內部變量進行積分得到單個積分。然后用左邊的變量和外面的變量積分。但現在還不需要這么做。這里需要注意的是當我們對積分進行平方時,得到了一個二維的圖形化的徑向對稱的高斯函數。用x和y來表示積分e的指數是- (x 2+y 2)給了我們下一步應該做什么的線索。
這里棘手的部分是,我們必須將直角坐標下的二重積分轉換成極坐標下的二重積分。
為了在極坐標中對整個無限區域進行積分,我們首先對 exp(?r2) 相對于從 x=0 開始并延伸到無窮大的半徑 r 進行積分。結果是一個無限薄的楔形,看起來像我們原始一維高斯曲線的一半。然后我們圍繞旋轉軸 Z 軸旋轉楔形,并累積無限數量的這些極薄的楔形。也就是說——我們在 π 從 0 到 2π 時積分。
我們現在的二重積分看起來像這樣:
我們可以用 r^2 替換指數中的 ?(x 2+y 2),這要感謝畢達哥拉斯。但是我們仍然需要將我們的微分從矩形轉換為極坐標。
微分的轉換簡單的表示如下:
在任何情況下,我們的二重積分現在看起來像這樣:
添加適當的積分邊界:
如果我們設u=r^2,那么du=2r,我們可以寫成(對于內積分)
然后求出外積分:
所以:
我們在下一節求解標準化常數時,這個結果很重要。
現在我們有了推導正態分布函數的所有前提。下面將分兩步來做:首先確定我們需要的概率密度函數。這意味著以λ為單位重新轉換-a-產生的函數,無論為λ選擇什么值,曲線下的面積總是1。然后用隨機變量的方差σ^2來轉換λ。對整個實數線上的方差進行積分 從而得到我們在前導系數 √2πσ^2 中需要歸一化常數的項,也是我們在分母中需要的項指數 2σ^2。我們將使用分部積分來求解方差積分。
我們將從廣義高斯函數f(x)=λ exp(?ax^2)開始,正態分布下的面積必須等于1所以我們首先設置廣義高斯函數的值,對整個實數線積分等于1
這里將 -a- 替換為 a^2 稍微修改了高斯分布。為什么要這樣做?因為它可以使用 換元積分 U-substitution 來解決這個積分。為什么我們可以這樣做?因為 -a- 是一個任意常數,所以a^2 也只是一個任意常數,可以使用 U-substitution 求解。讓 u=ax 和 du=a dx 這意味著 dx=du/a, 由于 λ 和 1/a 是常數,我們可以將它們移到積分符號之外,得到:
我們從上面關于高斯積分的討論中知道,右邊積分的值等于√π。這樣就可以改成:
求解 -a- 可以這樣寫:
根據已經發現的λ 和 -a- 之間的關系,修改后的高斯下的面積總是等于 1 也是必須的,所以我們可以進一步修改,用 πλ^2 代替 a^2 并寫:
無論 λ 的值如何,該曲線下的面積始終為 1。這是我們的概率密度函數。
在獲得歸一化概率分布函數之前還需要做一件事:必須將 λ 重寫為隨機變量方差 σ^2 的函數。這將涉及對整個實數線的方差表達式進行積分所以需要采用按分部積分來完成此操作。
如果給定一個概率密度函數 f(x) 和一個均值 μ,則方差定義為從均值平方(x - μ)^2的偏差乘以整個實數線的概率密度函數f(x)的積分:
假設μ=0,因為已經有了概率密度函數h(x),所以可以寫成
用分部積分法求解這個積分有:
第一項歸零是因為指數中的x^2項比前一項分子中的- x項趨近于∞的速度快得多所以我們得到
右邊的被積函數是概率密度函數,已經知道當對整個實數線進行積分時它的值是1 :
求解 λ 得到:
將 λ 的 1/√2πσ^2 代入我們的修改后的公式(即我們的概率密度函數),我們得到:
剩下要做的就是將平均值 μ 放入指數的分子中,以便可以根據 μ 的值沿 x 軸平移圖形:
這樣就完成了方程推導
作者 :Manin Bocss
borderType= None)函數
此函數利用高斯濾波器平滑一張圖像。該函數將源圖像與指定的高斯核進行卷積。
src:輸入圖像
ksize:(核的寬度,核的高度),輸入高斯核的尺寸,核的寬高都必須是正奇數。否則,將會從參數sigma中計算得到。
dst:輸出圖像,尺寸與輸入圖像一致。
sigmaX:高斯核在X方向上的標準差。
sigmaY:高斯核在Y方向上的標準差。默認為None,如果sigmaY=0,則它將被設置為與sigmaX相等的值。如果這兩者都為0,則它們的值會從ksize中計算得到。計算公式為:
borderType:像素外推法,默認為None(參考官方文檔 BorderTypes
)
在圖像處理中,高斯濾波主要有兩種方式:
1.窗口滑動卷積
2.傅里葉變換
在此主要利用窗口滑動卷積。其中二維高斯函數公式為:
根據上述公式,生成一個3x3的高斯核,其中最重要的參數就是標準差 ,標準差 越大,核中心的值與周圍的值差距越小,曲線越平滑。標準差 越小,核中心的值與周圍的值差距越大,曲線越陡峭。
從圖像的角度來說,高斯核的標準差 越大,平滑效果越不明顯。高斯核的標準差 越小,平滑效果越明顯。
可見,標準差 越大,圖像平滑程度越大
參考博客1:關于GaussianBlur函數
參考博客2:關于高斯核運算
clear?
close?all
%%%%%%%%%%%%%%%%%%%%%%%%%生成實驗數據集
rand('state',0)
sigma_matrix1=eye(2);
sigma_matrix2=50*eye(2);
u1=[0,0];
u2=[30,30];
m1=100;
m2=300;%樣本數
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%sm1數據集
Y1=multivrandn(u1,m1,sigma_matrix1);
Y2=multivrandn(u2,m2,sigma_matrix2);
scatter(Y1(:,1),Y1(:,2),'bo')
hold?on
scatter(Y2(:,1),Y2(:,2),'r*')
title('SM1數據集')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%sm2數據集
u11=[0,0];
u22=[5,5];
u33=[10,10];
u44=[15,15];
m=600;
sigma_matrix3=2*eye(2);
Y11=multivrandn(u11,m,sigma_matrix3);
Y22=multivrandn(u22,m,sigma_matrix3);
Y33=multivrandn(u33,m,sigma_matrix3);
Y44=multivrandn(u44,m,sigma_matrix3);
figure(2)
scatter(Y11(:,1),Y11(:,2),'bo')
hold?on
scatter(Y22(:,1),Y22(:,2),'r*')
scatter(Y33(:,1),Y33(:,2),'go')
scatter(Y44(:,1),Y44(:,2),'c*')
title('SM2數據集')
end
function?Y?=?multivrandn(u,m,sigma_matrix)
%%生成指定均值和協方差矩陣的高斯數據
n=length(u);
c?=?chol(sigma_matrix);
X=randn(m,n);
Y=X*c+ones(m,1)*u;
end
本文翻譯自
上一節中探討的k-means聚類模型簡單易懂,但其簡單性導致其應用中存在實際挑戰。具體而言,k-means的非概率特性及簡單地計算點與類蔟中心的歐式距離來判定歸屬,會導致其在許多真實的場景中性能較差。本節,我們將探討高斯混合模型(GMMs),其可以看成k-means的延伸,更可以看成一個強有力的估計工具,而不僅僅是聚類。
我們將以一個標準的import開始
我們看下k-means的缺陷,思考下如何提高聚類模型。正如上一節所示,給定簡單,易于分類的數據,k-means能找到合適的聚類結果。
舉例而言,假設我們有些簡單的數據點,k-means算法能以某種方式很快地將它們聚類,跟我們肉眼分辨的結果很接近:
從直觀的角度來看,我可能期望聚類分配時,某些點比其他的更確定:舉例而言,中間兩個聚類之間似乎存在非常輕微的重疊,這樣我們可能對這些數據點的分配沒有完全的信心。不幸的是,k-means模型沒有聚類分配的概率或不確定性的內在度量(盡管可能使用bootstrap 的方式來估計這種不確定性)。為此,我們必須考慮泛化這種模型。
k-means模型的一種理解思路是,它在每個類蔟的中心放置了一個圈(或者,更高維度超球面),其半徑由聚類中最遠的點確定。該半徑充當訓練集中聚類分配的一個硬截斷:任何圈外的數據點不被視為該類的成員。我們可以使用以下函數可視化這個聚類模型:
觀察k-means的一個重要發現,這些聚類模式必須是圓形的。k-means沒有內置的方法來計算橢圓形或橢圓形的簇。因此,舉例而言,假設我們將相同的數據點作變換,這種聚類分配方式最終變得混亂:
高斯混合模型(GMM)試圖找到一個多維高斯概率分布的混合,以模擬任何輸入數據集。在最簡單的情況下,GMM可用于以與k-means相同的方式聚類。
但因為GMM包含概率模型,因此可以找到聚類分配的概率方式 - 在Scikit-Learn中,通過調用predict_proba方法實現。它將返回一個大小為[n_samples, n_clusters]的矩陣,用于衡量每個點屬于給定類別的概率:
我們可以可視化這種不確定性,比如每個點的大小與預測的確定性成比例;如下圖,我們可以看到正是群集之間邊界處的點反映了群集分配的不確定性:
本質上說,高斯混合模型與k-means非常相似:它使用期望-最大化的方式,定性地執行以下操作:
有了這個,我們可以看看四成分的GMM為我們的初始數據提供了什么:
同樣,我們可以使用GMM方法來擬合我們的拉伸數據集;允許full的協方差,該模型甚至可以適應非常橢圓形,伸展的聚類模式:
這清楚地表明GMM解決了以前遇到的k-means的兩個主要實際問題。
如果看了之前擬合的細節,你將看到covariance_type選項在每個中都設置不同。該超參數控制每個類簇的形狀的自由度;對于任意給定的問題,必須仔細設置。默認值為covariance_type =“diag”,這意味著可以獨立設置沿每個維度的類蔟大小,并將得到的橢圓約束為與軸對齊。一個稍微簡單和快速的模型是covariance_type =“spherical”,它約束了類簇的形狀,使得所有維度都相等。盡管它并不完全等效,其產生的聚類將具有與k均值相似的特征。更復雜且計算量更大的模型(特別是隨著維數的增長)是使用covariance_type =“full”,這允許將每個簇建模為具有任意方向的橢圓。
對于一個類蔟,下圖我們可以看到這三個選項的可視化表示:
盡管GMM通常被歸類為聚類算法,但從根本上說它是一種密度估算算法。也就是說,GMM適合某些數據的結果在技術上不是聚類模型,而是描述數據分布的生成概率模型。
例如,考慮一下Scikit-Learn的make_moons函數生成的一些數據:
如果我們嘗試用視為聚類模型的雙成分的GMM模擬數據,則結果不是特別有用:
但是如果我們使用更多成分的GMM模型,并忽視聚類的類別,我們會發現更接近輸入數據的擬合:
這里,16個高斯分布的混合不是為了找到分離的數據簇,而是為了對輸入數據的整體分布進行建模。這是分布的一個生成模型,這意味著GMM為我們提供了生成與我們的輸入類似分布的新隨機數據的方法。例如,以下是從這個16分量GMM擬合到我們原始數據的400個新點:
GMM非常方便,可以靈活地建模任意多維數據分布。
GMM是一種生成模型這一事實為我們提供了一種確定給定數據集的最佳組件數的自然方法。生成模型本質上是數據集的概率分布,因此我們可以簡單地評估模型下數據的可能性,使用交叉驗證來避免過度擬合。校正過度擬合的另一種方法是使用一些分析標準來調整模型可能性,例如 Akaike information criterion (AIC) 或 Bayesian information criterion (BIC) 。Scikit-Learn的GMM估計器實際上包含計算這兩者的內置方法,因此在這種方法上操作非常容易。
讓我們看看在moon數據集中,使用AIC和BIC函數確定GMM組件數量:
最佳的聚類數目是使得AIC或BIC最小化的值,具體取決于我們希望使用的近似值。 AIC告訴我們,我們上面選擇的16個組件可能太多了:大約8-12個組件可能是更好的選擇。與此類問題一樣,BIC建議使用更簡單的模型。
注意重點:這個組件數量的選擇衡量GMM作為密度估算器的效果,而不是它作為聚類算法的效果。我鼓勵您將GMM主要視為密度估算器,并且只有在簡單數據集中保證時才將其用于聚類。
我們剛剛看到了一個使用GMM作為數據生成模型的簡單示例,以便根據輸入數據定義的分布創建新樣本。在這里,我們將運行這個想法,并從我們以前使用過的標準數字語料庫中生成新的手寫數字。
首先,讓我們使用Scikit-Learn的數據工具加載數字數據:
接下來讓我們繪制前100個,以準確回憶我們正在看的內容:
我們有64個維度的近1,800位數字,我們可以在這些位置上構建GMM以產生更多。 GMM可能難以在如此高維空間中收斂,因此我們將從數據上的可逆維數減少算法開始。在這里,我們將使用一個簡單的PCA,要求它保留99%的預測數據方差:
結果是41個維度,減少了近1/3,幾乎沒有信息丟失。根據這些預測數據,讓我們使用AIC來計算我們應該使用的GMM組件的數量:
似乎大約110個components最小化了AIC;我們將使用這個模型。我們迅速將其與數據擬合并確保它已收斂合:
現在我們可以使用GMM作為生成模型在這個41維投影空間內繪制100個新點的樣本:
最后,我們可以使用PCA對象的逆變換來構造新的數字:
大部分結果看起來像數據集中合理的數字!
考慮一下我們在這里做了什么:給定一個手寫數字的樣本,我們已經模擬了數據的分布,這樣我們就可以從數據中生成全新的數字樣本:這些是“手寫數字”,不是單獨的出現在原始數據集中,而是捕獲混合模型建模的輸入數據的一般特征。這種數字生成模型可以證明作為貝葉斯生成分類器的一個組成部分非常有用,我們將在下一節中看到。
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的簡單介紹
網站鏈接:http://www.js-pz168.com/article22/hiogcc.html
成都網站建設公司_創新互聯,為您提供網站設計、企業網站制作、搜索引擎優化、網站導航、云服務器、響應式網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯