C++最常用的向量/矩阵数学/线性代数库是哪些,它们的成本和效益权衡如何?

285

看起来许多项目都需要进行矩阵数学计算,并陷入首先构建某些向量类的陷阱,然后逐步添加功能,直到他们被困在半吊子自定义线性代数库中并依赖它。

我想避免这种情况,同时又不会依赖于某些间接相关的库(例如OpenCV、OpenSceneGraph)。

有哪些常用的矩阵数学/线性代数库?为什么要选择其中一个而不是另一个?有没有建议不使用某些库的原因?我具体在几何/时间*(2,3,4维)*上使用,但将来可能会使用更高维的数据。

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

更新

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


2
既然你提到了OSG和OpenCV,我猜想你只需要3D图形类型的向量/矩阵,即3x3和4x4矩阵。我根据这个回答了你的问题,但是你可能需要说明你具体是如何使用它的——你需要矩阵求解吗?高维矩阵数学等等。 - Reed Copsey
现在我只做基于2D几何的东西,但是假设有时候你需要对2D数据进行3x3操作,而且不清楚是否需要3D数据和因此4x4操作。我们希望在公司内使用一个通用库。我没有很好的感觉来权衡利弊。更通用的库会更好,但代价是什么呢? - Catskul
1
如果你只想进行几何变换,我强烈推荐看一下我在回答中提到的GGT。它对于这方面非常全面,但实际上除此之外什么也不干,因此是一个非常干净、简单的选择。BLAS和LAPACK更多用于科学和数学中进行复杂矩阵解决方案(例如:50x50矩阵、稀疏矩阵等),而不是用于几何变换。 - Reed Copsey
C++ Vector Class Library使用SIMD指令进行并行处理。 https://github.com/vectorclass/version2 - A Fog
11个回答

0

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


1
截至2019年12月,链接很不幸地已经失效。 - 10762409

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接