scipy.stats.multivariate_normal#

scipy.stats.multivariate_normal = <scipy.stats._multivariate.multivariate_normal_gen object>[source]#

多元正态随机变量。

mean 关键字指定均值。cov 关键字指定协方差矩阵。

参数:
meanarray_like,默认:[0]

分布的均值。

covarray_like 或 Covariance,默认:[1]

分布的正定协方差矩阵。

allow_singularbool,默认:False

是否允许协方差矩阵为奇异矩阵。如果covCovariance 对象,则此项将被忽略。

seed{None、int、np.random.RandomState、np.random.Generator},可选

用于绘制随机多元体。如果 seedNone,则使用 RandomState 单例。如果 seed 是整数,则使用新的 RandomState 实例,并使用 seed 播种。如果 seed 已经是 RandomStateGenerator 实例,则使用该对象。默认值为 None

说明

将参数 mean 设置为 None 等效于将 mean 设置为零向量。参数 cov 可以是标量,在这种情况下协方差矩阵就是该值乘以单位矩阵,协方差矩阵的对角线元素的向量,二维类似数组或 Covariance 对象。

协方差矩阵 cov 可以是 Covariance 子类的实例,例如 scipy.stats.CovViaPrecision。如果是这样,则忽视 allow_singular

否则,当 allow_singular 为 True 时,cov 必须是对称正半定矩阵;当 allow_singular 为 False 时,它必须是(严格的)正定矩阵。不对称性进行检查;仅使用下三角部分。以伪行列式和伪逆计算 cov 的行列式和逆,以便 cov 不必具有满秩。

以下为 multivariate_normal 的概率密度函数:

\[f(x) = \frac{1}{\sqrt{(2 \pi)^k \det \Sigma}} \exp\left( -\frac{1}{2} (x - \mu)^T \Sigma^{-1} (x - \mu) \right),\]

其中 \(\mu\) 是均值,\(\Sigma\) 是协方差矩阵,\(k\)\(\Sigma\) 的秩。在 \(\Sigma\) 为奇异值的情况下,SciPy 根据 [1] 扩展此定义。

在 0.14.0 版本中添加。

参考

[1]

多元正态分布 - 非常规情况,维基百科,https://en.wikipedia.org/wiki/Multivariate_normal_distribution#Degenerate_case

示例

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> from scipy.stats import multivariate_normal
>>> x = np.linspace(0, 5, 10, endpoint=False)
>>> y = multivariate_normal.pdf(x, mean=2.5, cov=0.5); y
array([ 0.00108914,  0.01033349,  0.05946514,  0.20755375,  0.43939129,
        0.56418958,  0.43939129,  0.20755375,  0.05946514,  0.01033349])
>>> fig1 = plt.figure()
>>> ax = fig1.add_subplot(111)
>>> ax.plot(x, y)
>>> plt.show()
../../_images/scipy-stats-multivariate_normal-1_00_00.png

也可以调用该对象(作为函数)固定均值和协方差参数,返回一个“固定的”多元正态随机变量

>>> rv = multivariate_normal(mean=None, cov=1, allow_singular=False)
>>> # Frozen object with the same methods but holding the given
>>> # mean and covariance fixed.

只要最后一个轴标记的成分,输入分位数可以是任何形状的数组。例如,这使我们可以按如下方式在 2D 中显示非各向异性随机变量的固定 pdf

>>> x, y = np.mgrid[-1:1:.01, -1:1:.01]
>>> pos = np.dstack((x, y))
>>> rv = multivariate_normal([0.5, -0.2], [[2.0, 0.3], [0.3, 0.5]])
>>> fig2 = plt.figure()
>>> ax2 = fig2.add_subplot(111)
>>> ax2.contourf(x, y, rv.pdf(pos))
../../_images/scipy-stats-multivariate_normal-1_01_00.png

方法

pdf(x, mean=None, cov=1, allow_singular=False)

概率密度函数。

logpdf(x, mean=None, cov=1, allow_singular=False)

概率密度函数的对数。

cdf(x, mean=None, cov=1, allow_singular=False, maxpts=1000000*dim, abseps=1e-5, releps=1e-5, lower_limit=None)

累积分布函数。

logcdf(x, mean=None, cov=1, allow_singular=False, maxpts=1000000*dim, abseps=1e-5, releps=1e-5)

累积分布函数的对数。

rvs(mean=None, cov=1, size=1, random_state=None)

从多元正态分布中绘制随机样本。

entropy(mean=None, cov=1)

计算多元正态的微分熵。

fit(x, fix_mean=None, fix_cov=None)

将多元正态分布拟合到数据。