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

时间:2015-07-18 02:45:53

标签: python numpy

我的代码是

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

输出

(array([21.61455381,-9.76720959,-1.84734422]),array([[ - 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.767209588804548; -1.8473442163236111; 21.61455380512816}

特征向量:

for Eigenvalue -9.767209588804548:    [-0.1685660264358372; -0.5925071319066865; 1]

for Eigenvalue -1.8473442163236111:    [0.06887346700751434; -1.5980532339710003; 1]

for Eigenvalue 21.61455380512816:    [0.20062423644695662; 0.5678895584242702; 1]

这些价​​值显然不匹配。我哪里错了?

2 个答案:

答案 0 :(得分:1)

他们匹配(有点......)。

这些特征向量确实彼此相同,但来自在线计算器的那些特征向量未被标准化(尽管它们可能应该是为了方便起见)。矩阵的特征向量可以通过任何标量(数字)进行缩放,并且仍然是特征向量,因此这不是不正确的,但是惯例通常是使它们保持标准化,因为它对于其他操作更方便。使用MATLAB(独立源)进行快速检查表明,匹配的特征值与numpy返回的特征值完全匹配。

你会注意到numpy向量满足norm(eigenvector)=1的属性。如果你要对在线计算器中的向量进行标准化,那么

eigenvector <- eigenvector/norm(eigenvector)

你会发现它们匹配。

答案 1 :(得分:0)

实际上,本征向量是正确的,但是表示有些混乱。如果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,分别。请注意,我是将这些数字组成的,因此它们在数学上对任何矩阵都没有意义。