Странное поведение numpy eigenvector: ошибка или нет ошибки - PullRequest
0 голосов
/ 24 июня 2019

Решение собственных векторов 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) и (21).Однако решение NumPy отличается.

Расчетные собственные значения NumPy подтверждаются Wolfram Alpha и моими личными расчетами.

Итак, это ошибка в NumPy или мое понимание математики простое?Подобная нить Кажется, что Numpy производит неправильные собственные векторы видит основное различие в округлении / масштабировании собственных векторов, но отклонение между решениями будет огромным.

С уважением

1 Ответ

2 голосов
/ 24 июня 2019

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 любит нормализовать результаты.

...