Dense Array란? — 프로그래밍에서 ‘촘촘한 배열’을 이해하기

Bean·2025년 10월 14일

프로그래밍

목록 보기
39/49

💡 Dense Array의 기본 개념

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

Dense Array는 연속적인 메모리 블록에 데이터를 저장합니다.
그래서 CPU 캐시 효율(cache locality)이 높습니다.

| index | 0 | 1 | 2 | 3 | 4 |
| value | 1 | 2 | 3 | 4 | 5 |

CPU는 인접한 메모리 공간을 한 번에 읽어올 수 있으므로,
루프 연산(for loop)이나 벡터 연산(vectorized operation) 시 속도가 매우 빠릅니다.


🧩 Sparse Array와의 비교

구분Dense ArraySparse Array
데이터 분포대부분의 원소가 실제 값대부분의 원소가 0 또는 비어 있음
메모리 효율성낮음 (공백도 저장)높음 (필요한 값만 저장)
연산 속도빠름 (연속적 메모리 접근)느림 (비연속적 접근)
예시 라이브러리NumPy, PyTorch TensorSciPy Sparse Matrix, PyTorch SparseTensor
적합한 경우이미지, 음성, 연속 데이터그래프, 희소 벡터, 원-핫 인코딩 등

🧮 실제 예시 (NumPy 기준)

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의 ndarrayDense Array 구조를 기반으로 만들어졌습니다.
그래서 C로 구현된 내부 연산이 매우 빠르죠.


🔬 머신러닝에서의 Dense Array

머신러닝 프레임워크(PyTorch, TensorFlow 등)에서 텐서(Tensor)는 대부분 Dense 구조를 사용합니다.

예를 들어,

  • 이미지 데이터 → 모든 픽셀에 RGB 값이 존재하므로 Dense 구조
  • Word Embedding → 각 단어 벡터의 모든 차원에 값이 존재하므로 Dense 구조

하지만

  • Bag-of-Words, Graph Embedding처럼 대부분이 0인 경우에는
    Sparse Tensor를 사용해 메모리를 절약합니다.

📚 실제 사례 비교

분야Dense Array 예시Sparse Array 예시
이미지 처리픽셀 전체가 채워진 사진마스크 이미지(일부만 활성화)
자연어 처리Word2Vec 벡터One-hot 인코딩 벡터
그래프 데이터Fully connected matrixAdjacency matrix (희소)

🧾 한 줄 요약

Dense Array
데이터가 빈틈없이 저장된 연속적인 배열 구조로,
연산 속도가 빠르고 CPU/GPU에서 효율적으로 처리되는 데이터 형태입니다.


profile
AI developer

0개의 댓글