標籤:
【原文連結】http://www.52ml.net/13002.htmlArmadillo:C++下的Matlab替代品
地址:http://arma.sourceforge.net/
許可證:MPL 2.0
目前使用比較廣的C++矩陣運算庫之一,是在C++下使用Matlab方式操作矩陣很好的選擇,許多Matlab的矩陣操作函數都可以找到對應,這 對習慣了Matlab的人來說實在是非常方便,另外如果要將Matlab下做研究的代碼改寫成C++,使用Armadillo也會很方便,這裡有一個簡易的Matlab到Armadillo的文法轉換。下面列了一些Armadillo的特性:
- 支援整數,浮點數,和複數矩陣。
- 支援矩陣逐元素操作,包括abs · conj · conv_to · eps · imag/real · misc functions (exp, log, pow, sqrt, round, sign, …) · trigonometric functions (cos, sin, …)等等。
- 支援矩陣分塊操作。
- 支援對整體矩陣的操作diagvec · min/max · prod · sum · statistics (mean, stddev, …) · accu · as_scalar · det · dot/cdot/norm_dot · log_det · norm · rank · trace等等。
- Matlab使用者,你甚至可以找到你熟悉的hist · histc · unique · cumsum · sort_index · find · repmat · linspace等函數。
- 除了內建的矩陣基本運算之外,可自動檢測是否安裝有BLAS,或更快的 OpenBLAS, Intel MKL, AMD ACML,並使用他們替代內建基本運算實現。
- 提供介面使用LAPACK進行矩陣分解運算,svd · qr · lu · fft等等。
- 提供了疏鬆陣列類,支援常用操作,但暫時沒有矩陣分解的實現。
- 更新比較活躍,有一些電腦視覺、機器學習、物理方面的開源項目在使用,比如MLPACK (Machine Learning Library)。
總體來講很好用的矩陣庫,速度上因為可以使用OpenBLAS等庫進行加速,因此還是不錯的。網上可以找到一個叫 Nghia Ho的人寫的關於和eigen及opencv的速度比較做參考,速度略優。不過也由於依賴LAPACK等庫完成矩陣分解計算,在windows上運行可能會比較痛苦。
Eigen3:強大且只需標頭檔
地址:http://eigen.tuxfamily.org/
許可證:主要為MPL 2.0,部分有來自第三方的代碼為LGPL
非常強大的矩陣運算庫,我一直在用,大家用了都說好。使用類似Matlab的方式操作矩陣,可以在這裡查看官方的與Maltab的對應關係,個人感覺單純講和Matlab的對應的話,可能不如Armadillo對應的好,但功能絕對強大。Eigen包含了絕大部分你能用到的矩陣演算法,同時提供許多第三方的介面。Eigen一個重要特點是沒有什麼依賴的庫,本身僅有許多標頭檔組成,因此非常輕量而易於跨平台。你要做的就是把用到的標頭檔和你的代碼放在一起就可以了。Eigen的一些特性:
- 支援整數、浮點數、複數,使用模板編程,可以為特殊的資料結構提供矩陣操作。比如在用ceres-solver進行做最佳化問題(比如bundle adjustment)的時候,有時候需要用模板編程寫一個目標函數,ceres可以將模板自動替換為內部的一個可以自動求微分的特殊的double類型。而如果要在這個模板函數中進行矩陣計算,使用Eigen就會非常方便。
- 支援逐元素、分塊、和整體的矩陣操作。
- 內含大量矩陣分解演算法包括LU,LDLt,QR、SVD等等。
- 支援使用Intel MKL加速
- 部分功能支援多線程
- 疏鬆陣列支援良好,到今年新出的Eigen3.2,已經內建了SparseLU、SparseQR、共軛梯度 (ConjugateGradient solver)、bi conjugate gradient stabilized solver等解疏鬆陣列的功能。同時提供SPQR、UmfPack等外部疏鬆陣列庫的介面。
- 支援常用幾何運算,包括旋轉矩陣、四元數、矩陣變換、AngleAxis(歐拉角與Rodrigues變換)等等。
- 更新活躍,使用者眾多(Google、WilliowGarage也在用),使用Eigen的比較著名的開源項目有ROS(機器人作業系統)、PCL(點雲處理庫)、Google Ceres(最佳化演算法)。OpenCV內建到Eigen的介面。
總體來講,如果經常做一些比較複雜的矩陣計算的話,或者想要跨平台的話,非常值得一用。
【轉】C++矩陣運算庫推薦