wannesm/dtaidistance

Time series distances: Dynamic Time Warping (fast DTW implementation in C)

dtaidistance – 高速時間序列距離度量

是什麼 – 一個 Python 庫(支援可選的 C 加速後端),實作單變量與多變量時間序列的距離度量,其中最突出的是動態時間扭曲(DTW)。由魯汶大學 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)以繪製扭曲路徑與聚類樹,並提供 ExplainPair 類用於基於 DSW 的解釋。

安裝

# 透過 pip(自動加入 NumPy 用於 C 擴充)
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。

相關

  • 專案
  • 專案
  • 專案
  • 專案