我正在尝试使用 graph-tool
库创建大型图形(大约 10^6 - 10^7 个顶点),并将顶点属性填充为顶点名称或使用名称而不是顶点索引。 我有以下内容:
list of names:
['50', '56', '568']
set of edges, but instead of vertex indexes it consists of their names:
edge_list = {frozenset({'568', '56'}), frozenset({'56', '50'}), frozenset({'50', '568'})}
由于add_edge_list()
允许在图中创建顶点,如果该顶点不存在。我正在尝试使用它来填充一个空图。这个想法很好,但是当我尝试按名称获取顶点时,我收到了一个错误,提示没有这样索引的顶点。
下面是我的程序代码:
g = grt.Graph(directed=False)
edge_list = {frozenset({'568', '56'}), frozenset({'56', '50'}), frozenset({'50', '568'})}
ids = ['50', '56', '568']
g.add_edge_list(edge_list, hashed=True, string_vals=True)
print(g.vertex('50'))
print(g.vertex('50'))
的错误信息为:ValueError: Invalid vertex index: 50
我想创建图表:
- 仅使用
edge_list
; - 通过名称快速访问顶点;
- 时间最优(如果可能还要考虑内存占用)。
有没有好的方法可以实现这个需求?
编辑: 当前代码:
g = grt.Graph(directed=False)
g.add_vertex(len(ids))
vprop = g.new_vertex_property("string", vals=ids)
g.vp.user_id = vprop
for vert1, vert2 in edges_list:
g.add_edge(g.vertex(ids_dict[vert1]), g.vertex(ids_dict[vert2]))
igraph
进行聚类(或搜索社区,如果您更喜欢这个术语),并使用graph-tool
来测量中心性和绘制图形。 我正在使用frozenset从源收集数据。运行时是主要问题。问题是:使用add_edge_lis()
还是在循环中使用add_edge()
更快?我已将当前代码添加到上面的问题字段中。 - Korevykh Maria