我正在尝试查找np.linspace(0,n,n*10+1)
之间的所有可能的子间隔
子间隔大于宽度(例如,宽度= 0.5)
所以我尝试通过使用itertools
import itertools
ranges=np.linspace(0,n,n*10+1)
#find all combinations
combinations=list(itertools.combinations(ranges,2))
#using for-loops to calculate width of each intervals
#and append to new list if the width is greater than 0.5
save=[]
for i in range(len(combinations)):
if combinations[i][1]-combinations[i][0]>0.5:
save.append(combinations[i])
但这要花费太多时间,尤其是当n变大时,尤其是它会消耗大量的内存
所以我想知道在收集组合时是否可以更快地修改函数或设置约束
最佳答案
itertools.combinations(...)
返回一个生成器,这意味着返回的对象将在需要时生成其值,而不是立即计算所有内容并将结果存储在内存中。您可以通过将其转换为列表来强制进行立即计算和存储,但这是不必要的。只需遍历combinations
对象,而不是对其进行列出并遍历索引(无论如何都不应这样做):
import itertools
ranges=np.linspace(0,n,n*10+1) # alternatively 'range(100)' or so to test
combinations=itertools.combinations(ranges,2)
save=[]
for c in combinations:
if c[1] - c[0] > 0.5:
save.append(c)
关于python - 查找组合的更快方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36787513/