【发布时间】:2012-11-02 11:05:15
【问题描述】:
我有一个有一堆参数的函数。我不想手动设置所有参数,而是执行网格搜索。我有每个参数的可能值列表。对于每个可能的参数组合,我想运行我的函数来报告我的算法在这些参数上的性能。我想将这个结果存储在一个多维矩阵中,以便之后我可以找到最大性能的索引,这反过来又会给我最好的参数。下面是现在的代码编写方式:
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!
我想保留第一部分,在这里我按原样定义列表,因为我希望能够轻松地操纵我搜索的值。
我还想以原样结束结果矩阵,因为我将可视化更改不同参数如何影响算法的性能。
不过,中间那段是相当重复和庞大的(特别是因为我有很多参数,我可能想添加或删除参数),我觉得应该有一个更简洁/优雅的方式来初始化结果矩阵,遍历所有索引,并设置适当的参数。
那么,有吗?
【问题讨论】:
-
看起来您正在寻找
itertools.product -
啊,确实!这将大大简化事情!
-
所以基本上,这是一个几乎重复的:stackoverflow.com/questions/1316068/…