Quel est le moyen le plus efficace pour déplacer / renommer un nœud NetworkX?
Question
J'utilise la bibliothèque graphique NetworkX pour Python. À un certain moment dans mon programme, je voudrais « consolider » mes nodeIDs dans une séquence de nombres. Voici mon approche naïve:
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)
Y at-il un moyen plus rapide que cette copie exhaustive de tous les voisins? Par exemple, j'ai essayé g[i+start] = g[n]
, mais ce qui est interdit.
Merci!
La solution
Would ce travail?
import networkx as nx
G = nx.Graph()
G.add_node(1)
G.add_nodes_from('spam')
print G.nodes()
retours:
['a', 1, 's', 'm', 'p']
:
start = 1
G = nx.convert_node_labels_to_integers(G,first_label=start)
print G.nodes()
retours:
[1, 2, 3, 4, 5]
Autres conseils
Dans le cas où votre intérêt est toujours d'actualité, il y a networkx.relabel_nodes()
qui prend un dictionnaire de mappage.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow