2016-09-14 1 views
1

Я пытаюсь получить список вершин, которые присутствуют или отсутствуют на графике 1 на другом графике 2. Мне интересно, есть ли какой-либо вспомогательный метод в igraph, чтобы сделать это, или если бы было необходимо построить собственный. Спасибо.Как получить список различий между двумя графами в igraph

+0

Являются ли ваши вершины идентифицированными по имени или номеру индекса? Что бы классифицировать две вершины одинаковыми в разных графах? То есть, что является уникальным идентификатором для вершины в вашем графике. – gowrath

ответ

0

Я не думаю, что внутри графика встроен метод, который делает то, что вы хотите. Тем не менее, просто сделать свой собственный.

Я собираюсь сделать разумное предположение, что уникальный идентификатор вершины - это свойство «имя», которое igraph поощряет пользователей к использованию. По существу, вы делаете два набора имен вершин в графе 1 и имена вершин в графе 2 и вычисляете их разницу. Тогда вы можете искать graph1 для вершины, которая соответствует этому имени и добавить его в список, чтобы вернуться:

def find_diff(graph1, graph2): 
    """ 
    Returns list of vertices that are present in graph1 but missing in graph2 
    """ 
    set_v1 = set(graph1.vs['name']) # set of names of vertices in graph1 
    set_v2 = set(graph2.vs['name']) # set of names of vertices in graph2 
    diff = set_v1 - set_v2 
    result = [] 
    for vname in diff: 
     result.append(graph1.vs.find(name=vname))  # find vertex that corresponds to name in graph1 and append it to list 

    return result 

Приведенный выше код для ясности. Вы можете сделать это быстрее и короче. Вот один лайнер:

def find_diff(graph1, graph2): 
    """ 
    Returns list of vertices that are present in graph1 but missing in graph2 
    """ 
    return [vx for vx in graph1.vs if vx['name'] not in graph2.vs['name']] 
+0

Спасибо @ gowrath! Ваше второе решение явно более подходит для моего. Я забываю упомянуть, что graph2 - это эволюция на графике1, а список вершин - потому, что я хочу построить самый большой граф с отсутствующими вершинами (фактически новыми) в другом цвете. В этом списке вершин я установил для них атрибут цвета. Полагаю, я на правильном пути, не так ли? –

+0

@FernandoBarraza Если я правильно вас понимаю, вы хотите изменить цвет узлов в графе 1, которые не находятся в графике2? Тогда да, вы будете перебирать возвращаемый список и изменять атрибут цвета :) – gowrath

+0

Да, это так! @gowrath, спасибо. –

Смежные вопросы