2016-07-11 2 views
2

저는 networkx를 처음 사용 했으므로 도움을 얻을 수있었습니다.그래프에서 작은 구성 요소를 제거하는 방법

노드와 에지를 생성하기 위해 처리 한 일련의 데이터가 있습니다. 그 안에 2 개 이상의 링크가있는 약 5000 개의 노드 그룹이 있습니다 (전체 그룹의 최대 노드 수는 10 개입니다). 그러나 문제는 노드 사이에 1 개의 가장자리 만있는 수천 쌍의 노드가 있다는 것입니다. 즉 노드 a는 노드 b에 연결되어 있지만 다른 노드에는 연결되어 있지 않습니다.

이러한 쌍으로 된 노드를 차트에서 제거하고 싶습니다.

필터링 방법이 있습니까?

+0

내가 이해할 수 있는지 보자. 그래프가 있는데, G 노드에서 3 개 이상의 노드의 구성 요소가 아닌 모든 노드를 제거하고 싶습니까? – Joel

+0

Joel - 문제를 설명하는 훨씬 더 우아한 방법입니다. 바로 그 것입니다! –

+0

나는 이것을 검색 엔진을 통해 찾을 수있는 다른 사람들에게 더 유용하도록 제목을 편집했습니다. 내가 적절히 변경했다고 생각하지 않는다면 자유롭게 수정하십시오. – Joel

답변

2

따라서 노드가 3 개 미만인 구성 요소 (모든 노드가있는 경우 격리 된 노드 포함)에서 모든 노드를 제거하는 것이 목표입니다.

for component in list(nx.connected_components(G)): 
    if len(component)<3: 
     for node in component: 
      G.remove_node(node) 

nx.connected_components을 사용하는 경우 작은 경고가 나타납니다. 구성 요소의 generator을 반환합니다. list을 넣지 않으면 한 번에 하나씩 생성 된 다음 주어진 구성 요소에 대한 단계를 수행합니다. 모든 작업이 완료되면 다음 구성 요소가 생성됩니다. 그러나 G이 수정 되었기 때문에 파이썬은 이것이 제대로 작동하는지 확신 할 수 없습니다. 그래서 그것은 죽을 것입니다 (사전이 크기가 바뀌 었다고 불평하면 --- G의 노드 수가 변경됩니다). 목록으로 변환하면 구성 요소가 모두 루프를 시작하기 전에 발견됩니다. 따라서 구성 요소가 발견되는 동안 그래프는 변경되지 않습니다.

+0

그게 전부 죠 - 정말 고마워요. 내가 할 수 있으면 투표 할거야. –

관련 문제