对数正态分布(对数正态分布是左偏态分布)
文章目录[隐藏]
- 序
- 生成随机数
- 种子
- 随机样本
- 随机元素
- 系统随机
- 不均匀分布
- 正态分布
- 近似分布
对数正态分布(对数正态分布是左偏分布)
序
在实际开发中,经常使用随机数生成。随机库专用于随机数的生成。它提供了一种基于默森扭转算法的快速伪随机数发生器。
本章将详细解释随机数生成在各种场景中的应用。
生成随机数
对于随机数的生成,随机库提供了很多功能,有的负责生成浮点数,有的负责生成整数,有的可以间隔生成随机数。
函数名
参数
意义
随意
无参数
随机生成介于[0-1]之间的浮点数
制服
两个整数参数:最小数量和最大数量
随机生成介于最小值和最大值之间的浮点数。
randint
两个整数参数:最小数量和最大数量
生成介于最小值和最大值之间的随机整数。
随机范围
三个整数参数:最小数量、最大数量和步长。
生成介于最小值和最大值之间的随机间隔步长整数。
接下来,让我们看看这些常用随机数生成函数的应用:
import random# 随机生成[0-1]之间浮点数print(“%04.2f” % random.random())# 随机生成浮点数print(“%04.2f” % random.uniform(100, 200))# 随机生成整型print(random.randint(1, 200))# 随机生成整型print(random.randrange(0, 200, 5))
运行后,效果如下:
以上就是随机数最常见最常用的用法。
种子
不知道读者有没有发现。虽然上述方法可以生成随机数,但随机数是无序的。您的跑步可能以一个数字开始,以一个数字结束,下一次跑步的开始和结束会有所不同。这显然不适合需要固定序列的随机数要求。
因此,随机库为我们提供了一个种子函数:random.seed()。种子将控制公式生成的第一个值。因为公式是确定的,只要每次种子都是一样的,那么随机数生成的序列值每次都会是一样的。
import randomrandom.seed(1)# 随机生成浮点数print(“%04.2f” % random.random())# 随机生成浮点数print(“%04.2f” % random.uniform(100, 200))# 随机生成整型print(random.randint(1, 200))# 随机生成整型print(random.randrange(0, 200, 5))
将上面的代码运行几次,你会发现随机数每次都是一样的。
随机样本
博主经常写脚本刷评论,但是对于爬虫来说,有一个唯一的随机数要求。例如,如果我想评论20页,那么如果我把20页放在数组中,就会有(0,19)个索引可供选择。如果使用普通的区间随机数,可能会漏掉一些值,也就是说也会漏掉一些没有注释的网页。
这时候博主肯定期望在(0,19)区间生成一个随机数样本,不再重复。确保重复评论完成后没有网页丢失。那么如何用随机库操作这个需求呢?
当然,副标题已经给出了答案。您可以使用random.sample()函数:
import randomprint(random.sample(range(0, 20), 20))
运行后,效果如下:
random.sample的第一个参数是区间数组,例如,如果随机数是(0,19),那么第一个参数是Range (0,19);第二个是生成了多少个不重复的随机数。在这里,所有的网页都需要注释,所以生成了20个随机数。可以看出上面所有的随机数都是不重复的,都在区间内且唯一。(这个功能也可以用来分发扑克牌,感兴趣的读者可以自己编写代码,熟练掌握。)
随机元素
在概率统计中,我们经常用随机数来预测概率,比如硬币朝上的概率等。如果这个计算概率的随机元素运算是用随机数实现的呢?
答案是random.choice()函数,它可以从序列中随机选择元素。这里举个例子,我们掷一个硬币10000次,看看每一面朝上的概率是多少。具体代码如下:
import randomcoin_pro = { ‘heads’: 0, ‘tails’: 0,}coin = [‘heads’, ‘tails’]for i in range(10000): coin_pro[random.choice(coin)] += 1print(“正面朝上次数:”, coin_pro[‘heads’])print(“反面朝上次数:”, coin_pro[‘tails’])
运行后,我们会得到次数,这样我们也可以计算概率。
系统随机
随机库下还有一个SystemRandom类,这个类生成的序列是不可再生的,因为它的随机性是跟随系统的,而不是来自软件本身。
让我们先看一段代码:
import randomimport timer1 = random.SystemRandom()print(r1.random())seed = time.time()r1 = random.SystemRandom(seed)print(r1.random())
运行后,效果如下:
您可以简单地将SystemRandom理解为由系统时间因子生成的随机数。(只是一个类比),也就是上面的种子因子根本不起作用,它只使用了系统的随机种子。
不均匀分布
使用numpy库的读者应该经常使用它来生成一些正态分布的值。同样,随机随机数库也为科学计算提供了这些分布的功能。接下来,让我们解释一下这些随机数是如何生成的。
功能
意义
betavariate()
根据Beta分布(用于统计)返回0到1之间的随机浮点数
expovariate()
根据指数分布(用于统计信息),返回一个介于0和1之间或介于0和-1之间的随机浮点数(如果参数为负)。
gammavariate()
根据伽玛分布(用于统计信息)返回0到1之间的随机浮点数
高斯()
根据高斯分布(用于概率论)返回0到1之间的随机浮点数
lognormvariate()
根据对数正态分布(用于概率论)返回0到1之间的随机浮点数。
常态变量()
根据正态分布返回0到1之间的随机浮点数(用于概率论)。
vonmisesvariate()
根据冯·米塞斯分布(用于方向统计)返回0到1之间的随机浮点数
paretovariate()
根据帕累托分布(用于概率论)返回0到1之间的随机浮点数
weibullvariate()
根据威布尔分布(用于统计信息)返回0到1之间的随机浮点数
正态分布
随机库提供函数normalvariate()和gauss()来生成正态分布随机数(高斯分布)。当然还有另外一个函数lognormvary()也可以生成正态分布,但是它生成的正态分布适用于几个非交互随机变量的乘积。
import randomfor i in range(2): print(random.normalvariate(0, 1))for i in range(2): print(random.gauss(0, 1))
运行后,效果如下:
上面有两个参数:均值和协方差。平均值是N维空中的坐标,表示最有可能生成样本的位置。这类似于一维或单变量正态分布的钟形曲线的峰值。协方差代表两个变量一起变化的水平。
近似分布
三角分布,又称辛普森分布或三角分布。在概率论和统计学中,三角分布是一种下限为A,模式为C,上限为b的连续概率分布。
三角()方法返回两个指定数字(包括两个)之间的随机浮点数,但是您也可以指定第三个参数,即mode参数。模式参数让您有机会权衡可能的结果,并使它们更接近其他两个参数值之一。模式参数默认为其他两个参数值之间的中点,它不会在任何方向上权衡可能的结果。
import randomprint(random.triangular(20, 60, 30))
运行后,效果如下:
其他感兴趣的功能可以自己研究。