由于我很懒,所以我不想定义用于优化这种方式的函数:
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解释器大喊关于参数编号不匹配的问题。那么有什么办法可以实现我的想法?
最佳答案
您几乎拥有它:您可以使用*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]])
关于python - 定义函数scipy.optimize.curve_fit,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13892564/