微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从有向图中制作只有相互边的子图的最佳方法

如何解决从有向图中制作只有相互边的子图的最佳方法

我正在使用 igraph python 库中的有向图。 我试图得到一个只包含相互边的子图。

我目前的实现是:

i = 0
edgeList = list()
for e in completeGraph.es:
    i = i+1
    if not e.is_mutual():
        edgeList.append(e)
        if i % 1000 == 0:
            print(i)
completeGraph.delete_edges(edgeList)
completeGraph.vs.select(_degree=0).delete()

这似乎有效,但感觉是一种非常迂回的方式,而且在一个非常大的图上(就像我正在使用 ~20 Mio. Edges 处理的类型)它相当慢。

有没有更好或更有效的方法来完成同样的事情?

解决方法

我有一个可能的解决方案。我用 Python 3.8.5 和 igraph 0.9.1 做到了。我创建了一个简单的例子,一个有 10 个顶点和 7 个边(4 个相互关系)的有向图。也许它可以帮助你。

from igraph import *

g = Graph(directed=True)
g.add_vertices(10)
g.add_edges([(0,1),(1,0),(5,3),(7,8),(9,2),(2,7)])

g.es.select(_is_mutual=False).delete()
g.vs.select(_degree=0).delete()

结果是图 g 只有相互的边(以及这些边中涉及的顶点)。

祝你好运!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。