稀疏酉矩阵的最佳C ++矩阵库

时间:2010-02-08 15:20:21

标签: c++ matrix sparse-matrix lapack umfpack

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

你能否建议图书馆,并给出一个小解释,为什么要使用它们,因为我知道如何找到它们,但我无法真正决定什么适合我,因为我错过了与它们的经验。

编辑:

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

3 个答案:

答案 0 :(得分:10)

许多做“严重”矩阵内容的人依靠BLAS,添加LAPACK / ATLAS(普通矩阵)或UMFPACK(稀疏矩阵)来获得更高级的数学。原因是此代码经过了充分测试,稳定,可靠且速度非常快。此外,您可以直接从供应商(例如Intel MKL)购买它们来调整您的架构,但也可以免费获得。 uBLAS中提到的Manuel's answer可能是标准的C ++ BLAS实现。如果你以后需要像LAPACK这样的东西,那么bindings就可以了。

但是,这些标准库(BLAS / LAPACK / ATLAS或uBLAS +绑定+ LAPACK / ATLAS)都没有标记为模板化和易于使用(除非uBLAS是您所需要的全部)。实际上,我必须承认,当我使用BLAS / LAPACK实现时,我倾向于直接调用C / Fortran接口,因为我经常在uBLAS +绑定组合中看不到更多的额外优势。

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

  • 在英特尔架构上速度相当快,对于小型矩阵来说可能是最快的
  • 漂亮的界面
  • 几乎所有您对矩阵库的期望
  • 您可以轻松添加new types

缺点(IMO):

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

编辑:即将推出的Eigen 3.1允许某些功能使用英特尔MKL(或任何其他BLAS / LAPACK实现)。

答案 1 :(得分:4)

Boost uBLAS,因为它已通过Boost过滤器。

有一些模板库支持稀疏矩阵,因此如果你没有更具体地了解你的需求,那么很难找到更好的理由。

答案 2 :(得分:1)

您还应该尝试使用MLTHASEM Matrix C ++库。最后一篇文章记录完备。