在NetworkX中移动/重命名节点的最有效方法是什么?

Jua*_*uan 14 python graph networkx

我正在使用Python的NetworkX图形库.在我的程序中的某个时刻,我想将我的nodeID"合并"成一系列数字.这是我的天真方法:

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)
Run Code Online (Sandbox Code Playgroud)

有没有比这个所有邻居的详尽副本更快的方法?例如,我尝试过g[i+start] = g[n],但这是禁止的.

谢谢!

Jos*_*del 9

这会有用吗?

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()
Run Code Online (Sandbox Code Playgroud)

收益:

['a', 1, 's', 'm', 'p']
Run Code Online (Sandbox Code Playgroud)

现在:

start = 1
G = nx.convert_node_labels_to_integers(G,first_label=start)
print G.nodes()
Run Code Online (Sandbox Code Playgroud)

收益:

[1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)


Jas*_*n S 8

如果您的兴趣仍然相关,那么networkx.relabel_nodes()需要一个映射字典.