np.linalg.eigvalsh返回负特征值的问题排查与解决求助
协方差矩阵np.linalg.eigvalsh返回负特征值问题求助
我有一个7x7的协方差矩阵(以Numpy数组表示):
import numpy as np t = np.array( [ [1.4, 0.3, 0.4, 0.8, 0.4, 0.9, 0.3], [0.3, 1.3, 0.4, 2.3, 0.4, 2.4, 0.4], [0.4, 0.4, 1.3, 2.8, 0.4, 1.0, 0.3], [0.8, 2.3, 2.8, 9.5, 1.0, 7.0, 1.0], [0.4, 0.4, 0.4, 1.0, 1.1, 1.2, 0.3], [0.9, 2.4, 1.0, 7.0, 1.2, 7.7, 1.0], [0.3, 0.4, 0.3, 1.0, 0.3, 1.0, 0.5], ], dtype=np.float64, )
我已验证该矩阵是对称矩阵:
np.allclose(t, t.T) # 输出:True
通过np.linalg.svd能得到有效的非负奇异值,但np.linalg.eigvalsh却返回了负特征值:
min(np.linalg.eigvalsh(t)) # 输出:-0.06473876145336957
这让我困惑,因为我已经通过行最简形验证了矩阵的列是线性无关的:
import sympy reduced_form, inds = sympy.Matrix(t).rref()
我查阅过类似问题的解决方案,但都没有效果,比如关于scipy.eigh返回负特征值、numpy.cov或eigvals结果异常的相关讨论。
请问有人遇到过np.linalg.eigvalsh的类似问题吗?能否提供解决建议?十分感谢。
内容的提问来源于stack exchange,提问作者vpy
相关产品推荐
相关产品推荐

