说,我们想要使用Box-Muller算法。从几个随机数U1和U2开始,我们可以生成G1和G2。现在,对于任何通话,我们只想输出G1或G2。在其他语言中,我们可以使用静态变量来了解是否需要生成新的一对。如何在Python中完成?
我知道,在Python中有很多关于静态变量的说法,我也必须说我有点困惑,因为答案很分散。我发现了这个thread和其中的参考文献。通过该线程,这里的解决方案是使用生成器。
现在,问题是,我们如何初始化生成器以及我们如何保留(例如G2)下一个yield
?
答案 0 :(得分:3)
编写生成器是一种非常好的做法!
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()方法的类BoxMuller,一个re_initialize(),等等。