我正在开发一个带有一些随机事件的模拟基础架构(例如,以一定概率生成输出的源)。到目前为止,我一直在使用random.random()函数。例如:
class source:
def output(self, x):
if(random.random()<=x):
return foo
a = []
for i in xrange(10)
a.append(source())
for i in xrange(1000):
for j in xrange(len(a)):
a[j].output()
根据我的理解,我的列表中的所有源“a”将从相同的伪随机LFSR源获得随机数,因此[0]将得到一个样本,然后[1]将得到下一个如果random.ramdom()生成一个真正的随机序列,我相信这仍然会生成10个iid子集值,但是,因为我假设python使用LFSR或类似的方案在每个后续样本取决于前一个样本的情况下,采用这些样本的若干子集可能是也可能不是独立且相同的分布。
我有两个问题:
我查看了其他堆栈溢出帖子,例如: Generate multiple independent random streams in python 但他们没有回答我的问题。
答案 0 :(得分:2)
Python stdlib random
模块使用Mersenne Twister实现。来自the docs for random
:
Python使用Mersenne Twister作为核心生成器。它产生 53位精度浮点数,周期为2 ** 19937-1。
我相信这符合您的独立性要求。查看the Wikipedia article,,特别是“ k -distribution”属性中的部分。