2012-08-31 8 views
23

私は多くのパラメータを持つ関数を持っています。この関数をデータセットに適合させたいのですが、1つのパラメータだけを使用して、残りのパラメータを自分で供給したいと考えています。私は、フィッティングだけaのために行われ、パラメータbは、ループ変数の値をとることにしたい。この中pythonで多くのパラメータを持つ関数の1つのパラメータのみをフィッティングする

def func(x,a,b): 
    return a*x*x + b 

for b in xrange(10): 
    popt,pcov = curve_fit(func,x1,x2) 

:ここでは一例です。これはどうすればできますか?

+0

あなたはhttp://en.wikipedia.org/wiki/Curve_fittingを参照してください。 – ninjagecko

+0

カーブを「フィット」させることを意味する無限の方法と、各方法について、それを実装する多くの方法があります。あなたが望むカーブフィッティングのタイプは、しばしば、あなたが解決しようとしている問題に依存しています。あなたが気にしないと仮定すると、簡単な方法の1つは最小二乗と呼ばれ、誤差の2乗の和を最小にします。ここでは、減衰された最小二乗法の解を計算する既成のライブラリがあります:http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html質問は不完全です。私は、カーブフィッティングについての特定の質問を閉じて再開することを提案します。 – ninjagecko

+5

私はアルゴリズムについて気にしません、私はscipy.optimizeからcurve_fitを使用します。私が理解できないことは、パラメータの1つが自分の価値を取り、どこのパラメータが適合すべきかをどこで指定するべきかということです。 – lovespeed

答えて

31

次のようにあなたは、ラムダにfuncをラップすることができます:

def func(x,a,b): 
    return a*x*x + b 

for b in xrange(10): 
    popt,pcov = curve_fit(lambda x, a: func(x, a, b), x1, x2) 

ラムダはPythonでシンプルな1つのライン機能のみを使用することができます匿名関数、です。基本的には、関数に名前を割り当てる必要がないときには、コードの量を減らすために通常使用されます。 http://docs.python.org/tutorial/controlflow.html#lambda-forms

この場合、引数の1つをfuncに修正するためにlambdaが使用されます。新しく作成された関数は、xaの2つの引数を受け取りますが、bはローカルのb変数から取った値に固定されています。この新しい関数は、引数としてcurve_fitに渡されます。

+0

詳細を教えていただけますか?ラムダとは何ですか? – lovespeed

+0

私は答えに詳細を追加しました。 –

0

元の機能を編集したい場合は、より簡単なオプションがあります。

for b in xrange(10): 
    popt,pcov = curve_fit(func, x1, x2) 

警告:あなたは、単にパラメータbのためにあなたのループの中でそれを置くことができます次に

​​

:として

は、あなたの関数を再定義関数は、同じスクリプト内で定義される必要があるでこれが機能するように呼び出されています。

関連する問題