SciPy - вычислить собственный вектор для конкретного собственного значения в симметричной матрице

У меня есть симметричная матрица (матрица смежности для неориентированного графа), и у меня есть конкретное собственное значение (максимальное собственное значение), и я хочу, чтобы собственный вектор, связанный с ним (левый или правый, любой из них, поскольку я считаю, что левый - это просто транспонирование справа для симметричных матриц).

Графы, которые я запускаю, могут иметь от тысяч до сотен тысяч узлов, поэтому соответствующая матрица смежности будет большой. Однако плотность разрежена, поэтому соответствующая матрица также будет разреженной.

Есть ли эффективный способ сделать это в SciPy? Еще лучше, есть ли способ вычислить только ведущее собственное значение и соответствующий собственный вектор для данной симметричной матрицы (это означает, что мне не нужно явно вычислять ведущее собственное значение с помощью linalg.eigvals).


person adelbertc    schedule 24.01.2013    source источник


Ответы (1)


Да, scipy.sparse.linalg.eigsh, h в конце обозначает эрмитову матрицу, также есть версия для несимметричных матриц, scipy.sparse.linalg.eigs.

Если a является вашей матрицей, разреженной или нет, ваш вызов будет выглядеть примерно так:

evals, evecs = scipy.sparse.linalg.eigsh(a, k=1)

Ваши evals и evecs представляют собой массивы собственных значений и соответствующих собственных векторов, поскольку вы можете запросить более одного, если установите k в значение, отличное от 1. Какие собственные значения и векторы возвращаются, контролируется параметром which, который по умолчанию равен LM, что означает < em>наибольшая величина.

person Jaime    schedule 24.01.2013
comment
Потрясающе, спасибо! Еще одна вещь - собственный вектор, связанный с наибольшим собственным значением, не обязательно является вектором с наибольшей величиной, верно? Таким образом, хотя LM вернет наибольшее собственное значение, возвращаемый собственный вектор может не совпадать с тем, который связан с этим наибольшим собственным значением, или возвращаемый собственный вектор зависит от того, какие собственные значения были вычислены? - person adelbertc; 25.01.2013
comment
Собственные векторы не имеют внутренней величины. Обычно они нормированы. - person bogatron; 25.01.2013
comment
Да, я забыл - так что я предполагаю, что возвращаемые собственные векторы связаны с собственными значениями (в моем случае самыми большими)? - person adelbertc; 25.01.2013
comment
Я считаю, что which контролирует, какие собственные значения вы получаете, а затем собственные векторы соответствуют этим собственным значениям. Величина собственного вектора четко не определена, поскольку, если v является собственным вектором, k * v также... - person Jaime; 25.01.2013
comment
Из документов eigsh: v : массив Массив из k собственных векторов. v[i] — собственный вектор, соответствующий собственному вектору w[i] - person Jaime; 25.01.2013
comment
Круто, спасибо - только что попробовал, все отлично работает! - person adelbertc; 25.01.2013
comment
@bogatron Я сам не проверял, но документы для eigs и eigsh говорят о разном. Однако с одним собственным вектором должно быть легко понять, какой из них правильный. - person Jaime; 25.01.2013
comment
Я просто удалил свой комментарий. Поскольку собственные векторы ортонормированы, вероятно, мы оба были правы. - person bogatron; 25.01.2013