本文作者简介:王夜笙,就读于郑州大学信息工程学院,感兴趣的方向为逆向工程和机器学习,长期从事数据抓取工作(长期与反爬虫技术作斗争~),涉猎较广(技艺不精……),详情请见我的个人博客~
个人博客地址:http://bindog.github.io/blog/
感谢怡轩同学的悉心指导~
之前拜读了靳志辉(@rickjin)老师写的《正态分布的前世今生》,一直对正态分布怀着一颗敬畏之心,刚好最近偶然看到python
标准库中如何生成服从正态分布随机数的源码,觉得非常有趣,于是又去查找其他一些生成正态分布的方法,与大家分享一下。
设$X_1,X_2,\cdots ,X_n$
为独立同分布的随机变量序列,均值为$\mu$
,方差为$\sigma^2$
,则
$$Z_n=\frac{X_1+X_2+\cdots+X_n-n\mu}{\sigma \sqrt n}$$
具有渐近分布$N(0,1)$
,也就是说当$n \rightarrow \infty$
时,
$$P\left \{ \frac{X_1+X_2+\cdots+X_n-n\mu}{\sigma \sqrt n} \leq x \right \} \rightarrow \frac{1}{\sqrt{2\pi} } \int_{-\infty }^{x} e^{ -\frac{t^2}{2} } \, dt$$
换句话说,$n$
个相互独立同分布的随机变量之和的分布近似于正态分布,$n$
越大,近似程度越好。当然也有例外,比如$n$
个独立同分布的服从柯西分布随机变量的算术平均数仍是柯西分布,这里就不扩展讲了。
根据中心极限定理,生成正态分布就非常简单粗暴了,直接生成n
个独立同分布的均匀分布即可,看代码