6

複数の引数 (1 つの配列と 2 つの浮動小数点数) を取り、スカラー (浮動小数点数) を返す関数があります。ここで、引数のうちの 2 つ (2 つの浮動小数点数) を変化させて、この関数を最小限に抑えたいと思います。配列は、関数内でその内容 (配列と浮動小数点数) で「アンパック」されてから使用されます。

SciPy の fmin 関数を使用してこれを行うにはどうすればよいですか? これの正しい構文を理解するのに非常に苦労しています..

関数は次のようなものです。

def func(x, y, data)
    data1=data[0]
    data2=data[...]
    ...
    ...
    result = ...x...y...data1...data2... #result is a scalar (float)
    return result

scipy.optimize.fminこの場合、どのように見えるべきですか?

optimize.fmin(func, ???)

よろしくお願いします!

万歳、pp

4

2 に答える 2

5

scipy引数が配列内にあると仮定します。ヘルパー関数を定義できます。

def helper(xy):
    return func(xy[0], xy[1], data)

そしてそれを最小化しoptimize.fminます:

optimize.fmin(helper, np.array([x0, y0]), ...)
于 2013-01-17T16:51:07.747 に答える
3

SciPyのドキュメントで答えを見つけました! 私はドキュメンテーションのプログラミングの「専門用語」に慣れていません... (ドキュメンテーションは私のような初心者にとって非常に役に立ちましたが)。

したがって、その方法は次のとおりです。

  • 私の質問のように(最小化する)関数を定義する代わりに、次のように定義する必要があります

    def func(x, *args) #it is literally "*args"!
        y=x[0]
        z=x[1]
        data1=data[0]
        data2=data[...]
        ...
        result = ...y...z...data1...data2... #result is a scalar (float)
        return result
    
  • さて、optimize.fmin関数は

    optimize.fmin(func, x0=[y_estimate, z_estimate], args=(data))
    

どうやら(おそらく私が間違っているかもしれませんが)関数に配列x0(最初の推測)を提供するoptimize.fminと、 の「サイズ」で配列を最適化する必要があることがわかりx0ます。関数で必要な他のすべてのデータは、タプルで指定する必要がありますargs(この例では、タプルには配列が 1 つしかありませんが、args可能性がargs=(data1, data2, ...)あります。その場合、関数内で展開する必要はありません)。

要約: 最初の推測x0は単なる配列です。追加の引数argsは単なるタプルです。関数は (文字通り!) def として定義する必要がありfunc(x, *args)ます。配列xとタプルargsは、関数内で「アンパック」できます ( y=x[0]z=x[1]、 ... およびdata1=args[0]data2=args[1]、 ... を使用)。

于 2013-01-18T09:44:47.520 に答える