我已经模拟了一个具有 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
(一个值),第二个轴用于input2
(四个值)等等,最后一个轴包含所有数据[input1, input2, input3, input4, input5, output1, output2, output3]
(5 + 3 = 8 个值)。对于此示例,它将是一个 4 x 10 x 8 = 320 值的数组,其形状如所述。
我的问题是:如何生成这个结构,然后填充它(在每个轴上迭代)而不for
手动编写 28 个嵌套循环?
或者也许我的数据结构不正确并且存在更好的解决方案?
我对使用 pandas 的解决方案持开放态度(因为我希望能够将参数名称作为字符串处理)。或简单的python dicts。执行速度并不那么重要,因为瓶颈是每次模拟的计算时间(它需要达到稳定状态),我可以承受在模拟之间花费几毫秒的时间。
我还需要灵活地选择哪些参数是固定的,哪些是可变的(以及它们有多少值)。