我开始一个新的科学计算项目在C++中,并且由于包含了大量的数值泛型程序,我正在考虑使用一些Armadillo或Blitz ++来进行有效的数组/矩阵/张量处理。哪一个更好用?犰狳与闪电战++
犰狳与闪电战++
回答
我们对Armadillo非常满意,我们使用Rcpp R/C++集成包裹将包装到R中,最终的包装为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的常见问题解答部分提及。
问:我应该在新项目中使用uBLAS吗?答:在撰写本文时(09/2012),有很多很好的矩阵库可用,例如MTL4,犰狳,特征... uBLAS提供良好(但并不突出)的性能。另一方面,uBLAS的最后一次重大改进是在2008年,自2009年以来没有发生重大变化。因此,应该问自己一些问题以帮助做出决定:...易于使用? uBLAS很容易用于简单的事情,但在离开路径时需要体面的C++知识。性能?有更快的选择。前沿? uBLAS已经超过10年了,并且错过了C++ 11的所有新东西。
“我开始一个新的科学的计算项目......”
犰狳API试图模仿MATLAB语法,我会假设你所熟悉的。
有一两件事,我遇到的uBLAS工作是,它不提供选项做这样max(u,0)
,u+1
,abs(u)
其中u
是一个矢量运算。另外,与ARMADILLO相比,Boost Ublas的语法比较麻烦。还有速度比较[点击](Compare blitz++, armadillo, boost::MultiArray) 所以,我推荐犰狳。
- 1. NLopt与犰狳数据
- 2. 链接犰狳与Xcode
- 3. 犰狳:解决与sp_mat
- 4. RCPP犰狳randg()
- 5. 链接到犰狳库与CMake的
- 6. 错误编译犰狳
- 7. 插值使用犰狳
- 8. 犰狳COV功能输入
- 9. 犰狳vs Eigen3定时差
- 10. 如何使用犰狳
- 11. 犰狳:乘法时出错
- 12. D3中的犰狳投影
- 13. 犰狳n_rows不起作用
- 14. 犰狳物体上的malloc
- 15. c中的犰狳功能#
- 16. 差异在犰狳乘法
- 17. 使用GPU的犰狳(+ BLAS)
- 18. 声明与闪电战的3D阵列++
- 19. XCode 4,犰狳和XCode标准库
- 20. 犰狳复杂稀疏矩阵逆
- 21. RCPP犰狳,子矩阵和子向量
- 22. 添加犰狳C++到Visual Studio 2010
- 23. 不明原因使用犰狳种类
- 24. C++ - 用于计算PCA(比犰狳等)
- 25. 犰狳整数特征分解
- 26. 在课堂上使用犰狳矩阵
- 27. 如何运行例如犰狳程序
- 28. Matlab +犰狳和逆矩阵崩溃
- 29. 是犰狳C++矩阵线程安全
- 30. 犰狳向量上的按位运算
你真的**需要大量的线性代数吗?如果是的话,不要使用C++(使用Matlab或相当的)。如果否,Armadillo看起来很棒,如果因为另一个需求而必须使用C++,这可能是最好的选择。然而,我从来没有用它来告诉你(虽然我曾用一些令人失望的Blitz ++和boost :: ublas)。 – 2011-02-02 19:51:32
您看过Boost Math and Numerics图书馆(http://www.boost.org/doc/libs/?view=category_Math)吗? – yasouser 2011-02-02 19:52:02
“哪一个更好”:更好的方法 - 原始速度(对我*类问题),稳定性,**学习时间**?我想要一个带有数字的小表格:doc的页面,示例的行,代码行,用于比较这种类型。 – denis 2013-01-17 11:19:12