我開始一個新的科學計算項目在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. RCPP犰狳randg()
- 2. 鏈接到犰狳庫與CMake的
- 3. 插值使用犰狳
- 4. D3中的犰狳投影
- 5. 錯誤編譯犰狳
- 6. 如何使用犰狳
- 7. 犰狳COV功能輸入
- 8. 犰狳n_rows不起作用
- 9. 聲明與閃電戰的3D陣列++
- 10. 克++編譯使用犰狳庫
- 11. C++犰狳:「norm_dot」是做什麼的?
- 12. 如何運行例如犰狳程序
- 13. 犰狳複雜稀疏矩陣逆
- 14. RcppArmadillo樣本上犰狳矢量類
- 15. 犰狳讀MAT文件錯誤
- 16. 犰狳如何擺脫錯誤信息
- 17. 犰狳向量上的按位運算
- 18. Matlab +犰狳和逆矩陣崩潰
- 19. 是犰狳C++矩陣線程安全
- 20. Win64中的犰狳(LAPACK和BLAS) - VC++ 2010
- 21. 不明原因使用犰狳種類
- 22. C++犰狳:最近的鄰居
- 23. 添加犰狳C++到Visual Studio 2010
- 24. 在犰狳中用矢量除矩陣
- 25. 編譯問題與sitmo prng,c + + 11和犰狳
- 26. windows visual studio 2015,c + + 11標準和犰狳庫
- 27. 將cx_vec元素轉換爲複雜的犰狳C++
- 28. 犰狳從矢量向立方體重塑
- 29. 犰狳複雜矩陣乘法早期逼近
- 30. 犰狳inplace_plus比「正常」的加法運算
你真的**需要大量的線性代數嗎?如果是的話,不要使用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