我正在寻找一个好的(在最好的情况下积极维护的)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 实现)。

其他提示

升压的uBLAS 中因为它是通过增强滤波器。

有支持稀疏矩阵的几个模板库,所以这真的很难拿出一个更好的理由,如果你不是更具体的了解您的需求。

您也应该尝试 MLT 和的 HASEM 矩阵C ++库。最后一个是很好的记录。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top