Sto cercando di capire se esiste un modo più veloce per calcolare tutti gli autovalori e gli autovettori di una matrice di adiacenza molto grande e sparsa rispetto all'uso di scipy.sparse.linalg.eigsh Per quanto ne so, questo metodo utilizza solo la scarsità e attributi di simmetria della matrice. Una matrice di adiacenza è anche binaria, ciò che mi fa pensare che ci sia un modo più veloce per farlo.
Ho creato una matrice sparsa di adiacenza 1000x1000 e confrontata tra diversi metodi sul mio laptop Ubuntu 13.04 x230:
- scipy.sparse.linalg.eigs: 0,65 secondi
- scipy.sparse.linalg.eigsh: 0.44 secondi
- scipy.linalg.eig: 6,09 secondi
- scipy.linalg.eigh: 1,60 secondi
Con gli eigs e gli eigsh sparsi, ho impostato k, il numero degli autovalori e degli autovettori desiderati, per essere il rango della matrice.
Il problema inizia con matrici più grandi - su una matrice 9000x9000, ci sono voluti scipy.sparse.linalg.eigsh 45 minuti!