dru*_*rum 6 python isomorphism subgraph networkx
假设我有2个图A和B,我想知道A是否是B的子图.节点包含属性,比如'size'和'material'.
当我跑:
GM = networkx.algorithms.isomorphism.GraphMatcher(B,A)
print networkx.algorithms.isomorphism.subgraph_is_isomorphic()
Run Code Online (Sandbox Code Playgroud)
这仅仅按边缘匹配图形,而不是边缘和属性.
关于如何检查属性的任何线索?
另外,假设B包含2个连通图A.
当我跑:
GM.mapping
Run Code Online (Sandbox Code Playgroud)
这将仅输出A的子图中的一个.有关如何输出每个子图的任何想法吗?
我用以下方法解决了这个问题:
print GM = iso.GraphMatcher(B,A,node_match=iso.categorical_node_match(['material', 'size'],['metal',1]))
Run Code Online (Sandbox Code Playgroud)
之前我不知道的['metal',1]只是默认而不是硬匹配.
小智 6
您可以通过以下方式迭代所有可能的子图
GM = networkx.algorithms.isomorphism.GraphMatcher(B,A)
for subgraph in GM.subgraph_isomorphisms_iter():
print subgraph
Run Code Online (Sandbox Code Playgroud)
本例中的子图是将 B 的节点映射到 A 的节点的字典。
对于属性匹配的问题,drum的建议对我很有效。对于大型图来说,附加属性匹配实际上可以显着加快速度。
| 归档时间: |
|
| 查看次数: |
2992 次 |
| 最近记录: |