Estoy tratando de averiguar si hay una forma más rápida de calcular todos los valores propios y vectores propios de una matriz de adyacencia muy grande y dispersa que usando scipy.sparse.linalg.eigsh Hasta donde sé, este método solo usa la dispersión y atributos de simetría de la matriz. Una matriz de adyacencia también es binaria, lo que me hace pensar que hay una forma más rápida de hacerlo.
Creé una matriz de adyacencia dispersa aleatoria de 1000x1000, y la comparé entre varios métodos en mi 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
Con los escasos eigs y eigsh, establecí k, el número de los valores propios y vectores propios deseados, para que sea el rango de la matriz.
El problema comienza con matrices más grandes: en una matriz de 9000x9000, scipy.sparse.linalg.eigsh tardó 45 minutos.