Numpy中的常用随机函数常常用于按照某种概率统计规则来产生随机数,在机器学习和深度学习中,我们常常需要使用随机函数对一些参数进行初始化,而且在一些深度学习框架中,通常会使用与Numpy一致或者类似的接口函数。比如:

import torch
import tensorflow as tf# 创建采样(2, 2)的标准正太分布的张量
a = torch.randn(2, 3)
# 创建采样自[0, 10)区间的(2, 2)均匀分布的张量
b = tf.random.uniform((2, 2), 0, 10) print(a)
print(b)
​
tensor([[ 2.0729, -0.6350],[-1.8206, -0.8142]])
tf.Tensor(
[[9.330468  6.0732355][6.65187   4.6297417]], shape=(2, 2), dtype=float32)

本文主要总结一些在Numpy中比较常用的产生随机数的函数,为了方便我将这些随机函数分成两个部分:

  • 用于产生固定区间范围的随机数,称为基本随机数;
  • 用于按照某些分布概率统计规则来产生的随机数,称为分布随机数;

1. 基本随机数

random.rand(d0, d1, ..., dn),产生[0, 1)范围的浮点随机数

rand函数用于产生[0, 1)范围内的浮点随机数,其中参数dn表示第n个维度的长度。

import numpy as np# 产生shape为 (d0, d1,..., dn), 值为 [0, 1) 范围内的浮点随机数# 默认d0 = 1, 产生[0, 1)范围内的一个浮点随机数
a = np.random.rand()
# d0 = 2, 产生[0, 1)范围内的一维数组(向量)的浮点随机数
b = np.random.rand(2)
# d0 = 2, d1 = 3, 产生[0, 1)范围内的二维数组(矩阵)的浮点随机数
c = np.random.rand(2,3) print(a)
print(b)
print(c)0.575695284381402
[0.50852146 0.17941441]
[[0.07689737 0.17578407 0.16941739][0.63075319 0.86015553 0.88239051]]

random.random_sample(size),产生[0, 1)范围内的浮点随机数

random_sample函数用于产生[0, 1)范围的浮点随机数,其中参数size为产生数组的大小,如果不指定则会产生一个随机数。

这里需要注意:

  • rand和random_sample函数产生的都是[0, 1)范围内的浮点随机数,不过这两个函数的参数不同:

    • rand(d0, d1, ..., dn)中的参数dn用于指定维度的长度;
    • random_sample(size)中的参数size为产生数组的大小;
  • ranf、random、sample、random_sample这些方法使用方式与实现的功能都是一样的,如果查看Numpy官方文档也可以发现这些函数的示例都是相同的;
import numpy as np# 产生shape为size, 值为 [0, 1) 范围内的浮点随机数# 不指定size参数, 产生[0, 1)范围内的浮点随机数
a = np.random.random_sample()
# 指定size参数,产生[0, 1)范围内的二维数组(矩阵)的浮点随机数​
b = np.random.random_sample(size = (2, 3)) print(a)
print(b)0.8369940955261025
[[0.12079451 0.65141355 0.91492699][0.07162246 0.24889967 0.56503944]]

random.randint(low, high = None, size = None),产生[low, high)范围内的整型随机数​

random.randint随机函数用于产生[low, high)范围的随机整数,需要注意范围是"包左不包右",包含low但是不包含high。size为产生数组的大小。

import numpy as np# 产生shape为size, 值为 [low, high) 范围内的整型随机数# low = 0, high = 3, 产生[0, 3)范围内的一个整型随机数
a = np.random.randint(0, 3)
# low = 3, 产生[0, 3)范围内的一维数组(向量)的整型随机数
b = np.random.randint(3, size = 4)
# low = 0, high = 3, 产生[0, 3)范围内的二维数组(矩阵)的整型随机数
c = np.random.randint(0, 3, size = (2, 3))print(a)
print(b)
print(c)2
[0 2 1 1]
[[2 1 1][0 1 0]]

random.random_integers(low, high = None, size = None),产生[low, high]范围内的整型随机数

random_integers函数和randint函数是对应的,主要区别就在于randint函数的范围为[low, high)即"包左不包右",而random_integers函数的范围为[low, high]即"即包左又包右"。不过为了统一Numpy的接口,random_interger函数即将被摒弃,官方推荐使用randint函数来实现。如果想要将范围确定在[low, high]范围中,只需要将randint函数的size参数指定为(low, high + 1)。

小结

基本随机数函数小结

2. 常用的分布随机数

random.randn(d0, d1, ..., dn),产生标准正太分布(normal)分布的随机数

randn函数用于产生标准正太分布的随机数,其中参数dn表示第n个维度的长度。

import numpy as np# 产生shape为 (d0, d1,..., dn)的标准正态分布# 从标准正态部分中随机采样3个随机数
a = np.random.randn(3)
# 从标准正态分布中随机采样2 × 3个随机数,组成(2, 3)的二维数组(矩阵)
b = np.random.randn(2, 3)print(a)
print(b)[ 0.2203204   1.73158706 -0.78638403]
[[ 0.44799247 -0.37243396 -0.57481381][ 0.17644269  0.99336282 -0.55967673]]

random.normal(loc = 0.0, scale = 1.0, size = None),产生正态分布随机数​

normal函数产生正态分布的随机数,其中:

  • 参数loc对应数学中的期望μ,μ是正态分布的位置参数,描述正态分布集中趋势位置,与μ邻近的概率值越大,而远离μ的概率值越小。正态分布以X = μ为对称轴,左右完全对称。正态分布的期望、均数、中位数、众数相同,均等于μ;
  • 参数scale对应数学中的标准差σ,σ描述正态分布数据的离散程度,σ越大,数据的分布越分散,σ越小,数据分布越集中。σ也称为正态分布的形状参数,σ越大,曲线越扁平,反之,σ越小,曲线越高瘦;
  • 参数size为产生数组的大小;
import numpy as np# 产生shape为size的正态分布
mu, sigma = 0.1, 2.0
# 从μ = 0.1, σ = 2.0的正态部分中随机采样3个随机数
a = np.random.normal(mu, sigma, 3)
# 从μ = 0.1, σ = 2.0的正态部分中随机采样2 × 3个随机数,组成(2, 3)的二维数组(矩阵)
b = np.random.normal(mu, sigma, size = (2, 3))print(a)
print(b)[ 1.31578944 -1.16272895  2.50095739]
[[ 2.07134546 -0.62086584 -0.32091925][ 0.2286672  -1.13700916  0.09206429]]

这里需要注意,将normal函数的参数loc = 0, scale = 1.0,即μ = 0, σ = 1.0,期望为0方差为1的正态分布为标准正态分布,此时使用randn函数可以实现同样的效果。

random.uniform(low = 0.0, high = 1.0, size = None),产生均匀分布的随机数​

uniform函数在指定[low, high)范围内产生均匀分布的随机数。

import numpy as np# 产生shape为size范围在[low, high)内的均匀分布# low = 3, 输出向量, shape = (4, )
a = np.random.uniform(3, size = 4)
# low = 0, high = 3, 输出为标量, shape = ()
b = np.random.uniform(0, 3)
# low = 0, high = 3, 输出为矩阵, shape = (2, 3)
c = np.random.uniform(0, 3, size = (2, 3))print(a)
print(b)
print(c)[2.65418547 1.65702115 2.42128949 2.74215319]
1.253105912177019
[[2.11947645 2.85662794 2.33596866][0.86552208 2.9166298  1.55980368]]

小结

分布的随机数有很多,不过在深度学习中最常用的就是正态分布和均匀分布了。

常用分布函数小结

numpy产生一个大于0的随机数_Numpy中常用随机函数的总结相关推荐

  1. 【问题思考总结】一个大于0的数乘以无穷大一定是无穷大吗?【关于定点和动点,数和函数,定区间和变区间的辨析】

    问题 在看一道题的解析的时候,发现了这个问题,就是f′(c)(n−2)f'(c)(n-2)f′(c)(n−2)当n趋于无穷且f′(c)>0f'(c)>0f′(c)>0的时候,为什么取 ...

  2. matlab 随机数大于0,Matlab 随机数 小结

    1,rand 生成均匀分布的伪随机数.分布在(0~1)之间 语法:rand(m,n)生成m行n列的均匀分布的伪随机数 rand(m,n,'double')生成指定精度的均匀分布的伪随机数,参数还可以是 ...

  3. java统计大于0的个数_java中0的问题(依据0统计数量时出错)

    大侠们: 我使用sql语句和后台程序代码统计航班数量,如果依据大于等于1的值做统计,他们两个得出的结果是一样的:如果依据0做统计,结果是不一样,谁知道怎么回事(0不是除数)?先谢谢各位了... 问题是 ...

  4. 【每日一练:SQL】写一条SQL统计连续三个月金额大于0及每个月的金额

    写一条SQL统计连续在三个月金额大于0及展现每个月的金额 需求: 下面是表FEE,字段是month(月份),service_id(电话号码),fee(出帐金额),请参看下面要求:    Month   ...

  5. Python:列表推导生成随机数矩阵(高教社,《Python编程基础及应用》习题4-10) (10分)---生成一个m行n列的元素值不大于20的随机数矩阵(二维列表)

    前言 PTA程序设计类教学平台-def函数 运行环境Python3.6 小白进阶之路的学习与记录之------列表 题目: 编写一个Python函数,生成一个m行n列的元素值不大于20的随机数矩阵(二 ...

  6. python尝试不同的随机数进行数据划分、使用卡方检验依次计算不同随机数划分下训练接和测试集所有分类特征的卡方检验的p值,如果所有p值都大于0.05则训练集和测试集都具有统计显著性、数据划分合理

    python尝试不同的随机数进行数据划分.使用卡方检验依次计算不同随机数划分下训练接和测试集所有分类特征(categorical)的卡方检验的p值,如果所有p值都大于0.05则退出循环.则训练集和测试 ...

  7. matlab给0数组赋值,MATLAB中怎么把一个函数的一部分赋值给一个变量或数组,比如怎么把sin(x)大于0的部分赋值给f....

    答:你可以编一个for循环么,判断sin(x)时候大于0,如果大于0 f=sin(x) 答:总体思路:设定筛选条件,将数组中符合条件的元素筛选出来(可以筛选出元素值也可以筛选出元素对应的下标),然后将 ...

  8. 求两个数字的乘积,如果大于0,说明两个数字同号,如果小于0,说明两个数字异号,如果等于0,说明其中一个是0

    学了java基础东西,就写了这个编程,求两个数字的乘积,如果大于0,说明两个数字同号,如果小于0,说明两个数字异号,如果等于0,说明其中一个是0 首先程序要求我们输入两个数字,我就用了Scanner来 ...

  9. 一个首项大于0的等差数列的前四项的和为26,前四项的积为880,求此数列。

    一个首项大于0的等差数列的前四项的和为26,前四项的积为880,求此数列. **输出格式要求:"%d," "......\n" (只输出前21个数,其他为... ...

最新文章

  1. 死磕Java并发:J.U.C之阻塞队列:PriorityBlockingQueue
  2. 23个经典JDK设计模式(转)
  3. 老男孩python21期作业_(禁闲聊)绘画讨论10个群第176期作业展示
  4. oracle三种连接身份
  5. Java知多少(56)线程模型
  6. C++类中静态变量和静态方法使用介绍!
  7. 谷粒商城:02. 数据库初始化以及SQL语句
  8. ts的小demo--贪吃蛇(尚硅谷教程笔记)
  9. Linux实现黑客帝国炫酷效果
  10. 员工转正述职答辩问什么问题_实习期员工转正述职报告
  11. 绘制confusion matrix的R实现
  12. Python遥感开发之GDAL读写遥感影像
  13. Python中的any函数
  14. Math Alg. Root 数学算法笔记:开根号
  15. 高通Q888内核源码分析--概述篇
  16. [《南国雪下》闲笔记事集]2010年12月15日 记雪
  17. gddr6速率_美光GDDR6内存可上20Gbps,带宽堪比HBM 2显存
  18. vcruntime140_1.dll无法继续执行代码如何修复?
  19. 小程序导航栏透明,精准设置小程序自定义标题的高度和定位
  20. 【经济学_01】通货膨胀 投资陷阱

热门文章

  1. xml文件中同时满足多个条件_问与答81: 如何求一组数据中满足多个条件的最大值?...
  2. 后置增强this advice advises no methods_增强消防意识 提高消防能力 重庆天一新城小学积极参加消防技能比赛活动...
  3. 剑指offer (04):二维数组中的查找 (C++ Python 实现)
  4. 模块化解耦框架RxFluxArchitecture3-订阅管理绑定生命周期
  5. html5 刷子,简单聊聊眼部刷子吧(打底刷、上色刷、晕染刷)
  6. linux命令行可以看图片吗,活久见!Linux命令行居然也可以用来查看图像?
  7. java 内存管理_高性能Java代码之内存管理
  8. 查看 php yii脚本位置,Yii框架分析(一)入口脚本index.php的启动过程剖析
  9. Layui表单账号注册校验密码是否一致
  10. Windows系统中使用SSH服务端和客户端