C++ 下有沒有矩陣計算速度能和 MATLAB 相當的矩陣或數學庫?

我要算的是 Moore-Penrose Inverse(廣義逆),已經 Google 過了,沒找到更快的;OpenCV 的 Mat 成員函數 inv,算一個 5000*500 矩陣的廣義逆要 68s 以上,MATLAB 祗要 4s 多一點;更新:目前我找到的最快的方案是用 Armadillo+OpenBLAS,可以達到 OpenCV 的四倍速度左右,但是還是比 MATLAB 慢較多,上面的 5000*500 矩陣,用這種方案大約需要 12s


matlab的底層調用的是一個優化過的lapack庫,這玩意兒是一個矩陣運算庫,有fortran和c版本,你需要的是它!


現有CPU架構下,如果是英特爾CPU,最快的線性運算庫是MKL。提供c和fortran的介面。提供多線程參數。提供多機通信方案。
當然如果你用MKL依舊跑不過MATLAB,那很正常。那就意外著在演算法層面/內存管理層面有tips。

現有GPU架構下,如果是nvidia GPU,最快的線性運算庫是cuBLAS(CUDA)。目前而言,高性能計算最高效的方案。


自己調 openBLAS 或 MKL


假定你是稠密矩陣(如果是稀疏的,直接spqr或者eigen3.2的qr都很好用)
根據這個(OpenCV vs. Armadillo vs. Eigen on Linux revisited)各種常用矩陣包的比較來看, Armadillo+OpenBLAS是最快的,不過看評論他測的test不是很合理貌似。
再加速的話是不是可以試試並行的演算法?Google了一下比如CULA(Dense ? CULA)及其免費的單精度版(CULA Programmer』s Guide),和PLASMA(PLASMA)。其實如果不是求逆的話opencv的ocl模塊就還可以湊合。


前面好多人說了dense matrix,blas、lapack、eigen等都不錯。針對sparse matrix,SuiteSparse是最好的選擇,因為Matlab裡面sparse matrix的實現就是用的這個。


試試BLAS
不同平台都有實現,比如Intel的數學庫就包含BLAS。


INTEL MKL


boost 有ublas庫 至於速度 那你就自己判斷了


c中調用matlab引擎吧


Eigen,簡單


推薦閱讀:

想用別人的實驗來算東西,但沒有他的數據,只有文獻里的圖線怎麼辦?
學術論文中用什麼軟體可以繪製這樣的圖?
Mathematica 和 MATLAB 都有什麼不同?做數學分析哪個比較專業?
如何在兩條曲線之間上色?

TAG:MATLAB | C | 矩陣運算 |