我正在使用python模拟运行实验,并且需要创建一个输入案例列表。在Python中使用默认值进行多列表迭代
每种情况下从参数列表的列表采取一个实例,例如:
heights = [100,110,120]
alphas = [0.1,0.01,0.001]
C = [0.1,0.2,0.5,0.9]
B = [1,2]
和列表的列表是:
params = [heights,alphas,C,B]
原始量较大(〜30× ),所以直接处理每个列表效率不高。
最终,每个输入的情况下是从每个类别一个参数的元组/ namedtuple /字典,例如:
instance = {'height':100, 'alpha':0.1,'C:0.1, 'B':1}
我想迭代以创建实例的列表的参数空间 - 但这里是渔获:
,而不是使所有的人,每次我想要遍历所有选项每个参数的笛卡尔积,而类的其余部分设置为默认值(第一批) 。例如:
params = [[1,2,3],[4,5][7,8]]
预期实例集合(无重复)是:
[(1,4,7-),(2,4,7),(3,4, 7),(1,5,7)(1,4,8)]
其中是第一索引的默认值,是第二索引的和缺省被第三个的默认值。
制作一个笛卡尔乘积是很容易与itertools
:
from itertools import product
params = [[1,2,3],[4,5],[7,8]]
list(product(*params))
[(1,4,7),(1,4,8),(1,5,7),(1 (2,5,8),(2,4,7),(2,4,7),(2,4,8),(2,5,7),(2,5,8),(3,4,7),(3,4 ,8),(3,5,7),(3,5,8)]
然后我可以筛选出不必要的情况,但它听起来不够生成他们在第一个地方。有什么优雅的方式来构建这个迭代?
是不是仍然首先创建的所有实例,然后过滤他们出去? – Dimgold
我看着你写的最后一个盒子,认为这是你想要的输出,哦,哈哈。 – Rosh