为什么通过torch.linalg.eig计算出的特征对没有通过特征对测试?

问题描述 投票:0回答:1

运行以下代码:

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])  # Should be close to →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])

这是怎么回事?特征对测试怎么会失败?

pytorch linear-algebra eigenvalue eigenvector
1个回答
0
投票

torch.linalg.eig

文档指出,特征向量将由结果张量的给出(在你的例子中是
eigvecs
),你用
eigvecs[0]
得到的是第一个

使用

eigvecs.T[0]
eigenvecs[:, 0]
将产生预期结果:

print(m.type(torch.complex64) @ eigvecs.T[0] - eigvals[0] * eigvecs.T[0])
# >>> tensor([ 3.5763e-07+0.j,  5.9605e-07+0.j,  4.7684e-07+0.j,  2.3842e-07+0.j,
#              3.5763e-07+0.j,  2.3842e-07+0.j, -2.3842e-07+0.j,  1.1921e-07+0.j])
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.