用于稀疏酉矩阵的最佳 C++ 矩阵库
-
19-09-2019 - |
题
我正在寻找一个好的(在最好的情况下积极维护的)C++ 矩阵库。因此它应该被模板化,因为我想使用有理数复数作为数字类型。我处理的矩阵主要是稀疏矩阵和酉矩阵。
您能否建议图书馆并简要解释一下为什么要使用它们,因为我知道如何找到它们,但我无法真正决定什么适合我,因为我错过了使用它们的经验。
编辑:
我正在处理的主要操作是 矩阵乘法, 标量与向量的乘法 和 克罗内克积. 。矩阵的大小是指数级的,我希望至少能够处理高达 1024x1024 条目的矩阵。
解决方案
许多人在做“严肃”的矩阵工作,依靠 BLAS, ,添加 拉帕克 / 阿特拉斯 (正规矩阵)或 UMF包 (稀疏矩阵)用于更高级的数学。原因是该代码经过充分测试、稳定、可靠且速度相当快。此外,您可以直接从供应商处购买它们(例如 英特尔MKL)根据您的架构进行调整,但也可以免费获得它们。 uBLAS 中提到的 曼努埃尔的回答 可能是标准的 C++ BLAS 实现。如果你以后需要类似 LAPACK 的东西,这里有 绑定 这样做。
然而,这些标准库(BLAS / LAPACK / ATLAS 或 uBLAS + 绑定 + LAPACK / ATLAS)都无法满足您的模板化和易于使用的需求(除非 uBLAS 是您所需要的)。实际上,我必须承认,当我使用 BLAS / LAPACK 实现时,我倾向于直接调用 C / Fortran 接口,因为我通常在 uBLAS + 绑定组合中看不到太多额外的优势。
如果我需要一个简单易用的通用 C++ 矩阵库,我倾向于使用 本征 (我以前用过 新材料 在过去)。优点:
- 在英特尔架构上相当快,对于较小的矩阵来说可能是最快的
- 不错的界面
- 几乎满足您对矩阵库的所有期望
- 您可以轻松添加 新类型
缺点(国际海事组织):
- 单处理器[编辑: 部分固定于 本征3.0]
- 对于较大的矩阵和一些高级数学,速度比 ATLAS 或 Intel MKL 慢(例如LU 分解)[编辑: 在 Eigen 3.0 中也有所改进]
- 仅对稀疏矩阵的实验支持[编辑: 在即将发布的 3.1 版本中进行了改进]。
编辑: 即将推出的 Eigen 3.1 允许某些函数使用 Intel MKL(或任何其他 BLAS / LAPACK 实现)。