语境

说,我们要使用Box-Muller算法。从几个随机数U1和U2开始,我们可以生成G1和G2。现在,对于任何呼叫,我们只想输出G1或G2。在其他语言中,我们可以使用静态变量来知道是否需要生成新的一对。如何在Python中完成?

最初的想法

我知道,关于Python中的静态变量已经说了很多,我也必须说我有点困惑,因为答案很分散。我找到了这个thread及其参考。通过该线程,这里的解决方案是使用生成器。

细节中的魔鬼

现在的问题是,我们如何初始化生成器,以及如何为下一个yield保留G2?

最佳答案

编写生成器是一个非常好的做法!

import random
import math
def BoxMullerFormula(a,b):
    c = math.sqrt(-2 * math.log(a)) * math.cos(2 * math.pi * b)
    d = math.sqrt(-2 * math.log(a)) * math.sin(2 * math.pi * b)
    return (c,d)
def BoxM():
     while 1:
        Rand01 = random.random()
        Rand02 = random.random()
        (a,b) = BoxMullerFormula(Rand01,Rand02)
        yield a
        yield b

BoxM01 = BoxM()
for i in xrange(10):
    print BoxM01.next()


您还应该考虑拥有一个带有get()方法,一个re_initialize()方法的BoxMuller类,依此类推。

关于python - 在Python中初始化静态变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8618650/

10-12 13:09