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 相关文章推荐
pytyon 带有重复的全排列
Aug 13 Python
Python实现在Linux系统下更改当前进程运行用户
Feb 04 Python
Python CSV模块使用实例
Apr 09 Python
pygame播放音乐的方法
May 19 Python
对Python中range()函数和list的比较
Apr 19 Python
Django项目开发中cookies和session的常用操作分析
Jul 03 Python
Python enumerate函数功能与用法示例
Mar 01 Python
如何通过雪花算法用Python实现一个简单的发号器
Jul 03 Python
Python 静态方法和类方法实例分析
Nov 21 Python
Tensorflow tf.nn.depthwise_conv2d如何实现深度卷积的
Apr 20 Python
pandas实现导出数据的四种方式
Dec 13 Python
基于Python和openCV实现图像的全景拼接详细步骤
Oct 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
php 接口类与抽象类的实际作用
2009/11/26 PHP
深入解析phpCB批量转换的代码示例
2013/06/27 PHP
对php 判断http还是https,以及获得当前url的方法详解
2019/01/15 PHP
Yii框架模拟组件调用注入示例
2019/11/11 PHP
jquery图片上下tab切换效果
2011/03/18 Javascript
Javascript的数组与字典用法与遍历对象的属性技巧
2012/11/07 Javascript
使用jQuery fancybox插件打造一个实用的数据传输模态弹出窗体
2013/01/15 Javascript
jquery属性选择器not has怎么写 行悬停高亮显示
2013/11/13 Javascript
jQuery使用ajaxSubmit()提交表单示例
2014/04/04 Javascript
JS获取当前网页大小以及屏幕分辨率等
2014/09/05 Javascript
JavaScript中对象property的删除方法介绍
2014/12/30 Javascript
全面解析Bootstrap手风琴效果
2020/04/17 Javascript
微信JS接口大全
2016/08/25 Javascript
原生js实现倒计时--2018
2017/02/21 Javascript
vue动态绑定组件子父组件多表单验证功能的实现代码
2018/05/14 Javascript
JavaScript创建对象方法实例小结
2018/09/03 Javascript
Vue 重置组件到初始状态的方法示例
2018/10/10 Javascript
利用Vconsole和Fillder进行移动端抓包调试方法
2019/03/05 Javascript
javascript canvas API内容整理
2020/02/16 Javascript
Python cookbook(数据结构与算法)筛选及提取序列中元素的方法
2018/03/19 Python
Linux下python与C++使用dlib实现人脸检测
2018/06/29 Python
Python测试网络连通性示例【基于ping】
2018/08/03 Python
利用Python+阿里云实现DDNS动态域名解析的方法
2019/04/01 Python
django基础学习之send_mail功能
2019/08/07 Python
python利用xpath爬取网上数据并存储到django模型中
2021/02/26 Python
用HTML5的canvas实现一个炫酷时钟效果
2016/05/20 HTML / CSS
有原因的手表:Flex Watches
2019/03/23 全球购物
请介绍一下WSDL的文档结构
2013/03/17 面试题
英文版区域经理求职信
2013/10/23 职场文书
物业管理毕业生个人的求职信
2013/11/30 职场文书
一般基层干部群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书
2015年全民国防教育日活动总结
2015/03/23 职场文书
银行保安拾金不昧表扬稿
2015/05/05 职场文书
2015年科协工作总结
2015/05/19 职场文书
2016年教师节感恩寄语
2015/12/04 职场文书
MySQL中in和exists区别详解
2021/06/03 MySQL