NumPy: почему np.linalg.eig и np.linalg.svd дают разные значения V SVD? - PullRequest
4 голосов
/ 24 июня 2019

Я учусь SVD , следуя этому курсу MIT .

Матрица построена как

C = np.matrix([[5,5],[-1,7]])
C
matrix([[ 5,  5],
        [-1,  7]])

, которую лектор дает Vкак

enter image description here

это близко к

w, v = np.linalg.eig(C.T*C)
matrix([[-0.9486833 , -0.31622777],
        [ 0.31622777, -0.9486833 ]])

, но np.linalg.svd (C) дает другой результат

u, s, vh = np.linalg.svd(C)
vh
matrix([[ 0.31622777,  0.9486833 ],
        [ 0.9486833 , -0.31622777]])

кажется, что vh обмениваются элементами в векторе V, это приемлемо?

я правильно понял и понял?

1 Ответ

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

Для linalg.eig ваши собственные значения хранятся в w. Это:

>>> w
array([20., 80.])

Для разложения по сингулярным значениям вы можете получить собственные значения, возведя в квадрат ваши значения в единственном числе (C имеет максимальный ранг, поэтому здесь все легко):

>>> s**2
array([80., 20.])

Как видите, их заказ перевернут.

Из документации linalg.eig :

Собственные значения не обязательно упорядочены

Из документации linalg.svd :

Вектор (ы) с единичными значениями, внутри каждого вектора, отсортированные по убыванию. ...

В общих чертах процедуры, которые дают вам собственные значения и собственные векторы, не обязательно "сортируют" их так, как вы этого хотите. Поэтому всегда важно убедиться, что у вас есть собственный вектор для того значения, которое вы хотите. Если вам нужно их отсортировать (например, по величине собственного значения), вы всегда можете сделать это самостоятельно (см. Здесь: сортировка собственных значений и связанных собственных векторов после использования numpy.linalg.eig в python ).

Наконец, обратите внимание, что строки в vh содержат собственные векторы, тогда как в v это столбцы .

Так это означает, что, например ::

>>> v[:,0].flatten()
matrix([[-0.9486833 ,  0.31622777]])
>>> vh[:,1].flatten()
matrix([[ 0.9486833 , -0.31622777]])

даст вам оба собственных вектора для собственного значения 20.

...