You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:45:48