重新标记networkx中图形的节点

时间:2017-10-06 12:50:39

标签: networkx

我正在尝试处理wiki-Vote.txt(https://snap.stanford.edu/data/wiki-Vote.html)中给出的图表。有7115个节点,id范围从3到8297.我想重新标记从0到7114的节点。我检查了relabel_nodes()中的映射,但仍然无法解决问题。请建议。感谢

1 个答案:

答案 0 :(得分:3)

给定带有一组节点的图G,最简单的事情是

mapping = {old_label:new_label for new_label, old_label in enumerate(G.nodes())}
H = nx.relabel_nodes(G, mapping)

这将创建一个字典mapping,其键是旧标签,其值是新标签(在dictionary comprehensions上阅读)。新标签的排序由G.nodes()返回值(您无法控制)的顺序给出。新图H的节点标签已更改。

如果您需要特定订单,则需要适当地对G.nodes()进行排序。所以你可以做到

nodelist = G.nodes()
nodelist.sort()
mapping = {old_label:new_label for new_label, old_label in enumerate(G.nodes())}
H = nx.relabel_nodes(G, mapping)

将按数字顺序排序(如果节点名称为字符串,则按字母顺序排序)。如果您想要其他自定义订单,您必须弄清楚如何对节点列表进行排序。