Выполнить объединение графов на основе имен вершин Python igraph

Эта проблема была подана на github примерно 6 месяцев назад, но поскольку она еще не исправлена, мне интересно, есть ли быстрое исправление, которое мне не хватает.

Я хочу объединить два графика на основе их имен:

g1 = igraph.Graph() g2 = igraph.Graph() # add vertices g1.add_vertices(["A","B"]) g2.add_vertices(["B","C","D"]) for vertex in g1.vs: print vertex.index 0 1 for vertex in g2.vs: print vertex.index 0 1 2 

Однако, когда я выполняю объединение, igraph использует идентификаторы вершин, а не имена, поэтому я получаю три вершины вместо четырех (если они были основаны на именах). Я предполагаю, что, поскольку B имеет индекс 0 в g2 , он сливается с A из g1 . И аналогичным образом C из g2 сливается с B of g1 .

 g_union = igraph.Graph.union(g1,g2) g_union.vs['name'] # of course KeyError: 'Attribute does not exist' for vertex in g_union.vs: print vertex.index 0 1 2 

Любая идея о том, как обойти эту проблему? Это возможно, поскольку это было сделано в R-реализации играфа.

  • Каков наилучший интерфейс от Python 3.1.1 до R?
  • Является ли if (interactive ()) эквивалентом R для pythonic «если __name__ ==« __main__ »: main ()"?
  • Как удалить повторяющиеся элементы в векторе, аналогично 'set' в Python
  • python (или numpy) эквивалент соответствия в R
  • Борьба с дисбалансом класса в двоичной классификации
  • Функция R expand.grid () в Python
  • Эффективный способ создания матрицы плотности термина из pandas DataFrame
  • выполнение скрипта R из python
  • One Solution collect form web for “Выполнить объединение графов на основе имен вершин Python igraph”

    Просто создайте новый граф и добавьте вершины по имени. Конечно, это устранит другие свойства узла, которые вам также придется добавлять вручную.

     g1 = igraph.Graph() g2 = igraph.Graph() # add vertices g1.add_vertices(["A","B"]) g2.add_vertices(["B","C","D"]) g3 = igraph.Graph() verts_to_add = [] for v in g1.vs: if v['name'] not in verts_to_add: verts_to_add.append(v['name']) for v in g2.vs: if v['name'] not in verts_to_add: verts_to_add.append(v['name']) g3.add_vertices(verts_to_add) for v in g3.vs: print(v['name']) #A #B #C #D 
    Python - лучший язык программирования в мире.