假设我有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的子图中的一个。有关如何输出每个子图的想法吗?
答案 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的节点的字典。
对于属性匹配的问题,鼓的建议对我有用。实际上,额外的属性匹配可以显着加快大型图形的速度。