Странное поведение собственного вектора numpy: ошибка или нет ошибки

Решение собственного вектора 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, кажется, создает неправильные собственные векторы, видит основное различие в округлении/ масштабирование собственных векторов, но отклонение между решениями будет огромным.

С уважением


person JakobJakobson13    schedule 24.06.2019    source источник
comment
Ранг вашего входного массива равен одному   -  person Brenlla    schedule 24.06.2019


Ответы (1)


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

person DrBwts    schedule 24.06.2019