我正在寻找一个好的(在最好的情况下积极维护)C ++矩阵库。因此它应该是模板化的,因为我想使用复数的有理数作为数字类型。我正在处理的矩阵主要是稀疏和单一的。
你能否建议图书馆,并给出一个小解释,为什么要使用它们,因为我知道如何找到它们,但我无法真正决定什么适合我,因为我错过了与它们的经验。
编辑:
我正在处理的主要操作是矩阵乘法,标量乘法与向量和 kronecker乘积。矩阵的大小是指数级的,我想至少能够处理高达1024x1024个条目的矩阵。
答案 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)。优点:
缺点(IMO):
编辑:即将推出的Eigen 3.1允许某些功能使用英特尔MKL(或任何其他BLAS / LAPACK实现)。
答案 1 :(得分:4)
Boost uBLAS,因为它已通过Boost过滤器。
有一些模板库支持稀疏矩阵,因此如果你没有更具体地了解你的需求,那么很难找到更好的理由。
答案 2 :(得分:1)