如何解决从有向图中制作只有相互边的子图的最佳方法
我正在使用 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 举报,一经查实,本站将立刻删除。