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

Rup*_*nes 8 c++ matrix sparse-matrix lapack umfpack

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

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

编辑:

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

ste*_*han 10

许多人在做"严肃"的矩阵事物,依赖于BLAS,添加LAPACK/ATLAS(普通矩阵)或UMFPACK(稀疏矩阵)以获得更高级的数学.原因是此代码经过了充分测试,稳定,可靠且速度非常快.此外,您可以直接从针对您的架构调整的供应商(例如英特尔MKL)购买它们,但也可以免费获得它们.在Manuel的回答中提到的uBLAS可能是标准的C++ BLAS实现.如果你以后需要像LAPACK这样的东西,那么就有绑定.

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

如果我需要一个简单易用的通用C++矩阵库,我倾向于使用Eigen(过去我曾经使用过NewMat).好处:

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

缺点(IMO):

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

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