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

为何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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 07:25:57