[파이썬][Scipy] sparse matrix (희소 행렬) 예제

희소 행렬은 대부분의 원소가 0인 행렬로, 메모리와 연산 효율을 높이기 위해 사용됩니다. Scipy에서는 다양한 희소 행렬 형식을 지원하며, 각 형식은 특정한 유형의 희소성에 최적화되어 있습니다. 아래에서는 Scipy에서 희소 행렬을 생성하고 다루는 예제를 제공합니다.

먼저, 필요한 모듈을 가져옵니다:

mport numpy as np
from scipy.sparse import csr_matrix, lil_matrix, coo_matrix

예제 1: CSR (Compressed Sparse Row) 행렬

CSR 형식은 행의 인덱스 및 데이터를 압축하여 저장하며, 행에 대한 슬라이싱 및 연산이 효율적입니다.

# 4x4 CSR 형식의 희소 행렬 생성
data = np.array([1, 2, 3, 4])
row_indices = np.array([0, 0, 1, 2])
column_indices = np.array([1, 3, 2, 3])
csr = csr_matrix((data, (row_indices, column_indices)), shape=(4, 4))

print("CSR 희소 행렬:")
print(csr.toarray())

예제 2: LIL (List of Lists) 행렬

LIL 형식은 리스트의 리스트로 희소 행렬을 저장하며, 원소를 효율적으로 추가 및 수정할 수 있습니다.

# 4x4 LIL 형식의 희소 행렬 생성
lil = lil_matrix((4, 4))
lil[0, 1] = 1
lil[0, 3] = 2
lil[1, 2] = 3
lil[2, 3] = 4

print("LIL 희소 행렬:")
print(lil.toarray())

예제 3: COO (Coordinate) 행렬

COO 형식은 데이터, 행 인덱스 및 열 인덱스를 별도의 배열로 저장하며, 데이터를 효율적으로 추가할 수 있습니다.

# 4x4 COO 형식의 희소 행렬 생성
data = np.array([1, 2, 3, 4])
row_indices = np.array([0, 0, 1, 2])
column_indices = np.array([1, 3, 2, 3])
coo = coo_matrix((data, (row_indices, column_indices)), shape=(4, 4))

print("COO 희소 행렬:")
print(coo.toarray())

이러한 예제에서는 CSR, LIL 및 COO 형식으로 희소 행렬을 생성하고 데이터를 추가하거나 저장하는 방법을 보여줍니다. Scipy는 다양한 희소 행렬 형식을 지원하며, 작업의 특성에 따라 적절한 형식을 선택할 수 있습니다.