scipy.stats.Covariance.

from_precision#

static Covariance.from_precision(precision, covariance=None)[源代码]#

从精度矩阵返回协方差的表示。

参数:
precision类数组

精度矩阵;即,一个方阵、对称、正定的协方差矩阵的逆矩阵。

covariance类数组,可选

方阵、对称、正定的协方差矩阵。 如果未提供,可能需要计算此矩阵(例如,通过求 precision 的逆来评估 scipy.stats.multivariate_normal 的累积分布函数)。

说明

设协方差矩阵为 \(A\),其精度矩阵为 \(P = A^{-1}\)\(L\) 为下三角 Cholesky 因子,使得 \(L L^T = P\)。数据点 \(x\) 的白化通过计算 \(x^T L\) 来执行。\(\log\det{A}\) 计算为 \(-2tr(\log{L})\),其中 \(\log\) 操作是按元素执行的。

这个 Covariance 类不支持奇异协方差矩阵,因为奇异协方差矩阵不存在精度矩阵。

示例

准备一个对称正定精度矩阵 P 和一个数据点 x。(如果精度矩阵还不可用,请考虑 Covariance 类的其他工厂方法。)

>>> import numpy as np
>>> from scipy import stats
>>> rng = np.random.default_rng()
>>> n = 5
>>> P = rng.random(size=(n, n))
>>> P = P @ P.T  # a precision matrix must be positive definite
>>> x = rng.random(size=n)

创建 Covariance 对象。

>>> cov = stats.Covariance.from_precision(P)

比较 Covariance 对象的功能与参考实现。

>>> res = cov.whiten(x)
>>> ref = x @ np.linalg.cholesky(P)
>>> np.allclose(res, ref)
True
>>> res = cov.log_pdet
>>> ref = -np.linalg.slogdet(P)[-1]
>>> np.allclose(res, ref)
True