2016-06-26 10 views
1

Ich möchte die Koordinaten der Eckpunkte eines Graphen in Graph-Tool auf effiziente Weise angeben.Vertices Koordinaten in Graph-Tool

eine csv gegeben, die wie folgt aussieht:

Node,X,Y 

1,2.5,3.8 

2,3.4,2.9 

...

I Eckpunkt 1 an der Position (2.5,3.8) etc ...

plotten Diagramm-Tool möchten

Eine nicht effiziente Lösung ist gegeben in: Explicit vertex position in python graph-tool, so kann ich grundsätzlich eine for-Schleife über alle meine Koordinaten verwenden und sie in der Eigenschaft Karte 'pos' speichern. Wenn mein Graph ‚g‘ und meine csv wird mit Pandas in dem Datenrahmen gelesen ‚Koordinaten‘, kann ich:

for i in range(1,numnodes+1): 
    pos[g.vertex(i)] = (coordinates.values[i-1,1],coordinates.values[i-1,2]) 

Das Problem ist, dass meine Anzahl von Knoten, numnodes groß ist (~ 10^7) und das kann einige Zeit dauern.

Gibt es eine effizientere Möglichkeit, diese Operation durchzuführen, indem Sie die Daten direkt in die Eigenschaftskarte 'pos' eingeben?

+0

Können Sie versuchen, es in vektorisierter Weise zu verwenden: 'pos = Koordinaten [['X', 'Y']]]. Values' statt looping? Ich weiß nicht, Graph-Tool-Modul, aber ich denke, es sollte in der Lage sein mit numby Arrays oder vielleicht sogar mit Pandas Datenrahmen zu arbeiten ... – MaxU

Antwort

0

ich eine Antwort auf meine Frage gefunden, eine effiziente Möglichkeit, dies zu tun ist, die zu verwenden. Funktion set_2d_array();

pos.set_2d_array(coordinates[['X','Y']].values.T) 

macht den Trick. Hier ist ".T" die Transpositionsfunktion, Teil der numpy Bibliothek.

0

Ich würde dies versuchen:

pos = coordinates[['X','Y']].values 

wenn graph-tool numpy Arrays akzeptiert, sonst:

pos = [tuple(t) for t in coordinates[['X','Y']].values] 
+0

Vielen Dank für Ihre Antwort! Leider haben beide nicht funktioniert, ich vermute, dass "pos" seinen Typ bei dieser Operation verliert. Zum Beispiel, wenn ich für e in pos tun: Druck e ich Array ([2.5, 3.8]) Array ([3.4, 2.9]) ... – monty47

Verwandte Themen