728x90
반응형
SMALL

1. CSR 방식이란 무엇인가요?

CSR(Compressed Sparse Row)은 희소 행렬을 저장할 때 행(Row) 의 정보를 압축 하여 메모리 효율과 연산 속도를 동시에 잡은 방식이다. 

-> 행(Row) 기준으로 압축하여 저장하는 희소 행렬 방식이다. 

-> 각 행에 존재하는 0이 아닌 값만 저장한다. 
COO가 모든 값의 (행, 열) 좌표를 다 적었다면, CSR은 "몇 번째 행부터 데이터가 시작되는가"라는 포인터 개념을 도입하여 행 인덱스를 획기적으로 줄인다. 

 

2. CSR의 3가지 핵심 배열

csr은 데이터를 저장하기 위해 세 개의 배열을 사용한다. 

  1. Data : 0이 아닌 실제 값들을 순서대로 저장한다. 
  2. Indices : 각 값이 위치한 열(Column) 인덱스를 저장한다. 
  3. Indptr(Index Pointer) : 각 행의 데이터가 Data 배열의 어디서 시작하고 끝나는지를 나타내는 인덱스 번호를 저장한다. (가장 중요한 압축 포인트)

CSR 표현 :

data  = [3, 4, 5]

indices = [2, 0, 1]

indpter = [0, 1, 2, 3]

구조 설명

data  -> 실제값

indices -> 열(column) 위치

indpter -> 각 행의 시작 위치 

예 : 

 

  • row 0 → data[0:1]
  • row 1 → data[1:2]
  • row 2 → data[2:3]

 

 

왜 CSR인가요 ?

행 단위로 데이터를 읽어올 때 매우 빠르다. 행렬 곱셈 연산을 할 때 단위 연산이 필수적이므로, 대부분의 머신러닝 라이브러리(Scipy, XGBoost, LightGBM)는 CSR을 기본 포맷으로 사용한다. 

반응형

3. 파이썬 실습: COO에서 CSR로 변환하기

from scipy.sparse import csr_matrix 
data = [3, 4, 5] 
indices = [2, 0, 1] 
indptr = [0, 1, 2, 3] 
matrix = csr_matrix((data, indices, indptr), shape=(3, 3)) 

print(f"CSR 데이터 배열: {matrix.data}")
print(f"행 시작 위치(Indptr): {matrix.indptr}")
print(matrix.toarray())
CSR 데이터 배열: [3 4 5]
행 시작 위치(Indptr): [0 1 2 3]
[[0 0 3]
 [4 0 0]
 [0 5 0]]
728x90

4. CSR 장점

  • 빠른 행 접근
  • 행 단위 연산 최적화
  • 메모리 효율 좋음

5. CSR 단점

  • 열 접근 느림
  • 구조 변경 어려움
  • 삽입 /삭제 비효율

6. 언제 사용될까?

  • NLP (TF-IDF, BoW)
  • 추천 시스템
  • 그래프 연산
  • 머신러닝 대규모 데이터 

7. COO vs CSR

  • COO : 희소 행렬을 처음 생성하거나 수정할 때 (데이터  추가가 쉬움)
  • CSR : 행렬 곱셈 등 수치 연산을 수행하거나 모델을 학습시킬 때 (속도가 압도적)
항목 COO CSR
저장 방식 좌표 행 압축
생성 쉬움 어려움
연산 느림 빠름

 

흐름 

COO -> CSR 변환 후 연산

 

8. 정리

" 행 기준으로 압축된 고속 연산용 희소 행렬 구조 "

CSR은 희소 행렬을 행 단위로 압축하여 저장함으로써 빠른 연산을 가능하게 하는 구조이다. 특히 대규모 데이터 처리에서 필수적인 방식으로, COO와 함께 사용되며 실무에서 매우 중요하다. 

 

제미나이, 챗지피티 등을 이용 하여 작성

728x90
반응형

+ Recent posts