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

あなたはほとんどそれを持っていました:あなたは使うことができます*pf(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 に答える