random生成服从各类分布的随机数
一.伪随机数与计算机模拟
我们知道,计算机对于事务的处理在物理层面上基于电路信号的变换,所以计算机并不能在无输入信息的情况下产生符合统计学特征的随机序列。
现实世界中,严格意义上的随机数在某次产生过程中是按照实验过程中表现的分布概率随机产生的,其结果是不可预测的。而计算机中随机函数则是按照一定算法模拟产生的,其结果是确定的,可预见的,因此用计算机随机函数所产生的“随机数”实际上是“伪随机数”。计算机产生的每一个随机序列都需要一个输入信息作为随机种子,随机种子由用户事先设定,如果用户或第三方不设置随机种子,那么在默认情况下随机种子来自系统时钟。
二.设置种子
在random中设置随机数种子的方法是random.seed(),该方法为生成随机数提供输入信息,完全相同的种子产生的随机数列是相同的,如果不设置seed,随机种子则会来自系统时钟,故每次生成的都是不同的随机数。
PS C:\Users> python
>>> import random as rd
>>> rd.seed(1234)
>>> rd.random()
0.9664535356921388
>>> rd.random()
0.4407325991753527
>>> rd.random()
0.007491470058587191
>>> exit()
PS C:\Users\> python
>>> import random as rd
>>> rd.seed(1234)
>>> rd.random()
0.9664535356921388
>>> rd.random()
0.4407325991753527
>>> rd.random()
0.007491470058587191
可以看到两次完全不相干的随机数行为,仅仅因为seed种子一样,它们产生的随机数是一样的!
这也证实了计算机产生的随机数是伪随机数!
三.实值分布
random模块中一个较有用的功能就是实值分布。我们可以使用random模块下的函数来生成服从特定函数分布的实值分布,下列表格给出了常见的函数:
function | 返回值 |
---|---|
random.random() | 返回范围为[0.0,1.0)中的随机浮点数 |
random.uniform(a,b) | 返回范围为[a,b)指定范围内的随机浮点数,其中a,b也可以为浮点数。 |
random.normalvariate(mu,sigma) | 返回服从均值为mu,标准差为sigma的正态分布的随机浮点数 |
random.gauss(mu,sigma) | 返回服从均值为mu,标准差为sigma的高斯分布的随机浮点数 |
四.由于random库函数繁琐多样,这里整理了一份random常用库函数速查速记手册,供大家使用时随时查询