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 のサブグラフが 1 つだけ出力されます。すべてのサブグラフを出力する方法について何か考えはありますか?

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 のノードにマップする辞書です。

属性の一致の問題については、ドラムの提案がうまくいきました。属性のマッチングを追加すると、大きなグラフの処理速度が大幅に向上します。

于 2015-05-08T14:18:23.380 に答える