Armadillo:C++下的Matlab替代品

armadillo

地址: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上运行可能会比较痛苦。

  • Linux based operating systems (eg. Fedora, Ubuntu, Red Hat, SUSE, Debian, etc)
     
    • Before installing Armadillo, first install OpenBLAS and LAPACK, along with the corresponding development/header files
       
      • recommended packages for Fedora & Red Hat (installed before Armadillo): cmake, openblas-devel, lapack-devel, arpack-devel, SuperLU-devel
         
      • recommended packages for Ubuntu & Debian (installed before Armadillo): cmake, libopenblas-dev, liblapack-dev, libarpack-dev
         
    • Many Linux-based operating systems provide pre-built Armadillo packages: Fedora, Debian, Ubuntu, openSUSE, Arch
      Note: the pre-built packages may not be the latest version; if you're encountering problems, use the official stable version provided here

 

ubuntu 安装OpenBLAS

安装的步骤如下:

(1)git clone git://github.com/xianyi/OpenBLAS

(2)cd OpenBLAS

(3)sudo make FC=gfortran (如果没有安装gfortran,执行sudo apt-get install gfortran)

也可以用这个指令,就把安装目录改为下面的目录了:/usr/local/Openblas/

         sudo make --PREFIX=/usr/local/Openblas/ install  /*安装*/

  (4) sudo make install (将OpenBLAS安装到/opt下)

结果如下:

Armadillo:C++下的Matlab替代品_第1张图片

编译好的文件夹大小40M

(5)执行以下命令完成安装

   ln -s /opt/OpenBLAS/lib/libopenblas.so  /usr/lib/libblas.so.3

   ln -s /opt/OpenBLAS/lib/liblapack.so.3 /usr/lib/liblapack.so.3
   再次运行程序,则不会发生此类错误

 

官方发布如今是lacpack-3.5.0.tgz,获取方法是网址。但打不开,ubuntu一般用

sudo wget http://www.netlib.org/lapack/lapack-3.5.0.tgz

下载后解压

tar -zxvf lapack-3.5.0.tgz

在make之前,需要先创建一个make.inc文件,可以直接根据make.inc.example创建:
cd lapack-3.5.0
cp make.inc.example make.inc
  如果是使用Ubuntu+gfortran,则无须更改make.inc里的内容,否则需要根据系统环境和编译器修改文件里对应的选项。LAPACK依赖BLAS,因此在编译LAPACK前需要提供BLAS包,所幸LAPACK里已经集成了BLAS包,但默认并不编译它。要想编译LAPACK前先编译BLAS,需要修改一下makefile:
gedit Makefile
  光标定位到第11行并将内容改为:
lib: blaslib lapacklib tmglib
  保存退出,然后开始make整个工程。
make
  编译完成后,目录下将生成blas_LINUX.a、lapack_LINUX.a和tmglib_LINUX.a三个文件。

你可能感兴趣的:(Linux)