我正在使用NetworkX库和Python。在
我希望能够通过仅使用作为节点名称(字符串)一部分的一个int ID来引用一个节点,用于各种目的,比如获取两个节点之间的最短路径。在
MWE:
假设我导入了一个Pajek格式的文件:
import networkx as nx
G=nx.read_pajek("pajek_network_file.net")
G=nx.Graph(G)
我的文件的内容是(在Pajek中,节点被称为“顶点”):
^{pr2}$我应该使用哪个命令,只使用节点Author4的id 111来打印它?在
到目前为止,我已经尝试了G.node[nodeid]的格式,比如:
print G.node[111]
但这会返回一个错误,因为它正在尝试搜索node LABEL=111,这当然不存在。在
作为后续问题,理想情况下,我不仅希望按ID打印节点,还希望将其与函数一起使用,例如
nx.shortest_path_length(G,source_nodeid,target_nodeid)
我目前所做的工作是创建一个.net网络文件,其中node id列重复两次,以便使用与“node label”相同的id号。在
我相信答案一定很简单,但我至今还没找到答案,即使在谷歌上搜索了很多东西并浏览了文档。。。 任何帮助都将不胜感激!在
我相信您正在寻找nx.relabel_nodes函数,它需要一个字典来将旧标签映射到新标签。我使用您提供的顶点名称来构建图。然后创建一个字典,将旧标签(完整字符串)映射到新标签(拆分后字符串的第一个元素的整数转换)。最后,我使用relabel_nodes函数来进行重新标记。在
我是如何用它来解决你的问题的:
例如,如果您想使用旧标签进行绘图,那么您可以使用另一个字典,它是新标签的反向字典,它只是将新标签映射到旧标签。您可以这样做:
^{pr2}$networkx将图形的节点和边保存在字典结构中,其中节点是键,其数据是关联的字典结构。显然,当你阅读pajek文件格式的示例文件时,措辞如下:
这意味着节点
u'Author1'
与数据{'id': u'123'}
关联现在,我不知道在Pajek文件格式中哪个字段应该是实际的节点(可能在networkx中没有正确实现?),但如果您将文件中的名称和ID颠倒过来,则会得到您想要的结果:
^{pr2}$以及
此外,节点id是字符串,而不是整数。如果需要整数,则可能需要重新标记节点。在
相关问题 更多 >
编程相关推荐