矩阵运算库Armadillo,Eigen,MATCOM在windows+vs2010环境下的安装和测评

作为一个遥感图像处理方向研究生,笔者在编程的时候免不得要和矩阵运算打交道,各种矩阵乘法协方差特征值。虽然在自己的研究实验中更喜欢用MATLAB来作为工具,但是在完成工程项目编软件的时候必须要用C++来作为编程语言。在C++中并不能像MATLAB一样,非常方便的进行矩阵运算。当然也可以自己编一些列矩阵运算的函数(笔者以前就干过这事),不过这个运算效率实在无法满足要求。

目前国际上提供了很多矩阵运算线性代数的库,这些库都进行了基于CPU和多核的运算优化,自然比我们自己做的这些函数效率要高的多,而且很多库都有着非常友好的使用方式,这就好比有了又快又舒服汽车自然也就不用再用自己的双腿走到累死。经过了多次折腾,笔者终于大概了解了几个比较常用的矩阵库的安装和使用方式,在这里做一个简要介绍,希望能为其他人提供一个方便。

笔者最早是使用的别人给的MATCOM库,这个库比较古老、不开源而且早就停止维护,唯一的优点就是可以在vc6.0上使用···最近又开始在找更加优质的矩阵运算库,就发现了Armadillo,并且在同学的推荐下用了一下Eigen,发现在vs2010的环境下,这两个库确实比MATCOM要好上N倍。以下就是各个运算库的介绍和安装,本文重点介绍的是Armadillo+OpenBLAS的组合,这个组合是我目前使用的库中最简单效率又最高的。

1MATCOM

MATCOM矩阵库在国内用的貌似还不少,笔者就是从别的同学那里得到的这个库。根据度娘的介绍,MATCOM其实是mathtools公司提供讲MATLAB代码移植到c++上的一个工具,具体两者的关系笔者搞不太清,但是MATCOM4.5版本之后据说就被合并到MATLAB中,没有再更新和维护。

MATCOM有两大优点,一是和MATLAB的使用方式非常像,基本函数都叫一个名字,所以可以非常容易地将MATLAB代码移植到C++上;二是可以在VC6上使用,这一点非常重要···因为目前大多数的库都已经不再支持VC6了。不过MATCOM的缺点也非常多,首先MATCOM并不开源,这一点在完成工程项目编软件的时候很麻烦;其次MATCOMMathTools公司被合并之后就再也没有更新和维护,因此在代码的速度和健康程度上已经是落后于时代了。所以笔者认为除非是必须在VC6下进行编程,不然不建议再使用MATCOM这个矩阵库。

关于MATCOM的具体应用,可以参见http://blog.sina.com.cn/s/blog_60f8483a0100gay7.html这个博客,讲解的非常清楚。在度娘中搜索,也可以找到很多关于MATCOM的文章。不过笔者要提醒一点,在笔者的使用中发现有一些文章和说明中提到的函数和真正使用起来并不一样,这可能是版本差异,所以需要自己动手尝试。

笔者所获得的MATCOM一共只有4个文件,是编译好了的v4501v.lib,v4501v.dllago4501.dllmatlib.h文件。这几个文件读者可以在CSDN等网站上搜索下载。

安装方式很简单,只需要在工程中添加上v4501v.lib,在代码头包含#include "matlib.h",并且把v4501v.dllago4501.dll放到应用文件,例如DEBUG或者RELEASE文件夹中,就可以使用。

2Armadillo

Armadillo是一个开源的矩阵运算库,这个库可以在开源中国下载到

http://www.oschina.net/p/armadillo+cpp+library

Armadillo的主页也非常友好

http://arma.sourceforge.net/

这个库其实是对底层的矩阵运算库(例如BLASLAPACK)的封装,也就是说,这个库本身的计算能力其实不强,但是这个库可以配合开源的底层库来使用,例如最基本的

你可能感兴趣的:(编程,Eigen,Armadillo,OpenBLAS,MATCOM,矩阵运算库)