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