Rename all nodes in a graph to a sequence of numbers
I am using the NetworkX graph开发者_JAVA技巧 library for Python. At some point in my program I would like to "consolidate" my nodeIDs into a sequence of numbers. Here's my naive approach:
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)
Is there a faster way than this exhaustive copy of all the neighbors? For example, I tried g[i+start] = g[n]
, but that is forbidden.
Thanks!
Would this work?
http://networkx.github.io/documentation/latest/reference/generated/networkx.relabel.convert_node_labels_to_integers.html
import networkx as nx
G = nx.Graph()
G.add_node(1)
G.add_nodes_from('spam')
print G.nodes()
returns:
['a', 1, 's', 'm', 'p']
now:
start = 1
G = nx.convert_node_labels_to_integers(G,first_label=start)
print G.nodes()
returns:
[1, 2, 3, 4, 5]
In case your interest is still relevant, there is networkx.relabel_nodes()
which takes a mapping dictionary.
精彩评论