2011-02-02 117 views
17

我开始一个新的科学计算项目在C++中,并且由于包含了大量的数值泛型程序,我正在考虑使用一些Armadillo或Blitz ++来进行有效的数组/矩阵/张量处理。哪一个更好用?犰狳与闪电战++

+0

你真的**需要大量的线性代数吗?如果是的话,不要使用C++(使用Matlab或相当的)。如果否,Armadillo看起来很棒,如果因为另一个需求而必须使用C++,这可能是最好的选择。然而,我从来没有用它来告诉你(虽然我曾用一些令人失望的Blitz ++和boost :: ublas)。 – 2011-02-02 19:51:32

+0

您看过Boost Math and Numerics图书馆(http://www.boost.org/doc/libs/?view=category_Math)吗? – yasouser 2011-02-02 19:52:02

+1

“哪一个更好”:更好的方法 - 原始速度(对我*类问题),稳定性,**学习时间**?我想要一个带有数字的小表格:doc的页面,示例的行,代码行,用于比较这种类型。 – denis 2013-01-17 11:19:12

回答

17

我们对Armadillo非常满意,我们使用Rcpp R/C++集成包裹将包装到R中,最终的包装为RcppArmadillo

康拉德是非常有帮助和承诺,Armadillo正在积极发展。我的理解是,Blitz ++虽然在其时间的开创性和对模板线性代数非常有影响力,但不再积极发展。

编辑2012-06-28:显然在Sourceforge site for Blitz正在进行新的Blitz ++开发。

编辑2017-12-16:看起来像Blitz++现在在GitHub。

4

为了完整:我强烈建议不要使用Boost :: uBLAS,以防万一有人正在考虑它。 我已经使用它,并且API很麻烦,并且性能总体上低于EigenArmadillo;这甚至在uBLAS的常见问题解答部分提及。

问:我应该在新项目中使用uBLAS吗?答:在撰写本文时(09/2012),有很多很好的矩阵库可用,例如MTL4,犰狳,特征... uBLAS提供良好(但并不突出)的性能。另一方面,uBLAS的最后一次重大改进是在2008年,自2009年以来没有发生重大变化。因此,应该问自己一些问题以帮助做出决定:...易于使用? uBLAS很容易用于简单的事情,但在离开路径时需要体面的C++知识。性能?有更快的选择。前沿? uBLAS已经超过10年了,并且错过了C++ 11的所有新东西。

“我开始一个新的科学的计算项目......”

犰狳API试图模仿MATLAB语法,我会假设你所熟悉的。

0

有一两件事,我遇到的uBLAS工作是,它不提供选项做这样max(u,0)u+1abs(u)其中u是一个矢量运算。另外,与ARMADILLO相比,Boost Ublas的语法比较麻烦。还有速度比较[点击](Compare blitz++, armadillo, boost::MultiArray) 所以,我推荐犰狳。