Estou tentando descobrir se existe uma maneira mais rápida de calcular todos os autovalores e autovetores de uma matriz de adjacência muito grande e esparsa do que usar scipy.sparse.linalg.eigsh Até onde eu sei, esse método usa apenas a escassez e atributos de simetria da matriz. Uma matriz de adjacência também é binária, o que me faz pensar que há uma maneira mais rápida de fazer isso.
Criei uma matriz de adjacência esparsa aleatória 1000x1000 e comparei entre vários métodos no meu laptop x230 ubuntu 13.04:
- scipy.sparse.linalg.eigs: 0.65 segundos
- scipy.sparse.linalg.eigsh: 0.44 segundos
- scipy.linalg.eig: 6.09 segundos
- scipy.linalg.eigh: 1.60 segundos
Com os eigs esparsos e eigsh, eu defino k, o número dos valores próprios e dos vetores próprios desejados, para ser a classificação da matriz.
O problema começa com matrizes maiores - em uma matriz de 9000 x 9000, foram necessários 45 minutos para scipy.sparse.linalg.eigsh!