25 个版本
0.10.1 | 2024 年 2 月 21 日 |
---|---|
0.9.2 | 2023 年 5 月 15 日 |
0.8.0 | 2023 年 3 月 24 日 |
#484 在 算法
每月 49 次下载
用于 alphalpha
89KB
1.5K SLoC
概述
LoPHAT 是一个 Rust 库,实现了用于计算持久同调(PH)的无锁算法,该算法在 [1] 中提出。Python 绑定通过 PyO3 提供,界面与使用过 PHAT 的用户熟悉 [2]。
此库的主要目标是使算法对希望计算 任意滤波链复形 的 PH 的用户可用。特别是,LoPHAT 不专门用于计算常见滤波或甚至滤波单纯复形的 PH。因此,您应该期望 LoPHAT 的性能不如 giotto-ph [3] 或 oineus [4],这两者都使用了 [1] 中的算法。
与 [1] 中描述的算法的唯一区别是
- 我们使用
pinboard
库进行基于纪元的矩阵内存管理。 - 我们在内存中将 $R$ 和 $V$ 的第 $j$ 列存储在一起,允许完整的 $R=DV$ 分解(而不仅仅是计算配对)。
- 我们还采用清除优化 [5] 并提供反传递法(以便计算持久同调)的方法。
- 我们通过工作窃取分发块,使用
rayon
库。
警告 LoPHAT 目前处于测试阶段。实现尚未优化,API 不固定,测试有限。
Rust 中的使用
使用以下命令安装
cargo add lophat
有关使用方法,请参阅 Rust 文档。
Python 中的使用
可以通过以下方式安装 Python 绑定
pip install lophat
如果失败,可能是 pip
尝试在没有 cargo
工具链的情况下从源代码安装。要强制安装二进制文件,请运行
pip install --only-binary lophat lophat
这为您提供了一个功能,即 compute_pairings
函数,该函数返回一个图,作为一对一列的集合和一对列的集合。默认情况下,它使用所有可用的线程和[1]中的无锁算法。要使用串行算法或限制线程数,请额外提供一个 LoPhatOptions
对象。
有关更多详细信息,请参阅Python 文档。例如,请参阅文件 example.py
或此 Google Colab 笔记本。
待办事项
- 更改每个算法的选项结构
- 确定新的 Python 绑定
- 增加属性测试
- 编写单元测试
- 编写集成测试(测试 V)
- 基准测试
- 抽象出矩阵特性?
- 当 V 不维护时减少内存使用
- 添加贡献指南
- 修复旋转向量中的锁定
- GitHub 操作
参考
Morozov, Dmitriy, 和 Arnur Nigmetov. "向无锁持久同伦迈进。" 第 32 届 ACM 并行算法和架构研讨会论文集。2020。
Bauer, Ulrich, 等人。 "Phat–持久同伦算法工具箱。" 符号计算杂志 78 (2017): 76-90. Bitbucket
Pérez, Julián Burella, 等人。 "giotto-ph:一个用于高性能计算 Vietoris-Rips 过滤的持久同伦的 Python 库。" arXiv 预印本 arXiv:2107.05412 (2021)。 GitHub
Nigmetov, Arnur, Morozov, Dmitriy 和 USDOE。 Oineus v1.0. 计算机软件。 https://www.osti.gov//servlets/purl/1774764。 USDOE。 2021 年 4 月 1 日。 网页。 doi:10.11578/dc.20210407.1。 GitHub
Bauer, Ulrich, Michael Kerber 和 Jan Reininghaus。 "清晰和压缩:分块计算持久同伦。" 数据分析和服务化 III:理论、算法和应用。Springer 国际出版,2014。
依赖关系
~3–11MB
~84K SLoC