Ich versuche herauszufinden, ob es einen schnelleren Weg gibt, alle Eigenwerte und Eigenvektoren einer sehr großen und spärlichen Adjazenzmatrix zu berechnen, als mit scipy.sparse.linalg.eigsh Soweit ich weiß, verwendet diese Methode nur die Spärlichkeit und Symmetrieattribute der Matrix. Eine Adjazenzmatrix ist auch binär, was mich glauben lässt, dass es einen schnelleren Weg gibt, dies zu tun.
Ich habe eine zufällige 1000x1000-Adjazenzmatrix mit geringer Dichte erstellt und verschiedene Methoden auf meinem x230-Ubuntu-13.04-Laptop verglichen:
- scipy.sparse.linalg.eigs: 0,65 Sekunden
- scipy.sparse.linalg.eigsh: 0,44 Sekunden
- scipy.linalg.eig: 6,09 Sekunden
- scipy.linalg.eigh: 1,60 Sekunden
Mit den spärlichen eigs und eigsh setze ich k, die Anzahl der gewünschten Eigenwerte und Eigenvektoren, auf den Rang der Matrix.
Das Problem beginnt mit größeren Matrizen - auf einer 9000x9000-Matrix dauerte es scipy.sparse.linalg.eigsh 45 Minuten!