Умный способ удалить взаимные края с Python-igraph 0.7
Пусть L - ориентированный граф, я должен удалить взаимные ребра L. Помните, что два ребра взаимны, если они имеют тип a --->b и b ---->a.
Например L.is_mutual()
возвращает список логических значений, каждое логическое значение соответствует ребру. Значение true возвращается для заданного ребра a -> b, если в исходном графе существует другое ребро b -> a.
Как пользоваться L.is_mutual()
для удаления взаимных краев?
Возможное решение (медленно):
L.delete_edges([l[i] for i in range(len(l)) if mut[i]==True])
1 ответ
Есть ли l
содержать список ребер вашего графа? В этом случае ваше решение будет медленным, потому что для удаления каждого ребра igraph должен искать свой идентификатор с конечных точек (так как вы даете конечные точки delete_edges
а не крайний индекс). поскольку delete_edges
может работать и с краевыми индексами, быстрее сказать:
L.delete_edges(index for index, mut in enumerate(L.is_mutual()) if mut)
Еще один (несколько медленнее, но более лаконичный) вариант:
L.es.select(_is_mutual=True).delete()