ガウス関数をデータセットにフィットさせる方法はたくさんあります。データをフィッティングするときに私はしばしばastropyを使用します。そのため、これを追加の答えとして追加したいのです。
import numpy as np
from astropy import modeling
m = modeling.models.Gaussian1D(amplitude=10, mean=30, stddev=5)
x = np.linspace(0, 100, 2000)
data = m(x)
data = data + np.sqrt(data) * np.random.random(x.size) - 0.5
data -= data.min()
plt.plot(x, data)
が、それは実際には非常に簡単ですフィット、あなたがデータにフィットするモデルを指定します。
は、私はいくつかのノイズとガウスをシミュレートしなければならないいくつかのデータセットを使用しますそしてフィッター:
fitter = modeling.fitting.LevMarLSQFitter()
model = modeling.models.Gaussian1D() # depending on the data you need to give some initial values
fitted_model = fitter(model, x, data)
してプロット:
plt.plot(x, data)
plt.plot(x, fitted_model(x))
あなたはまた、単にscipyのダウンロードを使用することができますが、機能を自分で定義する必要がありしかし:
from scipy import optimize
def gaussian(x, amplitude, mean, stddev):
return amplitude * np.exp(-((x - mean)/4/stddev)**2)
popt, _ = optimize.curve_fit(gaussian, x, data)
これは、フィット感のための最適な引数を返し、あなたはこのようにそれをプロットすることができます:
plt.plot(x, data)
plt.plot(x, gaussian(x, *popt))
そして、私はこのフィットしたガウスを見るために何をプロットするのですか? –
@ P.Kaur私の更新された回答を参照してください –