删除顶点会使图形工具中的顶点属性无效

removing vertices invalidates vertex properties in graph tool

我在使用图形工具时遇到了这个小问题。我需要安全地移除没有内边或外边的顶点(实际上总度数==0),为此我编写了这个小函数

def clean(self):
        v_list = []
        for v in self.g.get_vertices():
            if self.g.get_out_degrees([v]) + self.g.get_in_degrees([v]) < 1:
                v_list.append(v)

        self.g.remove_vertex(v_list)

其中 self.g 是图形工具 Graph 实例。

问题是 属性 包含顶点标签的地图在此之后失效。然而,这似乎是一种设计选择,因为如 here 所述,每次重新组织 属性 映射的成本很高。

所以我想知道如何保存我的标签。我找到的一个解决方案是过滤掉顶点而不是删除它们

def clean(self):
        clean_map = self.g.new_vertex_property("bool")
        for v in self.g.get_vertices():
            if self.g.get_out_degrees([v]) + self.g.get_in_degrees([v]) < 1:
                clean_map[v] = False
            else:
                clean_map[v] = True

        self.g.set_vertex_filter(clean_map)

这不会再使地图无效,因为不会对顶点进行重新排序,但最好对顶点和标签地图进行排序,以便我之后需要做的事情。

有什么建议吗?

移除顶点或边不会使图形工具中的属性地图无效。

这是一个例子:

>>> g = Graph()                                                             
>>> g.add_vertex(10);                                                      
>>> p = g.vertex_index.copy()                                               
>>> p.fa                                                                    
PropertyArray([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> g.remove_vertex(5)                                                 
>>> p.fa                                                                    
PropertyArray([0, 1, 2, 3, 4, 6, 7, 8, 9])

所以没有必要为此目的使用过滤。