Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 随机数发生器说明_Python_For Loop_Python 3.x_Random_Operators - Fatal编程技术网

Python 随机数发生器说明

Python 随机数发生器说明,python,for-loop,python-3.x,random,operators,Python,For Loop,Python 3.x,Random,Operators,我在看教授给我的一个示例程序的源代码时发现了这个RNG。有人能解释一下这个RNG是如何工作的吗 请查看文档。它写得很好: 其思想是,该程序生成一个随机数1000次,这足以使平均值达到0.5。请查看文档。它写得很好: 其思想是,该程序生成一个随机数1000次,这足以使平均值达到0.5,使这个随机数成为随机数的是被调用的random()函数。random()将在0和1之间生成1个(出于最实际的目的)随机浮点 from random import * def main(): t = 0

我在看教授给我的一个示例程序的源代码时发现了这个RNG。有人能解释一下这个RNG是如何工作的吗

请查看文档。它写得很好:


其思想是,该程序生成一个随机数1000次,这足以使平均值达到0.5。请查看文档。它写得很好:


其思想是,该程序生成一个随机数1000次,这足以使平均值达到0.5,使这个随机数成为随机数的是被调用的random()函数。random()将在0和1之间生成1个(出于最实际的目的)随机浮点

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


剩下的部分只是将每个随机数相加,然后除以随机数,基本上就是找到所有1000个随机数的平均值,正如赛博所指出的,这实际上根本不是一个随机数。

造成这个随机数的是被调用的random()函数。random()将在0和1之间生成1个(出于最实际的目的)随机浮点

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


剩下的只是将每个随机数相加,然后除以随机数,基本上找到所有1000个随机数的平均值,正如赛博所指出的,这实际上根本不是一个随机数。

如果你绘制这些点,你会发现这实际上产生了一个高斯(“正常”)关于随机函数平均值的分布

谈随机数的产生;如果您只有一个统一的数字生成器(如标准C中的一样),那么这是一种非常常见的技术


这里我给你的是从函数中提取的100000个值的柱状图(当然,如果你不熟悉python,返回的不是打印的)。y轴是该值出现的频率,x轴是该值的存储单元。如您所见,平均值为1/2,通过3个标准偏差(99.7%的数据),我们几乎没有该范围内的值。这应该是直观的;我们“通常”得到1/2,很少得到.99999,如果你画点,你会看到这实际上产生了一个关于随机函数平均值的高斯(“正态”)分布

谈随机数的产生;如果您只有一个统一的数字生成器(如标准C中的一样),那么这是一种非常常见的技术

这里我给你的是从函数中提取的100000个值的柱状图(当然,如果你不熟悉python,返回的不是打印的)。y轴是该值出现的频率,x轴是该值的存储单元。如您所见,平均值为1/2,通过3个标准偏差(99.7%的数据),我们几乎没有该范围内的值。这应该是直观的;我们“通常”得到1/2,很少得到.99999

该程序使用具有有限方差的独立同分布随机变量的-和
X
渐近收敛到正态(也称为高斯)分布,其均值为均值之和,方差为方差之和。按N的比例缩放,即
X
的总数,得到样本平均值(也称为平均值)。如果
X
的期望值为μ,且
X
的方差为σ2,则样本平均值的期望值也为μ,且方差为σ2/N

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

这是一种效率极低的生成法线的方法。更好的选择包括方法、方法或方法。

该程序使用具有有限方差的独立和同分布随机变量的-和
X
渐近收敛到正态(又称高斯)分布,其平均值为平均值之和,方差为方差之和。按N的比例缩放,即
X
的总数,得到样本平均值(也称为平均值)。如果
X
的期望值为μ,且
X
的方差为σ2,则样本平均值的期望值也为μ,且方差为σ2/N

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


这是一种效率极低的生成法线的方法。更好的选择包括方法、方法或方法。

如果你在寻找高斯/正态分布,这一点也不愚蠢。@RussellBorogove事实上这是非常愚蠢的。这是prob/stats,相当于将两个大数字A和B相乘,然后将A自身加上B倍。有很多更好的方法得到高斯数,而不是把一千个制服相加。你的教授似乎是一个很好的人选,他可以解释他写的代码:)@pjs-也许随机数生成不是这个练习的目标。也许目标是别的,而瓦卢斯并没有说出来。这是学期初,所以我希望这是一个使用控制语句和算术的练习。不过,我可能错了。@jww有很多例子可以证明这样的事情要好得多。即使这个想法是要展示中心极限定理,你也可以通过添加2个或3个一致性几乎立即看到它,而循环到12,减去6,得到的结果非常接近标准法线。1000纯粹是在浪费计算周期。如果你在寻找高斯/正态分布,这一点也不愚蠢。@russellborogve