由于我很懒,所以我不想定义用于优化这种方式的函数:

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/

10-12 21:47