好的矩阵库?

fdh*_*fdh 4 c++ math

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

什么是C++的一些好的自由矩阵/线性代数库?

and*_*and 6

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


dir*_*tly 5

你可以试试uBlas

功能

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


mta*_*all 5

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

根据不同领域的不同功能集,例如,速度差异在折衷方面.IT ++有许多信号处理功能,而Armadillo几乎专注于线性代数.

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

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