【发布时间】:2012-12-26 10:24:50
【问题描述】:
我进行了搜索,问题似乎类似于Python scipy: unsupported operand type(s) for ** or pow(): 'list' and 'list' 但是那里发布的解决方案不起作用,我认为它实际上可能有所不同。
我正在尝试使用 scipy.curve_fit 将曲线拟合到数据中,当我将所有 3 个参数都留空时,一切正常,我得到了预期的结果。
def func(x,a,b,c):
return a*np.exp(b*(x**c))
popt, pcov = curve_fit(func,x,y)
但是,当我尝试修复以下值之一 (c=2) 时,
def func2(x,a,b):
return a*np.exp(b*(x**2))
popt, pcov = curve_fit(func2,x,y)
我得到TypeError: unsupported operand type(s) for ** or pow(): 'int' and 'list' 使用numpy.power(x,2) 链接问题中的建议允许代码运行但产生错误的结果。有人看到我做错了吗?
编辑添加: 更令人困惑的是,据我所知,它是由 curve_fit 使用的,第二个公式有效。
第二次编辑: 对于那些提到列表问题的人,X 和 Y 现在都是数组,并且代码运行没有错误。然而 func2 仍然会产生严重的错误结果。 (我会在这里发布图表,但显然我需要更多代表。)
Func 1 curvefit 给出了[a,b,c] = [ 1.71890826, -0.0239123, 3.17039851],但是对于 func2,这一切都出错了[a,b] = [ -2.88694423e-15, 9.99999998e-01]。我不明白这么小的变化怎么会导致这么严重的问题,leastsq 能够用 c=2 拟合这个数据。
【问题讨论】:
-
你能提供
x和y的例子吗?
标签: python scipy typeerror curve-fitting