본문 바로가기

Data Science : Study/1. Python

Python : csr_matrix (데이터의 수를 줄이는 방법)

반응형

 

 

    5     7
1 4   2 3 6
  2   1    
6          
      4   5
7          

 

희소행렬: 대부분의 값이 0.

이런 희소행렬을 메모리 낭비가 적도록 변환하고자 한다! → CSR 형식을 사용!

 

 

 

▶ 필요한 패키지 불러오기

from scipy.sparse import csr_matrix
import numpy as np

 

▶ 0이 아닌 데이터 추출

data = np.array([5,7,1,4,2,3,6,2,1,6,4,5,7])

첫번째 행부터 왼쪽에서 오른쪽으로 순서대로 0이 아닌 값을 리스트에 넣는다.

 

▶ 열 위치

col_pos = np.array([2,5,0,1,3,4,5,1,3,0,3,5,0])

첫번째 행부터 왼쪽에서 오른쪽으로 순서대로 0이 아닌 값의 열 위치를 리스트에 넣는다.
(열 번호는 0번부터 시작)

 

▶ 행 위치 값에 대해 고유한 값의 시작 위치

row_pos_ind = np.array([0,2,7,9,10,12,13])

숫자의 의미를 이해해보자!

처음에는 0을 넣는다.

0행에 0이 아닌 값 2개니까 +2 -> 2

1행에 0이 아닌 값 5개니까 +5 -> 7

2행에 0이 아닌 값 2개니까 +2 -> 9

3행에 0이 아닌 값 1개니까 +1 -> 10

4행에 0이 아닌 값 2개니까 +2 -> 12

5행에 0이 아닌 값 1개니까 +1 -> 13

 

 

▶ 변환!

csr = sparse.csr_matrix((data2, col_pos, row_pos_ind))

csr.toarray()로 내용을 확인하면 원래 희소행렬과 같은 값을 확인할 수 있다.

 

 

▶ 실제로 사용할 때

data : 희소행렬
csr = sparse.csr_matrix(data)

 

 

 

 

 

반응형