scipy.stats.Covariance.
from_precision#
- static Covariance.from_precision(precision, covariance=None)[source]#
从其精度矩阵返回协方差的表示。
- 参数:
- precisionarray_like
精度矩阵;即平方、对称、正定协方差矩阵的逆。
- covariancearray_like, 可选
平方、对称、正定协方差矩阵。如果未提供,则可能需要通过反转 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