我有一个有一堆参数的函数。我不想手动设置所有参数,而是执行网格搜索。我有每个参数的可能值列表。对于每个可能的参数组合,我想运行我的函数来报告我的算法在这些参数上的性能。我想将这个结果存储在一个多维矩阵中,这样我就可以找到最大性能的索引,这反过来又会给我最好的参数。下面是现在的代码编写方式:
param1_list = [p11, p12, p13,...]
param2_list = [p21, p22, p23,...] # not necessarily the same number of values
...
results_size = (len(param1_list), len(param2_list),...)
results = np.zeros(results_size, dtype = np.float)
for param1_idx in range(len(param1_list)):
for param2_idx in range(len(param2_list)):
...
param1 = param1_list[param1_idx]
param2 = param2_list[param2_idx]
...
results[param1_idx, param2_idx, ...] = my_func(param1, param2, ...)
max_index = np.argmax(results) # indices of best parameters!
我想保留第一部分,我按原样定义列表,因为我希望能够轻松地操纵我搜索的值。
我还想按原样得到结果矩阵,因为我将可视化更改不同参数如何影响算法的性能。
不过,中间的那部分是相当重复和庞大的(特别是因为我有很多参数,我可能想添加或删除参数),我觉得应该有一种更简洁/优雅的方式来初始化结果矩阵,遍历所有索引,并设置适当的参数。
那么,有吗?