Сопоставитель NetworkX для изоморфизма подграфов

есть ли способ найти сопоставление узлов при поиске изоморфизма подграфа через NetworkX? Например,

import numpy as np
from networkx.algorithms import isomorphism
import networkx as nx

B = [[0, 2, 1, 0, 0],
     [2, 0, 1, 0, 1],
     [1, 1, 0, 1, 0],
     [0, 0, 1, 0, 0],
     [0, 1, 0, 0, 0]]

A = [[0, 1, 1],
     [1, 0, 2],
     [1, 2, 0]]

G1 = nx.from_numpy_matrix(np.array(B), create_using=nx.MultiGraph())
G2 = nx.from_numpy_matrix(np.array(A), create_using=nx.MultiGraph())
GM = isomorphism.MultiGraphMatcher(G1,G2)
print(GM.subgraph_is_isomorphic())
print(GM.mapping)

Выводит {0: 0, 1: 1, 2: 2}, но это не так.


person Anatoli    schedule 11.10.2017    source источник
comment
Для меня это печатает {} . Какую версию nx вы используете? Для проверки используйте nx.__version__   -  person Joel    schedule 11.10.2017
comment
@ Джоэл, версия 2.0   -  person Anatoli    schedule 12.10.2017
comment
Мне то же. Вы действительно запускали именно этот блок кода?   -  person Joel    schedule 13.10.2017
comment
@ Джоэл Я обнаружил, что когда перед печатью отображения есть print(GM.subgraph_is_isomorphic()), результаты разные ..   -  person Anatoli    schedule 15.10.2017


Ответы (1)


Я нашел решение:

GM = isomorphism.MultiGraphMatcher(G1, G2, edge_match=lambda x, y: x[0]['weight'] == y[0]['weight'])

Согласно документации исходного кода, для мультиграфов должна быть указана функция edge_match.

person Anatoli    schedule 15.10.2017