我正在寻找一个好的(最好是积极维护的)C++ 矩阵库。因此它应该被模板化,因为我想使用一个复杂的有理数作为数字类型。我正在处理的矩阵主要是稀疏和单一的。
能否请您推荐一些库,并简要说明为什么要使用它们,因为我知道如何找到它们,但我无法真正决定什么适合我,因为我错过了使用它们的经验。
编辑:
我处理的主要操作是矩阵乘法、与向量的标量乘法和kronecker 积。矩阵的大小是指数级的,我希望至少能够处理高达 1024x1024 条目的矩阵。
我正在寻找一个好的(最好是积极维护的)C++ 矩阵库。因此它应该被模板化,因为我想使用一个复杂的有理数作为数字类型。我正在处理的矩阵主要是稀疏和单一的。
能否请您推荐一些库,并简要说明为什么要使用它们,因为我知道如何找到它们,但我无法真正决定什么适合我,因为我错过了使用它们的经验。
编辑:
我处理的主要操作是矩阵乘法、与向量的标量乘法和kronecker 积。矩阵的大小是指数级的,我希望至少能够处理高达 1024x1024 条目的矩阵。
许多人在做“严肃”矩阵的事情,依靠BLAS,添加LAPACK / ATLAS(正常矩阵)或UMFPACK(稀疏矩阵)以获得更高级的数学。原因是这段代码经过了良好的测试、稳定、可靠且速度相当快。此外,您可以直接从针对您的架构调整的供应商(例如英特尔 MKL)购买它们,也可以免费获得它们。Manuel 的回答中提到的uBLAS可能是标准的 C++ BLAS 实现。如果您以后需要 LAPACK 之类的东西,可以使用绑定。
但是,这些标准库(BLAS / LAPACK / ATLAS 或 uBLAS + bindings + LAPACK / ATLAS)都没有为您提供模板化和易于使用的功能(除非您只需要 uBLAS)。实际上,我必须承认,当我使用 BLAS / LAPACK 实现时,我倾向于直接调用 C / Fortran 接口,因为我经常看不到 uBLAS + 绑定组合的额外优势。
如果我需要一个简单易用、通用的 C++ 矩阵库,我倾向于使用Eigen(我过去曾经使用NewMat)。好处:
缺点(海事组织):
编辑:即将推出的 Eigen 3.1 允许某些功能使用英特尔 MKL(或任何其他 BLAS / LAPACK 实现)。
Boost uBLAS,因为它通过了 Boost 过滤器。
有一些模板库支持稀疏矩阵,因此如果您对自己的需求没有更具体的要求,就很难找到更好的理由。