当尝试为某个程序找到最佳参数时,如果可以针对某个范围内的参数的所有可能值自动执行代码,则无需手动添加{{} 1}}到处循环。我们来解释一下:
让for
成为参数的词组。如果此prms
的每个值不列表,则应正常执行以下代码,如下所示:
dict
但是如果每个参数都是列表,那么应该为列表的每个值重新执行该程序。例如:
prms = dict()
prms['param1'] = 3
prms['param2'] = 4
prms['param3'] = -17
do_something(prms)
应该给:
prms = dict()
prms['param1'] = [3, 7]
prms['param2'] = [4]
prms['param3'] = [-17, 2]
有编程模式/很好的方法吗?
答案 0 :(得分:1)
由于我不能发表评论,我会将此作为答案。我想你正在寻找itertools.product。它应该允许您为程序创建所有可能的参数集。我还不知道如何将dictionary.values()与itertools.product结合起来,但这是开始的。
另一个问题是找到最佳参数集。您应该尝试创建测试函数并使用卡方检验。
答案 1 :(得分:0)
这是解决方案,感谢directory management。
prms
输出:
{'param3': - 17,'param2':4,'param1':3}
{'param3': - 17,'param2':4,'param1':7}
{'param3':2,'param2':4,'param1':3}
{'param3':2,'param2':4,'param1':7}
结论:此单行允许测试在{{1}}中输入的所有参数组合。当您编写的程序有许多需要优化的参数时很有用!
用例示例:我应该采用长度为128,256,512,1024的FFT吗?我应该采用重叠因子= 2,4吗?使用此笛卡尔积,我们可以测试所有可能的组合。