使用Python igraph库,我有一个表示道路网络的有向图,每个顶点之间的距离(坐标)作为权重。顶点对之间可能有两个或更多具有不同权重的边。我需要通过查询顶点ID从图形中检索这些权重,例如图表示例:
import igraph as ig
g = ig.Graph(directed=True)
g.add_vertices(4)
edges = [(0, 1), (1, 2), (1, 2), (2, 3)]
g.add_edges(edges)
g.es[:]["dist"] = [1, 2, 3, 4]
我知道我可以获取边的id,然后获取如下属性,但这似乎只能找到最后添加的字符,例如:
g.get_eid((0, 1)) # returns 0
g.get_eid((1, 2)) # returns 2
因此,在1和2之间有两条边,但是get_eid仅返回一条边-我需要知道这两者,然后查询边属性并返回权重,以从图中选择正确的最小距离,由距离加权最短路径查询使用。有没有办法用igraph做到这一点?
答案 0 :(得分:0)
我认为您对python不走运。 get_eid
的文档说
返回顶点v1和v2之间的任意边的边ID
get_eids
的文档明确指出:
该方法不考虑多个边缘;如果有多个边缘 在一对顶点之间,仅返回一条边的ID。
奇怪的是,igraph的R版本确实支持所需的功能。
函数get.edge.ids
具有参数multi
,使您可以像这样获得多个边。
无奈之下,我尝试将multi=True
添加到python代码中,但这只是给了我:
'multi'是此函数的无效关键字参数
答案 1 :(得分:0)
对于@G5W 的回答,get_eid
函数似乎不是在两个节点之间给出“任意”边,而是在多个节点的情况下,给出具有最高 id 的边。考虑:
g = ig.Graph()
g.add_vertices(['A', 'B', 'C'])
g.add_edges([('A', 'B'), ('A', 'B'), ('A', 'B'), ('B', 'C'), ('B', 'C')])
g.get_eid(0, 1) #always returns 2
g.get_eid(1, 2) #always returns 4