728x90
반응형
SMALL
1. CSR 방식이란 무엇인가요?
CSR(Compressed Sparse Row)은 희소 행렬을 저장할 때 행(Row) 의 정보를 압축 하여 메모리 효율과 연산 속도를 동시에 잡은 방식이다.
-> 행(Row) 기준으로 압축하여 저장하는 희소 행렬 방식이다.
-> 각 행에 존재하는 0이 아닌 값만 저장한다.
COO가 모든 값의 (행, 열) 좌표를 다 적었다면, CSR은 "몇 번째 행부터 데이터가 시작되는가"라는 포인터 개념을 도입하여 행 인덱스를 획기적으로 줄인다.
2. CSR의 3가지 핵심 배열
csr은 데이터를 저장하기 위해 세 개의 배열을 사용한다.
- Data : 0이 아닌 실제 값들을 순서대로 저장한다.
- Indices : 각 값이 위치한 열(Column) 인덱스를 저장한다.
- 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
반응형
'LLM' 카테고리의 다른 글
| 19. 예측 기반 vs 카운트 기반 임베딩 비교 (0) | 2026.05.07 |
|---|---|
| 18. CSC ( Compressed Sparse Column ) (0) | 2026.05.06 |
| 16. COO( Coordinate list) (0) | 2026.04.30 |
| 15. 희소 행렬 (Sparse Matrix) (0) | 2026.04.29 |
| 14. 카운트 기반(Count-based) 모델 (0) | 2026.04.28 |