在networkx中从节点名称映射到其索引,反之亦然

时间:2014-08-06 12:17:18

标签: python networkx

给定一个networkx图,是否有办法将节点名称映射到邻接矩阵中的索引,反之亦然?

我知道G.nodes()返回一个列表,其中列表中节点的索引对应于邻接矩阵中的索引。

因此,要从节点的名称映射到节点的索引,我正在做一种非常愚蠢的方法,将节点的索引存储在字典中,并按节点的名称进行映射。

要从节点索引映射到其名称,然后我创建另一个类似于之前的字典(切换键和值)。

有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

简短的回答:据我所知。我有一堆类似于你的代码,虽然有一些改进。

您可以做的第一件事就是记住每个节点上都挂着一个字典。 G.node[node_name]是您想要的任何字典。你可以这样做:

G.node[node_name]['index'] = G.nodes().index(node_name)

至少挂起图表上的信息,但与方法一样脆弱:如果修改图形,则无法记录G.nodes()的行为。

可能更好的解决方案是将nodelist kwarg用于G.adjacency_matrix。这将获取节点名称列表并按该顺序输出邻接矩阵。因此,您可以以合理的方式设置列表,而不是G.nodes()的伪随机行为。例如,如果以有用的方式命名节点,则可以向其传递节点的排序列表(sorted(G.nodes()))。

答案 1 :(得分:0)

对于小型/中型图,一个简单的选择是将节点名称存储为列表:

nodes_list = np.array(list(g.nodes()))

要从索引中恢复名称,例如:

node_name = nodes_list[4]

要从名称中恢复索引:

node_id = np.where(nodes_list == "n4")[0][0]