numpy特征向量的奇怪行为:错误或没有错误

时间:2019-06-24 14:45:34

标签: numpy eigenvector

NumPy的特征向量解不同于Wolfram Alpha和我的手工计算。

>>> import numpy.linalg
>>> import numpy as np
>>> numpy.linalg.eig(np.array([[-2, 1], [2, -1]]))
(array([-3.,  0.]), array([[-0.70710678, -0.4472136 ],
       [ 0.70710678, -0.89442719]]))

Wolfram Alpha https://www.wolframalpha.com/input/?i=eigenvectors+%7B%7B-2,1%7D,%7B%2B2,-1%7D%7D和我的个人计算给出了特征向量(-1,1)和(2,1)。但是NumPy解决方案有所不同。

NumPy的计算特征值已由Wolfram Alpha和我的个人计算所证实。

那么,这是NumPy中的错误还是我对数学的理解很简单?相似的线程Numpy seems to produce incorrect eigenvectors看到了特征向量的舍入/缩放的主要区别,但是解之间的偏差会很大。

致谢

1 个答案:

答案 0 :(得分:2)

numpy.linalg.eig归一化特征向量,结果为列向量

eig_vectors = np.linalg.eig(np.array([[-2, 1], [2, -1]]))[1]
vec_1 = eig_vectors[:,0]
vec_2 = eig_vectors[:,1]

现在这两个向量只是您计算出的向量的归一化版本,即

print(vec_1 * np.sqrt(2)) # where root 2 is the magnitude of [-1, 1]
print(vec_1 * np.sqrt(5)) # where root 5 is the magnitude of [2, 1]

所以最重要的是,两组计算都是等效的,只是Numpy希望对结果进行归一化。