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 相关文章推荐
10款最好的Web开发的 Python 框架
Mar 18 Python
python字符串编码识别模块chardet简单应用
Jun 15 Python
python中numpy基础学习及进行数组和矢量计算
Feb 12 Python
Django+JS 实现点击头像即可更改头像的方法示例
Dec 26 Python
使用python实现mqtt的发布和订阅
May 05 Python
python opencv 二值化 计算白色像素点的实例
Jul 03 Python
python使用requests.session模拟登录
Aug 09 Python
Python爬虫scrapy框架Cookie池(微博Cookie池)的使用
Jan 13 Python
Python中常见的导入方式总结
May 06 Python
详解python字符串驻留技术
May 21 Python
Python中递归以及递归遍历目录详解
Oct 24 Python
用Python爬取英雄联盟的皮肤详细示例
Dec 06 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
dedecms系统常用术语汇总
2007/04/03 PHP
php获取ip的三个属性区别介绍(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)
2012/09/23 PHP
3个PHP多维数组转为一维数组的方法实例
2014/03/13 PHP
PHP ajax 异步执行不等待执行结果的处理方法
2015/05/27 PHP
在WordPress中使用wp-cron插件来设置定时任务
2015/12/10 PHP
PHP7扩展开发之基于函数方式使用lib库的方法详解
2018/01/15 PHP
浅谈laravel-admin的sortable和orderby使用问题
2019/10/03 PHP
fckeditor 获取文本框值的实现代码
2009/02/09 Javascript
JavaScript 函数式编程的原理
2009/10/16 Javascript
Javascript和Ajax中文乱码吐血版解决方案
2009/12/21 Javascript
html中table数据排序的js代码
2011/08/09 Javascript
简单选项卡 js和jquery制作方法分享
2014/02/26 Javascript
js与css实现弹出层覆盖整个页面的方法
2014/12/13 Javascript
纯javascript实现四方向文本无缝滚动效果
2015/06/16 Javascript
javascript中Date()函数在各浏览器中的显示效果
2015/06/18 Javascript
javascript计时器编写过程与实现方法
2016/02/29 Javascript
JS实现预加载视频音频/视频获取截图(返回canvas截图)
2017/10/09 Javascript
微信小程序自定义组件实现环形进度条
2020/11/17 Javascript
Python ljust rjust center输出
2008/09/06 Python
使用scrapy实现爬网站例子和实现网络爬虫(蜘蛛)的步骤
2014/01/23 Python
python写入xml文件的方法
2015/05/08 Python
如何高效使用Python字典的方法详解
2017/08/31 Python
pandas 条件搜索返回列表的方法
2018/10/30 Python
Django之提交表单与前后端交互的方法
2019/07/19 Python
python利用itertools生成密码字典并多线程撞库破解rar密码
2019/08/12 Python
通过实例了解python property属性
2019/11/01 Python
opencv-python 读取图像并转换颜色空间实例
2019/12/09 Python
基于python连接oracle导并出数据文件
2020/04/28 Python
python 写一个文件分发小程序
2020/12/05 Python
CSS3制作彩色进度条样式的代码示例分享
2016/06/23 HTML / CSS
台湾生鲜宅配:大口市集
2017/10/14 全球购物
ABOUT YOU罗马尼亚:超过600个时尚品牌
2019/09/19 全球购物
蔻驰英国官网:COACH英国
2020/07/19 全球购物
体育教育毕业生自荐信
2013/11/21 职场文书
工伤事故处理协议书怎么写
2014/10/15 职场文书
仙境之桥观后感
2015/06/16 职场文书