详解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实现快速多线程ping的方法
Jul 15 Python
Python heapq使用详解及实例代码
Jan 25 Python
python3使用PyMysql连接mysql数据库实例
Feb 07 Python
利用python获取当前日期前后N天或N月日期的方法示例
Jul 30 Python
Python实现的多线程同步与互斥锁功能示例
Nov 30 Python
Sanic框架配置操作分析
Jul 17 Python
Python提取特定时间段内数据的方法实例
Apr 01 Python
pytorch多进程加速及代码优化方法
Aug 19 Python
Python单元测试模块doctest的具体使用
Feb 10 Python
如何一键升级Python所有包
Nov 05 Python
python 合并多个excel中同名的sheet
Jan 22 Python
Python 数据可视化之Bokeh详解
Nov 02 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
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/03/02 无线电
php中unserialize返回false的解决方法
2014/09/22 PHP
php封装一个异常的处理类
2017/06/08 PHP
PHP设计模式(六)桥连模式Bridge实例详解【结构型】
2020/05/02 PHP
获取页面高度,窗口高度,滚动条高度等参数值getPageSize,getPageScroll
2006/09/22 Javascript
javascript 写类方式之二
2009/07/05 Javascript
jquery制作select列表双向选择示例代码
2014/09/02 Javascript
node.js中的http.response.addTrailers方法使用说明
2014/12/14 Javascript
javascript正则表达式之search()用法实例
2015/01/19 Javascript
js检测判断日期大于多少天的方法
2015/05/04 Javascript
jquery实现用户打分评分特效
2015/05/28 Javascript
js判断子窗体是否关闭的方法
2015/08/11 Javascript
JavaScript缓冲运动实现方法(2则示例)
2016/01/08 Javascript
详解jQuery中基本的动画方法
2016/12/14 Javascript
jQuery基于xml格式数据实现模糊查询及分页功能的方法
2016/12/25 Javascript
JS排序算法之希尔排序与快速排序实现方法
2017/12/12 Javascript
js 图片转base64的方式(两种)
2018/04/24 Javascript
jQuery中ajax请求后台返回json数据并渲染HTML的方法
2018/08/08 jQuery
vue中格式化时间过滤器代码实例
2019/04/17 Javascript
react高阶组件添加和删除props
2019/04/26 Javascript
微信小程序mpvue点击按钮获取button值的方法
2019/05/29 Javascript
[19:54]夜魇凡尔赛茶话会 第一期02:看图识人
2021/03/11 DOTA
对于Python异常处理慎用“except:pass”建议
2015/04/02 Python
Python中用memcached来减少数据库查询次数的教程
2015/04/07 Python
澳大利亚免息网上购物:Shop Zero
2016/09/17 全球购物
名人珠宝设计师:Melinda Maria Jewelry
2019/03/06 全球购物
Notino希腊:购买香水和美容产品
2019/07/25 全球购物
Crabtree & Evelyn欧盟:豪华洗浴、身体和护发
2021/03/09 全球购物
初二政治教学反思
2014/01/12 职场文书
初一家长会邀请函
2014/01/31 职场文书
仓库管理员岗位职责
2014/03/19 职场文书
走群众路线学习心得体会
2014/10/31 职场文书
2014年测量员工作总结
2014/12/12 职场文书
同意离婚答辩状
2015/05/22 职场文书
企业党建工作总结2015
2015/05/26 职场文书
SpringBoot整合Redis入门之缓存数据的方法
2021/11/17 Redis