Python 随机数发生器说明
我在看教授给我的一个示例程序的源代码时发现了这个RNG。有人能解释一下这个RNG是如何工作的吗 请查看文档。它写得很好: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
其思想是,该程序生成一个随机数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