Python 高斯擬合

2021-10-12 16:45:53 字數 1260 閱讀 9662

通常我們進行高斯擬合的辦法是匯入scipy的curve_fit 包,不過這需要自己手寫乙個高斯分布的函式表示式,不是很方便,astropy提供了乙個寫好的高斯擬合包

調包

from astropy.modeling import models, fitting

import numpy as np

import matplotlib.pyplot as plt

生成乙個高斯的資料

為了檢驗擬合結果的好壞,我們先生成乙個μ=0.5,σ=0.2的高斯資料,並賦予他乙個雜訊

def

func_gaosi

(x, miu, sigma)

:return

1/np.sqrt(

2*np.pi)

/sigma*np.exp(

-(x-miu)**2

/2/sigma**2)

x = np.linspace(0,

1,100)

y = func_gaosi(x,

0.5,

0.2)

y += np.random.normal(0.

,0.02

, x.shape)

plt.plot(x, y)

plt.xlabel(

'x')

plt.ylabel(

'y')

結果如下:

使用astropy進行高斯擬合

g_init = models.gaussian1d(amplitude=1.

, mean=

0, stddev=1.

)fit_g = fitting.levmarlsqfitter(

)g = fit_g(g_init, x, y)

amplitude表示振幅的初值,振幅也就是高斯分布的係數,mean表示μ的初值,stddev表示σ的初值,g就是擬合結果,通過如下命令檢視擬合的μ和σ

print

(g.mean.value, g.stddev.value)

>>

>>

0.5007101792640887

0.20002191014593193

可以看到是很精確的,而且也不需要自己寫高斯分布的函式

用python對資料進行高斯擬合分布

小李默默吐槽,被這個高斯擬合分布折磨的 下面是正文 首先是公式 自定義函式 deffunc x,a,u,sig return a np.exp x u 2 2 sig 2 然後就是橫縱座標,畫圖 x np.array dist y np.array probability dist popt,pco...

MATLAB實現高斯曲線擬合

完成某次課程任務,在matlab中新建乙個m檔案,將下列 複製,或者直接複製到命令欄回車即可使用 x 0 0.1 10 0 10每次加0.1,共101個點 y 50 exp x 5 2.2 x,y為初始函式值表現為紅線 x x 因為擬合曲線時需要列向量 y y y0 1 randn 1,101 新增...

高斯曲線擬合原理及實現

高斯 擬合 gaussian fitting 即使用形如 gi x ai exp x bi 2 ci 2 的高斯函式 對資料點集進行函式逼近的 擬合方法。其實可以跟 多項式擬合 模擬起來,不同的是 多項式擬合是用 冪函式系,而高斯擬合是用 高斯函式 系。使用 高斯函式 來進行擬合,優點在於計算積分十...