详解Python基础random模块随机数的生成


Posted in Python onMarch 23, 2019

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

import random

下面介绍下Python内置的random模块的几种生成随机数的方法。
1、random.random() 随机生成 0 到 1 之间的浮点数[0.0, 1.0) 。

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

2、random.randint(a , b) 随机生成 a 与 b 之间的整数[a, b]。

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

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

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

4、random.uniform(a, b) 随机生成 a 与 b 之间的浮点数[a, 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)

  1. rand函数根据给定维度生成[0,1]之间的数据,包含0,不包含1
  2. dn表格每个维度
  3. 返回值为指定维度的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)

  1. randn函数返回一个或一组样本,具有标准正态分布。
  2. dn表格每个维度
  3. 返回值为指定维度的array
  4. 标准正态分布—-standard normal distribution
  5. 标准正态分布又称为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')

  1. 返回随机整数,范围区间为[low,high),包含low,不包含high
  2. 参数:low为最小值,high为最大值,size为数组维度大小,dtype为数据类型,默认的数据类型是np.int
  3. 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()

  1. np.random.seed()的作用:使得随机数据可预测。
  2. 当我们设置相同的seed,每次生成的随机数相同。如果不设置seed,则每次会生成不同的随机数

以上所述是小编给大家介绍的Python基础random模块随机数的生成详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python基于回溯法子集树模板解决0-1背包问题实例
Sep 02 Python
简单了解python模块概念
Jan 11 Python
教你用Python写安卓游戏外挂
Jan 11 Python
浅谈DataFrame和SparkSql取值误区
Jun 09 Python
python 读取文本文件的行数据,文件.splitlines()的方法
Jul 12 Python
python 多线程串行和并行的实例
Feb 22 Python
python函数的万能参数传参详解
Jul 26 Python
python如何将两个txt文件内容合并
Oct 18 Python
pytorch实现特殊的Module--Sqeuential三种写法
Jan 15 Python
Python实现图像的垂直投影示例
Jan 17 Python
python关于变量名的基础知识点
Mar 03 Python
python3检查字典传入函数键是否齐全的实例
Jun 05 Python
Python基本数据结构与用法详解【列表、元组、集合、字典】
Mar 23 #Python
Django异步任务之Celery的基本使用
Mar 23 #Python
深入解析Python小白学习【操作列表】
Mar 23 #Python
Python基础之条件控制操作示例【if语句】
Mar 23 #Python
Python基础之循环语句用法示例【for、while循环】
Mar 23 #Python
详解python中sort排序使用
Mar 23 #Python
Python基础之函数的定义与使用示例
Mar 23 #Python
You might like
php垃圾代码优化操作代码
2010/08/05 PHP
php源代码安装常见错误与解决办法分享
2013/05/28 PHP
php自定义的格式化时间示例代码
2013/12/05 PHP
php加密解密实用类分享
2014/01/07 PHP
php基于curl实现随机ip地址抓取内容的方法
2016/10/11 PHP
php微信公众平台开发(四)回复功能开发
2016/12/06 PHP
基于thinkPHP类的插入数据库操作功能示例
2017/01/06 PHP
PHP数据对象映射模式实例分析
2019/03/29 PHP
javascript iframe中打开文件,并检测iframe存在否
2008/12/28 Javascript
动态表格Table类的实现
2009/08/26 Javascript
JQuery入门—编写一个简单的JQuery应用案例
2013/01/03 Javascript
jQuery实现按钮的点击 全选/反选 单选框/复选框 文本框 表单验证
2015/06/25 Javascript
浅析Node.js的Stream模块中的Readable对象
2015/07/29 Javascript
jQuery Validate初步体验(二)
2015/12/12 Javascript
微信小程序 教程之引用
2016/10/18 Javascript
微信小程序 获取微信OpenId详解及实例代码
2016/10/31 Javascript
html中鼠标滚轮事件onmousewheel的处理方法
2016/11/11 Javascript
Vue+Express实现登录注销功能的实例代码
2019/05/05 Javascript
微信小程序项目总结之记账小程序功能的实现(包括后端)
2019/08/20 Javascript
ES6字符串的扩展实例
2020/12/21 Javascript
python中Flask框架简单入门实例
2015/03/21 Python
Python实现按中文排序的方法示例
2018/04/25 Python
在python中实现强制关闭线程的示例
2019/01/22 Python
详解python算法之冒泡排序
2019/03/05 Python
Python单元测试与测试用例简析
2019/11/09 Python
python-web根据元素属性进行定位的方法
2019/12/13 Python
Python 格式化输出_String Formatting_控制小数点位数的实例详解
2020/02/04 Python
HTML5中外部浏览器唤起微信分享功能的代码
2020/09/15 HTML / CSS
火锅店创业计划书范文
2014/02/02 职场文书
2014年情人节活动方案
2014/02/16 职场文书
探亲假请假条
2014/04/11 职场文书
护士求职自荐信范文
2015/03/04 职场文书
学校安全管理制度
2015/08/06 职场文书
百善孝为先:关于孝道的经典语录
2019/10/18 职场文书
2022年四月新番
2022/03/15 日漫
Mysql 如何合理地统计一个数据库里的所有表的数据量
2022/04/18 MySQL