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 相关文章推荐
下载给定网页上图片的方法
Feb 18 Python
python操作xml文件示例
Apr 07 Python
Python常见数据结构详解
Jul 24 Python
python使用clear方法清除字典内全部数据实例
Jul 11 Python
python实现远程通过网络邮件控制计算机重启或关机
Feb 22 Python
matplotlib给子图添加图例的方法
Aug 03 Python
celery4+django2定时任务的实现代码
Dec 23 Python
python将字母转化为数字实例方法
Oct 04 Python
python matplotlib 画dataframe的时间序列图实例
Nov 20 Python
sklearn和keras的数据切分与交叉验证的实例详解
Jun 19 Python
通过python-pptx模块操作ppt文件的方法
Dec 26 Python
Python实现Telnet自动连接检测密码的示例
Apr 16 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
PHP自动选择 连接本地还是远程数据库
2010/12/02 PHP
二进制交叉权限微型php类分享
2014/02/07 PHP
YII中assets的使用示例
2014/07/31 PHP
thinkphp配置连接数据库技巧
2014/12/02 PHP
php单例模式示例分享
2015/02/12 PHP
SAE实时日志接口SDK用法示例
2016/10/09 PHP
PHP重置数组为连续数字索引的几种方式总结
2018/03/12 PHP
jquery实现简单的拖拽效果实例兼容所有主流浏览器
2013/06/21 Javascript
Jquery模仿Baidu、Google搜索时自动补充搜索结果提示
2013/12/26 Javascript
Jquery日期选择datepicker插件用法实例分析
2015/06/08 Javascript
12种JavaScript常用的MVC框架比较分析
2015/11/16 Javascript
Web前端框架bootstrap实战【第一次接触使用】
2016/12/28 Javascript
JavaScript编写九九乘法表(两种任选)
2017/02/04 Javascript
vue.js实现价格格式化的方法
2017/05/23 Javascript
JS正则表达式完美实现身份证校验功能
2017/10/18 Javascript
JS对象与json字符串相互转换实现方法示例
2018/06/14 Javascript
vue中使用axios post上传头像/图片并实时显示到页面的方法
2018/09/27 Javascript
vue里如何主动销毁keep-alive缓存的组件
2019/03/21 Javascript
JavaScript事件概念详解(区分静态注册和动态注册)
2021/02/05 Javascript
Python实现的tab文件操作类分享
2014/11/20 Python
Python 数据结构之堆栈实例代码
2017/01/22 Python
socket + select 完成伪并发操作的实例
2017/08/15 Python
快速入门python学习笔记
2017/12/06 Python
Python中垃圾回收和del语句详解
2018/11/15 Python
Python随机生成身份证号码及校验功能
2018/12/04 Python
django 数据库连接模块解析及简单长连接改造方法
2019/08/29 Python
经济实惠的名牌太阳镜和眼镜:Privé Revaux
2021/02/07 全球购物
英语专业毕业生自我鉴定
2013/11/09 职场文书
小学生美德少年事迹
2014/02/02 职场文书
事业单位分类改革实施方案
2014/03/21 职场文书
大学同学会活动方案
2014/08/20 职场文书
小学生2014国庆节演讲稿:祖国在我心中
2014/09/21 职场文书
2015年后勤工作总结范文
2015/04/08 职场文书
Java面试题冲刺第十八天--Spring框架3
2021/08/07 面试题
详解redis在微服务领域的贡献
2021/10/16 Redis
mysql分表之后如何平滑上线详解
2021/11/01 MySQL