【问题标题】:How to generate independent identically distributed (iid) random variables in python如何在python中生成独立同分布(iid)随机变量
【发布时间】:2015-06-29 22:26:44
【问题描述】:

我正在开发一个包含一些随机事件的模拟基础架构(例如,以一定概率生成输出的源)。到目前为止,我一直在使用 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 但他们没有回答我的问题。

【问题讨论】:

    标签: python random probability probability-theory


    【解决方案1】:

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

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

    我相信这可以满足您的独立性要求。查看the Wikipedia article,,尤其是“k-distribution”属性部分。

    【讨论】:

    • 我认为这在实践中有点矫枉过正(不使用 Mersenne,而是拒绝标准的随机),但是很好地参考了 Mersenne 的“k-分布”。
    • 我已经编辑了我的答案,希望更清楚,我的意思是 Python 中的 默认实现 使用梅森捻线器
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-03
    • 1970-01-01
    • 2018-08-12
    • 2020-04-05
    • 2020-07-02
    • 1970-01-01
    • 2012-07-23
    相关资源
    最近更新 更多