Я столкнулся с этой маленькой проблемой с графиком. Мне нужно безопасно удалить вершины без входных и выходных ребер (с общей степенью == 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
экземпляр.
Проблема в том, что карта свойств, содержащая метки вершин, становится недействительной после этого. Однако это, кажется, выбор дизайна, поскольку каждый раз было бы дорого реорганизовывать карту свойств, как указано здесь .
Поэтому мне было интересно, как сохранить свои ярлыки. Решение, которое я нашел, состоит в том, чтобы отфильтровать вершины вместо их удаления
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)
, это больше не делает карту недействительной, поскольку вершины не переупорядочиваются, но было бы лучше иметь вершины и метки карта заказана для того, что мне нужно сделать потом.
Есть предложения?