Il existe plusieurs façons d'adapter une fonction gaussienne à un ensemble de données. J'utilise souvent l'astropie pour ajuster les données, c'est pourquoi je voulais ajouter ceci comme réponse supplémentaire.
J'utilise un certain ensemble de données qui doivent simuler une gaussienne avec un peu de bruit:
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)
convenable Ensuite, il est en fait assez simple, vous spécifiez un modèle que vous souhaitez adapter aux données et un installateur:
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)
et transcrites:
plt.plot(x, data)
plt.plot(x, fitted_model(x))
Cependant, vous pouvez également utiliser simplement Scipy mais vous devez définir la fonction vous:
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)
Cela renvoie les arguments optimaux pour l'ajustement et vous pouvez tracer comme ça :
plt.plot(x, data)
plt.plot(x, gaussian(x, *popt))
Et que ferais-je pour voir ce gaussien ajusté? –
@ P.Kaur voir ma réponse mise à jour –