[파이썬][Scipy] scipy.sparse 모듈을 사용한 희소 행렬 연산

scipy.sparse 모듈은 희소 행렬(Sparse Matrix)과 관련된 다양한 연산을 수행할 수 있는 도구를 제공합니다. 희소 행렬은 대부분의 원소가 0인 행렬로, 메모리와 계산 시간을 절약하는 데 유용합니다. 아래에서는 scipy.sparse 모듈을 사용하여 희소 행렬을 생성하고 연산하는 예제를 제공합니다.

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

# 밀집 행렬을 생성합니다.
dense_matrix = np.array([[0, 0, 0],
                          [0, 5, 0],
                          [0, 0, 3]])

# Compressed Sparse Row (CSR) 행렬 생성
csr_sparse = csr_matrix(dense_matrix)

# Compressed Sparse Column (CSC) 행렬 생성
csc_sparse = csc_matrix(dense_matrix)

# Coordinate (COO) 행렬 생성
data = np.array([5, 3])
row_indices = np.array([1, 2])
column_indices = np.array([1, 2])
coo_sparse = coo_matrix((data, (row_indices, column_indices)), shape=(3, 3))

# 희소 행렬 연산 수행
result_csr = csr_sparse.dot(csr_sparse)
result_csc = csc_sparse.dot(csc_sparse)
result_coo = coo_sparse.dot(coo_sparse)

print("CSR 희소 행렬:")
print(csr_sparse.toarray())
print("\nCSC 희소 행렬:")
print(csc_sparse.toarray())
print("\nCOO 희소 행렬:")
print(coo_sparse.toarray())

print("\nCSR 희소 행렬 곱셈 결과:")
print(result_csr.toarray())
print("\nCSC 희소 행렬 곱셈 결과:")
print(result_csc.toarray())
print("\nCOO 희소 행렬 곱셈 결과:")
print(result_coo.toarray())

위의 예제에서는 다음을 수행합니다:

  1. 밀집 행렬을 생성합니다.
  2. csr_matrix, csc_matrix, coo_matrix를 사용하여 각각 CSR, CSC, COO 형식의 희소 행렬을 생성합니다.
  3. 생성된 희소 행렬로 행렬 곱셈을 수행합니다.
  4. .toarray() 메서드를 사용하여 희소 행렬을 밀집 행렬로 변환한 다음 결과를 출력합니다.

scipy.sparse 모듈은 희소 행렬에 대한 다양한 연산과 변환 함수를 제공하므로, 메모리와 계산 시간을 절약하면서 고차원 데이터를 다루는 데 유용합니다.