Ich habe eine große Graphen im CSV-Format (~ 14GB) von Kanten als ganze Zahlen in folgendem Format dargestellt:effizienter Algorithmus 2-Stufen-Nachbarn für alle Knoten in einem gerichteten Graphen zu finden
node1,node2
3213741,23521361
3213741,6532710
3213741,12340611
3213741,6457392
3213741,9682135
6567133,12956771
6567133,2386
node1
ist wo die Kante beginnt und node2
ist, wo die Kante endet. Die Kanten sind nach node1
gruppiert (gruppierbar nach node2
).
Ich brauche 2-Schritt-Nachbarn für alle Knoten zu generieren. Das ist in folgendem Format:
node1,node2,node3
3213741,6532710,5347128
Meine Idee, eine Kopie der Kanten zu machen ist, und sortiert sich nach Knoten2, so gibt es zwei Tabellen t1.node1,t1.node2
und t2.node1,t2.node2
, dann irgendwie diese beiden Tabellen verbinden, wenn t1.node1 == t2.node1
und t1.node1 != t2.node2
. Aber das sieht zu langsam aus. Gibt es bessere Algorithmen oder Algorithmen, die die Tatsache nutzen können, dass die Daten nach node1
gruppiert sind? Ich bevorzuge Numpy. Vielen Dank.
Es wäre ziemlich einfach in SQL. Da Sie es bereits in csv haben, könnten Sie in eine relationale Datenbank importieren und eine Abfrage dagegen ausführen. – mba12
Nicht mit der tatsächlichen Frage zu helfen, aber Sie möchten vielleicht [h5py] (http://docs.h5py.org/en/latest/) zum Speichern Ihrer Daten sehen. Das spart viel Platz und beschleunigt wesentlich das Laden/Speichern. – obachtos