0

我正在开发一个带有一些随机事件的模拟基础设施(例如,以一定概率生成输出的源)。到目前为止,我一直在使用 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 源中获取随机数,因此 a[0] 将获得一个样本,然后 a[1] 将获得下一个样本,然后a[2] 等。如果 random.ramdom() 生成了一个真正的随机序列,我相信这仍然会生成 10 个 iid 值子集,但是,因为我假设 python 使用 LFSR 或类似的方案,其中每个随后的样本依赖于前一个样本,取这些样本的几个子集可能是独立的,也可能不是同分布的。

我有两个问题:

  1. 使用我的伪代码或类似的东西我实际上得到了什么样的分布
  2. 如何在 python 中获取多个 iid 随机变量?

我查看了其他堆栈溢出帖子,例如这个: Generate multiple Independent random streams in python 但他们没有回答我的问题。

4

1 回答 1

2

Python stdlibrandom模块是使用一个 Mersenne Twister 实现的。从文档中random

Python 使用 Mersenne Twister 作为核心生成器。它产生 53 位精度浮点数,周期为 2**19937-1。

我相信这可以满足您的独立性要求。查看Wikipedia 文章,特别是关于“ k -distribution”属性的部分。

于 2015-06-29T23:07:40.640 回答