GSL
GNU Scientific Library自帶的矩陣運(yùn)算,據(jù)說速度一般。
Blitz++
Blitz++ 與 MTL 都是基于 C++ template 高效數(shù)值計(jì)算程序庫,不過他們專注于不同的方向。
Blitz++ 提供了一個(gè) N 維( 1—10 )的 Array 類 , 這個(gè) Array 類以 reference counting 技術(shù)實(shí)現(xiàn),支持任意的存儲(chǔ)序 (row-major 的 C-style 數(shù)組, column-major 的 Fortran-style 數(shù)組 ) ,數(shù)組的切割 (slicing), 子數(shù)組的提取 (subarray), 靈活的 Array 相關(guān)表達(dá)式處理。另外提供了可以產(chǎn)生不同分布的隨機(jī)數(shù) (F,Beta,Chi-Square ,正態(tài),均勻分布等 ) 的類也是很有特色的。
MTL 專注于線性代數(shù)相關(guān)的計(jì)算任務(wù),如各種形式矩陣的生成 ( 對(duì)角,共軛,稀疏,對(duì)稱等 ) ,相關(guān)的計(jì)算,變換,以及與一維向量的運(yùn)算。
兩個(gè)程序庫對(duì)于從 Matlab 導(dǎo)入導(dǎo)出數(shù)據(jù)都有不錯(cuò)的支持。
MTL4
類似Eigen和Armadillo,有開源版本。
Eigen
http://eigen./dox/
Eigen[1] 目前最新的版本是3.2.5,除了C++標(biāo)準(zhǔn)庫以外,不需要任何其他的依賴包。Eigen使用的CMake建立配置文件和單元測試,并自動(dòng)安裝。如果使用Eigen庫,只需包特定模塊的的頭文件即可。最新版本為Eigen 3.3。
使用類似Matlab的方式操作矩陣,可以在這里查看官方的與Maltab的對(duì)應(yīng)關(guān)系,個(gè)人感覺單純講和Matlab的對(duì)應(yīng)的話,可能不如Armadillo對(duì)應(yīng)的好,但功能絕對(duì)強(qiáng)大。Eigen包含了絕大部分你能用到的矩陣算法,同時(shí)提供許多第三方的接口。Eigen一個(gè)重要特點(diǎn)是沒有什么依賴的庫,本身僅有許多頭文件組成,因此非常輕量而易于跨平臺(tái)。你要做的就是把用到的頭文件和你的代碼放在一起就可以了。Eigen的一些特性:
·支持整數(shù)、浮點(diǎn)數(shù)、復(fù)數(shù),使用模板編程,可以為特殊的數(shù)據(jù)結(jié)構(gòu)提供矩陣操作。比如在用ceres-solver進(jìn)行做優(yōu)化問題(比如bundle adjustment)的時(shí)候,有時(shí)候需要用模板編程寫一個(gè)目標(biāo)函數(shù),ceres可以將模板自動(dòng)替換為內(nèi)部的一個(gè)可以自動(dòng)求微分的特殊的double類型。而如果要在這個(gè)模板函數(shù)中進(jìn)行矩陣計(jì)算,使用Eigen就會(huì)非常方便。
·支持逐元素、分塊、和整體的矩陣操作。
·內(nèi)含大量矩陣分解算法包括LU,LDLt,QR、SVD等等。
·支持使用Intel MKL加速
·部分功能支持多線程
·稀疏矩陣支持良好,到今年新出的Eigen3.2,已經(jīng)自帶了SparseLU、SparseQR、共軛梯度(ConjugateGradient solver)、bi conjugate gradient stabilized solver等解稀疏矩陣的功能。同時(shí)提供SPQR、UmfPack等外部稀疏矩陣庫的接口。
·支持常用幾何運(yùn)算,包括旋轉(zhuǎn)矩陣、四元數(shù)、矩陣變換、AngleAxis(歐拉角與Rodrigues變換)等等。
·更新活躍,用戶眾多(Google、WilliowGarage也在用),使用Eigen的比較著名的開源項(xiàng)目有ROS(機(jī)器人操作系統(tǒng))、PCL(點(diǎn)云處理庫)、Google Ceres(優(yōu)化算法)。OpenCV自帶到Eigen的接口。
Armadillo
矩陣運(yùn)算速度跟matlab一個(gè)量級(jí)
目前使用比較廣的C++矩陣運(yùn)算庫之一,是在C++下使用Matlab方式操作矩陣很好的選擇,許多Matlab的矩陣操作函數(shù)都可以找到對(duì)應(yīng),這對(duì)習(xí)慣了Matlab的人來說實(shí)在是非常方便,另外如果要將Matlab下做研究的代碼改寫成C++,使用Armadillo也會(huì)很方便,這里有一個(gè)簡易的Matlab到Armadillo的語法轉(zhuǎn)換。下面列了一些Armadillo的特性:
·支持整數(shù),浮點(diǎn)數(shù),和復(fù)數(shù)矩陣。
·支持矩陣逐元素操作,包括abs · conj · conv_to · eps · imag/real · misc functions (exp, log, pow, sqrt, round, sign, …) · trigonometric functions (cos, sin, …)等等。
·支持矩陣分塊操作。
·支持對(duì)整體矩陣的操作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等函數(shù)。
·除了自帶的矩陣基本運(yùn)算之外,可自動(dòng)檢測是否安裝有BLAS,或更快的 OpenBLAS, Intel MKL, AMD ACML,并使用他們替代自帶基本運(yùn)算實(shí)現(xiàn)。
·提供接口使用LAPACK進(jìn)行矩陣分解運(yùn)算,svd · qr · lu · fft等等。
·提供了稀疏矩陣類,支持常用操作,但暫時(shí)沒有矩陣分解的實(shí)現(xiàn)。
·更新比較活躍,有一些計(jì)算機(jī)視覺、機(jī)器學(xué)習(xí)、物理方面的開源項(xiàng)目在使用,比如MLPACK (Machine Learning Library)。
總體來講很好用的矩陣庫,速度上因?yàn)榭梢允褂肙penBLAS等庫進(jìn)行加速,因此還是不錯(cuò)的
Lapack (Linear Algebra PACKage)
http://www./lapack/
LAPACK,其名為Linear Algebra PACKage的縮寫,是一以Fortran編程語言寫就,用于數(shù)值計(jì)算的函式集。 LAPACK提供了豐富的工具函式,可用于諸如解多元線性方程式、線性系統(tǒng)方程組的最小平方解、計(jì)算特征向量、用于計(jì)算矩陣QR分解的Householder轉(zhuǎn)換、以及奇異值分解等問題
Pardiso
http://www./
The package PARDISO is a thread-safe, high-performance, robust, memory efficient and easy to use software for solving large sparse symmetric and unsymmetric linear systems of equations on shared-memory and distributed-memory multiprocessors.
Openblas
是一個(gè)高性能多核 BLAS 庫,是 GotoBLAS2 1.13 BSD 版本的衍生版。OpenBLAS 的編譯依賴系統(tǒng)環(huán)境,并且沒有原生單線程版本,在實(shí)驗(yàn)這哦那個(gè),通過設(shè)置 OMP_NUM_THREADS=1 來模擬單線程版本,可能會(huì)帶來一點(diǎn)點(diǎn)的性能下降。
Intel mkl
https://software.intel.com/en-us/intel-mkl
Fastest and most used math library for Intel and compatible processors**
· Features highly optimized, threaded and vectorized functions to maximize performance on each processor family
· Utilizes de facto standard C and Fortran APIs for compatibility with BLAS, LAPACK and FFTW functions from other math libraries
· Available with both free community-supported and paid support licenses
來自 https://software.intel.com/en-us/intel-mkl
Trilinos
和PETSc同是美國能源部ODE2000支持開發(fā)的20多個(gè)ACTS工具箱之一,用于大規(guī)模計(jì)算。
Blas(Basic Linear Algebra Subprograms)
http://www./blas/
參考意見:
○ 在windows上Eigen的使用或許比Armadillo方便些
○ Intel mkl 強(qiáng)大,速度快
○ http:///?p=954 (對(duì)比測試)
○ http://www./the-performance-of-matrix-multiplication-among-openblas-intel-mkl-and-eigen (對(duì)比測試)
○ http://www.oschina.net/project/tag/239/Mathematics-computin?sort=view&lang=21&os=0 (其他軟件合集)
|