c++ - 用于稀疏酉矩阵的最佳 C++ 矩阵库

标签 c++ matrix sparse-matrix lapack umfpack

我正在寻找一个好的(最好是积极维护的)C++ 矩阵库。因此它应该被模板化,因为我想使用一个复杂的有理数作为数字类型。我处理的矩阵主要是稀疏和酉矩阵。

能否请您推荐图书馆并简单解释一下为什么要使用它们,因为我知道如何找到它们,但我无法真正决定什么适合我,因为我缺少使用它们的经验。

编辑:

我正在处理的主要操作是矩阵乘法标量与 vector 的乘法kronecker 乘积。矩阵的大小是指数级的,我希望至少能够处理最多 1024x1024 个条目的矩阵。

最佳答案

很多人在做“严肃”的矩阵工作,依靠BLAS , 添加 LAPACK/ATLAS (正规矩阵)或 UMFPACK (稀疏矩阵)用于更高级的数学。原因是此代码经过充分测试、稳定、可靠且速度相当快。此外,您可以直接从针对您的架构调整的供应商(例如 Intel MKL)购买它们,但也可以免费获得它们。 uBLASManuel's answer 中提到可能是标准的 C++ BLAS 实现。如果你以后需要像 LAPACK 这样的东西,有 bindings这样做。

但是,这些标准库(BLAS/LAPACK/ATLAS 或 uBLAS + bindings + LAPACK/ATLAS)都没有满足您的模板化和易于使用的条件(除非 uBLAS 是您永远需要的)。事实上,我必须承认,当我使用 BLAS/LAPACK 实现时,我倾向于直接调用 C/Fortran 接口(interface),因为我通常看不到 uBLAS + 绑定(bind)组合的额外优势。

如果我需要一个简单易用的通用 C++ 矩阵库,我倾向于使用 Eigen (我以前用过 NewMat)。优点:

  • 在 Intel 架构上非常快,对于较小的矩阵可能是最快的
  • 漂亮的界面
  • 矩阵库中的几乎所有内容
  • 您可以轻松添加 new types

缺点(海事组织):

  • 单处理器 [编辑:部分修复于 Eigen 3.0 ]
  • 对于较大的矩阵和一些高级数学比 ATLAS 或 Intel MKL 更慢(例如 LU 分解)[编辑:也在 Eigen 3.0 中得到改进]
  • 仅对稀疏矩阵提供实验性支持[编辑:在即将发布的 3.1 版中得到改进]。

编辑:即将推出的 Eigen 3.1 允许某些函数使用 Intel MKL(或任何其他 BLAS/LAPACK 实现)。

关于c++ - 用于稀疏酉矩阵的最佳 C++ 矩阵库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2222549/

相关文章:

c++ - 如何删除 IPropertyStorage 自动添加的 LOCALE 属性?

c++ - 几次乘法后浮点矩阵停止变化

python - 从 NumPy 矩阵中满足条件的每一行中取 N 个第一个值

excel - 将矩阵转换为 3 列表 ('reverse pivot' 、 'unpivot' 、 'flatten' 、 'normalize' )

python - numpy 矩阵乘法 n x m * m x p = n x p

python-2.7 - 快速构建一个非常大的稀疏矩阵

C++ Armadillo 稀疏矩阵类型转换

c++ - 引用/指针失效到底是什么?

python - 通过 API 请求高效发送稀疏矩阵 numpy

c++ - 有什么方法可以访问 union 内部的 protected 声明?