Python:使用leastsq计算除以零错误

时间:2014-10-22 04:22:17

标签: python gaussian least-squares divide-by-zero

我正在对某些数据执行高斯拟合(来自文件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)

任何见解都将不胜感激!我是一个非常沮丧的新程序员。 谢谢你的阅读!

1 个答案:

答案 0 :(得分:0)

显然你的err为0,这会引发错误。 您的代码不提供err的来源,因此我们可以提供帮助。但是您可以尝试使用调试器(或者如果您对此不熟悉一些打印语句)来追溯它。 似乎还有一个值可用于您的其他表达式(可能是p2 == 0)。您也应该调试此值的来源。