Python笛卡尔积和条件?

艾伦

在Python中,我正在使用itertools.product()函数生成用于模拟的输入参数。

我有一个测试函数,需要4个输入参数a1,a2,b1和b2。我使用以下代码生成参数。例子:

params = itertools.product(range(10,41,2), range(10,41,2), range(0, 2), range(5, 31, 5))

……这给了我3072种组合。不幸的是,某些组合在逻辑上是没有意义的。例如 如果a2大于a1,则测试结果是无用的,而且当b1等于0时,b2的值也完全无关紧要-因此测试这样的组合没有任何意义。

除了手动执行和嵌套for循环外,是否有可能限制或过滤笛卡尔积?因为我的实际用例有4个以上的参数,所以这就是为什么我喜欢itertools的笛卡尔乘积函数的便利性。

有什么想法或选择吗?任何帮助表示赞赏,谢谢。

休·博斯韦尔

如果您有很多参数,那么使用类似python-constraint之类的模块的基于约束的方法可能会更易于使用-让其进行艰苦的工作来确定哪些组合有效。

这看起来像

from constraint import Problem

prob = Problem()
prob.addVariables(["a1", "a2"], range(10,41,2))
prob.addVariable("b1", [0, 2])
prob.addVariable("b2", range(5, 31, 5))
prob.addConstraint(lambda a1, a2: a2 <= a1, ["a1", "a2"])
prob.addConstraint(lambda b1, b2: b1 != 0 or b2 == 5, ["b1", "b2"])

for params in prob.getSolutionIter():
    run_sim(**params)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章