Найти идентификаторы всех ребер между вершинами с помощью igraph Python - PullRequest
0 голосов
/ 08 октября 2018

С библиотекой Python igraph у меня есть ориентированный граф, представляющий сеть дорог, с расстоянием между каждой вершиной (координатами) в качестве веса.Вполне возможно, что между парой вершин может быть два или более ребер с разными весами.Мне нужно извлечь эти веса из графика, запросив идентификаторы вершин, например, пример графика:

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]

Я знаю, что могу получить идентификатор ребра, а затем атрибуты, как показано ниже, но это только кажетсячтобы найти последнее добавленное, например:

g.get_eid((0, 1)) # returns 0
g.get_eid((1, 2)) # returns 2

Итак, есть два ребра между 1 и 2, но get_eid возвращает только одно - мне нужно знать оба, чтобы затем запросить атрибуты ребра и вернуть веса, чтобы выбрать правильные минимальные расстояния на графике, которые использовались для взвешенного по расстоянию запроса кратчайшего пути.Есть ли способ сделать это с помощью igraph?

1 Ответ

0 голосов
/ 10 октября 2018

Я думаю, что вам не повезло с питоном.Документация для get_eid говорит:

Возвращает идентификатор ребра произвольного ребра между вершинами v1 и v2

Документация для get_eids говорит явно:

Метод не учитывает несколько ребер;если имеется несколько ребер между парой вершин, возвращается только идентификатор одного из ребер.

Как ни странно, версия R igraph поддерживает поддерживаемую вами функциональностьхочу.Функция get.edge.ids имеет аргумент multi, который позволяет вам получить несколько ребер, как это.

В отчаянии я попытался добавить multi=True в код Python, но он просто дал мне:

'multi' - недопустимый аргумент ключевого слова для этой функции

...