Scipy (http://www.scipy.org/scipylib)

Scipy는 파이썬 패키지로, 과학 계산용 패키지 모음입니다.
Scipy에서는 고성능 선형대수, 함수 최적화, 신호처리, 특수한 수학 함수와 통계 분포 등 다양한 기능을 제공합니다.
사이킷런은 Scipy의 여러 함수를 사용하여 알고리즘을 구현합니다.

scipy.sparse

Scipy의 가장 중요한 기능 중 하나로, 사이킷런에서 희소 행렬 기능을 사용하여 데이터를 표현할 수 있도록 하는 모듈입니다.

  • 희소 행렬(또는 희박 행렬, Sparse matrix) : 행렬의 값이 대부분 0인 행렬

In [6]:
from scipy import sparse
#크기가 4인 2차원 Numpy 배열 생성
eye = np.eye(4)
print("NumPy 배열 : \n", eye)

Out [6]:
NumPy 배열 :
[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]]

In [7]:
#Numpy 배열을 CSR포맷의 Scipy 희박행렬로 변환
#0이 아닌 원소만 저장
sparse_matrix = sparse.csr_matrix(eye)
print("\nSciPy의 CSR 행렬:\n", sparse_matrix)

Out [7]:
SciPy의 CSR 행렬:
(0, 0) 1.0
(1, 1) 1.0
(2, 2) 1.0
(3, 3) 1.0

희소행렬을 만들 때, 0을 모두 채운 2차원 배열로 만들면 메모리 소모가 클 수 있으므로,
다음과 같이 COO 포맷을 이용해서 희소 행렬을 만드는 방법을 사용합니다.

In [8]:
data = np.ones(4)
row_indices = np.arange(4)
col_indices = np.arange(4)
eye_coo = sparse.coo_matrix((data, (row_indices, col_indices)))
print("COO expression : \n", eye_coo)

Out [8]:
COO expression :
(0, 0) 1.0
(1, 1) 1.0
(2, 2) 1.0
(3, 3) 1.0

SciPy의 희소 행렬에 대한 자세한 내용은 여기를 참고하세요.

[참고자료 : 「머신 러닝 부트캠프 with 파이썬」 시스템계획연구소, (주)도서출판길벗, 2018-07-16]

profile
세양쥐는 코딩하는 찍찍쥐

0개의 댓글