본문 바로가기

인공지능/인공지능

희소 행렬(Sparse Matrix) 생성 및 변환

희소 행렬은 대부분의 요소가 0인 행렬로, 메모리와 계산 자원을 효율적으로 사용하는 데 필수적이다.

특히 대규모 데이터 처리나 고차원 데이터 분석에서 유용하고, 메모리 사용을 최소화하고 연산 속도를 향상시키는 데 도움을 준다. 이번에는 Python의 numpy와 scipy 라이브러리를 사용하여 희소 행렬을 생성하고, CSR 형식으로 변환하는 방법을 해본다

 

import numpy as np
from scipy import sparse

numpy와 scipy 라이브러리를 임포트한다. numpy는 배열과 행렬을 다루는 기본적인 도구를 제공하고, scipy는 다양한 과학 계산 기능을 추가로 제공한다.

 

기본 행렬 생성

matrix = np.array([[0, 0],
                   [0, 1],
                   [3, 0]])

umpy를 사용하여 기본 행렬을 생성합니다. 이 행렬은 3x2 크기로, 일부 요소만 비어 있지 않게된다.

 

CSR형식으로 변환

matrix_sparse = sparse.csr_matrix(matrix)

생성한 기본 행렬을 CSR(Compressed Sparse Row) 형식으로 변환한다. CSR 형식은 희소 행렬의 메모리 사용을 줄이고, 행렬 연산을 효율적으로 수행할 수 있게 한다

 

큰 크기의 희소 행렬 생성

matrix_large = np.array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                        [0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
                        [3, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
matrix_large_sparse = sparse.csr_matrix(matrix_large)

더 큰 크기의 행렬을 생성하고 CSR 형식으로 변환하는데 이 행렬은 3x10 크기로, 여전히 대부분의 요소가 0으로 채워져 있다.

 

CSR행렬 출력 및 변환

print(matrix_sparse)
print(matrix_large_sparse)

CSR 형식으로 변환된 희소 행렬들을 출력합니다. CSR 행렬의 내부 구조를 확인할 수 있다.

 

 

+추가적으로, 비어 있지 않은 값과 그 위치를 직접 지정하여 CSR 형식의 희소 행렬을 생성하고, 이 행렬의 경우 3x10 크기로, 특정 위치에 값이 채워진다.

matrix_sparse_2 = sparse.csr_matrix(([1, 3], ([1, 2], [1, 0])), shape=(3, 10))
print(matrix_sparse_2)

 

 

 

 

'인공지능 > 인공지능' 카테고리의 다른 글

배열과 행렬의 원소 선택하기  (0) 2024.08.19
다양한 행렬 생성 및 초기화 방법  (0) 2024.08.18