随机数发生器解释

时间:2014-09-25 20:45:46

标签: python for-loop python-3.x random operators

from random import *
def main():
    t = 0
    for i in range(1000):  # thousand
        t += random()
    print(t/1000)
main()

我正在查看我教授给我的示例程序的源代码,我遇到了这个RNG。谁能解释这个RNG的工作原理?

4 个答案:

答案 0 :(得分:5)

如果您绘制了点,您会看到这实际上产生了关于随机函数均值的高斯("正常")分布。

enter image description here

Generate random numbers following a normal distribution in C/C++谈论随机数生成;如果只有标准C中的统一数字生成器,那么这是一种非常常见的技术。

我在这里给你的是一个从你的函数中提取的100,000个值的直方图(当然,如果你不熟悉python,则返回不打印)。 y轴是值出现的频率,x轴是值的bin。如您所见,平均值为1/2,并且通过3个标准偏差(99.7%的数据),我们几乎没有该范围内的值。那应该是直观的;我们通常"得到1/2,很少得到.99999

答案 1 :(得分:1)

查看文档。写得很好: https://docs.python.org/2/library/random.html

这个想法是该程序生成1000次随机数,足以使平均值为0.5

答案 2 :(得分:0)

该程序正在使用Central Limit Theorem - 具有有限方差的独立且相同分布的随机变量X的和,渐近收敛到正态(又称高斯)分布,其均值是均值的和,并且方差是方差的总和。将此值除以N,X的总和数,得出样本均值(平均值)。如果X的期望值为μ且X的方差为σ 2 ,则样本均值的期望值也为μ且其方差σ 2 / N。

由于Uniform(0,1)的平均值为0.5,方差为1/12,因此您的算法将生成非常接近正态分布的结果,平均值为0.5,方差为1/12000。因此,99.7%的结果应该落在平均值的+/- 3标准差内,即0.5 +/- 0.0274范围内。

这是生成法线的一种非常低效的方法。更好的替代方案包括Box-Muller方法,Polar方法或ziggurat方法。

答案 3 :(得分:-1)

使这个随机的东西是被调用的random()函数。 random()将生成1(对于大多数实际用途)0到1之间的随机浮点数。

>>>random()
0.1759916412898097
>>>random()
0.5489228122596088

其余部分只是将每个随机数添加到总数中,然后除以randoms的数量,基本上找到所有1000个random的平均值,而Cyber​​指出的实际上根本不是随机数。