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

Strange behaviour of numpy eigenvector: bug or no bug

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 看到了特征向量 rounding/scaling 的主要区别,但解之间的偏差很大。

此致

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]

现在这 2 个向量只是您计算的向量的规范化版本,即

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 喜欢对结果进行标准化。