当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python numpy Generator.multivariate_normal用法及代码示例


本文简要介绍 python 语言中 numpy.random.Generator.multivariate_normal 的用法。

用法:

random.Generator.multivariate_normal(mean, cov, size=None, check_valid='warn', tol=1e-8, *, method='svd')

从多元正态分布中抽取随机样本。

多元正态分布、多正态分布或高斯分布是一维正态分布向更高维度的推广。这种分布由其均值和协方差矩阵指定。这些参数类似于一维正态分布的均值(平均值或“center”)和方差(标准差或“width,”平方)。

参数

mean 一维 数组,长度为 N

N 维分布的平均值。

cov 2-D 数组,形状 (N, N)

分布的协方差矩阵。它必须是对称的和半正定的才能正确采样。

size int 或整数元组,可选

例如,给定一个形状,(m,n,k),m*n*k生成样本,并打包在一个m-经过-n-经过-k安排。因为每个样本都是N-维,输出形状为(m,n,k,N).如果未指定形状,则单个 (N-D) 样品被退回。

check_valid { ‘warn’, ‘raise’, ‘ignore’ },可选

协方差矩阵不是半正定时的行为。

tol 浮点数,可选

检查协方差矩阵中的奇异值时的容差。 cov 在检查前被强制加倍。

method { ‘svd’, ‘eigh’, ‘cholesky’},可选

cov 输入用于计算因子矩阵 A 使得A @ A.T = cov.此参数用于选择用于计算因子矩阵 A 的方法。默认方法 ‘svd’ 是最慢的,而 ‘cholesky’ 是最快的,但不如最慢的方法稳健。方法使用特征分解来计算 A 并且比 svd 快但比 cholesky 慢。

返回

out ndarray

绘制的样本,形状尺寸,如果提供的话。如果不是,形状是(N,).

换句话说,每个条目out[i,j,...,:] 是从分布中提取的 N 维值。

注意

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

协方差表示两个变量一起变化的水平。从多元正态分布中,我们抽取 N 维样本 。协方差矩阵元素 的协方差。元素 (即它的“spread”)的方差。

代替指定完整的协方差矩阵,流行的近似值包括:

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

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

通过绘制生成的data-points,可以在二维中看到此几何属性:

>>> mean = [0, 0]
>>> cov = [[1, 0], [0, 100]]  # diagonal covariance

对角协方差意味着点沿 x 或 y 轴定向:

>>> import matplotlib.pyplot as plt
>>> x, y = np.random.default_rng().multivariate_normal(mean, cov, 5000).T
>>> plt.plot(x, y, 'x')
>>> plt.axis('equal')
>>> plt.show()

请注意,协方差矩阵必须是半正定的(又名nonnegative-definite)。否则,此方法的行为是未定义的,并且不能保证向后兼容性。

参考

1

Papoulis, A.,“概率、随机变量和随机过程”,第 3 版,纽约:McGraw-Hill,1991 年。

2

Duda, R. O.、Hart, P. E. 和 Stork, D. G.,“模式分类”,第 2 版,纽约:Wiley,2001。

例子

>>> mean = (1, 2)
>>> cov = [[1, 0], [0, 1]]
>>> rng = np.random.default_rng()
>>> x = rng.multivariate_normal(mean, cov, (3, 3))
>>> x.shape
(3, 3, 2)

我们可以使用除默认方法之外的其他方法来分解 cov:

>>> y = rng.multivariate_normal(mean, cov, (3, 3), method='cholesky')
>>> y.shape
(3, 3, 2)

以下可能是正确的,因为 0.6 大约是标准偏差的两倍:

>>> list((x[0,0,:] - mean) < 0.6)
[True, True] # random

相关用法


注:本文由纯净天空筛选整理自numpy.org大神的英文原创作品 numpy.random.Generator.multivariate_normal。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。