Для 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
.