COO (압축)
IT 위키
COO (Coordinate, 또는 triplet 형식)은 희소 행렬을 저장할 때 가장 직관적이고 간단한 방식 중 하나이다.
개념[편집 | 원본 편집]
COO 방식은 비제로(nonzero) 원소 각각을 (행 인덱스, 열 인덱스, 값) 튜플로 표현하는 방식이다. 즉, 세 개의 배열(행 인덱스 배열, 열 인덱스 배열, 값 배열)을 병렬로 유지하며, 배열의 같은 위치에서 대응되는 원소들이 하나의 비제로 항목을 나타낸다.
구성 요소[편집 | 원본 편집]
COO 방식은 보통 다음 세 배열로 표현된다:
- rowIndices — 비제로 원소들의 행 인덱스 배열
- colIndices — 비제로 원소들의 열 인덱스 배열
- values — 비제로 원소들의 값 배열
각 배열의 길이는 nnz (non-zero count)이며, rowIndices[i], colIndices[i], values[i]는 비제로 원소 하나를 나타낸다.
특징 및 동작[편집 | 원본 편집]
- 데이터 삽입과 구성이 용이하다 — 비제로 원소를 순서대로 추가하여 구성할 수 있다.
- 정렬되지 않은 상태로 유지하는 경우가 많으며, 연산 전에 행 또는 열 기준으로 정렬할 수 있다.
- 전치(transpose) 연산 시, 행 인덱스 배열과 열 인덱스 배열을 교환하면 된다.
- COO는 주로 행렬을 생성하거나 수정하는 단계에서 사용되고, 연산을 위해 CSR 또는 CSC 등으로 변환되는 경우가 많다.
장점[편집 | 원본 편집]
- 구현이 단순하고 직관적이다.
- 비제로 원소를 추가하거나 편집하는 데 유리하다.
- 동일 위치에 여러 원소가 중복되는 경우 쉽게 병합할 수 있다.
단점[편집 | 원본 편집]
- 연산 성능은 떨어질 수 있다 — COO 상태로는 행렬-벡터 곱 연산 등에 비효율적이다.
- 랜덤 액세스나 행/열 슬라이싱이 비효율적이다.
- 대규모 연산 목적에는 CSR, CSC 방식보다 부적합할 수 있다.
응용 및 변환[편집 | 원본 편집]
- 과학 컴퓨팅 라이브러리인 SciPy에서는 coo_matrix 클래스로 COO 형식을 제공한다.
- 연산 효율을 위해 보통 COO에서 CSR 또는 CSC 형식으로 변환하여 사용된다.
- 전치 행렬은 rowIndices와 colIndices를 교환함으로써 얻을 수 있다.