Dense Array(덴스 배열)는 말 그대로 데이터가 “촘촘하게(dense)” 채워져 있는 배열을 의미합니다.
즉,
배열의 각 인덱스가 실제 데이터로 빈틈없이 채워져 있는 구조를 말합니다.
이 개념은 컴퓨터 메모리 구조, 과학 계산(NumPy, PyTorch), 데이터베이스, 머신러닝 등 다양한 분야에서 매우 중요하게 사용됩니다.
예를 들어 아래 두 가지 배열을 비교해볼까요?
# Dense Array (촘촘하게 채워진 배열)
dense = [1, 2, 3, 4, 5]
# Sparse Array (드문드문 채워진 배열)
sparse = {0: 1, 3: 4, 7: 9} # 0, 3, 7 인덱스에만 데이터 존재
Dense Array는 인덱스 0부터 4까지 모든 위치에 값이 존재합니다.
→ 메모리에 연속적으로 저장되어, 빠른 접근 속도와 벡터 연산 최적화가 가능합니다.
Sparse Array는 대부분의 값이 비어 있고, 일부 인덱스에만 데이터가 있습니다.
→ 메모리를 절약하지만, 연산 속도는 느릴 수 있습니다.
Dense Array는 연속적인 메모리 블록에 데이터를 저장합니다.
그래서 CPU 캐시 효율(cache locality)이 높습니다.
| index | 0 | 1 | 2 | 3 | 4 |
| value | 1 | 2 | 3 | 4 | 5 |
CPU는 인접한 메모리 공간을 한 번에 읽어올 수 있으므로,
루프 연산(for loop)이나 벡터 연산(vectorized operation) 시 속도가 매우 빠릅니다.
| 구분 | Dense Array | Sparse Array |
|---|---|---|
| 데이터 분포 | 대부분의 원소가 실제 값 | 대부분의 원소가 0 또는 비어 있음 |
| 메모리 효율성 | 낮음 (공백도 저장) | 높음 (필요한 값만 저장) |
| 연산 속도 | 빠름 (연속적 메모리 접근) | 느림 (비연속적 접근) |
| 예시 라이브러리 | NumPy, PyTorch Tensor | SciPy Sparse Matrix, PyTorch SparseTensor |
| 적합한 경우 | 이미지, 음성, 연속 데이터 | 그래프, 희소 벡터, 원-핫 인코딩 등 |
import numpy as np
# Dense Array
dense_arr = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 요소 접근 (빠름)
print(dense_arr[1, 2]) # 6
# 전체 덧셈 연산
print(dense_arr.sum()) # 45
NumPy의 ndarray는 Dense Array 구조를 기반으로 만들어졌습니다.
그래서 C로 구현된 내부 연산이 매우 빠르죠.
머신러닝 프레임워크(PyTorch, TensorFlow 등)에서 텐서(Tensor)는 대부분 Dense 구조를 사용합니다.
예를 들어,
하지만
| 분야 | Dense Array 예시 | Sparse Array 예시 |
|---|---|---|
| 이미지 처리 | 픽셀 전체가 채워진 사진 | 마스크 이미지(일부만 활성화) |
| 자연어 처리 | Word2Vec 벡터 | One-hot 인코딩 벡터 |
| 그래프 데이터 | Fully connected matrix | Adjacency matrix (희소) |
Dense Array란
데이터가 빈틈없이 저장된 연속적인 배열 구조로,
연산 속도가 빠르고 CPU/GPU에서 효율적으로 처리되는 데이터 형태입니다.