Was ist der effizienteste Weg, um einen Knoten in NetworkX zu bewegen/umzubenennen?
Frage
Ich verwende die NetworkX -Graph -Bibliothek für Python. Irgendwann in meinem Programm möchte ich meine Nodeids in eine Abfolge von Zahlen "konsolidieren". Hier ist mein naiver Ansatz:
start = 1 # could be anything
for i, n in enumerate(g.nodes()):
if i+start == n:
continue
g.add_node(i+start, attr_dict=g.node[n])
g.add_edges_from([(i+start, v, g[n][v]) for v in g.neighbors(n)])
g.remove_node(n)
Gibt es einen schnelleren Weg als diese umfassende Kopie aller Nachbarn? Zum Beispiel habe ich es versucht g[i+start] = g[n]
, aber das ist verboten.
Vielen Dank!
Lösung
Würde das funktionieren?
import networkx as nx
G = nx.Graph()
G.add_node(1)
G.add_nodes_from('spam')
print G.nodes()
kehrt zurück:
['a', 1, 's', 'm', 'p']
jetzt:
start = 1
G = nx.convert_node_labels_to_integers(G,first_label=start)
print G.nodes()
kehrt zurück:
[1, 2, 3, 4, 5]
Andere Tipps
Falls Ihr Interesse noch relevant ist, gibt es es networkx.relabel_nodes()
Das braucht ein Mapping -Wörterbuch.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow