Я намагаюся розібратися, чи існує швидший спосіб обчислити всі власні значення та власні вектори дуже великої і розрідженої матриці суміжності, ніж використання 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 хвилин!