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 正则表达式 概述及常用字符
May 04 Python
Python三元运算实现方法
Jan 12 Python
Python语法快速入门指南
Oct 12 Python
Python中用字符串调用函数或方法示例代码
Aug 04 Python
python正则表达式去除两个特殊字符间的内容方法
Dec 24 Python
python读取图片任意范围区域
Jan 23 Python
python调用其他文件函数或类的示例
Jul 16 Python
python实现在多维数组中挑选符合条件的全部元素
Nov 26 Python
关于numpy.where()函数 返回值的解释
Dec 06 Python
Pycharm生成可执行文件.exe的实现方法
Jun 02 Python
Python xmltodict模块安装及代码实例
Oct 05 Python
详解PyTorch模型保存与加载
Apr 28 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获取文件扩展名的方法实例总结
2017/06/10 PHP
laravel中短信发送验证码的实现方法
2018/04/25 PHP
jquery拖动插件(jquery.drag)使用介绍
2013/06/18 Javascript
jquery图片不完全按比例自动缩小的简单代码
2013/07/29 Javascript
js实现的复制兼容chrome和IE
2014/04/03 Javascript
jQuery+ajax实现鼠标单击修改内容的思路
2014/06/29 Javascript
优化Node.js Web应用运行速度的10个技巧
2014/09/03 Javascript
初始Nodejs
2014/11/08 NodeJs
JS去除iframe滚动条的方法
2015/04/01 Javascript
javascript实现简单查找与替换的方法
2015/07/22 Javascript
VUEJS实战之修复错误并且美化时间(2)
2016/06/13 Javascript
jQuery Ajax File Upload实例源码
2016/12/12 Javascript
NodeJs的fs读写删除移动监听
2017/04/28 NodeJs
微信小程序表单弹窗实例
2018/07/19 Javascript
小程序实现抽奖动画
2020/04/16 Javascript
零基础之Node.js搭建API服务器的详解
2019/03/08 Javascript
如何通过shell脚本自动生成vue文件详解
2019/09/10 Javascript
JS实现关闭小广告特效
2021/01/29 Javascript
Vue 实现登录界面验证码功能
2020/01/03 Javascript
微信分享invalid signature签名错误踩过的坑
2020/04/11 Javascript
Vue实现可移动水平时间轴
2020/06/29 Javascript
js实现扫雷源代码
2020/11/27 Javascript
python测试驱动开发实例
2014/10/08 Python
Python 使用PIL numpy 实现拼接图片的示例
2018/05/08 Python
python多任务及返回值的处理方法
2019/01/22 Python
Python将列表数据写入文件(txt, csv,excel)
2019/04/03 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
2020/02/20 Python
DKNY品牌官网:纽约大都会时尚风格
2016/10/20 全球购物
List, Set, Map是否继承自Collection接口?
2016/05/16 面试题
小学生演讲稿
2014/01/12 职场文书
《地震中的父与子》教学反思
2014/04/10 职场文书
初中优秀班集体申报材料
2014/05/01 职场文书
工地安全生产标语
2014/06/06 职场文书
使用@Value值注入及配置文件组件扫描
2021/07/09 Java/Android
vue使用localStorage持久性存储实现评论列表
2022/04/14 Vue.js
Python内置类型集合set和frozenset的使用详解
2022/04/26 Python