将图中的所有节点重命名为数字序列
我正在使用Python的NetworkX图形库。在我程序的某个地方,我想把我的节点ID“合并”成一串数字。以下是我简单的做法:
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)
有没有比这种逐个复制所有邻居的方式更快的方法呢?比如,我试过 g[i+start] = g[n]
,但那是不允许的。
谢谢!
2 个回答
10
如果你对这个话题还感兴趣的话,可以看看这个 networkx.relabel_nodes()
,它可以使用一个映射字典。
11
这样做会有效吗?
import networkx as nx
G = nx.Graph()
G.add_node(1)
G.add_nodes_from('spam')
print G.nodes()
返回:
['a', 1, 's', 'm', 'p']
现在:
start = 1
G = nx.convert_node_labels_to_integers(G,first_label=start)
print G.nodes()
返回:
[1, 2, 3, 4, 5]