Изоморфизм в сети x с реберными атрибутами - PullRequest
0 голосов
/ 01 февраля 2019

Я использую функцию Networkx для изоморфизма:

  GM = nx.algorithms.isomorphism.GraphMatcher(G1,G2,node_match=lambda n1,n2:n1['name']==n2['name']) 

Я хочу сделать то же самое с атрибутом ребра с именем 'type', но я не знаю как.Я только что попробовал это:

  GM = nx.algorithms.isomorphism.GraphMatcher(G1,G2,node_match=lambda n1,n2:n1['name']==n2['name'], edge_match= lambda G[u1][v1],G2[u2][v2]: g[u1][v1]['type'] == g2[u2][v2]['type']) 

, но это не работает.Спасибо!

РЕДАКТИРОВАТЬ: это из документации:

 edge_match : callable
            A function that returns True iff the edge attribute dictionary for
            the pair of nodes (u1, v1) in G1 and (u2, v2) in G2 should be
            considered equal during the isomorphism test. The function will be
            called like::

               edge_match(G1[u1][v1], G2[u2][v2])

            That is, the function will receive the edge attribute dictionaries
            of the edges under consideration. If None, then no attributes are
            considered when testing for an isomorphism.

1 Ответ

0 голосов
/ 01 февраля 2019

Вы должны изменить функцию edge_match следующим образом:

GM = nx.algorithms.isomorphism.GraphMatcher(G1,G2,node_match=lambda n1,n2:n1['name']==n2['name'], edge_match= lambda e1,e2: e1['type'] == e2['type'])

Объяснение:

Документация гласит:

edge_match (вызываемый) - Функция, которая возвращает True, если словарь атрибутов ребер для пары узлов (u1, v1) в G1 и (u2, v2) в G2 должен считаться равным во время теста на изоморфизм.Функция будет вызываться так:

edge_match(G1[u1][v1], G2[u2][v2])

G[u][v] - это словарь данных для ребра (u, v).

Итак lambda e1,e2: e1['type'] == e2['type'] - это функция, которая с учетом словаря данных из 2 ребер возвращает значение true, если тип двух ребер равен.

...