2013-03-27 2 views
4

그래프 A와 B가 2 개 있다고 가정하고 A가 B의 부분 그래프인지 알고 싶습니다. 노드에는 '크기'와 '재질'속성이 있습니다.NetworkX : 가장자리 및 노드 속성에 의한 부분 그래프 동형 모양

나는 실행하면 :

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

이것은 단지 만이 아닌 가장자리와 속성에 의해 가장자리 그래프와 일치합니다.

속성 검사 방법에 대한 단서가 있습니까? A의 서브 그래프의

GM.mapping 

이 출력됩니다 만 한 방법으로 출력에 어떤 생각의 모든 서브 그래프를 : 또한

, 나는 실행하면 B는 A.

2 연결된 그래프가 있다고 가정 해?

답변

5

내가 사용하여이 문제를 해결했습니다 : 내가 전에 몰랐 ['metal',1] 그냥 기본이 아닌 하드 일치한다는 것입니다

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

.

+0

"기본값"값을 설명 할 수 있습니까? 함수에서 어떻게 사용될 지 모르겠습니다. –

+0

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 그래프의 노드가 속성 값을 가지지 않는다면 (즉, 속성이 지정되지 않은 경우) 위에 주어진 "default"값이 그러한 노드의 기본값으로 사용됩니다. 당신이 가질 수없는 노드에 대한 속성을 가정하는 것이 불편하다면'None'을 전달할 수 있습니다. – Harsh

+0

그렇습니다. 구문은 다소 혼란 스럽습니다/(간단하지 않음). 심지어 나는 그것이 일종의 어려운 경기라고 생각했지만 누군가가 그것을 왜 원할 것인가에 대한 내 머리를 감쌀 수 없었습니다. 결국, 나는 작은 파기 후에 설명을 발견했다. – Harsh

1

당신은,이 예에서는 서브 그래프는 A.

속성 일치의 질문에 대한

의 노드 B의 노드를 매핑하는 사전입니다

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

다음과 같은 방법으로 가능한 모든 서브 그래프를 반복 할 수 있습니다 드럼의 제안이 저에게 효과적이었습니다. 속성을 추가로 추가하면 큰 그래프의 경우 실제로 속도가 크게 향상됩니다.

관련 문제