networkx - swap - double edge swap

최대 1 분 소요

1-line summary

  • Before: (u, v) and (x, y)
  • AFter : (u, x) and (v, y)

network - double edge swap

  • network의 유형, 특성들을 판단하는 지표들의 유효함을 보이기 위해서는 보통 reference network를 정의하고 차이를 보이는 식으로 진행되죠.
  • 이 때, 많이 쓰이는 reference network는 “degree distribution을 동일하게 유지하고, edge를 여러번 바꾼 네트워크”입니다. 흔히 equivalent random network라고 하죠.
  • 이 때, 한번 바꾸어주는 edge swap이 바로 networkx.algorithms.swap.double_edge_swap이며, 그림으로 보면 다음과 같죠.
  • 이를 여러번 반복하면, degree distribution은 동일하더라도 다른 형태의 G가 나오게 됩니다.
  • 따라서, 이런 equivalent network에 대해서도 차이점이 명확하게 드러나면, 그 network는 확실한 차별점을 가지고 있다, 라고 할 수 있는 것이죠.
u--v            u  v
       becomes  |  |
x--y            x  y

do it.

  • 코드는 간단합니다.
import networkx as nx 

G = nx.Graph()
G.add_edges_from([
    (0, 1), 
    (2, 3)
])
print(f"Before: {G.edges()}")
# nswap: 몇 개의 edge를 바꿀 것인지, 
# maxtries: 1번 swap할 때, 시도를 몇 번인나 할것인지?
nx.double_edge_swap(G, nswap=1, max_tries=100, seed=0)
print(f"After : {G.edges()}")

Before: [(0, 1), (2, 3)]
After : [(0, 3), (1, 2)]

reference

댓글남기기