Ich habe zwei Graphen mit jeweils fast n ~ 100000 Knoten. In beiden Diagrammen ist jeder Knoten mit genau drei anderen Knoten verbunden, sodass die Adjazenzmatrix symmetrisch und sehr dünn ist.
Der schwierige Teil ist, dass ich alle Eigenwerte der Adjazenzmatrix brauche, aber keine Eigenvektoren. Um genau zu sein, wird dies einmal in meinem Leben sein (soweit ich das sehe!), Also möchte ich alle Eigenwerte erhalten und es macht nichts aus, ein paar Tage darauf zu warten.
Ich habe scipy
Wrapper ausprobiert ARPACK
, aber es dauert viel zu lange. Ich habe mehrere Bibliotheken gefunden, aber sie eignen sich am besten, um eine Teilmenge der größten / kleinsten Eigenwerte zu erhalten. Gibt es eine Bibliothek, die für symmetrisch dünne Matrizen mit möglicherweise paralleler Implementierung funktioniert, um alle Eigenwerte zu erhalten?
Antworten:
Sie können die Shift-Invert-Spektraltransformation [1] verwenden und das Spektrum Band für Band berechnen.
Die Technik wird auch in meinem Artikel [2] erklärt. Neben der Implementierung in [1] ist eine Implementierung in C ++ in meiner Graphite-Software [3] verfügbar ( Update 17. Januar) : Jetzt ist alles auf Geogramm / Graphit Version 3 portiert ), für die ich die Eigenfunktionen des Laplace-Operators berechnet habe Maschen mit bis zu 1 Million Scheitelpunkten (ein ähnliches Problem wie bei Ihnen).
Wie es funktioniert:
[1] http://www.mcs.anl.gov/uploads/cels/papers/P1263.pdf
[2] http://alice.loria.fr/index.php/publications.html?redirect=0&Paper=ManifoldHarmonics@2008
[3] http://alice.loria.fr/software/graphite/doc/html/
quelle
Eine andere Option wäre die Verwendung von Jacobi-Rotationen. Da Ihre Matrix bereits fast diagonal ist, sollte die Konvergenz nicht lange dauern. Im Allgemeinen konvergiert es in der linearen Rate, aber nach genügend Iterationen wird die Konvergenzrate quadratisch.
quelle