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

时间:2015-01-27 10:37:37

标签: python graph igraph

设L是一个定向图,我必须删除L的相互边。记住,如果它们是a>> b和b--这两个边是相互的 - >一个

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

如何使用L.is_mutual()删除相互边缘?

可能的解决方案(慢):

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

1 个答案:

答案 0 :(得分: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()
相关问题