【问题标题】:Iterate existing "for loop" until convergence迭代现有的“for循环”直到收敛
【发布时间】:2018-07-23 00:17:36
【问题描述】:

我想多次迭代现有的 for 循环,以至于当我取结果列表的平均值时,它们会收敛。我不确定如何做到这一点并感谢建议。循环到无穷大或非常大的数字?有没有更优雅的方法?

谢谢。

【问题讨论】:

  • 您必须使用while 循环。 while some_cond: do_something().
  • While 循环收敛检查?

标签: python loops for-loop iteration


【解决方案1】:

虽然循环到无穷大(使用for loop in itertools.count():)会起作用,但似乎没有任何理由让事情变得如此复杂,因为您不打算使用那个计数器。

如果您只想循环直到条件为真,请使用while 循环:

while not converged():
    # your code here

如果您不能方便地将 converged() 测试放在循环的开头,那就永远循环并在正文中测试:

while True:
    # your code here
    if converged():
        break

我不确定您在这里所说的“收敛”究竟是什么意思,但听起来它可能涉及结果与前一个循环的结果足够接近?如果是这样,您需要保留之前的结果以进行测试。

例如:

lastavg = None
while True:
    # your code
    avg = statistics.mean(FinalLengths)
    if lastavg is not None and math.isclose(avg, lastavg):
        break
    lastavg = avg

或者您想知道更改是否与之前的更改方向相同且小于先前的更改?然后你需要保留之前的两个平均值,或者之前的平均值和之前的变化。你想做的事应该很容易做到。

【讨论】:

  • @BenSmert 您解释了所有背景细节,但忽略了重要部分:您是什么意思“使均值收敛”?您对此的预期测试是什么?我的意思是,字面定义是所有自然数 > 某个 N,这需要无限时间来证明或反证,所以人们通常使用一些可以在有限时间内测试的启发式算法。
猜你喜欢
  • 1970-01-01
  • 2019-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-13
  • 2014-06-08
  • 1970-01-01
相关资源
最近更新 更多