Python标准库之随机数 (math包、random包)介绍


Posted in Python onNovember 25, 2014

我们已经在Python运算中看到Python最基本的数学运算功能。此外,math包补充了更多的函数。当然,如果想要更加高级的数学功能,可以考虑选择标准库之外的numpy和scipy项目,它们不但支持数组和矩阵运算,还有丰富的数学和物理方程可供使用。

此外,random包可以用来生成随机数。随机数不仅可以用于数学用途,还经常被嵌入到算法中,用以提高算法效率,并提高程序的安全性。

math包

math包主要处理数学相关的运算。math包定义了两个常数:

math.e   # 自然常数e

math.pi  # 圆周率pi

此外,math包还有各种运算函数 (下面函数的功能可以参考数学手册):

math.ceil(x)       # 对x向上取整,比如x=1.2,返回2

math.floor(x)      # 对x向下取整,比如x=1.2,返回1

math.pow(x,y)      # 指数运算,得到x的y次方

math.log(x)        # 对数,默认基底为e。可以使用base参数,来改变对数的基地。比如math.log(100,base=10)

math.sqrt(x)       # 平方根

三角函数: math.sin(x), math.cos(x), math.tan(x), math.asin(x), math.acos(x), math.atan(x)

这些函数都接收一个弧度(radian)为单位的x作为参数。

角度和弧度互换: math.degrees(x), math.radians(x)

双曲函数: math.sinh(x), math.cosh(x), math.tanh(x), math.asinh(x), math.acosh(x), math.atanh(x)

特殊函数: math.erf(x), math.gamma(x)

random包

如果你已经了解伪随机数(psudo-random number)的原理,那么你可以使用如下:

random.seed(x)

来改变随机数生成器的种子seed。如果你不了解其原理,你不必特别去设定seed,Python会帮你选择seed。

1) 随机挑选和排序

random.choice(seq)   # 从序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数。
random.sample(seq,k) # 从序列中随机挑选k个元素
random.shuffle(seq)  # 将序列的所有元素随机排序

2)随机生成实数

下面生成的实数符合均匀分布(uniform distribution),意味着某个范围内的每个数字出现的概率相等:

random.random()          # 随机生成下一个实数,它在[0,1)范围内。

random.uniform(a,b)      # 随机生成下一个实数,它在[a,b]范围内。

下面生成的实数符合其它的分布 (你可以参考一些统计方面的书籍来了解这些分布):

random.gauss(mu,sigma)    # 随机生成符合高斯分布的随机数,mu,sigma为高斯分布的两个参数。 

random.expovariate(lambd) # 随机生成符合指数分布的随机数,lambd为指数分布的参数。

此外还有对数分布,正态分布,Pareto分布,Weibull分布,可参考下面链接:

http://docs.python.org/library/random.html

假设我们有一群人参加舞蹈比赛,为了公平起见,我们要随机排列他们的出场顺序。我们下面利用random包实现:

import random

all_people = ['Tom', 'Vivian', 'Paul', 'Liya', 'Manu', 'Daniel', 'Shawn']

random.shuffle(all_people)

for i,name in enumerate(all_people):

    print(i,':'+name)

练习

设计下面两种彩票号码生成器:

1. 从1到22中随机抽取5个整数 (这5个数字不重复)

2. 随机产生一个8位数字,每位数字都可以是1到6中的任意一个整数。

总结

math.floor(), math.sqrt(), math.sin(), math.degrees()

random.random(), random.choice(), random.shuffle()

Python 相关文章推荐
python爬虫框架talonspider简单介绍
Jun 09 Python
python 实现在txt指定行追加文本的方法
Apr 29 Python
python 按不同维度求和,最值,均值的实例
Jun 28 Python
mac安装pytorch及系统的numpy更新方法
Jul 26 Python
python简单操作excle的方法
Sep 12 Python
pycharm执行python时,填写参数的方法
Oct 29 Python
python 实现语音聊天机器人的示例代码
Dec 02 Python
Python通过paramiko远程下载Linux服务器上的文件实例
Dec 27 Python
为什么从Python 3.6开始字典有序并效率更高
Jul 15 Python
对tensorflow中cifar-10文档的Read操作详解
Feb 10 Python
pytorch 移动端部署之helloworld的使用
Oct 30 Python
pycharm如何设置官方中文(如何汉化)
Dec 29 Python
Python标准库之循环器(itertools)介绍
Nov 25 #Python
Python标准库之sqlite3使用实例
Nov 25 #Python
Python标准库内置函数complex介绍
Nov 25 #Python
Python XML RPC服务器端和客户端实例
Nov 22 #Python
Python实现读取目录所有文件的文件名并保存到txt文件代码
Nov 22 #Python
python进程类subprocess的一些操作方法例子
Nov 22 #Python
Python读取环境变量的方法和自定义类分享
Nov 22 #Python
You might like
谈一谈收音机的高放电路
2021/03/02 无线电
PHP新手上路(九)
2006/10/09 PHP
PHP OPCode缓存 APC详细介绍
2010/10/12 PHP
基于PHP array数组的教程详解
2013/06/05 PHP
PHP curl伪造IP地址和header信息代码实例
2015/04/27 PHP
PHP观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
yii2的restful api路由实例详解
2019/05/14 PHP
Js日期选择自动填充到输入框(界面漂亮兼容火狐)
2013/08/02 Javascript
当jQuery1.7遇上focus方法的问题
2014/01/26 Javascript
获取中文字符串的实际长度代码
2014/06/05 Javascript
Node.js 文件夹目录结构创建实例代码
2016/07/08 Javascript
关于动态执行代码(js的Eval)实例详解
2016/08/15 Javascript
详解JavaScript常量定义
2017/01/03 Javascript
详解vue引入子组件方法
2019/02/12 Javascript
Vue多组件仓库开发与发布详解
2019/02/28 Javascript
python实现按任意键继续执行程序
2016/12/30 Python
Python数据结构之翻转链表
2017/02/25 Python
Python 数据结构之旋转链表
2017/02/25 Python
python制作mysql数据迁移脚本
2019/01/01 Python
python 求某条线上特定x值或y值的点坐标方法
2019/07/09 Python
在Pytorch中计算卷积方法的区别详解(conv2d的区别)
2020/01/03 Python
Python使用sqlite3模块内置数据库
2020/05/07 Python
OpenCV 使用imread()函数读取图片的六种正确姿势
2020/07/09 Python
解析HTML5的存储功能和web SQL的相关操作方法
2016/02/19 HTML / CSS
德国内衣、泳装和睡衣网上商店:Bigsize Dessous
2018/07/09 全球购物
名人珠宝设计师:Melinda Maria Jewelry
2019/03/06 全球购物
StudentUniverse英国:学生航班、酒店和旅游
2019/08/25 全球购物
印度在线购买电子产品网站:Croma
2020/01/02 全球购物
国际花店:Pickup Flowers
2020/04/10 全球购物
经验丰富大学生村干部自我鉴定
2014/01/22 职场文书
公司任命书模板
2014/06/06 职场文书
大专学生求职信
2014/07/04 职场文书
资源环境与城乡规划管理专业自荐书
2014/09/26 职场文书
公司租房协议书范本
2014/10/08 职场文书
动态规划之使用备忘录来改进Javascript函数
2022/04/07 Javascript
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
2022/08/05 Vue.js