2017-10-11 26 views
0

有没有一种方法可以在通过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},但事实并非如此。

+0

对我来说,这打印'{}'。你使用的是什么版本的NX?检查使用'nx .__ version__' – Joel

+0

@Joel版本是2.0 – Anatoly

+0

我也一样。你真的运行这个代码块吗? – Joel

回答

0

我发现了解决方案:

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

根据源代码文件,应该有多重图指定edge_match功能。