繁体   English   中英

在Python中将高斯拟合到曲线

[英]Fitting a gaussian to a curve in Python

我想使用python将高斯拟合到曲线。 我在这里某处找到了解决方案,但它似乎仅适用于n型高斯,而不适用于au型高斯。

这是代码:

import pylab, numpy

from scipy.optimize import curve_fit

x=numpy.array(range(10))

y=numpy.array([0,1,2,3,4,5,4,3,2,1])

n=len(x)

mean=sum(y)/n

sigma=sum(y-mean)**2/n

def gaus(x,a,x0,sigma):
    return a*numpy.exp(-(x-x0)**2/(2*sigma**2))

popt, pcov=curve_fit(gaus,x,y,p0=[1,mean,sigma])

pylab.plot(x,y,'r-',x,y,'ro')

pylab.plot(x,gaus(x,*popt),'k-',x,gaus(x,*popt),'ko')

pylab.show()

该代码使高斯曲线适合n形曲线,但是如果我将y更改为y = numpy.array([5,4,3,2,1,2,3,4,5,6]),则返回一些错误:找不到最佳参数:函数调用次数已达到maxfev = 800。

我必须在代码中进行哪些更改/调整以适合U形高斯? 谢谢。

适合的功能形式是错误的。 不管是n形还是u形,高斯的尾部都将变为0,但您的约为5。

如果您在方程式中引入偏移量,并选择合理的初始值,则它会起作用。 参见下面的代码:

import pylab, numpy
from scipy.optimize import curve_fit

x=numpy.array(range(10))
y=numpy.array([5,4,3,2,1,2,3,4,5,6])

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-',x,y,'ro')
pylab.plot(x,gaus(x,*popt),'k-',x,gaus(x,*popt),'ko')
pylab.show()

也许您可以反转您的值,使其适合“ n”形高斯,然后反转高斯。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM