scipy.stats.multivariate_normal#

scipy.stats.multivariate_normal = <scipy.stats._multivariate.multivariate_normal_gen object>[源代码]#

一个多元正态随机变量。

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

参数:
均值 : array_like, 默认: [0]array_like, 默认:

分布的均值。

cov : array_like 或 协方差, 默认: [1]类数组对象或

分布的对称正(半)定协方差矩阵。

allow_singular : bool, 默认: Falsebool, 默认值:

是否允许使用单一协方差矩阵。如果 cov 是一个 Covariance 对象,则此设置将被忽略。

种子{None, int, np.random.RandomState, np.random.Generator}, 可选

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

方法

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)

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

注释

将参数 mean 设置为 None 等同于让 mean 成为零向量。参数 cov 可以是一个标量,在这种情况下协方差矩阵是单位矩阵乘以该值,也可以是协方差矩阵的对角线项的向量,一个二维的 array_like,或者是一个 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] 扩展了这一定义。

Added in version 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中非各向同性随机变量的冻结概率密度函数:

>>> 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