【问题标题】:Python: Divide by zero error with leastsq calculationsPython:用最小平方计算除以零误差
【发布时间】:2014-10-22 04:22:16
【问题描述】:

我正在对一些数据进行高斯拟合(来自文件 prplt)。我不断收到以下错误: RuntimeWarning: 除以零遇到除 return (y1-func(x2,p))/err

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)

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

【问题讨论】:

  • in def func(x2,p): 在数学之前添加打印语句以在单独的行上打印出 x2 和 p。检查这些是否是您认为应该的。例如,看起来 p 应该是一个至少包含 3 个元素的数组。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 2022-01-22
    • 2016-04-15
    • 1970-01-01
    • 2020-12-25
    • 1970-01-01
    相关资源
    最近更新 更多