28 個のパラメーターを持つ物理システムをモデル化しました。シミュレーションは、約 10 個の出力パラメーターの別のリストを計算します。ここで、パラメーター空間を調査する必要があります。入力パラメーターのいくつかは一定に保ち、いくつかは複数の値を持ちます。入力構造は次のようになります。
input_params = {
'input1': [0.3], # fixed
'input2': [1.5, 4.5, 4], # variable param: [start, end, number_of_intermediate_values]
'input3': [1200.0], # fixed
'input4': [-0.1, -0.5, 10], # variable param: [start, end, number_of_intermediate_values]
'input5': [1e-3], # fixed
}
シミュレーション プログラムの出力は次のようになります (入力の組み合わせの場合)。
output_params = {
'output1': 3.9,
'output2': -2.5,
'output3': 100.0,
}
後で最大限の柔軟性を持って探索できるように、n 次元配列を生成したいと思います。上記の例では、次のような配列にする必要があります。
results = np.zeros(shape=(1,4,1,10,1,8))
ここで、最初の軸はinput1(1 つの値)、2 番目の軸はinput2(4 つの値) などであり、最後の軸にはすべてのデータ[input1, input2, input3, input4, input5, output1, output2, output3](5 + 3 = 8 つの値) が含まれます。この例では、説明のように整形された 4 x 10 x 8 = 320 値の配列になります。
私の質問は次のとおりです。28 個のネストされたforループを手動で記述せずに、この構造を生成してからデータを入力する (各軸を反復処理する) にはどうすればよいですか?
それとも、私のデータ構造が正しくなく、より良い解決策が存在するのでしょうか?
私は pandas を使用したソリューションを受け入れています (パラメーター名を文字列として処理できるようにしたいため)。または単純な python 辞書。ボトルネックは各シミュレーションの計算時間 (定常状態に到達する必要がある) であり、シミュレーション間に数ミリ秒を費やす余裕があるため、実行速度はそれほど重要ではありません。
また、どのパラメーターを固定し、どのパラメーターを可変にするか (およびそれらの値の数) を選択する方法にも柔軟性が必要です。