我正在对某些数据执行高斯拟合(来自文件prplt)。我不断收到以下错误:RuntimeWarning:在除法中遇到零除 return(y1-func(x2,p))/ err
AND
RuntimeWarning:double_scalars中遇到无效值 Z = P [0] * np.exp( - (X2-P [1])** 2 /(2 * P [2] ** 2))
起初,我认为这只是因为我对初始参数p0的猜测很糟糕,但我现在确信它是另一回事。这是我的代码:
x1= np.linspace(1,len(prplt),len(prplt))
index=np.where(x1>340)
x2= x1[index]
y=prplt
y1=y[index]
def func(x2,p):
z=p[0]*np.exp(-(x2-p[1])**2/(2*p[2]**2))
return z
p0=[3500.,400.,50.]
def errfunc(p,x2,y1,func,err):
return (y1-func(x2,p))/err
plt.errorbar(x2, y1, np.sqrt(y1), ecolor='black', fmt=None)
out=leastsq(errfunc, p0, args=(x2,y1,func,np.sqrt(y1)),full_output=1)
任何见解都将不胜感激!我是一个非常沮丧的新程序员。 谢谢你的阅读!
答案 0 :(得分:0)
显然你的err
为0,这会引发错误。
您的代码不提供err
的来源,因此我们可以提供帮助。但是您可以尝试使用调试器(或者如果您对此不熟悉一些打印语句)来追溯它。
似乎还有一个值可用于您的其他表达式(可能是p2 == 0
)。您也应该调试此值的来源。