似乎许多项目慢慢地发现需要做矩阵数学,并陷入了首先构建一些向量类,然后慢慢添加功能的陷阱,直到他们被发现构建了一个半成品的自定义线性代数库,并依赖于它。

我想避免这种情况,同时不依赖于一些切线相关的库(例如OpenCV, OpenSceneGraph)。

有哪些常用的矩阵数学/线性代数库,为什么决定使用一个而不是另一个?有没有因为某些原因而被建议不要使用的?我特别在几何/时间上下文中使用这个*(2,3,4 Dim)*,但将来可能会使用更高维度的数据。

我正在寻找关于以下任何方面的差异:API、速度、内存使用、广度/完整性、狭窄性/特异性、可扩展性和/或成熟度/稳定性。

更新

我最终使用了我非常满意的Eigen3。


当前回答

弗伦斯

http://flens.sf.net

它还实现了许多LAPACK函数。

其他回答

我听说过Eigen和NT2的优点,但我个人还没有使用过它们。还有Boost。UBLAS,我认为它已经太老了。NT2的开发人员正在构建下一个版本,目的是将其纳入Boost,所以这可能是有意义的。

我林。alg。需求不会超出4x4矩阵的情况下,所以我不能评论高级功能;我只是指出一些选择。

那GLM呢?

它基于OpenGL Shading Language (GLSL)规范,并在MIT许可下发布。 显然是针对图像程序员

我发现这个库非常简单和实用(http://kirillsprograms.com/top_Vectors.php)。这些是通过c++模板实现的基本向量。没有花哨的东西-只是你需要做的向量(加,减,乘,点,等等)。

弗伦斯

http://flens.sf.net

它还实现了许多LAPACK函数。

如果你正在寻找英特尔处理器上的高性能矩阵/线性代数/优化,我会看看英特尔的MKL库。

MKL为快速运行时性能进行了精心优化——大部分基于非常成熟的BLAS/LAPACK fortran标准。它的性能随可用内核的数量而变化。具有可用内核的免提可伸缩性是计算的未来,对于不支持多核处理器的新项目,我不会使用任何数学库。

简单地说,它包括:

基本向量-向量,向量-矩阵, 矩阵-矩阵运算 矩阵分解(LU分解,厄米化,稀疏化) 最小二乘拟合和特征值问题 稀疏线性系统求解器 非线性最小二乘求解器(信赖域) 加上信号处理程序,如FFT和卷积 非常快速的随机数发生器(梅森扭曲) 更多的……参见:link text

一个缺点是MKL API可能非常复杂,具体取决于所需的例程。您还可以看看他们的IPP(集成性能原语)库,该库面向高性能图像处理操作,但仍然相当广泛。

保罗

CenterSpace软件公司。NET数学库,centerspace.net