详解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模拟新浪微博登陆功能(新浪微博爬虫)
Dec 24 Python
利用python程序帮大家清理windows垃圾
Jan 15 Python
Python编写一个闹钟功能
Jul 11 Python
在python tkinter中Canvas实现进度条显示的方法
Jun 14 Python
12个Python程序员面试必备问题与答案(小结)
Jun 24 Python
Python networkx包的实现
Feb 14 Python
python实现控制台输出彩色字体
Apr 05 Python
python3中datetime库,time库以及pandas中的时间函数区别与详解
Apr 16 Python
Java Unsafe类实现原理及测试代码
Sep 15 Python
通过实例解析python and和or使用方法
Nov 14 Python
Python OpenCV超详细讲解基本功能
Apr 02 Python
利用Python脚本写端口扫描器socket,python-nmap
Jul 23 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中json_encode、json_decode与serialize、unserialize的性能测试分析
2010/06/09 PHP
深入php之规范编程命名小结
2013/05/15 PHP
php生成二维码的几种方式整理及使用实例
2013/06/03 PHP
PHP使用DES进行加密与解密的方法详解
2013/06/06 PHP
php中文字符串截取方法实例总结
2014/09/30 PHP
PHP 实现字符串翻转(包含中文汉字)的实现代码
2017/04/01 PHP
Laravel框架实现的使用smtp发送邮件功能示例
2019/03/12 PHP
把JS与CSS写在同一个文件里的书写方法
2007/06/02 Javascript
JQuery 实现的页面滚动时浮动窗口控件
2009/07/10 Javascript
JavaScript在IE和FF下的兼容性问题
2014/05/19 Javascript
如何判断微信内置浏览器(通过User Agent实现)
2014/09/01 Javascript
JavaScript对象数组排序实例方法浅析
2016/06/15 Javascript
使用vue.js制作分页组件
2016/06/27 Javascript
js实现界面向原生界面发消息并跳转功能
2016/11/22 Javascript
通过sails和阿里大于实现短信验证
2017/01/04 Javascript
js实现tab切换效果
2017/02/16 Javascript
Nuxt.js 静态资源和打包的操作
2020/11/06 Javascript
Python实现在matplotlib中两个坐标轴之间画一条直线光标的方法
2015/05/20 Python
构建Python包的五个简单准则简介
2015/06/15 Python
Python实现屏幕截图的代码及函数详解
2016/10/01 Python
PyTorch的深度学习入门教程之构建神经网络
2019/06/27 Python
Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例
2020/03/04 Python
虚拟机下载python是否需要联网
2020/07/27 Python
CSS3实现超酷的黑猫警长首页
2016/04/26 HTML / CSS
详解canvas在圆弧周围绘制文本的两种写法
2018/05/22 HTML / CSS
Linux常见面试题
2016/10/04 面试题
历史专业大学生职业生涯规划书
2014/03/13 职场文书
学位证书委托书
2014/09/30 职场文书
群众路线个人自我剖析材料
2014/10/07 职场文书
2014年体育部工作总结
2014/11/13 职场文书
史上最牛的辞职信
2015/02/28 职场文书
中国式结婚:司仪主持词(范文)
2019/07/25 职场文书
Java循环队列与非循环队列的区别总结
2021/06/22 Java/Android
为什么RedisCluster设计成16384个槽
2021/09/25 Redis
mysql的Buffer Pool存储及原理
2022/04/02 MySQL
JS高级程序设计之class继承重点详解
2022/07/07 Javascript