如何在python中优化以下功能?

时间:2019-06-28 22:48:34

标签: python numpy for-loop optimization

我具有的功能现在需要15分钟到20分钟之间的任何时间才能运行。我在算法和当前算法中多次使用它。由于消耗时间而无法使用。无论如何,可以优化以下功能:

def find_all():
    for x in range(4, 10):
        for y in range(4, 10):
            for z in range(4, 10):
                for z1 in range(4, 10):
                    for z2 in range(4, 10):
                        for xs in range(13 - x):
                            for ys in range(13 - y):
                                for zs in range(13 - z):
                                    for z1s in range(13 - z1):
                                        for z2s in range(13 - z2):
                                            a = np.zeros(12, int)
                                            a[xs:xs+x] += 1
                                            a[ys:ys+y] += 1
                                            a[zs:zs+z] += 1
                                            a[z1s:z1s+z] += 1
                                            a[z2s:z2s+z] += 1
                                        if 0 not in a:
                                            yield x, y, z,z1,z2s,xs, ys,zs,z1s,z2s,a

%time list(find_all())

基本上我在这里要做的是建立一个列表,其中没有零。我确实尝试了以下解决方案,但它仅适用于两个范围,并且有一个要求,我可能需要多达6个范围 How to generate every combination of a given pattern in numpy array?

1 个答案:

答案 0 :(得分:0)

在所有范围上使用itertools.product可以更轻松地生成索引值。这样可以减少编码开销。

接下来,请注意,您有一个非常规则的重叠范围序列。您应该能够推导最小间隔覆盖范围,而不用费力地从每个组中重新计算它。在通过增量计算值的过程之前,请先检查是否涵盖了所有元素。

请注意,五对参数完全可以互换。如果您不浪费时间寻找等效的解决方案,则可以减少很多的搜索。

这会让你动起来吗?