【发布时间】:2019-09-26 04:18:59
【问题描述】:
我正在尝试通过graph-tool 库(接近 10^6 - 10^7 个顶点)创建大图,并用顶点名称填充顶点属性或使用名称而不是顶点索引。我有:
-
名字列表:
['50', '56', '568'] -
一组边,但不是顶点索引,而是由它们的名称组成:
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; - 通过名称快速访问顶点;
- 按时间优化(如果可能,还有 RAM)。
有什么好的办法吗?
编辑: 当前代码:
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]))
【问题讨论】:
标签: python python-3.x graph networkx graph-tool