我具有的功能现在需要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?
答案 0 :(得分:0)
在所有范围上使用itertools.product
可以更轻松地生成索引值。这样可以减少编码开销。
接下来,请注意,您有一个非常规则的重叠范围序列。您应该能够推导最小间隔覆盖范围,而不用费力地从每个组中重新计算它。在通过增量计算值的过程之前,请先检查是否涵盖了所有元素。
请注意,五对参数完全可以互换。如果您不浪费时间寻找等效的解决方案,则可以减少很多的搜索。
这会让你动起来吗?