似乎许多项目慢慢地发现需要做矩阵数学,并陷入了首先构建一些向量类,然后慢慢添加功能的陷阱,直到他们被发现构建了一个半成品的自定义线性代数库,并依赖于它。
我想避免这种情况,同时不依赖于一些切线相关的库(例如OpenCV, OpenSceneGraph)。
有哪些常用的矩阵数学/线性代数库,为什么决定使用一个而不是另一个?有没有因为某些原因而被建议不要使用的?我特别在几何/时间上下文中使用这个*(2,3,4 Dim)*,但将来可能会使用更高维度的数据。
我正在寻找关于以下任何方面的差异:API、速度、内存使用、广度/完整性、狭窄性/特异性、可扩展性和/或成熟度/稳定性。
更新
我最终使用了我非常满意的Eigen3。
不管怎样,艾根和犰狳我都试过了。下面是一个简短的评价。
特征
优点:
1. 完全独立-不依赖于外部BLAS或LAPACK。
2. 良好的文档。
3.据说很快,不过我还没测试过。
劣势:
QR算法只返回一个矩阵,R矩阵嵌入在上面的三角形中。不知道矩阵的其余部分从何而来,也不知道Q矩阵可以被访问。
犰狳
优点:
1. 广泛的分解和其他功能(包括QR)。
2. 相当快(使用表达式模板),但同样,我没有真正将它推到高维。
缺点:
1. 依赖于外部BLAS和/或LAPACK进行矩阵分解。
2. 恕我直言,缺少文档(包括wrt LAPACK的细节,除了更改#define语句)。
如果有一个开放源码库,它是自包含的,并且易于使用,那就太好了。我已经遇到同样的问题10年了,这很令人沮丧。有一次,我使用GSL来编写C语言,并围绕它编写c++包装器,但是使用现代c++——特别是使用表达式模板的优点——我们不应该在21世纪搞乱C语言。只有我的两便士。