我正在尝试编写一个函数,它允许我灵活地在字典中的参数子集上运行网格搜索。我试图实现的具体行为如下:
def my_grid_searching_function(fiducial_dict, **param_iterators):
for params in desired_iterator:
fiducial_dict.update(params)
# compute chi^2
# write new fiducial_dict values and associated chi^2 value to disk
我的具体目标是找出如何写desired_iterator
。
函数my_grid_searching_function
接受关键字参数的任意子集,每个参数都将被解释为fiducial_dict
的参数。你知道吗
这似乎是itertools.product
的任务,但我遇到了一个问题。在下面的实现中,我能够使用product
将输入迭代器的值上的嵌套循环有效地转换为单个循环:
from itertools import product
def my_failed_grid_searching_function(fiducial_dict, **param_iterators):
desired_iterator = product(*list(param_iterators.values()))
for params in desired_iterator:
print(params)
fiducial_dict = {'x': 0, 'y': 0, 'z': 9}
my_failed_grid_searching_function(fiducial_dict, x=[4, 5, 6], y=[1, 2])
(1, 4)
(1, 5)
(1, 6)
(2, 4)
(2, 5)
(2, 6)
当然,这样做的问题是输入param_iterators
已经被放到了一个普通的字典中,因此在my_failed_grid_searching_function
的名称空间中,我不知道值的顺序是什么。你知道吗
有人能给我提供一些关于如何编写desired_iterator
的技巧吗?这样就可以产生足够的信息来更新fiducial_dict
,如上图所示?你知道吗
因为您使用的是任意关键字参数,所以可以获取
param_iterators
字典的键来同步param产品的位置。或者,我建议使用sklearn包来执行grid search。你知道吗无论如何,试试这个解决方案:
输出:
感谢Scratch'N'Purr指出序列顺序可以通过.keys()方法简单地确定。你知道吗
相关问题 更多 >
编程相关推荐