使用 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()
设 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()