0

私は多くの ODE シミュレーションを行っており、パラメーターをリストとして渡す必要があるいくつかの python パラメーター最適化ツール (例: scipy.optimize.minimize、emcee ) を使用しています。シミュレーションでの役割を実際に説明するより直感的な名前とは対照的に、パラメータを 、 などparams[0]と呼ぶ必要があるため、これは非常に面倒です。params[1]これまでの私の解決策は、次のようなものでした。

k1 = 1.0 
k2 = 0.5
N = 0.01

params = [k1,k2,N]

def sim(params,timerange):
    k1 = params[0]
    k2 = params[1]
    N = params[2]

    # run the simulation

これは本当に厄介で、多くの理由で満足できません。シミュレーションに新しいパラメーターを追加する必要があるときはいつでも、params リストを変更し、シミュレート関数内でリストを手動でアンパックする方法を変更する必要があります。シミュレーションなどのラウンドごとに新しい参照を作成するのに時間がかかります。

パラメータを名前で定義し、それらをリストとして関数に渡し、リスト内の同じ名前でそれらを参照するための、正気で手間のかからない解決策があるかどうか疑問に思っています。

4

2 に答える 2

1
def sim(params,timerange):
    k1,k2,N = params

あなたが望むものだと思います..、..追加のパラメーターを追加した場合、Nの後に追加するだけです...しかし、それはオプションの引数ではありません

または多分より良い

def sim(*params,**kwargs):
    timerange = kwargs.get('timerange',default_timerange)
    K1,K2,N = params #assuming you know you have exactly 3

#then call it like so
sim(k1,k2,N,timerange=(-100,100))
于 2013-04-24T03:54:38.523 に答える