使用igraph Python查找顶点之间的所有边的ID

时间:2018-10-08 17:08:29

标签: python igraph

使用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做到这一点?

2 个答案:

答案 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