scipy.stats.multivariate_normal.pdf报错:构造矩阵被判定非对称半正定的解决问询
问题原因与解决办法
- 核心错误:你用了元素逐点乘法
*计算协方差矩阵S,而非线性代数中定义的矩阵乘法@。Q.T * Q只是将转置后的Q与原Q对应位置元素相乘,得到的矩阵并非理论上的对称半正定矩阵Q^T Q。 - 修正代码:
import numpy as np import scipy.stats as sp L = np.array([1,2,3]) M = np.array([1,2,3]) Q = np.random.uniform(0,10,size=(3,3)) # 改用矩阵乘法@计算S S = Q.T @ Q # 可选:浮点精度下强制对称,避免微小误差引发问题 S = (S + S.T) / 2 print(sp.stats.multivariate_normal.pdf(L,M,S))
- 补充说明:由于浮点运算的精度限制,即使正确计算
Q.T @ Q,偶尔也会出现矩阵微小不对称的情况,用(S + S.T)/2可以强制矩阵对称,彻底规避这类报错。
内容的提问来源于stack exchange,提问作者Kookie
相关产品推荐
相关产品推荐

