定义scipy.optimize.curve_fit的函数

时间:2012-12-15 13:20:53

标签: python scipy

由于我很懒,我不想定义以这种方式优化的功能:

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解释器对论点数量不匹配大吼大叫。那么有没有办法实现我的想法?

2 个答案:

答案 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)