获取" ValueError:无效的顶点描述符"删除顶点时

时间:2015-11-09 17:18:16

标签: python graph-tool

我不知道导致此错误的原因。我所做的是在开始时将很多顶点添加到我的图形中:

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

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

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

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

1 个答案:

答案 0 :(得分:0)

https://graph-tool.skewed.de/static/doc/graph_tool.html#graph_tool.Graph.remove_vertexGraph.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 ++中)。