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看到了特征向量的舍入/缩放的主要区别,但是解之间的偏差会很大。
致谢
答案 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希望对结果进行归一化。