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实现Linux下守护进程的编写方法
Aug 22 Python
利用Python演示数型数据结构的教程
Apr 03 Python
python中的随机函数random的用法示例
Jan 27 Python
Django Web开发中django-debug-toolbar的配置以及使用
May 06 Python
Python双向循环链表实现方法分析
Jul 30 Python
Python获取Redis所有Key以及内容的方法
Feb 19 Python
pytorch numpy list类型之间的相互转换实例
Aug 18 Python
python实现文法左递归的消除方法
May 22 Python
Python中实现一行拆多行和多行并一行的示例代码
Sep 06 Python
OpenCV读取与写入图片的实现
Oct 13 Python
Python实现粒子群算法的示例
Feb 14 Python
Python如何利用pandas读取csv数据并绘图
Jul 07 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
Views rows style模板重写代码
2011/05/16 PHP
php使用Jpgraph绘制饼状图的方法
2015/06/10 PHP
合格的PHP程序员必备技能
2015/11/13 PHP
PHP实现的二分查找算法实例分析
2017/12/19 PHP
ThinkPHP5.0框架使用build 自动生成模块操作示例
2019/04/11 PHP
图片自动缩小的js代码,用以防止图片撑破页面
2007/03/12 Javascript
javascript 构造函数强制调用经验总结
2012/12/02 Javascript
jQuery获得页面元素的绝对/相对位置即绝对X,Y坐标
2014/03/06 Javascript
基于jquery实现人物头像跟随鼠标转动
2015/08/23 Javascript
JavaScript数据存储 Cookie篇
2016/07/02 Javascript
jQuery css() 方法动态修改CSS属性
2016/09/25 Javascript
用 js 的 selection range 操作选择区域内容和图片
2017/04/18 Javascript
Node.JS使用Sequelize操作MySQL的示例代码
2017/10/09 Javascript
详解如何使用babel进行es6文件的编译
2018/05/29 Javascript
深入解析Vue源码实例挂载与编译流程实现思路详解
2019/05/05 Javascript
layui 图片上传+表单提交+ Spring MVC的实例
2019/09/21 Javascript
JS+CSS实现过渡特效
2021/01/02 Javascript
[04:40]2016国际邀请赛中国区预选赛全程TOP10镜头集锦
2016/07/01 DOTA
学习python (1)
2006/10/31 Python
Python3中类、模块、错误与异常、文件的简易教程
2017/11/20 Python
python中的字典操作及字典函数
2018/01/03 Python
Python装饰器原理与用法分析
2018/04/30 Python
python3 实现验证码图片切割的方法
2018/12/07 Python
使用python读取.text文件特定行的数据方法
2019/01/28 Python
python 进程池pool使用详解
2020/10/15 Python
意大利高端时尚买手店:Stefania Mode
2018/03/01 全球购物
美国婴儿和儿童服装购物网站:PatPat
2020/10/01 全球购物
团日活动总结范文
2014/04/25 职场文书
大学学风建设方案
2014/05/04 职场文书
汉语言文学毕业求职信
2014/07/17 职场文书
群众路线个人对照检查材料
2014/09/23 职场文书
实习护士自荐信
2015/03/25 职场文书
2015年计算机教学工作总结
2015/07/22 职场文书
公司保密管理制度
2015/08/04 职场文书
redis配置文件中常用配置详解
2021/04/14 Redis
手把手教你导入Go语言第三方库
2021/08/04 Golang