使用 python-igraph 0.7 删除相互边的智能方法

Smart way to remove mutual edges with python-igraph 0.7

设 L 是一个 有向 图,我必须删除 L 的互边。请记住,如果它们的类型为 a--->b,则两条边是互边和 b---->a.

例如 L.is_mutual() returns 布尔值列表,每个布尔值对应一条边。如果原始图中存在另一条边 b --> a,则给定边 a --> b 返回真。

如何使用L.is_mutual()去除互边?

可能的解决方案(慢):

 L.delete_edges([l[i] for i in range(len(l)) if mut[i]==True])

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()