1

我不知道是什么导致了这个错误。我所做的是在开始时向我的图表添加很多顶点:

for i in range(len(repositories_key_list)):
    repo_vertices[repositories_key_list[i]] = g3.add_vertex()

然后是一些连接这些顶点的处理,为了减少渲染图形所需的时间,我删除了所有进出度为零的顶点:

for repository_name in repo_vertices:

    vert = repo_vertices[repository_name]
    print vert

    if vert.out_degree() == 0 and vert.in_degree() == 0:
        g3.remove_vertex(vert)

但是,我所做的事情似乎是一个问题,因为我收到了这个错误:

Traceback (most recent call last):
  File "/media/sfalk/win-data/Stefan/Uni/Master/WS/Network Science/projects/project1/github/graph_tools_github.py", line 276, in <module>
    print vert
ValueError: invalid vertex descriptor: 22947

有趣的是 print vert,这里的问题可以追溯到这里。如果我评论那条线,我会得到:

Traceback (most recent call last):
  File "/media/sfalk/win-data/Stefan/Uni/Master/WS/Network Science/projects/project1/github/graph_tools_github.py", line 278, in <module>
    if vert.out_degree() == 0 and vert.in_degree() == 0:
  File "/usr/lib/python2.7/dist-packages/graph_tool/__init__.py", line 2933, in _out_degree
    return self.__out_degree()
ValueError: invalid vertex descriptor: 23038

所以无论这里发生什么,我都不知道如何解决它..

4

1 回答 1

0

Graph.remove_vertex()https://graph-tool.skewed.de/static/doc/graph_tool.html#graph_tool.Graph.remove_vertex的文档中有详细描述。即,它指出:

此操作可能会使顶点描述符无效。顶点总是在 [0,N−1] 范围内连续索引,因此索引高于 的顶点描述符vertex将在删除后失效(如果 fast == False,否则只有指向具有最大索引的顶点的描述符才会失效) .

因此,一次删除多个顶点的唯一安全方法是按索引降序对它们进行排序:

# 'del_list' is a list of vertex descriptors
for v in reversed(sorted(del_list)):
    g.remove_vertex(v)

或者(并且最好),可以直接将列表(或可迭代的)作为vertex参数传递,并且在内部执行上述操作(在 C++ 中)。

于 2015-11-10T08:20:50.277 回答