Python内置random模块生成随机数的方法


Posted in Python onMay 31, 2019

本文我们详细地介绍下两个模块关于生成随机序列的其他使用方法。

随机数参与的应用场景大家一定不会陌生,比如密码加盐时会在原密码上关联一串随机数,蒙特卡洛算法会通过随机数采样等等。Python内置的random模块提供了生成随机数的方法,使用这些方法时需要导入random模块。

import random

下面介绍下Python内置的random模块的几种生成随机数的方法。

1、random.random()随机生成 0 到 1 之间的浮点数[0.0, 1.0)。注意的是返回的随机数可能会是 0 但不可能为 1,即左闭右开的区间。

print("random: ", random.random())
#random: 0.5714025946899135

2、random.randint(a , b)随机生成 a 与 b 之间的整数[a, b],a<=n<=b,随机整数不包含 b 时[a, b)可以使用 random.randrange() 方法。

print("randint: ", random.randint(6,8))
#randint: 8

3、random.randrange(start,stop,step)按步长step随机在上下限范围内取一个随机数,start<=n<stop。

print("randrange: ",random.randrange(20,100,5))
#randrange: 85

4、random.uniform(a, b)随机生成 a 与 b 之间的浮点数[a, b],a<=n<=b。

print("uniform: ",random.uniform(5,10))
#uniform: 5.119790163375776

5、random.choice()从列表中随机取出一个元素,比如列表、元祖、字符串等。注意的是,该方法需要参数非空,否则会抛出 IndexError 的错误。

print("choice: ",random.choice("www.yuanxiao.net"))
#choice: y

6、random.shuffle(items) 把列表 items 中的元素随机打乱。注意的是,如果不想修改原来的列表,可以使用 copy 模块先拷贝一份原来的列表。

num = [1, 2, 3, 4, 5]
random.shuffle(num)
print("shuffle: ",num)
#shuffle: [1, 3, 5, 4, 2]

7、random.sample(items, n)从列表 items 中随机取出 n 个元素。

num = [1, 2, 3, 4, 5]
print("sample: ",random.sample(num, 3))
#sample: [4, 1, 5]

Python 的random模块产生的随机数其实是伪随机数,依赖于特殊算法和指定不确定因素(种子seed)来实现。如randint方法生成一定范围内的随机数,会先指定一个特定的seed,将seed通过特定的随机数产生算法,得到一定范围内随机分布的随机数。因此对于同一个seed值的输入产生的随机数会相同,省略参数则意味着使用当前系统时间秒数作为种子值,达到每次运行产生的随机数都不一样。

random.seed(2)
print("random: ", random.random())
#random: 0.9560342718892494
random.seed(3)
print("random: ", random.random())
#random: 0.23796462709189137
random.seed(3)#同一个种子值,产生的随机数相同
print("random: ", random.random())
#random: 0.23796462709189137

numpy库也提供了random模块,用于生成多维度数组形式的随机数。使用时需要导入numpy库。

import numpy as np

下面介绍下numpy库的random模块的几种生成随机数的方法。

1、numpy.random.rand(d0,d1,…,dn)

  • rand函数根据给定维度生成[0,1]之间的数据,包含0,不包含1
  • dn表格每个维度

返回值为指定维度的array

print("np.random.rand:\n {}".format(np.random.rand(4,2))) 
# shape: 4*3
"""
np.random.rand:
 [[0.5488135 0.71518937]
 [0.60276338 0.54488318]
 [0.4236548 0.64589411]
 [0.43758721 0.891773 ]]
"""
print("np.random.rand:\n {}".format(np.random.rand(4,3,2))) 
# shape: 4*3*2
"""
np.random.rand:
 [[[0.96366276 0.38344152]
 [0.79172504 0.52889492]
 [0.56804456 0.92559664]]

 [[0.07103606 0.0871293 ]
 [0.0202184 0.83261985]
 [0.77815675 0.87001215]]

 [[0.97861834 0.79915856]
 [0.46147936 0.78052918]
 [0.11827443 0.63992102]]

 [[0.14335329 0.94466892]
  [0.52184832 0.41466194]
  [0.26455561 0.77423369]]]
"""

2、numpy.random.randn(d0,d1,…,dn)

  • randn函数返回一个或一组样本,具有标准正态分布。
  • dn表格每个维度
  • 返回值为指定维度的array

标准正态分布—-standard normal distribution
标准正态分布又称为u分布,是以0为均值、以1为标准差的正态分布,记为N(0,1)。

print("np.random.randn:\n {}".format(np.random.randn())) 
# 当没有参数时,返回单个数据
"""
np.random.randn:
 2.2697546239876076
"""
print("np.random.randn:\n {}".format(np.random.randn(2,4)))
"""
np.random.randn:
 [[-1.45436567 0.04575852 -0.18718385 1.53277921]
 [ 1.46935877 0.15494743 0.37816252 -0.88778575]]
"""
print("np.random.randn:\n {}".format(np.random.randn(4,3,2)))
"""
np.random.randn:
 [[[-1.98079647 -0.34791215]
 [ 0.15634897 1.23029068]
 [ 1.20237985 -0.38732682]]
 [[-0.30230275 -1.04855297]
 [-1.42001794 -1.70627019]
 [ 1.9507754 -0.50965218]]
 [[-0.4380743 -1.25279536]
 [ 0.77749036 -1.61389785]
 [-0.21274028 -0.89546656]]
 [[ 0.3869025 -0.51080514]
 [-1.18063218 -0.02818223]
 [ 0.42833187 0.06651722]]]
"""

3、numpy.random.randint(low, high=None, size=None, dtype='l')

返回随机整数,范围区间为[low,high),包含low,不包含high
参数:low为最小值,high为最大值,size为数组维度大小,dtype为数据类型,默认的数据类型是np.int
high没有填写时,默认生成随机数的范围是[0,low]

print("np.random.randint:\n {}".format(np.random.randint(1,size=5)))
# 返回[0,1)之间的整数,所以只有0
"""
np.random.randint:
 [0 0 0 0 0]
"""
print("np.random.randint:\n {}".format(np.random.randint(1,5)))# 返回1个[1,5)时间的随机整数
"""
np.random.randint:
 2
"""
print("np.random.randint:\n {}".format(np.random.randint(-5,5,size=(2,2))))
"""
np.random.randint:
 [[-5 -3]
 [ 2 -3]]
"""

4、numpy.random.seed()

np.random.seed()的作用:使得随机数据可预测。

当我们设置相同的seed,每次生成的随机数相同。如果不设置seed,则每次会生成不同的随机数

总结

以上所述是小编给大家介绍的Python内置random模块生成随机数的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python实现清屏的方法
Apr 30 Python
Python实现的凯撒密码算法示例
Apr 12 Python
对python的文件内注释 help注释方法
May 23 Python
Python中实现单例模式的n种方式和原理
Nov 14 Python
Python3.5文件读与写操作经典实例详解
May 01 Python
对python中UDP,socket的使用详解
Aug 22 Python
python定间隔取点(np.linspace)的实现
Nov 27 Python
django 装饰器 检测登录状态操作
Jul 02 Python
python db类用法说明
Jul 07 Python
python 删除系统中的文件(按时间,大小,扩展名)
Nov 19 Python
Python基于opencv的简单图像轮廓形状识别(全网最简单最少代码)
Jan 28 Python
python实现学生信息管理系统(面向对象)
Jun 05 Python
Python模块、包(Package)概念与用法分析
May 31 #Python
python多线程下信号处理程序示例
May 31 #Python
浅谈Python大神都是这样处理XML文件的
May 31 #Python
Python2.7实现多进程下开发多线程示例
May 31 #Python
Python3内置模块之json编解码方法小结【推荐】
Dec 09 #Python
一文了解Python并发编程的工程实现方法
May 31 #Python
Python微信操控itchat的方法
May 31 #Python
You might like
《星际争霸II》全新指挥官斯台特曼现已上线
2020/03/08 星际争霸
如何选购合适的收音机
2021/03/01 无线电
PHP四舍五入精确小数位及取整
2014/01/14 PHP
PHP中的reflection反射机制测试例子
2014/08/05 PHP
Yii框架中 find findAll 查找出制定的字段的方法对比
2014/09/10 PHP
PHP命名空间namespace用法实例分析
2016/09/27 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
脚本安需导入(装载)的三种模式的对比
2007/06/24 Javascript
jquery.cvtooltip.js 基于jquery的气泡提示插件
2010/11/19 Javascript
xml转json的js代码
2012/08/28 Javascript
JS取request值以及自动执行使用示例
2014/02/24 Javascript
浅谈JavaScript Array对象
2014/12/29 Javascript
详解JavaScript的策略模式编程
2015/06/24 Javascript
JS实现六位字符密码输入器功能
2016/08/19 Javascript
javascript 组合按键事件监听实现代码
2017/02/21 Javascript
Node做中转服务器转发接口
2017/10/18 Javascript
vue中v-for加载本地静态图片方法
2018/03/03 Javascript
NodeJS安装图文教程
2018/04/19 NodeJs
JS实现秒杀倒计时特效
2020/01/02 Javascript
[01:00:53]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Secret
2018/03/30 DOTA
利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)
2017/07/30 Python
python排序函数sort()与sorted()的区别
2018/09/18 Python
python2.7和NLTK安装详细教程
2018/09/19 Python
75条笑死人的知乎神回复,用60行代码就爬完了
2019/05/06 Python
Python多进程入门、分布式进程数据共享实例详解
2019/06/03 Python
python根据多个文件名批量查找文件
2019/08/13 Python
Python 利用高德地图api实现经纬度与地址的批量转换
2019/08/14 Python
Python装饰器原理与基本用法分析
2020/01/07 Python
在ipython notebook中使用argparse方式
2020/04/20 Python
Python编写万花尺图案实例
2021/01/03 Python
CSS3中的注音对齐属性ruby-align用法指南
2016/07/01 HTML / CSS
Viking Direct荷兰:购买办公用品
2019/06/20 全球购物
高分子材料与工程专业个人求职信
2013/12/15 职场文书
高中运动会前导词
2015/07/20 职场文书
慰问信的写作格式及范文!
2019/06/24 职场文书
解决IDEA翻译插件Translation报错更新TTK失败不能使用
2022/04/24 Python