犰狳与闪电战++

时间:2011-02-02 19:47:52

标签: c++ scientific-computing

我正在用C ++开始一个新的科学计算项目,因为包含了许多数字化的程序,我正在考虑使用Armadillo或Blitz ++来进行有效的数组/矩阵/张量处理。哪一个更好用?

4 个答案:

答案 0 :(得分:17)

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

康拉德非常乐于助人,并且Sourceforge site for Blitz正在积极发展中。我的理解是,Blitz ++虽然在时间上是开创性的,对模板化线性代数影响很大,但已不再积极发展。

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

编辑2017-12-16 :看起来{{3}}现在在GitHub。

答案 1 :(得分:12)

在这种情况下一如既往,在处理线性代数和C ++时,我热烈建议你看一下Eigen。

http://eigen.tuxfamily.org/index.php?title=Main_Page

可能是我认为最好的C ++线性代数库之一。

答案 2 :(得分:4)

为了完整性:我强烈建议不要使用Boost :: uBLAS,以防万一有人正在考虑它。 我使用它并且API很麻烦,性能总体上低于EigenArmadillo;甚至在uBLAS

的常见问题解答部分也提到了这一点
  问:我应该将uBLAS用于新项目吗?

     

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

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

Armadillo API试图模仿MATLAB语法,我认为你很熟悉。

答案 3 :(得分:0)

我遇到的与Ublas合作的一件事是,它没有提供执行操作的选项,例如max(u,0)u+1abs(u) u是一个向量。此外,与ARMADILLO相比,Boost Ublas的语法编写起来很麻烦。还有速度比较[点击](Compare blitz++, armadillo, boost::MultiArray) 所以,我推荐犰狳。