2

我正在使用 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.
4

1 回答 1

0

您应该按如下方式更改 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 (callable) – 返回 True 的函数,当且仅当 G1 中的节点对 (u1, v1) 和 G2 中的 (u2, v2) 的边缘属性字典在同构测试期间应被视为相等。该函数将被称为:

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

G[u][v]是边 (u, v) 的数据字典。

给定 2 条边的数据字典lambda e1,e2: e1['type'] == e2['type']的函数也是如此,如果两条边的类型相等,则返回 true。

于 2019-02-01T11:54:55.443 回答