使用numpy.eigh做特征分解后重构矩阵与原矩阵不符的问题咨询
问题分析与解决
嘿,我一眼就瞅出问题所在啦——你用错了特征分解的函数!
为什么结果不符?
你使用的numpy.linalg.eigh是专门为**对称矩阵(或埃尔米特矩阵)**设计的特征分解工具。这类矩阵的特征向量是正交的,所以eigh返回的特征向量矩阵满足Qᵀ = Q⁻¹,它会默认按对称矩阵的逻辑处理输入。但你的原矩阵:
np.array([ [1, 3], [2, 5] ])
并不是对称矩阵(矩阵的(0,1)元素是3,(1,0)元素是2,二者不相等),用eigh处理非对称矩阵,得到的特征向量和特征值自然不符合一般矩阵的特征分解定理A = QΛQ⁻¹。
修正方案
对于任意方阵的特征分解,你应该使用numpy.linalg.eig函数,它能正确返回一般矩阵的特征值和特征向量,满足A = QΛQ⁻¹的关系。
修正后的代码如下:
import numpy as np from numpy import linalg as lg # 原矩阵 A = np.array([ [1, 3], [2, 5] ]) # 使用eig进行特征分解 Eigenvalues, Eigenvectors = lg.eig(A) Lambda = np.diag(Eigenvalues) # 重构矩阵 reconstructed_A = Eigenvectors @ Lambda @ lg.inv(Eigenvectors) print(reconstructed_A)
运行后会输出:
array([[1., 3.], [2., 5.]])
这个结果就和原矩阵完全一致啦!
另外补充一点:如果你的矩阵是对称的,用eigh会更高效且数值稳定性更好,因为它利用了对称矩阵的特性;但非对称矩阵一定要用eig哦。
内容的提问来源于stack exchange,提问作者user8270077
相关产品推荐
相关产品推荐

