numpy.random.multivariate_normal()函数解析

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。简单的来水numpy在处理多维数组时会特别的方便,是深度学习的得力助手。

numpy.random.multivariate_normal()函数官方解释是从多元正态分布中随机抽取样本的函数。多元正态分布、多重正态分布或高斯分布它是一维正态分布向更高维度的推广。这种分布由其均值和协方差矩阵来表示。这些参数类似于一维正态分布的平均值(平均值或“中心”)和方差(标准差或“宽度”,平方)。啥啥啥?对于数学不好的我完全看不懂说的是什么。其实就是这个函数可以满足你的需求,生成一个指定维度的数组,而且生成的这个数组服从正态分布。

函数的原型为:numpy.random.multivariate_normal(mean, cov[, size, check_valid, tol]).接下来对参数进行解释。

mean:均值,n维分布的平均值,是一个一维数组长度为N.在标准正态分布里对应的就是图形的峰值。

cov:分布的协方差矩阵,它的形状必须是(n,n),也就是必须是一个行数和列数相等的类似正方形矩阵,它必须是对称的和正半定的,才能进行适当的采样。

size:指定生成样本的大小,是一个int类型或者int类型的元组。可选。例如,给定(m,n,k)的形状,则会生成m*n*k样本,并按m-x-n-x-k排列打包。因为每个样本都是N维的,所以输出形状是(m,n,k,N)。如果未指定形状,则返回单个(N-d)样本。

在这里需要说明的是mean和cov必须有相同的长度,否则编译的时候会报错。比如mean=[0,0],cov=[[1,0,0],[0,1,0],[0,0,1]],这样是不可以的因为mean的长度为2,而cov的形状是(3,3),这样在编译的时候会产生一个ValueError: mean and cov must have same length错误。再结合size中的例子,如果size指定(3,3)的元组,mean=[1,2],cov=[[1,0],[0,100]],那么输出的形状就是(3,3,2).

check_valid:可以为{‘warn‘、‘raise‘、‘ignore‘},可选,来指定协方差矩阵非正半定时的行为。

tol:浮点型,可选。检查协方差矩阵中的奇异值时的公差。

返回值:一个n维数组。如果指出了形状尺寸也就是前边的size,则生成的样本为指定的形状,如果没有提供size,则生成的样本形状为(n,)

补充知识点Note:

mean:平均值是N维空间中的一个坐标,它表示最有可能生成样本的位置。这类似于一维或单变量正态分布的钟形曲线的峰值。

cov:也就是Covariance,协方差表示两个变量在一起变化的程度。从多元正态分布中,我们得到了n维样本,x=[x_1,x_2,……xnn]。协方差矩阵元素c_i j_是x_i和x_j的协方差。元素c_ii_是x_i的方差(即其“排列”)。

在指定cov的时候,我们经常需要对角矩阵,这时我们可以使用numpy.eye()来直接生成一个对角矩阵,比如numpy.eye(2)就会生成对角矩阵[[1,0],[0,1]]

有两种情况可以不指定协方差矩阵:

球面协方差(cov是单位矩阵的倍数)

对角线协方差(COV具有非负元素,并且仅在对角线上)。

注意协方差矩阵必须是半正定的(也就是非负定的)。否则,该方法的行为是未定义的,不能保证向后兼容性。

1 import numpy as np
2 mean = (1, 2)
3 cov = [[1, 0], [0, 1]]
4 x = np.random.multivariate_normal(mean, cov, (3, 3))
5 print(x.shape)

可以看到输出结果为(3,3,2)。

原文地址:https://www.cnblogs.com/yangzepeng/p/10961480.html

时间: 2024-10-09 12:37:59

numpy.random.multivariate_normal()函数解析的相关文章

【转】np.random.random()函数 参数用法以及numpy.random系列函数大全

转自:https://www.cnblogs.com/DOMLX/p/9751471.html 1.np.random.random()函数参数 np.random.random((1000, 20)) 上面这个就代表生成1000行 20列的浮点数,浮点数都是从0-1中随机. 2.numpy.random.rand()函数用法 numpy.random.rand(d0, d1, ..., dn): 生成一个[0,1)之间的随机浮点数或N维浮点数组. 3.numpy.random.randn()函

numpy.random之常用函数

在实际开发中,我们经常会使用随机函数,比如交叉验证,构造测试数据等.下面,是我常用的几个生成随机样本的函数: 1,rand(n1,n2,-,nn) 每一维度都是[0.0,1.0)半闭半开区间上的随机分布 2,randn(n1,n2,-,nn) 返回一个样本,具有标准正态分布 3,random([size]) sample([size]) Random_sample([size]) 返回随机的浮点数,在半开区间 [0.0, 1.0). 如果想了解更多的函数,可以看下下面这篇博客,写的比较全: py

np.random.multivariate_normal方法浅析

从多元正态分布中抽取随机样本. 多元正态分布,多正态分布或高斯分布是一维正态分布向更高维度的推广.这种分布由其均值和协方差矩阵来确定.这些参数类似于一维正态分布的平均值(平均值或“中心”)和方差(标准差或“宽度”,平方). np.random.multivariate_normal方法用于根据实际情况生成一个多元正态分布矩阵,其在Python3中的定义如下: def multivariate_normal(mean, cov, size=None, check_valid=None, tol=N

numpy.random

在python数据分析的学习和应用过程中,经常需要用到numpy的随机函数,由于随机函数random的功能比较多,经常会混淆或记不住,下面我们一起来汇总学习下. import numpy as np 1 numpy.random.rand() numpy.random.rand(d0,d1,-,dn) rand函数根据给定维度生成[0,1)之间的数据,包含0,不包含1 dn表格每个维度 返回值为指定维度的array np.random.rand(4,2) array([[ 0.02173903,

numpy.random.randn()与rand()的区别

numpy中有一些常用的用来产生随机数的函数,randn()和rand()就属于这其中. numpy.random.randn(d0, d1, -, dn)是从标准正态分布中返回一个或多个样本值. numpy.random.rand(d0, d1, -, dn)的随机样本位于[0, 1)中. 代码: import numpy as np arr1 = np.random.randn(2,4) print(arr1) print('*********************************

numpy.random.randn()和numpy.random.rand()

1 numpy.random.rand() (1)numpy.random.rand(d0,d1,-,dn) rand函数根据给定维度生成[0,1)之间的数据,包含0,不包含1 dn表格每个维度 返回值为指定维度的array (2) print(np.random.rand(2,4))生成一个2行4列的0到1之间的数组 [[0.16965512 0.97445517 0.51992353 0.73377611] [0.91446815 0.65995296 0.67720307 0.348090

随机抽样 (numpy.random)

随机抽样 (numpy.random) 简单的随机数据 rand(d0, d1, ..., dn) 随机值 >>> np.random.rand(3,2) array([[ 0.14022471, 0.96360618], #random [ 0.37601032, 0.25528411], #random [ 0.49313049, 0.94909878]]) #random randn(d0, d1, ..., dn) 返回一个样本,具有标准正态分布. Notes For rando

[转]numpy.random.randn()用法

在python数据分析的学习和应用过程中,经常需要用到numpy的随机函数,由于随机函数random的功能比较多,经常会混淆或记不住,下面我们一起来汇总学习下. import numpy as np 1 numpy.random.rand() numpy.random.rand(d0,d1,…,dn) rand函数根据给定维度生成[0,1)之间的数据,包含0,不包含1 dn表格每个维度 返回值为指定维度的array np.random.rand(4,2) array([[ 0.02173903,

AngularJS指令中的compile与link函数解析

AngularJS指令中的compile与link函数解析 通常大家在使用ng中的指令的时候,用的链接函数最多的是link属性,下面这篇文章将告诉大家complie,pre-link,post-link的用法与区别. 原文地址 angularjs里的指令非常神奇,允许你创建非常语义化以及高度重用的组件,可以理解为web components的先驱者. 网上已经有很多介绍怎么使用指令的文章以及相关书籍,相互比较的话,很少有介绍compile与link的区别,更别说pre-link与post-lin