удалить узлы из графика в цикле for - PullRequest
1 голос
/ 30 марта 2020

Я использую igraph- python. Я пытаюсь решить проблему, называемую самым длинным индуцированным путем, я вначале выбираю случайный узел, нахожу его соседей, затем выбираю один из соседей на основе значения центральности близости, удаляю другие и т. Д. Мой код следующий:

from random import randint
import networkx as nx
import numpy as np
from igraph import *
from numpy import random
def maximum(a, n):
maxpos = a.index ( max ( a ) )
return maxpos

G = Graph ()
G.add_vertices(5)
G.add_edges([(0, 1), (0, 2),(1,3),(2,3),(3,4)])

n = G.vcount()
first = random.randint(n)
neigh = G.neighbors(first)
clos = G.closeness(vertices=neigh)
induced_path = first
G.delete_vertices(first)
while len(neigh) > 0:
     pos = maximum(clos, len(clos))
     j= neigh[pos]
     np.append(induced_path,j)
     print(induced_path)
     neigh = np.setdiff1d(neigh,j)
     G.delete_vertices(neigh)
     neigh = G.neighbors(j)
     clos = G.closeness(vertices=neigh)
     G.delete_vertices(j)
     print(len(induced_path))

, когда я запускаю этот код python, выдающий мне эту ошибку:

Cannot create iterator, invalid vertex id, Invalid vertex id

также существует проблема в линии поиска соседей из j следующим образом:

cannot get neighbors, Invalid vertex id

Traceback:

File "E:/inducedpath/indu.py", line 30, in <module> G.delete_vertices(neigh) igraph._igraph.InternalError: Error at c:\projects\python-igraph\vendor\build\igraph\igraph-0.8.0-msvc\src\iterators.c:764: Cannot create iterator, invalid vertex id, Invalid vertex id

1 Ответ

0 голосов
/ 30 марта 2020

Как уже упоминалось в документах , вы должны использовать не метку вершины, а идентификатор (и).

Посмотрите на ответ на этот вопрос .

Для нескольких идентификаторов:

to_delete_ids = [x.index for x in G.vs]
G.delete_vertices(to_delete_ids)

Для одной вершины: G.delete_vertices(x.index)

...