wannesm/dtaidistance
Time series distances: Dynamic Time Warping (fast DTW implementation in C)
dtaidistance – 고속 시계열 거리 측정
무엇인가요 – 단변량 및 다변량 시계열에 대한 거리 측정을 구현하는 Python 라이브러리 (옵션으로 C 가속 백엔드 포함). 가장 대표적인 것은 동적 시간 왜곡(DTW)입니다. KU 루벤의 DTAI 연구 그룹에서 개발되었으며 Apache 2.0 라이선스 하에 배포됩니다.
주요 기능
- 순수 Python 및 Cython 기반 구현; C 버전은 30~300배 빠르며 OpenMP가 사용 가능한 경우 병렬 처리 가능.
- 핵심 알고리즘: DTW 거리, DTW 왜곡 경로, 전체 왜곡 행렬, DTW 바리센터 평균화, 설명 가능성용 동적 부분 시계열 왜곡(DSW), 부분 시계열 검색, 모티프 탐지 보조 기능.
- 다변량 시계열 지원, 선택적 NumPy/Pandas 통합, 분산 작업용 블록 단위 거리 행렬 계산.
- SciPy의 클러스터링 함수를 래핑한 클러스터링(계층적, 링크) 보조 유틸리티, 왜곡 경로 및 클러스터링 트리 시각화 도구.
- 최소한의 필수 종속성 – Python 3만 필수; NumPy, Cython, Matplotlib, SciPy, tqdm, PyClustering는 선택 사항.
일반적인 워크플로우
import numpy as np
from dtaidistance import dtw, clustering
# 두 시계열 → DTW 거리 (빠른 C 버전)
s1 = np.array([0,0,1,2,1,0,1,0,0], dtype=np.double)
s2 = np.array([0,1,2,0,0,0,0,0,0], dtype=np.double)
dist = dtw.distance_fast(s1, s2, use_pruning=True)
print('DTW 거리:', dist)
# 전체 컬렉션 → 거리 행렬 (병렬 C 코드)
series = [s1, s2, np.random.rand(9)]
matrix = dtw.distance_matrix_fast(series, parallel=True)
# 행렬 기반 계층적 클러스터링
model = clustering.Hierarchical(dtw.distance_matrix_fast, {})
labels = model.fit(series)
print('클러스터 레이블:', labels)
라이브러리는 왜곡 경로와 클러스터링 트리를 시각화할 수 있는 도구(dtw_visualisation)와 DSW 기반 설명을 위한 ExplainPair 클래스도 제공합니다.
설치
# pip를 통한 설치 (C 확장용 NumPy 자동 추가)
pip install dtaidistance
# 또는 conda-forge를 통한 설치 (사전 빌드된 바이너리)
conda install -c conda-forge dtaidistance
C 코드 컴파일이 불가능한 경우(예: OpenMP 누락)에도 순수 Python 대체 구현은 즉시 사용 가능합니다.
사용할 시기
- 연구 또는 프로덕션 파이프라인에서 신뢰성 있고 잘 테스트된 DTW 구현이 필요한 경우.
- 대규모 쌍별 DTW 계산이 필요한 경우(예: 클러스터링, 최근접 이웃 검색) 속도가 중요할 때.
- 부분 시계열 왜곡을 통한 시계열 유사성 설명이 필요한 경우.
- 이미 NumPy/Pandas를 사용하는 프로젝트에서 무거운 딥러닝 프레임워크 없이 즉시 사용 가능한 거리 함수가 필요한 경우.
더 알아보기
- 전체 문서: https://dtaidistance.readthedocs.io
- API 참조 및 예제는 리포지토리의
examples/폴더에 있습니다. - 논문에 사용할 경우 Zenodo DOI로 소프트웨어를 인용하세요.
위 정보는 프로젝트의 README에서 직접 인용되었습니다.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트