如何在python中优化以下函数?

2024-10-02 00:40:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个功能,现在需要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?


Tags: in功能算法for时间rangeallfind
1条回答
网友
1楼 · 发布于 2024-10-02 00:40:24

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

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

请注意,这五对参数是完全可以互换的。如果你不再浪费时间寻找等价的解决方案,你可以减少大量的搜索

这能让你动起来吗

相关问题 更多 >

    热门问题