Я пытаюсь выяснить, существует ли более быстрый способ вычисления всех собственных значений и собственных векторов очень большой и разреженной матрицы смежности, чем использование scipy.sparse.linalg.eigsh. Насколько я знаю, этот метод использует только разреженность и атрибуты симметрии матрицы. Матрица смежности также является двоичной, что заставляет меня думать, что есть более быстрый способ сделать это.
Я создал случайную матрицу разреженной смежности 1000x1000 и сравнил несколько методов на своем ноутбуке x230 Ubuntu 13.04:
- scipy.sparse.linalg.eigs: 0,65 секунд
- scipy.sparse.linalg.eigsh: 0,44 секунды
- scipy.linalg.eig: 6,09 секунд
- scipy.linalg.eigh: 1,60 секунды
С разреженными eigs и eigsh я устанавливаю k, число желаемых собственных значений и собственных векторов, чтобы быть рангом матрицы.
Проблема начинается с более крупных матриц - на матрице 9000x9000 это заняло у scipy.sparse.linalg.eigsh 45 минут!