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 相关文章推荐
Python3.x中自定义比较函数
Apr 24 Python
Python中的os.path路径模块中的操作方法总结
Jul 07 Python
判断网页编码的方法python版
Aug 12 Python
Django数据库表反向生成实例解析
Feb 06 Python
numpy中实现二维数组按照某列、某行排序的方法
Apr 04 Python
Python实现对特定列表进行从小到大排序操作示例
Feb 11 Python
python使用Plotly绘图工具绘制气泡图
Apr 01 Python
TensorFlow实现保存训练模型为pd文件并恢复
Feb 06 Python
python实现四人制扑克牌游戏
Apr 22 Python
Anaconda的安装及其环境变量的配置详解
Apr 22 Python
Django模板标签{% for %}循环,获取制定条数据实例
May 14 Python
Python使用protobuf序列化和反序列化的实现
May 19 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,ASP.JAVA,JAVA代码格式化工具整理
2010/06/15 PHP
ThinkPHP中redirect用法分析
2014/12/05 PHP
详谈php中 strtr 和 str_replace 的效率问题
2017/05/14 PHP
PHP中str_split()函数的用法讲解
2019/04/11 PHP
JavaScript的Function详细
2006/11/14 Javascript
JavaScript在IE中“意外地调用了方法或属性访问”
2008/11/19 Javascript
javascript中的document.open()方法使用介绍
2013/10/09 Javascript
给html超链接设置事件不使用href来完成跳
2014/04/20 Javascript
Jquery解析json字符串及json数组的方法
2015/05/29 Javascript
js实现网页图片延时加载 提升网页打开速度
2016/01/26 Javascript
仿Angular Bootstrap TimePicker创建分钟数-秒数的输入控件
2016/07/01 Javascript
Node.js制作简单聊天室
2017/01/12 Javascript
jquery.uploadifive插件怎么解决上传限制图片或文件大小问题
2017/05/08 jQuery
详解微信小程序 相对定位和绝对定位
2017/05/11 Javascript
vue2.0项目中使用Ueditor富文本编辑器示例代码
2017/08/14 Javascript
ES6 Generator函数的应用实例分析
2019/06/26 Javascript
Vue路由之JWT身份认证的实现方法
2019/08/26 Javascript
微信小程序自定义纯净模态框(弹出框)的实例代码
2020/03/09 Javascript
JavaScript 防抖和节流遇见的奇怪问题及解决
2020/11/20 Javascript
Python算法之栈(stack)的实现
2014/08/18 Python
玩转python爬虫之URLError异常处理
2016/02/17 Python
Python爬取三国演义的实现方法
2016/09/12 Python
Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)
2016/09/18 Python
python模块简介之有序字典(OrderedDict)
2016/12/01 Python
Python进程间通信之共享内存详解
2017/10/30 Python
python利用pandas将excel文件转换为txt文件的方法
2018/10/23 Python
Python lxml解析HTML并用xpath获取元素的方法
2019/01/02 Python
python os模块常用的29种方法使用详解
2020/06/02 Python
python画图时设置分辨率和画布大小的实现(plt.figure())
2021/01/08 Python
Emma Bridgewater官网:英国餐具制造商
2019/11/24 全球购物
Linux文件操作命令都有哪些
2015/02/27 面试题
电气自动化个人求职信范文
2014/02/03 职场文书
2014年三万活动总结
2014/04/26 职场文书
幼儿园安全责任书范本
2014/07/24 职场文书
检察机关个人对照检查材料
2014/09/15 职场文书
项目建议书
2015/02/04 职场文书