C++矩阵运算库推荐

最近在几个地方都看到有人问C++下用什么矩阵运算库比较好,顺便做了个调查,做一些相关的推荐吧。主要针对稠密矩阵,有时间会再写一个稀疏矩阵的推荐。

Armadillo: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等解稀疏矩阵的功能。同时提供SPQRUmfPack等外部稀疏矩阵库的接口。
  • 支持常用几何运算,包括旋转矩阵、四元数、矩阵变换、AngleAxis(欧拉角与Rodrigues变换)等等。
  • 更新活跃,用户众多(Google、WilliowGarage也在用),使用Eigen的比较著名的开源项目有ROS(机器人操作系统)、PCL(点云处理库)、Google Ceres(优化算法)。OpenCV自带到Eigen的接口。

总体来讲,如果经常做一些比较复杂的矩阵计算的话,或者想要跨平台的话,非常值得一用。

OpenCV:方便的计算机视觉计算库

地址:http://opencv.org/

许可证:目前是BSD

OpenCV在计算机视觉领域名气实在是太大了,而且最近几年库里的算法开始爆炸式的增长,最近貌似计划推出OpenCV 3了(参见这里)。有人开始抱怨OpenCV现在内容太杂了,不过这样的好处就是从是研究开发的话,一个库就可以得到大部分计算机视觉的流行算法,省去了很多麻烦。

OpenCV自带的矩阵计算功能算不上是专业的矩阵计算库,但是如果你用C++写机器学习、计算机视觉的程序,一定会经常用到。OpenCV的矩阵 计算功能还算比较完善,虽然速度略差劲,但用在大多数的开发和研究领域也是足够了。特别是OpenCV 2.2之后提供了类Matlab的矩阵C++接口,使得直接使用OpenCV进行矩阵计算变得简单易用。列两个比较值得一提的特点:

  • 大量计算机视觉、机器学习相关的矩阵操作,非常方便。比如PCA、LDA、三维空间投影等等。
  • 自带并行加速的矩阵计算功能。其中cv::gpu模块提供了CUDA支持的GPU矩阵计算功能,cv::ocl模块提供了OpenCL支持的并行矩阵计算功能。可以非常方便的进行并行矩阵计算,不过不足的是这两个模块还暂时缺少矩阵分解的实现。我曾见过朋友在做深度学习的时候用cv::ocl模块进行大矩阵乘法,貌似效果还不错。

ViennaCL:并行矩阵计算

网址:http://viennacl.sourceforge.net/

许可证:MIT

作者Karl Rupp来自维也纳大学,开发了一套Vienna*系列的开源软件,其中还包括ViennaMath(symbolic math符号计算)、ViennaFEM(有限元)等等。ViennaCL在后台支持OpenCL、OpenMP和CUDA,可以方便地使用各种型号的CPU或GPU进行并行计算。

  • 目前矩阵类型支持float和double,1.4.2版尚不支持复数矩阵。
  • 支持常用的矩阵运算和分解。
  • 接口很有好,并提供接口到uBLAS、Eigen、MTL 4等矩阵库。

安装使用有非常详细的官方文档

PETSc:大规模并行科学计算

网站:http://www.mcs.anl.gov/petsc/

许可证:Copyright University of Chicago (GPL compatible)

PETSc(Portable, Extensible Toolkit for Scientific Computation)  是美国能源部ODE2000支持开发的20多个ACTS工具箱之一,由Argonne国家实验室开发的可移植可扩展科学计算 工具箱,主要用于在分布式存储环境高效求解偏微分方程组及相关问题。PETSc所有消息传递通信均采用MPI标准实现。线性方程组求解器是PETSc的核 心组件之一,PETSc几乎提供了所有求解线性方程组的高效求解器,既有串行求解也有并行求解,既有直接法求解也有迭代法求解。对于大规模线性方程组, PETSc提供了大量基于Krylov子空间方法和各种预条件子的成熟而有效的迭代方法,以及其他通用程序和用户程序的接口。PETSc具有一般库软件所具备的高性能、可移植等优点,而且面向对象技术使得PETSc内部功能部件的使用非常方便,接口简单而又适用面广,可以缩短开发周期,减少工作量。[直接粘百度百科了]。

PETSc在网上可一找到很多英文资料,使用也比较广泛。不过在学校实验室的一般的科学计算可能接触的还比较少。推荐一个YouTube(可能要翻墙)的五集PETSc简单入门《PRACE Video Tutorial - PETSc Tutorial》。

其他的矩阵计算库和资料

在Stackexchange上有一个帖子《Recommendations for a usable, fast C++ matrix library?》里面搜罗了许多矩阵运算库。另外INRIA有人写了一个文档《Linear Algebra Libraries》,对常见的矩阵运算库进行了总结。除了上面提到的几个库之外,下面还有一些比较常用或坚持更新的矩阵库:

  • uBLAS:Boost包中的BLAS库接口,据说速度一般。
  • GSL:GNU Scientific Library自带的矩阵运算,据说速度一般。
  • MTL 4Matrix Template Library version 4,类似Eigen和Armadillo,有开源版本。
  • Trilinos:和PETSc同是美国能源部ODE2000支持开发的20多个ACTS工具箱之一,用于大规模计算。

本文转载自:cvnote

2014年04月09日 ⁄ 字号   

最近在几个地方都看到有人问C++下用什么矩阵运算库比较好,顺便做了个调查,做一些相关的推荐吧。主要针对稠密矩阵,有时间会再写一个稀疏矩阵的推荐。

Armadillo: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等解稀疏矩阵的功能。同时提供SPQRUmfPack等外部稀疏矩阵库的接口。
  • 支持常用几何运算,包括旋转矩阵、四元数、矩阵变换、AngleAxis(欧拉角与Rodrigues变换)等等。
  • 更新活跃,用户众多(Google、WilliowGarage也在用),使用Eigen的比较著名的开源项目有ROS(机器人操作系统)、PCL(点云处理库)、Google Ceres(优化算法)。OpenCV自带到Eigen的接口。

总体来讲,如果经常做一些比较复杂的矩阵计算的话,或者想要跨平台的话,非常值得一用。

OpenCV:方便的计算机视觉计算库

地址:http://opencv.org/

许可证:目前是BSD

OpenCV在计算机视觉领域名气实在是太大了,而且最近几年库里的算法开始爆炸式的增长,最近貌似计划推出OpenCV 3了(参见这里)。有人开始抱怨OpenCV现在内容太杂了,不过这样的好处就是从是研究开发的话,一个库就可以得到大部分计算机视觉的流行算法,省去了很多麻烦。

OpenCV自带的矩阵计算功能算不上是专业的矩阵计算库,但是如果你用C++写机器学习、计算机视觉的程序,一定会经常用到。OpenCV的矩阵 计算功能还算比较完善,虽然速度略差劲,但用在大多数的开发和研究领域也是足够了。特别是OpenCV 2.2之后提供了类Matlab的矩阵C++接口,使得直接使用OpenCV进行矩阵计算变得简单易用。列两个比较值得一提的特点:

  • 大量计算机视觉、机器学习相关的矩阵操作,非常方便。比如PCA、LDA、三维空间投影等等。
  • 自带并行加速的矩阵计算功能。其中cv::gpu模块提供了CUDA支持的GPU矩阵计算功能,cv::ocl模块提供了OpenCL支持的并行矩阵计算功能。可以非常方便的进行并行矩阵计算,不过不足的是这两个模块还暂时缺少矩阵分解的实现。我曾见过朋友在做深度学习的时候用cv::ocl模块进行大矩阵乘法,貌似效果还不错。

ViennaCL:并行矩阵计算

网址:http://viennacl.sourceforge.net/

许可证:MIT

作者Karl Rupp来自维也纳大学,开发了一套Vienna*系列的开源软件,其中还包括ViennaMath(symbolic math符号计算)、ViennaFEM(有限元)等等。ViennaCL在后台支持OpenCL、OpenMP和CUDA,可以方便地使用各种型号的CPU或GPU进行并行计算。

  • 目前矩阵类型支持float和double,1.4.2版尚不支持复数矩阵。
  • 支持常用的矩阵运算和分解。
  • 接口很有好,并提供接口到uBLAS、Eigen、MTL 4等矩阵库。

安装使用有非常详细的官方文档

PETSc:大规模并行科学计算

网站:http://www.mcs.anl.gov/petsc/

许可证:Copyright University of Chicago (GPL compatible)

PETSc(Portable, Extensible Toolkit for Scientific Computation)  是美国能源部ODE2000支持开发的20多个ACTS工具箱之一,由Argonne国家实验室开发的可移植可扩展科学计算 工具箱,主要用于在分布式存储环境高效求解偏微分方程组及相关问题。PETSc所有消息传递通信均采用MPI标准实现。线性方程组求解器是PETSc的核 心组件之一,PETSc几乎提供了所有求解线性方程组的高效求解器,既有串行求解也有并行求解,既有直接法求解也有迭代法求解。对于大规模线性方程组, PETSc提供了大量基于Krylov子空间方法和各种预条件子的成熟而有效的迭代方法,以及其他通用程序和用户程序的接口。PETSc具有一般库软件所具备的高性能、可移植等优点,而且面向对象技术使得PETSc内部功能部件的使用非常方便,接口简单而又适用面广,可以缩短开发周期,减少工作量。[直接粘百度百科了]。

PETSc在网上可一找到很多英文资料,使用也比较广泛。不过在学校实验室的一般的科学计算可能接触的还比较少。推荐一个YouTube(可能要翻墙)的五集PETSc简单入门《PRACE Video Tutorial - PETSc Tutorial》。

其他的矩阵计算库和资料

在Stackexchange上有一个帖子《Recommendations for a usable, fast C++ matrix library?》里面搜罗了许多矩阵运算库。另外INRIA有人写了一个文档《Linear Algebra Libraries》,对常见的矩阵运算库进行了总结。除了上面提到的几个库之外,下面还有一些比较常用或坚持更新的矩阵库:

  • uBLAS:Boost包中的BLAS库接口,据说速度一般。
  • GSL:GNU Scientific Library自带的矩阵运算,据说速度一般。
  • MTL 4Matrix Template Library version 4,类似Eigen和Armadillo,有开源版本。
  • Trilinos:和PETSc同是美国能源部ODE2000支持开发的20多个ACTS工具箱之一,用于大规模计算。

C++矩阵运算库推荐

时间: 2024-10-26 17:09:25

C++矩阵运算库推荐的相关文章

【转】C++矩阵运算库推荐

[原文链接]http://www.52ml.net/13002.html Armadillo:C++下的Matlab替代品 地址:http://arma.sourceforge.net/ 许可证:MPL 2.0 目前使用比较广的C++矩阵运算库之一,是在C++下使用Matlab方式操作矩阵很好的选择,许多Matlab的矩阵操作函数都可以找到对应,这 对习惯了Matlab的人来说实在是非常方便,另外如果要将Matlab下做研究的代码改写成C++,使用Armadillo也会很方便,这里有一个简易的M

[转]c++矩阵运算库Eigen

原文地址:http://www.cnblogs.com/goingupeveryday/p/5699053.html c++矩阵运算库Eigen Eigen 的简介和下载安装 最近因为要写机械臂的运动学控制程序,因此难免就要在C++中进行矩阵运算.然而C++本身不支持矩阵运算,Qt库中的矩阵运算能力也相当有限,因此考虑寻求矩阵运算库Eigen的帮助. Eigen是一个C++线性运算的模板库:他可以用来完成矩阵,向量,数值解等相关的运算.(Eigen is a C++ template libra

Duanxx的Design abroad: C++矩阵运算库Eigen 概要

一.概要 这两天想起来要做神经网络的作业了,要求用C++完毕神经网络的算法. 摆在面前的第一个问题就是,神经网络算法中大量用到了矩阵运算.可是C++不像matlab那样对矩阵运算有非常好的支持.本来准备自己写一个C++的矩阵运算的代码的,google了一下后.找到了几个不错的C++矩阵运算库,我选用的是Eigen这个C++矩阵运算库. Eigen有很丰富的功能: l  支持全部大小的矩阵运算,从非常小的大小固定的矩阵运算.到随意大的稠密矩阵的运算,甚至连稀疏矩阵的运算它也支持. l  支持当前全

27个提升效率的iOS开源库推荐

DZNEmptyDataSet(UI,空表格视图解算器) PDTSimpleCalendar(UI,drop-in日历组件) MagicalRecord(实施活跃记录模式的Core Data助手) Chameleon(UI,色彩框架) Alamofire(Swift 网络) TextFieldEffects (UI,自定义外观的文本区域) GPUImage(快速图片处理) iRate(获取用户评价) GameCenterManager(快速管理游戏中心) PKRevealController 2

Duanxx的Design abroad: C++矩阵运算库Eigen 概述

一.概述 这两天想起来要做神经网络的作业了,要求用C++完成神经网络的算法. 摆在面前的第一个问题就是,神经网络算法中大量用到了矩阵运算,但是C++不像matlab那样对矩阵运算有很好的支持,本来准备自己写一个C++的矩阵运算的代码的,google了一下后,找到了几个不错的C++矩阵运算库,我选用的是Eigen这个C++矩阵运算库. Eigen有非常丰富的功能: l  支持所有大小的矩阵运算,从很小的大小固定的矩阵运算,到任意大的稠密矩阵的运算,甚至连稀疏矩阵的运算它也支持. l  支持当前所有

重开吐槽有感及OI书籍题库推荐 -自己选的路 跪着也要走完

凉爽的清风伴随着烈日洒向这片土地,山区的夏天似乎早已来到.回想过去的高一上学期与寒假,不禁叹息,荒废了多少时光.虽然自称为OIer,但却是个半吊子,在过去的NOIP2015中,从零开始的我,刚上完三四节课的我就裸考了笔试,差0.5分与复赛失之交臂.再见了2015的比赛,考试过后,感觉OI没什么用处,有荒废了许多,竞赛班由次居然连续3个星期都没开过课,也就是1月1课.可能是不重视吧,在2015noip中,我校复赛才入几个人,学长得了奖,最高的也还是省二.应该算是弱校了吧.不由地怀疑自己. OI课上

【转】27个提升效率的iOS开源库推荐

转自:http://www.cocoachina.com/ios/20150727/12720.html 我热爱开源,更喜爱那些花费宝贵的业余时间来创造奇迹的开发者们,感谢他们将自己辛苦劳动的成果无偿分享给大家.开源作者和贡献者们,你们太了不起了,感谢你们所付出的一切. 鉴于我是收集不全会死星人,这里我根据个人喜好选取了一些iOS的开源库.这些项目的顺序完全随机,每个都棒到爆.绝大多数支持CocoaPods,所以将它们添加到你的Xcode项目中只是小事一桩. 在本文末尾你可以找到一个长文慎入版本

快快快!27个提升效率的iOS开源库推荐

http://www.cocoachina.com/programmer/20150728/12788.html 我热爱开源,更喜爱那些花费宝贵的业余时间来创造奇迹的开发者们,感谢他们将自己辛苦劳动的成果无偿分享给大家.开源作者和贡献者们,你们太了不起了,感谢你们所付出的一切. 鉴于我是收集不全会死星人,这里我根据个人喜好选取了一些iOS的开源库.这些项目的顺序完全随机,每个都棒到爆.绝大多数支持CocoaPods,所以将它们添加到你的Xcode项目中只是小事一桩. 在本文末尾你可以找到一个长文

前端cdn库推荐

后端编程人员,有时作功能调试时会用到jquery.layer等的前端库文件,用得较多的我们可以下载下来放到自己的电脑上,有些偶尔使用一次的类库插件就没必要全都下载下来,毕竟不用的类库多了,自己找到它都是一件不小的工程. bootcdn介绍 在这里向所有的开发人员推荐一个前端资源比较全的cdn,bootcdn. 链接:http://www.bootcdn.cn/. bootcdn网站首页界面如下,如果你看到了这样的界面说明你不同有进错网站. 资源搜索 只需要在搜索框输入你想找的资源名称即可.