2011-02-02 81 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) 所以,我推薦犰狳。