好的矩阵库?

时间:2012-06-16 20:49:06

标签: c++ math

我一直在处理数学密集型代码,需要一个好的矩阵库。我可以使用二维数组,但是一个完整的矩阵库(带乘法,加法等)会更方便。我显然已经用Google搜索过了,但这给了我很多选择。我希望一些有经验的程序员的意见能帮助缩小范围。

C ++有哪些优秀的自由矩阵/线性代数库?

4 个答案:

答案 0 :(得分:6)

Eigen是一个非常快速的矩阵操作和线性代数库,它在可用时使用硬件加速。

答案 1 :(得分:5)

您可以尝试uBlas

  

<强>功能

     

uBLAS为密集,单位和稀疏向量,密集,同一性,三角形,带状,对称,埃尔米特和稀疏矩阵提供模板化C ++类。可以通过范围,切片,适配器类和间接数组构建对向量和矩阵的视图。该库涵盖了矢量和矩阵的常用基本线性代数运算:不同规范的减少,矢量和矩阵的加法和减法,以及矢量的标量,内部和外部乘积,矩阵向量和矩阵矩阵乘积以及三角形求解器的乘法。容器,视图和表达式模板化操作之间的粘合剂主要是符合STL的迭代器接口。

答案 2 :(得分:5)

还有IT++,它具有易于使用的语法,类似于Matlab。 Armadillo也有一个非常相似的语法,但已知它比IT ++快得多。 (Armadillo使用模板元编程,而IT ++则不然)。 Armadillo和IT ++都提供了特征分解,奇异值分解,矩阵逆等。相比之下,uBlas使用模板元编程来提高速度,但不能进行矩阵求逆等。

速度差异在各个领域的不同功能集方面进行权衡,例如。 IT ++有许多用于信号处理的功能,而Armadillo几乎专注于线性代数。

这提出了一个相关的观点:图书馆的速度只是其整体有用性或价值的一个因素。例如,您可能拥有一个非常快的库,但是学习其API /语法需要很长时间,或者语法很难使用。另一个问题是库中已存在的功能量 - 例如。你可能需要编写自己的函数。您可能还需要考虑该库的目的是简化Matlab代码到C ++的转换,或者您已经熟悉Matlab语法。

鉴于以上几点,您最终可能需要花费更多时间进行编码和调试,而不是运行代码,这最终会破坏快速库的目的。换句话说,原始执行速度只是一个因素,不应该依赖它作为整体决定因素。开发时间也是一个非常重要的因素(例如“产品上市时间”),不仅从成本的角度来看,而且编码花费的时间也更少,从而可以让您做其他事情。

答案 3 :(得分:2)

过去我使用Armadillo。我不能说它的速度能力 - 它是由朋友推荐给我的,因为它与MATLAB函数和符号有一些相似之处。我没有尝试任何非常密集的东西,但它在我使用它的时候达到了我的目的。我也听过uBlas的好消息,这也是推荐的。

相关问题