我用28個參數建模了一個物理系統。該模擬計算約10個輸出參數的另一個列表。現在我需要探索參數空間:我保持不變的一些輸入參數,有些參數有多個值。輸入結構是這樣的:如何準備,填充和探索n維numpy數組?
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
(一個值),爲input2
(四個值)的第二軸線等,最後軸包含所有數據[input1, input2, input3, input4, input5, output1, output2, output3]
(5 + 3 = 8個值)。對於這個例子,它將是一個4×10×8 = 320的數組,如上所述。
我的問題是:我怎樣才能生成這個結構,然後填充它(遍歷每個軸)而不用手寫28嵌套for
循環?
或者,也許我的數據結構不正確,存在更好的解決方案?
我打開使用熊貓的解決方案(因爲我想能夠將參數名稱作爲字符串處理)。或簡單的python字典。執行速度並不那麼重要,因爲瓶頸是每次模擬的計算時間(它需要達到穩定狀態),我可以在模擬之間花費幾個毫秒。
我還需要靈活性來選擇哪些參數是固定的,哪些是可變的(以及它們有多少個值)。
哇!這似乎是我需要的。我將在測試提出的解決方案後回來。謝謝。 – Amenhotep 2014-11-09 13:30:56
我開始實施這個解決方案。在'for key,row in df.iterrows():row [:] = sim(key)'中,如何通過名稱訪問輸入參數?他們是28,我討厭記得數字索引... – Amenhotep 2014-11-09 17:37:57
另一個問題:行'items = sorted(input_params.items())'是強制性的?是否因爲multiindex只有在排序後才起作用? – Amenhotep 2014-11-09 17:45:59