我正在用C ++开始一个新的科学计算项目,并且由于包含了大量数字化程序,我正在考虑使用Armadillo或Blitz ++来进行有效的数组/矩阵/张量处理。哪一个更好用?
我们对使用Armadillo R / C ++集成软件包装到R的Rcpp非常满意 - 最终的软件包是RcppArmadillo。
康拉德非常乐于助人,而且Armadillo正在积极发展。我的理解是,Blitz ++虽然在时间上是开创性的,对模板化线性代数影响很大,但却不再积极发展。
编辑2012-06-28:显然在Sourceforge site for Blitz正在进行新的Blitz ++开发。
编辑2017-12-16:看起来Blitz++现在在GitHub。
在这种情况下,当处理线性代数和C ++时,我热烈建议看看Eigen。
http://eigen.tuxfamily.org/index.php?title=Main_Page
可能是我认为最好的C ++线性代数库之一。
为了完整性:我强烈建议不要使用Boost :: uBLAS,以防万一有人正在考虑它。我使用它并且API很麻烦,性能总体上低于Eigen和Armadillo;这甚至在uBLAS的FAQ部分中提到过
问:我应该将uBLAS用于新项目吗?
答:在撰写本文时(09/2012),有许多可用的良好矩阵库,例如MTL4,犰狳,本征...... uBLAS提供了良好(但并不突出)的性能。另一方面,uBLAS的最后一次重大改进是在2008年,自2009年以来没有发生重大变化。所以应该问自己一些问题来帮助做出决定:......易于使用? uBLAS易于用于简单的事情,但是当你离开路径时需要体面的C ++知识。性能?有更快的选择。前沿? uBLAS已经超过10年了,并且错过了C ++ 11中的所有新东西。
“我正在开始一个新的科学计算项目...”
Armadillo API试图模仿MATLAB语法,我认为你熟悉它。
我遇到与Ublas一起工作的一件事是,它没有提供像max(u,0)
,u+1
,abs(u)
这样的操作的选项,其中u
是一个向量。此外,与ARMADILLO相比,Boost Ublas的语法编写起来很麻烦。还有速度比较[点击](Compare blitz++, armadillo, boost::MultiArray)所以,我推荐犰狳。