7

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

当我运行时:

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

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

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

此外,假设 B 包含 A 的 2 个连通图。

当我运行时:

GM.mapping

这将只输出 A 的一个子图。关于如何输出每个子图的任何想法?

4

2 回答 2

10

我已经通过使用解决了这个问题:

print GM = iso.GraphMatcher(B,A,node_match=iso.categorical_node_match(['material', 'size'],['metal',1]))

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

于 2013-03-28T00:04:13.733 回答
5

您可以通过以下方式遍历所有可能的子图

GM = networkx.algorithms.isomorphism.GraphMatcher(B,A)
for subgraph in GM.subgraph_isomorphisms_iter():
    print subgraph

这个例子中的 subgraph 是一个字典,它将 B 的节点映射到 A 的节点。

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

于 2015-05-08T14:18:23.380 回答