用不同的参数组合评估Python函数的巧妙方法是什么?

时间:2019-04-15 14:31:38

标签: python

我有一个要用不同参数组合评估的函数,例如

params1 = [1, 6, 100]
params2 = [True, False]
params3 = ["blue", "red", "green"]

这是我这样做的直接尝试:

res = np.zeros((len(params1), len(params2), len(params3)))

for i1, p1 in enumerate(params1):
    for i2, p2 in enumerate(params2):
        for i3, p3 in enumerate(params3):
            res[i1, i2, i3] = myfunc(p1,p2,p3)

这是可行的,但是使其适应更复杂的场景不仅麻烦,而且更重要的是使代码混乱,从而增加了出错的机会。

下一个以更结构化的方式处理此问题的方法是编写一个递归函数,该函数将在一个参数中启动一个for循环,然后在此循环调用本身内部。

但是由于我的问题似乎是一个非常普遍的问题,所以我想知道是否有更好的方法(例如更基本或更整洁)来解决这个问题。

编辑:感谢您的有用评论。建议使用 for params in itertools.product(params1, params2, params3): myfunc(*params)。  不幸的是,这对我没有帮助,因为我还需要索引。因为缺少了这一关键部分,所以我编辑了代码。

我还应该提供关于此功能的更多背景知识,因为这对我来说似乎是一个标准问题,可能会有完全不同的方法: 我想在高维参数空间的某个部分中评估myfunc的数值输出,以便稍后进行探索,尤其是在约束下寻找最大值和最小值(例如parameter2 = True的最小值)。因此,我的方法是在该空间的那一部分进行评估,并将结果存储在numpy数组res中。

再次感谢您的任何建议。

0 个答案:

没有答案