NetworkX:边缘和节点属性的子图同构

时间:2013-03-27 23:31:22

标签: python networkx subgraph isomorphism

假设我有2个图A和B,我想知道A是否是B的子图。 节点包含属性,例如“大小”和“材料”。

当我跑步时:

GM = networkx.algorithms.isomorphism.GraphMatcher(B,A)
print networkx.algorithms.isomorphism.subgraph_is_isomorphic()

这仅仅按边缘匹配图形,而不是边缘和属性。

关于检查属性的任何线索?

另外,假设B包含2个连接的A图。

当我跑步时:

GM.mapping

这将只输出A的子图中的一个。有关如何输出每个子图的想法吗?

2 个答案:

答案 0 :(得分:8)

我通过使用:

解决了这个问题
print GM = iso.GraphMatcher(B,A,node_match=iso.categorical_node_match(['material', 'size'],['metal',1]))

我以前不知道的是['metal',1]只是默认而不是硬匹配。

答案 1 :(得分:2)

您可以按以下方式迭代所有可能的子图

GM = networkx.algorithms.isomorphism.GraphMatcher(B,A)
for subgraph in GM.subgraph_isomorphisms_iter():
    print subgraph
此示例中的

子图是将B的节点映射到A的节点的字典。

对于属性匹配的问题,鼓的建议对我有用。实际上,额外的属性匹配可以显着加快大型图形的速度。