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

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

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

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

更新

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


当前回答

那GLM呢?

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

其他回答

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

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

好吧,我知道你在找什么了。正如Reed Copsey所建议的,GGT似乎是一个相当好的解决方案。

就我个人而言,我们有自己的小库,因为我们经常处理有理点——很多有理点NURBS和bezier。

It turns out that most 3D graphics libraries do computations with projective points that have no basis in projective math, because that's what gets you the answer you want. We ended up using Grassmann points, which have a solid theoretical underpinning and decreased the number of point types. Grassmann points are basically the same computations people are using now, with the benefit of a robust theory. Most importantly, it makes things clearer in our minds, so we have fewer bugs. Ron Goldman wrote a paper on Grassmann points in computer graphics called "On the Algebraic and Geometric Foundations of Computer Graphics".

和你的问题没有直接关系,但是很有趣。

我把很多代码(3D几何、线性代数和微分方程)从不同的库移植到Eigen中——几乎在所有情况下都提高了性能和代码的可读性。

一个没有提到的优点是:SSE与Eigen一起使用非常容易,这极大地提高了2D-3D操作的性能(其中所有内容都可以填充到128位)。

弗伦斯

http://flens.sf.net

它还实现了许多LAPACK函数。

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

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

简单地说,它包括:

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

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

保罗

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