1

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

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 解释器对参数的数字不匹配大喊大叫。那么有什么方法可以实现我的想法吗?

4

2 回答 2

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]])
于 2012-12-15T13:29:17.737 回答
1

哦,为什么当我提出问题时,我自己会找到解决方案?解决方案是:

f = lambda x, *p: p[0] * x + p[1] + ...
popt = optimize.curve_fit(f, x, y, p0=p)
于 2012-12-15T13:28:01.077 回答