【轉】C++矩陣運算庫推薦

來源:互聯網
上載者:User

標籤:

【原文連結】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++矩陣運算庫推薦

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.