【发布时间】:2013-08-22 00:01:20
【问题描述】:
我有以下代码:
import numpy as np
from scipy.optimize import curve_fit
def func(x, p): return p[0] + p[1] + x
popt, pcov = curve_fit(func, np.arange(10), np.arange(10), p0=(0, 0))
它会引发 TypeError: func() 只需要 2 个参数(给定 3 个)。好吧,这听起来很公平 - curve_fit 将 (0, 0) 解压缩为两个标量输入。所以我尝试了这个:
popt, pcov = curve_fit(func, np.arange(10), np.arange(10), p0=((0, 0),))
再次,它说:ValueError: object too deep for desired array
如果我将其保留为默认值(未指定 p0):
popt, pcov = curve_fit(func, np.arange(10), np.arange(10))
它会引发IndexError: invalid index to scalar variable。显然,它只是给函数一个p的标量。
我可以让 def func(x, p1, p2): return p1 + p2 + x 让它工作,但在更复杂的情况下,代码会显得冗长和混乱。如果这个问题有更清洁的解决方案,我会很高兴的。
谢谢!
【问题讨论】:
标签: python numpy scipy curve-fitting