Я использую numpy для получения собственных значений/собственных векторов матрицы. Моя матрица симметрична и положительна.
> mat
matrix([[ 1., 1., 0., 0., 0., 0., 0.],
[ 1., 2., 0., 0., 0., 0., 0.],
[ 0., 0., 1., 0., 0., 0., 0.],
[ 0., 0., 0., 2., 1., 1., 0.],
[ 0., 0., 0., 1., 2., 1., 0.],
[ 0., 0., 0., 1., 1., 1., 0.],
[ 0., 0., 0., 0., 0., 0., 1.]])
Я использую np.eigh
, потому что моя матрица симметрична.
> import numpy.linalg as la
> la.eigh(mat)
(array([ 0.27, 0.38, 1. , 1. , 1. , 2.62, 3.73]),
matrix([[ 0. , -0.85, -0. , 0. , 0. , 0.53, 0. ],
[ 0. , 0.53, -0. , 0. , 0. , 0.85, 0. ],
[ 0. , 0. , -0. , 1. , 0. , 0. , 0. ],
[-0.33, -0. , -0.71, -0. , -0. , -0. , -0.63],
[-0.33, -0. , 0.71, -0. , -0. , -0. , -0.63],
[ 0.89, -0. , -0. , -0. , -0. , -0. , -0.46],
[-0. , -0. , -0. , -0. , 1. , -0. , -0. ]]))
Моя проблема в том, что многие из этих значений имеют неправильный знак. В частности, главный собственный вектор (крайний правый столбец в матрице) полностью отрицателен, хотя должен быть положительным. Я проверил это как на Matlab, так и на Octave. Это просто ошибка точности, или я что-то упускаю?
Если это ошибка, есть ли способ проверить такую ошибку и исправить ее?
EDIT: этот расчет является частью Hubs and Authorities, а приведенная выше матрица - A*A^T. Это результат исходной статьи (см. стр. 9, стр. 10), что оценки хаба сходятся к главному собственному вектору A*A^T. В конечном счете, мы хотим сравнить эти оценки узлов друг с другом, поэтому знак действительно важен.
На странице 10 в документе также говорится: «Кроме того (как следствие), если M имеет только неотрицательные элементы, то главный собственный вектор M имеет только неотрицательные элементы». Вот почему я задал вопрос.