由于我很懒,我不想定义以这种方式优化的功能:
f = lambda x, a, b, ...: a * x + c + ...
但我想做这样的事情:
f = lambda x, p: p[0] * x + p[1] + ...
其中p是初始参数的数组。问题是 - 我不知道如何实现它。我试过了
popt = optimize.curve_fit(f, x, y, p)
甚至
popt = optimize.curve_fit(f, x, y, *p)
但是这样的事情不起作用 - python解释器对论点数量不匹配大吼大叫。那么有没有办法实现我的想法?
答案 0 :(得分:2)
您几乎拥有它:您可以使用*p
(请参阅文档中的f(xdata, *params)
):
>>> from scipy import optimize
>>> import numpy as np
>>>
>>> x = np.arange(1, 4)
>>> y = x * 3 + 1
>>>
>>> f = lambda x, *p: p[0] * x + p[1]
>>> popt, pcov = optimize.curve_fit(f, x, y, [1,-4])
>>> popt
array([ 3., 1.])
>>> pcov
array([[ 9.86076132e-32, -1.97215226e-31],
[ -1.97215226e-31, 4.60168861e-31]])
答案 1 :(得分:1)
哦,为什么当我提出问题时,我会自己找到解决方案?解决方案是:
f = lambda x, *p: p[0] * x + p[1] + ...
popt = optimize.curve_fit(f, x, y, p0=p)