如何在 python 中生成独立同分布 (iid) 随机变量

How to generate independent identically distributed (iid) random variables in python

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

我有两个问题:

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

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

Python stdlib random 模块是使用 Mersenne Twister 实现的。来自 the docs for random:

Python uses the Mersenne Twister as the core generator. It produces 53-bit precision floats and has a period of 2**19937-1.

我相信这可以满足您的独立性要求。查看 the Wikipedia article,,特别是关于“k-分布”属性.

的部分