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
是否允许协方差矩阵为奇异矩阵。如果cov 是
Covariance
对象,则此项将被忽略。- seed{None、int、np.random.RandomState、np.random.Generator},可选
用于绘制随机多元体。如果 seed 为 None,则使用 RandomState 单例。如果 seed 是整数,则使用新的
RandomState
实例,并使用 seed 播种。如果 seed 已经是RandomState
或Generator
实例,则使用该对象。默认值为 None。
- meanarray_like,默认:
说明
将参数 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()
也可以调用该对象(作为函数)固定均值和协方差参数,返回一个“固定的”多元正态随机变量
>>> 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))
方法
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)
将多元正态分布拟合到数据。