NetworkX에서 사용할 수 있는 다양한 그래프 매트릭스를 소개해주세요.

NetworkX는 파이썬으로 작성된 그래프 이론 라이브러리로, 그래프를 생성, 조작 및 분석할 수 있는 다양한 기능을 제공합니다. 그 중에서도 그래프 매트릭스는 그래프의 속성을 나타내는 중요한 도구입니다. 이번 포스트에서는 NetworkX에서 사용할 수 있는 다양한 그래프 매트릭스를 소개하겠습니다.

1. 인접 행렬 (Adjacency Matrix)

그래프의 인접 관계를 2차원 행렬로 표현한 것입니다. 인접 행렬은 정방 행렬로 표현되며, 행과 열은 그래프의 각 노드를 나타내고, 행렬의 값은 두 노드 간의 연결 여부를 나타냅니다. 예를 들어, (i, j) 위치의 값이 1이면 노드 i와 j가 연결되어 있음을 의미하고, 0이면 연결되어 있지 않음을 의미합니다.

import networkx as nx

G = nx.Graph()
G.add_edges_from([(0, 1), (0, 2), (1, 2), (1, 3)])
adj_matrix = nx.adjacency_matrix(G).todense()
print(adj_matrix)

2. 인접 리스트 (Adjacency List)

그래프의 각 노드에 대한 인접한 노드의 리스트를 나타낸 것입니다. 인접 리스트는 딕셔너리나 리스트로 표현할 수 있으며, 각 노드를 키로, 인접한 노드의 리스트를 값으로 저장합니다. 이러한 구조를 이용하면 노드 간의 연결 여부를 빠르게 확인할 수 있습니다.

import networkx as nx

G = nx.Graph()
G.add_edges_from([(0, 1), (0, 2), (1, 2), (1, 3)])
adj_list = nx.to_dict_of_lists(G)
print(adj_list)

3. 간선 리스트 (Edge List)

그래프의 간선을 리스트로 나타낸 것입니다. 간선 리스트는 각 간선을 (u, v) 형태로 저장하며, 이를 이용해 그래프의 구조를 표현할 수 있습니다. 간선 리스트를 이용할 경우 메모리 사용량을 줄일 수 있으며, 그래프 전체를 저장하는 것보다 효율적입니다.

import networkx as nx

G = nx.Graph()
G.add_edges_from([(0, 1), (0, 2), (1, 2), (1, 3)])
edge_list = list(G.edges())
print(edge_list)

위에서 소개한 인접 행렬, 인접 리스트, 간선 리스트는 NetworkX에서 제공하는 그래프를 표현하고 조작하기 위한 강력한 도구입니다. 각각의 매트릭스 형태는 다양한 그래프 분석 작업에 유용하게 사용될 수 있습니다. 그래프 분석에 관심이 있는 분들은 NetworkX를 사용해보시기 바랍니다.

#references