我想生成两个带有一个循环的生成器,以提高计算效率。
我的代码正在运行模拟,其中对观察进行采样(计算成本高)并计算度量(计算成本高)。我对指标符合特定标准的结果感兴趣。
def simulate(N):
for _ in range(0, N): # where N is typically a large integer
obs = sampleFromSpace() # computationally intensive
metric = computeMetric(obs) # computationally intensive
if(meets_criterion(metric)): # note the constraint on metric to filter obs!
yield (obs, metric)
此代码返回元组的生成器,但我想要的是obs
的生成器和metric
的生成器
有没有办法在不循环两次或将所有obs
存储在列表中的情况下创建这两个迭代器?
目标:
obs_gen, metric_gen = simulate(1e9)