为何torch.linalg.eig计算的特征对无法通过特征对测试?
特征对测试失败的原因分析
问题重现
运行代码:
import torch torch.manual_seed(47) m = torch.rand([8, 8]) eigvals, eigvecs = torch.linalg.eig(m) print(m.type(torch.complex64) @ eigvecs[0] - eigvals[0] * eigvecs[0]) # 预期结果应趋近于0
得到输出:
tensor([ 2.2827+0.0995j, -0.9539-0.0442j, -1.9871-0.0204j, -0.6442-0.0372j, -0.8338-0.0518j, 1.2168-0.0077j, 0.4924-0.5008j, 0.9643+0.4292j])
核心问题
为何特征对测试未得到趋近于0的结果?
原因解析
- 特征向量索引错误:
torch.linalg.eig返回的eigvecs中,每一列对应一个特征向量,而非每一行。代码中eigvecs[0]取的是矩阵的第一行,并非与eigvals[0]对应的特征向量,自然无法满足Mv = λv的特征方程。 - 正确的索引方式:应取
eigvecs[:, 0]来获取与eigvals[0]匹配的特征向量。修改后重新运行代码,结果会趋近于0向量:
输出示例(近似值):print(m.type(torch.complex64) @ eigvecs[:, 0] - eigvals[0] * eigvecs[:, 0])tensor([ 1.1921e-07+0.0000e+00j, -2.3842e-07+0.0000e+00j, 0.0000e+00+0.0000e+00j, 0.0000e+00+0.0000e+00j, 0.0000e+00+0.0000e+00j, 0.0000e+00+0.0000e+00j, 0.0000e+00+0.0000e+00j, 0.0000e+00+0.0000e+00j])
内容的提问来源于stack exchange,提问作者Moon
相关产品推荐
相关产品推荐

