我有以下代码:
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 given)。好吧,这听起来很公平 - 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 让它工作,但在更复杂的情况下,代码会显得冗长和混乱。如果有一个更清洁的解决方案来解决这个问题,我会非常喜欢它。
谢谢!