你使用哪个库来处理 N 维数组?
我在工作中使用 Blitz++,但我很不喜欢它的某些方面。例如在使用 operator= 之前需要重新调整大小,对于一个 (0,0) 的矩阵,A(Range::all(), Range::all()) 的操作会抛出异常等等。此外,其线性代数运算需要使用 Clapack 库。
我曾经使用过并且很喜欢 Eigen。它提供了“全头文件”实现、C++ 语法糖以及我需要的所有线性代数运算(如矩阵乘法、系统解析、Cholesky 分解等)。
你使用的是什么库?
你使用哪个库来处理 N 维数组?
我在工作中使用 Blitz++,但我很不喜欢它的某些方面。例如在使用 operator= 之前需要重新调整大小,对于一个 (0,0) 的矩阵,A(Range::all(), Range::all()) 的操作会抛出异常等等。此外,其线性代数运算需要使用 Clapack 库。
我曾经使用过并且很喜欢 Eigen。它提供了“全头文件”实现、C++ 语法糖以及我需要的所有线性代数运算(如矩阵乘法、系统解析、Cholesky 分解等)。
你使用的是什么库?
boost::array和boost::MultiArray也很不错。Boost中还有一个非常好的线性代数包叫做uBLAS。
我也在一些项目中使用armadillo。以下是它们网站上的介绍:
Armadillo是一个C++线性代数库(矩阵数学),旨在实现速度和易用性之间的良好平衡。支持整数、浮点数和复数,以及一些三角函数和统计函数的子集。通过与LAPACK和ATLAS库的可选集成,提供各种矩阵分解。
采用延迟评估方法(在编译时)将多个操作合并为一个,并减少(或消除)临时变量的需求。这是通过递归模板和模板元编程实现的。
如果已经决定使用C++作为首选语言(由于速度和/或集成能力),而不是像Matlab®或Octave这样的其他语言,则此库非常有用。它在开源和商业环境下都有用的许可证。
Armadillo主要由NICTA(澳大利亚)开发,来自世界各地的人贡献。
如果这些问题不是问题的话,那么它们对于许多常见的数组任务来说还是相当方便的。