numpy特征值正确,但特征向量错误

2024-10-01 13:26:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我的代码是

print numpy.linalg.eig([[1, 2, 3], [5, 4, 9], [63, 7, 5]])

输出是

(阵列([21.61455381,-9.76720959,-1.84734422]),阵列([-0.17186028,-0.14352001,0.03651047], [-0.48646994,-0.50447076,-0.8471429], [-0.85662772,0.8514172,0.53010931]]))

我正在使用一个在线特征向量计算器来验证http://www.arndt-bruenner.de/mathe/scripts/engl_eigenwert2.htm 答案如下:

实特征值:{-9.76720958880448;-1.847344216323611;21.61455380512816}

特征向量:

对于特征值-9.76720958880448: [-0.1685660264358372;-0.5925071319066865;1]

对于特征值-1.847344216323611: [0.06887346700751434;1.5980532339710003;1]

2861455116特征值: [0.20062423644695662;0.5678895584242702;1]

值显然不匹配。我哪里出错了?在


Tags: 代码numpyhttpwwwscriptsde计算器print
2条回答

实际上,特征向量是正确的,但是表示有点混乱。如果eig的输出是

(array([1, 2, 3]), array([[1, 2, 3], [4, 6, -5], [1, -3, 0]]))

这并不是说特征向量是[1,2,3],[4,6,-5]和[1,-3,0]。相反,这些是矩阵中的行,其列是特征向量:

[1  2  3]
[4  6 -5]
[1 -3  0]

所以在这个虚构的例子中,特征向量是[1,4,1],[2,6,-3]和[3,-5,0],分别对应于特征值1、2和3。注意,这些数字是我编出来的,所以它们在数学上对任何矩阵都没有意义。在

它们确实匹配(有点…)。在

这些特征向量确实彼此相同,但是来自在线计算器的特征向量并不是标准化的(尽管为了方便起见,它们可能应该是标准化的)。矩阵的特征向量可以用任何标量(一个数)来标度,并且仍然是特征向量,因此这是正确的,但是通常的惯例是使它们规范化,因为这样更方便其他操作。用MATLAB(独立源)进行快速检验,结果表明,本征值与numpy返回的特征值完全匹配。在

您将注意到numpy向量满足norm(eigenvector)=1的属性。如果你要规范化来自在线计算器的向量

eigenvector <- eigenvector/norm(eigenvector)

你会发现它们是匹配的。在

相关问题 更多 >