如何在 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 或类似的方案,其中每个后续样本都依赖于先前的样本,这些样本的多个子集可能独立且分布相同,也可能不独立。
我有两个问题:
- 我实际上使用我的伪代码或类似的东西得到了什么样的分布
- 如何在 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-分布”属性.
的部分
我正在开发一个包含一些随机事件(例如,以一定概率生成输出的源)的模拟基础设施。到目前为止,我一直在使用 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 或类似的方案,其中每个后续样本都依赖于先前的样本,这些样本的多个子集可能独立且分布相同,也可能不独立。
我有两个问题:
- 我实际上使用我的伪代码或类似的东西得到了什么样的分布
- 如何在 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-分布”属性.
的部分