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 接口的任何人。
相关
- 项目
- 项目
- 项目
- 项目
- 项目