Py学习  »  Python

Python标准库:random生成服从各类分布的随机数

爬虫俱乐部 • 5 年前 • 873 次点击  

暑期Stata培训班招生啦!!!接力线上的网课培训,我们在今夏又开始新一轮的线下培训啦!8月4日至12日,爬虫俱乐部期待与您的相遇!培训具体内容详见推文《暑期Stata编程技术定制培训班》。

有问题,不要怕!点击推文底部“阅读原文”下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱statatraining@163.com,我们会及时为您解答哟~

喜大普奔~爬虫俱乐部的github主站正式上线了!我们的网站地址是:https://stata-club.github.io,粉丝们可以通过该网站访问过去的推文哟~

好消息:爬虫俱乐部隆重推出数据定制及处理业务啦,您有任何网页数据获取及处理方面的难题,请发邮件至我们邮箱statatraining@163.com届时会有俱乐部资深高级会员为您排忧解难

 

在上一篇文章中,小编初步介绍了random模块的常用用法,在今天的进阶篇中,我们将更深入地介绍random模块的应用,特别是生成符合各类分布特征的随机数。

一.伪随机数与计算机模拟


我们知道,计算机对于事务的处理在物理层面上基于电路信号的变换,所以计算机并不能在无输入信息的情况下产生符合统计学特征的随机序列。

现实世界中,严格意义上的随机数在某次产生过程中是按照实验过程中表现的分布概率随机产生的,其结果是不可预测的。而计算机中随机函数则是按照一定算法模拟产生的,其结果是确定的,可预见的,因此用计算机随机函数所产生的“随机数”实际上是“伪随机数”。计算机产生的每一个随机序列都需要一个输入信息作为随机种子,随机种子由用户事先设定,如果用户或第三方不设置随机种子,那么在默认情况下随机种子来自系统时钟

二.设置种子


       在random中设置随机数种子的方法是random.seed(),该方法为生成随机数提供输入信息,完全相同的种子产生的随机数列是相同的,如果不设置seed,随机种子则会来自系统时钟,故每次生成的都是不同的随机数

import random #导入random模块
random.seed(1234)#设置种子
print(random.random()) #随机生成[0,1)之间的浮点值
random.seed(1234)
print(random.random())
print(random.random()) #未设置seed

通过最后输出的结果,我们可以验证同一种子下得到的随机数是一样的。

三.实值分布


random模块中一个较有用的功能就是实值分布。我们可以使用random模块下的函数来生成服从特定函数分布的实值分布,下列表格给出了常见的函数:

print(random.random())
print(random.uniform(5,1))
print(random.normalvariate(5,1))
print(random.gauss(5,1))

得到:

四.实例操作


为了加深对随机数的理解,我们最后来做两个关于随机数的小案例。

1.   随机生成4位数纯数字验证码

import random
check_code = ''  # 最终生成的验证码
for i in range(4):  # 4位长的纯数字验证码
     cur = random.randint(0, 9)
     check_code += str(cur)
print(check_code)

2.   使用random生成服从正态分布的随机数,并用图例来进行表示

import random
histogram = [0] * 20
for i in range(1000):
    i = int(random.normalvariate(5, 1) * 2)
    histogram[i] = histogram[i] + 1
m = max(histogram)
for v in histogram:
     print("#"*int(v*50/m))

在上面给出的示例代码中,我们生成1000个服从均值为5,方差为1的正态分布的随机数,并提供一个长度为20的列表histogram 作为计数列表,在对随机数取整后进行计数,最后画出higtogram的计数简图,如果你了解matplotlib库的绘图方法,我们可以将图片处理得更美观。

import matplotlib.pyplot as plt  
x = list(range(1,21))
plt.plot(x,histogram,color='red',linewidth=2.5,linestyle='-')

附录:random库函数速查一览

由于random库函数繁琐多样,小编在这里整理了一份random常用库函数速查速记手册,供大家使用时随时查询


注:此推文中的图片及封面(除操作部分的)均来源于网络!如有雷同,纯属巧合!

以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。另外,我们开通了苹果手机打赏通道,只要扫描下方的二维码,就可以打赏啦!

应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~


                                   




             文字编辑:赵宇亮

  技术总编:刘贝贝

往期推文推荐:

1.爬虫俱乐部新版块--和我们一起学习Python

2.hello,MySQL--Stata连接MySQL数据库

3.hello,MySQL--odbcload读取MySQL数据

4.再爬俱乐部网站,推文目录大放送!

5.用Stata生成二维码—我的心思你来扫

6.Mata中的数据导出至Excel

7.谈谈图形中坐标设置的技巧

8.如何输出某个关键词在字符串中的所有位置?

9.想看什么书?Stata君帮你寻!——爬取中南财大图书馆书目信息

10.爬虫俱乐部隆重推出网上直播课程第一季




关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

投稿邮箱:statatraining@163.com

投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/oM2UToFdOE
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/19321
 
873 次点击