python – igraph:为什么add_edge函数如此缓慢地对add_edges?
发布时间:2021-03-31 04:15:09 所属栏目:Python 来源:互联网
导读:我很惊讶: import igraphimport random, timestart_time = time.time()G = igraph.Graph(directed = True)G.add_vertices(10000)for i in range(30000): G.add_edge(random.randint(0,9999), random.randint(0,9
我很惊讶: import igraph import random,time start_time = time.time() G = igraph.Graph(directed = True) G.add_vertices(10000) for i in range(30000): G.add_edge(random.randint(0,9999),random.randint(0,9999)) print "done in " + str(int(time.time() - start_time)) + " seconds" 返回在63秒内完成 而 import igraph import random,time start_time = time.time() G = igraph.Graph(directed = True) G.add_vertices(10000) edges = [] for i in range(30000): edges += [(random.randint(0,9999))] G.add_edges(edges) print "done in " + str(int(time.time() - start_time)) + " seconds" 在0秒内完成返回. 解决方法原因是igraph使用索引边列表作为C层中的数据结构.索引使得可以在恒定时间内查询特定顶点的邻居.如果您的图表很少更改,这很好,但是当修改操作比查询更频繁时,它会成为负担,因为无论何时添加或删除边缘,都必须更新索引.因此,每次调用add_edge都会使igraph重新索引其内部数据结构.好处是,如果你必须重建索引,你也可以使用add_edges以大致相同的成本添加许多边.因此,在您的第一个代码示例中,您重建索引30000次,而在第二个示例中,您只重建索引一次.顺便说一下,使用Graph.Erdos_Renyi(n = 10000,m = 30000)可以更快地完成你正在做的事情. (编辑:甘南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- python – 如何复制一个估计器,以便在多个数据集
- python – 从Azure ML中的pyodbc连接到Azure SQL
- 控制使用python调用外部命令的子进程数
- python实现数值积分的Simpson方法实例分析
- Python中比较特别的除法运算和幂运算介绍
- Django tastypie:资源显示与列表请求中的详细请
- python – django collectstatic overriding
- python – Django Test Client post()返回302,尽
- python – TypeError:JSON对象必须是str,而不是
- python – hashlib.md5()TypeError:Unicode对象
热点阅读