方法
random.Generator.
multivariate_normal
从多元正态分布中随机抽取样本。
多元正态分布、多重正态分布或高斯分布是一维正态分布向更高维度的推广。这种分布由其均值和协方差矩阵来表示。这些参数类似于一维正态分布的平均值(平均值或“中心”)和方差(标准差或“宽度”,平方)。
n维分布的平均值。
分布的协方差矩阵。它必须是对称的和正半定的,才能进行适当的采样。
例如,给定一个形状, (m,n,k) , m*n*k 生成样本,并将其包装在 m -按“n”按“k”排列。因为每个样本 N -尺寸,输出形状为 (m,n,k,N) . 如果未指定形状,则 (N -d)样品退回。
(m,n,k)
m*n*k
(m,n,k,N)
协方差矩阵非正半定时的行为。
检查协方差矩阵中奇异值时的公差。在检查之前,cov被铸造成两倍。
cov输入用于计算因子矩阵a,从而 A @ A.T = cov . 此参数用于选择用于计算因子矩阵A的方法。默认方法“svd”是最慢的方法,而“cholesky”是最快的方法,但不如最慢的方法健壮。方法 eigh 使用特征分解计算A,比svd快,但比cholesky慢。
A @ A.T = cov
1.18.0 新版功能.
提取的样品,形状 size ,如果提供的话。如果不是,形状是 (N,) .
(N,)
换句话说,每个条目 out[i,j,...,:] 是从分布中提取的N维值。
out[i,j,...,:]
笔记
平均值是N维空间中的一个坐标,它表示最有可能生成样本的位置。这类似于一维或单变量正态分布的钟形曲线的峰值。
协方差表示两个变量一起变化的水平。从多元正态分布中,我们得到了n维样本。 . 协方差矩阵元 是的协方差 和 . 元素 是的方差 (即“分摊”)。
不指定完全协方差矩阵,常用的近似值包括:
球面协方差 (cov 是单位矩阵的倍数) 对角线协方差 (cov 具有非负元素,且仅在对角线上)
球面协方差 (cov 是单位矩阵的倍数)
对角线协方差 (cov 具有非负元素,且仅在对角线上)
通过绘制生成的数据点,可以在二维中看到这种几何特性:
>>> 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()
注意协方差矩阵必须是半正定的(也就是非负定的)。否则,该方法的行为是未定义的,不能保证向后兼容性。
工具书类
Papulis,A.,“概率、随机变量和随机过程”,第3版,纽约:McGraw-Hill,1991年。
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.U正常(平均值,cov,(3,3),method='cholesky')>>>y.shape(3,3,2)
考虑到0.6大约是标准偏差的两倍,以下可能是正确的:
>>> list((x[0,0,:] - mean) < 0.6) [True, True] # random