给定一个networkx
图,是否有办法将节点名称映射到邻接矩阵中的索引,反之亦然?
我知道G.nodes()
返回一个列表,其中列表中节点的索引对应于邻接矩阵中的索引。
因此,要从节点的名称映射到节点的索引,我正在做一种非常愚蠢的方法,将节点的索引存储在字典中,并按节点的名称进行映射。
要从节点索引映射到其名称,然后我创建另一个类似于之前的字典(切换键和值)。
有更好的方法吗?
答案 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]