用于在Python

时间:2015-12-09 12:51:58

标签: python dictionary design-patterns optimization

当尝试为某个程序找到最佳参数时,如果可以针对某个范围内的参数的所有可能值自动执行代码,则无需手动添加{{} 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]

有编程模式/很好的方法吗?

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吗?使用此笛卡尔积,我们可以测试所有可能的组合。