scikit-tda/ripser.py
A Lean Persistent Homology Library for Python
什麼是 Ripser.py?
Ripser.py 是快速 C++ 庫 Ripser 的 Python 封裝,提供一個輕量、易用的工具組,用於計算 拓撲資料分析 (TDA) 的核心方法——持續同調(persistent homology)。它可將點群、距離矩陣或影像轉換為 持續圖(persistence diagrams),捕捉多尺度的形狀資訊,適用於許多機器學習流程。
主要功能
| 功能 | 說明 |
|---|---|
| 持續上同調 | 對稀疏或密集資料計算 Vietoris-Rips(或下星)濾波,並回傳出生/死亡對。 |
| 圖譜可視化 | 透過 persim 套件提供簡單的 plot_diagrams 輔助函數,繪製持續圖。 |
| 影像濾波 | 直接從灰階影像生成下星濾波。 |
| 代表性上鏈 | 提取實現圖譜中顯示的同調類的具體上鏈。 |
| scikit-learn 兼容 API | 提供 Rips 變換器(fit_transform / plot),可輕鬆接入流程。 |
安裝
# 從 PyPI(支援 Windows、macOS、Linux 的預建輪子)
pip install ripser
如需從原始碼建置(例如修改程式碼),請克隆倉儲並執行 pip install . 或使用 pip install -e . 進行可編輯安裝。唯一必需的相依性是 Cython, numpy, scipy, scikit-learn, persim。Windows 用戶可能需要 MinGW;macOS 用戶請確保 Xcode 命令列工具為最新版本。
可選性能提升:將 robin-hood-hashing 倉儲克隆至專案根目錄,可啟用更快的雜湊表實作,帶來最高約 30% 的速度提升。
快速範例
import numpy as np
from ripser import ripser, Rips
from persim import plot_diagrams
# 隨機 2D 點群
X = np.random.random((100, 2))
# 函數式 API
dgms = ripser(X)['dgms']
plot_diagrams(dgms, show=True)
# scikit-learn 風格
rips = Rips()
dgms2 = rips.fit_transform(X)
rips.plot(dgms2)
上述程式碼產生一個持續圖(參見 README 圖像),展示不同尺度下拓撲特徵的生命周期。
文件與資源
- 完整文件: https://ripser.scikit-tda.org
- JOSS 論文(可引用): DOI 10.21105/joss.00925
- 相關專案:原始 C++ 庫 Ripser,GPU 加速版 Ripser++。
授權與引用
- 授權:MIT(Python 封裝與底層 C++ 程式碼皆適用)。
- 在研究中使用此套件時,請引用 JOSS 論文與原始 Ripser 論文(README 中提供 BibTeX 條目)。
誰會使用它?
- 將 TDA 應用於點群、時間序列或影像的資料科學家。
- 建構分類、聚類或異常偵測特徵的研究人員。
- 需要無需處理 C++ 編譯問題的快速純 Python 接口的任何人。
相關
- 專案
- 專案
- 專案
- 專案
- 專案