我有兩個列表。在Python II中擬合高斯曲線
import numpy
x = numpy.array([7250, ... list of 600 ints ... ,7849])
y = numpy.array([2.4*10**-16, ... list of 600 floats ... , 4.3*10**-16])
它們形成U形曲線。 現在我想適應高斯曲線。
from scipy.optimize import curve_fit
n = len(x)
mean = sum(y)/n
sigma = sum(y - mean)**2/n
def gaus(x,a,x0,sigma,c):
return a*numpy.exp(-(x-x0)**2/(2*sigma**2))+c
popt, pcov = curve_fit(gaus,x,y,p0=[-1,mean,sigma,-5])
pylab.plot(x,y,'r-')
pylab.plot(x,gaus(x,*popt),'k-')
pylab.show()
我剛結束了嘈雜的原始U形曲線和一條直線水平線穿過曲線。
我不確定-1和-5在上面的代碼中代表什麼,但我確定我需要調整它們或其他東西來獲得高斯曲線。我一直在玩弄可能的價值,但無濟於事。
任何想法?
有一個錯字。一個 - 而不是=。 popt,pcov = curve_fit ... – Derek
你的'gaus'函數的'mean'和'sigma'參數描述'x'數據的屬性,將它們與'y'近似是沒有意義的。這可能會給你帶來非常不好的初始參數,導致搜索算法失敗。 – flonk
似乎最初的'sigma'將會是'0',然後在'gaus'中有一個零除...... –