华为手机EMUI4.1.2的数字密码锁怎么如何取消qq密码锁

Armadillo C++ Library 2.2.1发布 C++线性代数库-阿里云资讯网
Armadillo C++ Library 2.2.1发布 C++线性代数库
发布时间:
更新时间:
来源:网络
作者:我爱萝卜88
C++线性代数库
Armadillo是一个具有平衡速度与的++库(矩阵),用于所有操作平台,包括Linux , Mac OS X , Windows。 其功能是支持整数,数,和的数字,以及子集三角函数和统计功能,通过可选的LAPACK和ATLAS库的集成来提供各种矩阵分解。延迟评估方法是基于模板元编程,用于在编译时的几个操作合并成一个和减少或消除临时变量的需求。
Armadillo C++
2.2.1版本修复了一些bug,并且针对复杂的数字进行cov(), cor(), and running_stat_vec处理,详细更新日志: faster multiplication of small matrices faster trans() faster handling of submatrices by norm() added economical singular /zixun/aggregation/9541.html&&value decomposition: svd_thin() added circ_toeplitz() added .is_colvec() & .is_rowvec() fixes for handling of complex numbers by cov(), cor(), running_stat_vec
下载地址:http://sourceforge.net/projects/arma/files/armadillo-2.2.1.tar
本站所有文章全部来源于互联网,版权归属于原作者。本站所有转载文章言论不代表本站观点,如是侵犯了原作者的权利请发邮件联系站长(yanjing@),我们收到后立即删除。
网站主机空间
摘要: 我们知道搜索引擎蜘蛛在访问网站的时候,有个判断因素就是网站打开速度是否快速,所以站长们在选择网站主机空间就要注意了。如果网站主机空间不稳定也会给seo带来一定影响的。 我们知道搜索引擎蜘蛛在访问网站的时候,有个判断因素就是网站打开速度是否快速,所以站长们在选择网站主机空间就要注意了。如果网站主机空间不稳定也会给seo带来一定影响的。 当搜索引擎蜘蛛来访问网站的时候,发现主机死机,无法...
摘要: 心态篇 其实做个人站长自己的心态很重要,不论你是新手站长还是经验丰富的老站长。都该把自己的心态摆正了,网上有很多什么月收入过万的软文,其实真正有几个呢。多数高手都是 心态篇 其实做个人站长自己的心态很重要,不论你是新手站长还是经验丰富的老站长。都该把自己的心态摆正了,网上有很多什么月收入过万的软文,其实真正有几个呢。多数高手都是低调赚钱的。那么个人站长要具备那些心态呢? 第一: 学会...
产品网站订单
摘要: 企业营销已经不再是传统的模式,越来越多的企业英雄通过seo优化的方法做行业关键字排名,希望可以通过关键词获得流量和订单销量,不过很多企业网站的IP流量上涨,订单销量却不 企业营销已经不再是传统的模式,越来越多的企业英雄通过seo优化的方法做行业关键字排名,希望可以通过关键词获得流量和订单销量,不过很多企业网站的IP流量上涨,订单销量却不尽如人意。 很多卖产品的网站存在的一个问题是有流...
2012年的苏宁正面临着同样的挑战。做了二十多年零售的张近东,其面临的现实挑战已经不是让苏宁如何避免撞上冰山,而是已经撞上了冰山,如何让这艘巨轮前行,而不是坐等沉没。 “泰坦尼克号”是如何沉没的? 泰坦尼克号设计中,如果船上的16个防水舱只有4个进水的话,船还可以浮在水上,但不幸的是有5个底舱的外壁被冰山撕裂了,弃船是必然的选择。 苏宁作为中国最优秀的连锁零售商,如果在线零售只是占所有社会商...
网站策划方案
摘要: 要建立一个网站,需要从网站定位,到设计、网站结构、内容准备、内外链的建设等等,是一个复杂繁琐的过程,需要准备一份网站的策划方案。本文将简要描述,从网站的定位到最终 要建立一个网站,需要从网站定位,到设计、网站结构、内容准备、内外链的建设等等,是一个复杂繁琐的过程,需要准备一份网站的策划方案。本文将简要描述,从网站的定位到最终的网站建成,整个过程。 一、网站的定位 分析:给网站定位,策...
行业网站编辑
摘要: 我们需要做一个什么样的网站?很多时候大家感觉做行业网站比较简单容易,于是越来越多的朋友涉足行业网站这一块,加上一些传统行业慢慢向互联网转移,一批批的行业网站建立起来 我们需要做一个什么样的网站?很多时候大家感觉做行业网站比较简单容易,于是越来越多的朋友涉足行业网站这一块,加上一些传统行业慢慢向互联网转移,一批批的行业网站建立起来了。然而不少朋友都问到守护一个很重要的问题是:行业网站到...
行业架构师咨询
服务与支持
账号与支持
关注阿里云
International微信公众号
Armadillo C++ Library 2.2.1发布 C++线性代数库
Armadillo是一个具有平衡速度与易用性的C++线性代数库(矩阵数学),用于所有操作平台,包括Linux , Mac OS X , Windows。 其功能是支持整数,浮点数,和复杂的数字,以及子集三角函数和统计功能,通过可选的LAPACK和ATLAS库的集成来提供各种矩阵分解。延迟评估方法是基于模板元编程,用于在编译时的几个操作合并成一个和减少或消除临时变量的需求。
Armadillo C++ Library 2.2.1版本修复了一些bug,并且针对复杂的数字进行cov(), cor(), and running_stat_vec处理,详细更新日志:
faster multiplication of small matrices
faster handling of submatrices by
added economical singular value decomposition:
fixes for handling of complex numbers by , ,
下载地址:
其他类似的新闻
其他相关的新闻
大家感兴趣的内容
小伙伴最爱的新闻
小伙伴还关注了以下信息
小伙伴关注的焦点
小伙伴都在关注的热门词
Copyright (C) 2006- Inc. All Rights Reserved
孝感风信信息技术有限公司 ● 版权所有3537人阅读
muParser 是一个快速的数学表达式的解析器,可将数学表达式转成字节码并预先计算常数表达式的部分。
CGAL ,计算几何算法库,是一个大型C + +库的几何数据结构和算法,如Delaunay三角网,网格生成,布尔运算的多边形,以及各种几何处理算法。 CGAL是用来在各个领域:计算机图形学,科学可视化,计算机辅助设计与建模,地理信息系统,分子生物学,医学影像学...
最近更新:&&发布于 1年前
Octave 是一个类似matlab和Scilab的数学软件包,可以进行各种运算,编程。它还有丰富的C++接口可以让用户编程时调用。它绘图使用gnuplot。 Octave的使用也是基于字符终端模式的,当需要绘图时,将会调用Gnuplot进行数据绘图,并显示出来。 Octave是用C++编...
最近更新:&&发布于 2年前
GNU Scientific Library (GSL) 是一个用于科学计算的 C 语言类库。有超过1000个函数。 该类库提供了关于数学计算的很多方面,包括: Complex Numbers Roots of Polynomials Special Functions Vectors and Matrices Permutations Sorting BLAS Support Li...
IT++是一个数学,信号处理和通信类功能的C++库。它的主要用途是模拟通信系统,并进行研究相关领域的通信。它综合了Matlab的功能和C的速度,适合于信号处理等领域。 功能和特点 模板阵列和堆叠的集装箱类 命令和文件的论点分析器 模板向量和矩阵类 稀疏向量...
Armadillo C++ Library 是一种C++的线性代数库(矩阵数学)以取得良好的平衡速度与易用性。整数,浮点,而复杂的数字支持,以及一个子集,三角和统计功能。各种矩阵分解是通过可选的集成 与LAPACK和Atlas图书馆。延迟评价方法,基于模板元编程,使用(在编...
最近更新:&&发布于 11天前
有限元分析,即使用有限元方法来分析静态或动态的物体或系统。在这种方法中一个物体或系统被分解为由多个相互联结的、简单、独立的点组成的几何模型。在这 种方法中这些独立的点的数量是有限的,因此被称为有限元。由实际的物理模型中推导出来得平衡方程式...
QuantLib 是一个专注于 Quantitative Finance 计算与开发的 C++ 库。。 QuantLib是自由和开放源码。
Eigen 是一个线性算术的C++模板库,包括:vectors, matrices, 以及相关算法。功能强大、快速、优雅以及支持多平台。 示例代码: #include &iostream& #include &Eigen/Dense& using namespace E int main() { Matrix2 a && 1, 2, 3, 4; MatrixXd...
最近更新:&&发布于 4个月前
TSPL(Template Signal Processing Library) 是一个 C++ 的信号处理库,主要包括滤波器设计、时频分析和小波变换,同时还包含一些关于向量和矩阵的基本算法,所有的算法基于 C++ 模板类编写而成。
最近更新:&&发布于 2年前
Gnu MP 是一个任意精度的数学计算库。 operating on signed integers, rational numbers, and floating point numbers. There is no limit to the precision, except for the ones implied by available memory. It has a rich set of functions, and the...
最近更新:&&发布于 1年前
TooN 是一个C++ 数学计算库,其目的是有效运作的大量小型矩阵,并提供方便一些算法包括矩阵分解和优化。
最近更新:&&发布于 2个月前
mygsl是一个基于GSL库的个性化开源数值计算项目. 该类库提供了关于数学计算的很多方面,包括: Complex Numbers Roots of Polynomials Special Functions Vectors and Matrices Permutations Sorting BLAS Support Linear Algebra Eigensystems Fast Fouri...
最近更新:&&发布于 2年前
GiNaC(GiNaC 不是一个 CAS 计算机代数系统))是一个用于符号计算的C++库。它的设计允许集成系统创造,象征性的操作嵌入与更成熟的计算机科学(如计算密集型,图形界面等),数字应用领域。相对于其他情况下,它不会尝试代数提供广泛的功能和简单的编程语...
OOFEM是一个开源多物理并行有限元程序的面向对象的架构。这个项目的目的是提供高效率和强大的有限元计算工具,以及提供高度模块化和可扩展性的发展环境。 关于有限元的一些概念 有限元分析,即使用有限元方法来分析静态或动态的物体或系统。在这种方法中一...
Into 是一个用 C++ 开发的跨平台的机器智能应用框架。Into 提供一种不同于其他的、快速的方法用以构建高性能图像分析、机器视觉效果、模式识别和人工智能应用。分层的 API 一起超过 20 个完全可互操作的插入式模块用来访问图像和各种数据源等。...
FFTW 是一个C语言的快速傅立叶变换库。它包括复杂的,真实,对称的,多层面的,和并行转换,并且可以处理任意大小的efficiently.It阵列通常比其他免费提供的FFT实现更快,更与供应商的调整库(基准可在网页查阅)竞争。为了实现这一性能,它使用新的代码生...
最近更新:&&发布于 1年前
OpenBLAS 是一个优化的 BLAS 库,基于 GotoBLAS2 1.13 BSD 版本。 BLAS(Basic Linear Algebra Subprograms 基础线性代数程序集)是一个应用程序接口(API)标准,用以规范发布基础线性代数操作的数值库(如矢量或矩阵乘法)。该程序集最初发布于1979年,并...
最近更新:&&发布于 4个月前
EngLab是一个类C的数学专用语言。它语法简单,关键字很少,工程师和那些只会少许编程知识的人便能很好的掌握。 更多的屏幕截图:http://englab.bugfest.net/Screenshots.html
最近更新:&&发布于 4年前
Zero是一个功能丰富的C++数值计算核心库,不仅可取代clapack或者cblas, 还具备求根,拟合,插值,积分,随机数,统计,全局和局部的约束以及无约束优化,常微分方程求解等多项功能。 在线性计算方面: 可取代clapack或者cblas,以功能完整的复数计算为基础. 在非线性...
最近更新:&&发布于 2年前
word2vec(word to vector)是一个将单词转换成向量形式的工具。可以把对文本内容的处理简化为向量空间中的向量运算,计算出向量空间上的相似度,来表示文本语义上的相似度。word2vec为计算向量词提供了一种有效的连续词袋(bag-of-words)和skip-gram架构...
Fastbit是一个追随 NoSQL(Not Only SQL) 运动精神的开源的数据处理程序库,它提供了一系列的用压缩的 bitmap 索引支持的查询函数。在这里,我们关注的关键词是“bitmap 索引”。Fastbit 使用的是按列存储方式,其 bitmap 索引也是在按列存储的数据上建立起...
DUNE (Distributed and Unified Numerics Environment),分布和统一数值解环境,是一种求解偏微分方程的基于网格的方法(PDE)的模块化的工具箱。DUNE是所有这些体现了科学计算的概念从抽象的接口设置第一次。现代C + +编程技术使同样的概念非常不同的实现...
Maxima是一种用Common Lisp开发的计算机代数系统(或符号计算系统),用于公式推导、符号计算、数值计算等。 类似的商业产品有美国Wolfram Research公司的Mathematica、加拿大滑铁卢大学的Maple(其计算机代数系统核心作为Matlab的符号计算系统)等等。...
GLPK (GNU Linear Programming Kit:GNU线性编程工具)用于建立线性规划LP和混合型整数规划MIP问题的建模语言,并对模型进行最优化求解。 类似的商业产品是美国Lindo公司的Lindo和Lingo软件,相比之下求解运筹问题能力较弱。...
libease 是一个C语言的共享库,包含一些图像处理效果库和多种算术计算方法。 easeNone easeIn easeOut easeIo easeOi easeBounceIn easeBounceOut easeBackIn easeBackOut easeBackIo...
UDAV 是一个基于 MathGL库的跨平台的数据阵列可视化工具。它支持广泛的图形,简单的脚本语言,可视化数据处理和编辑。它有一个窗口界面,数据查 看,更改和策划。它可以执行MGL脚本,建立和旋转图形,导出到向量和位图(EPS或SVG )文件,绘制类似TeX的公式...
DAKOTA (Design Analysis Kit for Optimization and Terascale Applications) 是一种用于执行系统的分析和高性能计算机的设计通用软件工具包。它提供了设计优化,不确定性量化,参数估计,实验设计,灵敏度分析,以及连接服务的计算和模拟的并行算法范围。...
libmv 是一个通过运动计算结构的库,期望有朝一日能够从连续镜头或者照片中获得全部相机标定信息并建立3D模型。
一个面向对象的 C++科学计算库,可用于解方程,最小化,微分,积分,插值,优化,逼近,分析,拟合等。许多类可操作于通用的函数和向量类型。可用于O2scl在Linux,Mac和Windows(Cygwin的)平台,拥有丰富的文档,并已经积极发展三年多。 数组,向量,矩阵...
NCBI C++ Toolkit 提供可移植的库和应用用来协助基因科学计算,包括网络、SQL 和 BerkeleyDB 访问、CGI、HTML处理,ASN.1 和 XML 处理、序列对齐引擎、BLAST 数据库引擎、FLTK 和 OpenGL 图形工具包。...
最近更新:&&发布于 1年前
FLINT 是一个数论库,用C语言编写,它包括一个非常快的多项式算法库。
A flexible programming library for evolutionary computation. Steady-state, generational and island model genetic algorithms are supported, using Darwinian, Lamarckian or Baldwinian evolution. Includes support for multiprocessor and distr...
SuiteSparse 是一组C、Fortran 和 MATLAB 函数集用来生成空间稀疏矩阵数据。
最近更新:&&发布于 1年前
levmar是一个强大的和高效率的C/C++的实施采用Levenberg - 马奎德(LM)优化算法。 LM解决非线性最小二乘问题,即配备了一个模型,是非线性的未知参数(M&= N)在N米观测。 levmar包括双人和单精度LM变种,分析和有限差分近似雅可比矩阵。它也有一些约束非...
FFTW++ 是 FFTW 快速傅立叶转换库的 C++ 头文件封装类,提供自动内存分配、调整、规划和智能处理。在2D和3D中,隐含的反折叠的回旋大大减少了内存的使用量和计算时间。
最近更新:&&发布于 1年前
muParserX 是一个用 C++ 编写的数学表达式解析器,基于 muParser 引擎,但对其进行扩展支持多种数据类型包括:strings, complex numbers and matrices.
igraph是免费的复杂网络(graphs)处理包,可以处理百万级节点的网络(取决于机器内存)。igraph提供了R和C语言程序包,以及Python和Ruby语言扩展,它包括的功能包括: 网络可视化 传统图论算法:最小生成树,网络流等 复杂网络处理算法:随机网络模型,网...
MPIR 是一个开源的多精度的整数和有理数计算库,基于 GMP 库开发。
FEniCS 旨在推出一个新的计算算术模型 Computational Mathematical Modeling (CMM) 的新标准,相当于自动化 CMM 。用于简化算术方法学、实现和应用工具。包含了一些子项目和组件:DOLFIN, FErari, FFC, FIAT, Instant, SyFi, UFC, UFL, and Viper....
最近更新:&&发布于 8个月前
libMesh 用来处理六面体,四面体,四边形,三角形网格。拉格朗日、层次化和单项有限元素。接口来PETSc动力学、自适应网格加密,以及极端portablility。
ARM官方刚刚公布了一个开源库---Ne10。里面提供了大量的浮点运算、矢量计算,和矩阵操作函数,可以帮助开发者快速创建Neon应用
类似Matlab、Octave、Scilab的数值计算系统。 EULER is a program for quickly and interactively computing with real and complex numbers and matrices, or with intervals, in the style of MatLab, Octave,... It can draw and animate your function...
Adevs (A Discrete EVent System simulator) 是一个C++库(同时也提供Java的版本),用来开发离散事件模拟程序,基于 Parallel DEVS 和 Dynamic DEVS formalisms.
最近更新:&&发布于 1个月前
Hypre是一个高性能的预处理器的功能并行多重网格方法为结构化和非结构化网格问题库。它是一个项目,旨在开发可扩展的算法和软件,为解决大,稀疏线性方程组并行计算机的一部分。
Overture 是一种求解偏微分方程的面向对象的代码框架。它提供了一种便携式,灵活的应用程序,涉及复杂的移动几何物理过程的模拟软件的开发环境。序曲是专为解决问题上的结构性网格或结构网格的集合。特别是,它可以使用曲线网格,自适应网格细化,复合重叠...
PhysBAM 是斯坦福大学针的物理仿真库,能够模拟刚性 & 形变、 可压缩和不可压缩流体、 耦合的固体 & 流体、 耦合的刚性及变形固体、 铰接式刚性机构 & 人类、 骨折、 火、 烟、 头发、 布、 肌肉,以及其他许多自然现象。这些算法常被用于国外物理仿真与三...
FEHASHMAC是公开已知的哈希算法集成到一个命令行实用工具的集合。目前,42属于12个算法的家庭的哈希算法支持,包括五SHA-3决赛的贡献,加上每个算法的HMAC。 FEHASHMAC包含超过540个已知的测试向量和每个算法的正确实施,为每个硬件平台和编译器版本,可以...
& 由于C/C++标准库中没有几何数学库,这样造成在开发一个三维系统之初往往都需要自行实现一个实用的几何数学库,这样太费时费力了。GLM的出现可以很好的解决这个问题。 &&& GLM设计上遵照OpenGL Shading Language风格,使用开放的MIT授权协议。会GLSL的...
Canola 是佳能 Canola 1614P 可编程桌面计算器的仿真器。该计算器是佳能在 1971 年的产品。
DOLFIN 是 FEniCS 项目的 C++ 接口,用于实现自动化的计算数学建模 (ACMM) providing a consistent PSE (Problem Solving Environment) for solving ordinary and partial differential equations. Key features include a simple, consistent and intuiti...
最近更新:&&发布于 8个月前
OpenTissue是一个优秀的3D交互建模和仿真算法库,使用C++的模板实现,支持各种常用3D数学算法,建模与三角化,碰撞检测,基于GPU的动画角色蒙皮,动力学等等。支持OpenGL与NVIDIA Cg。它是基于ZLib协议开源发布的,可以用作商业目的。编译时需要Boost库支持...
Chombo开发包提供了一系列工具,用于在自适应精确直角坐标方格中,实现偏微分方程式解决方案的有限差分法,包括椭椭圆及时变模块。支持并联平台及标准化的自描述文件格式。
最近更新:&&发布于 1年前
libnabo 是一个快速为低维度空间提供K最近邻居算法库。它提供了一个干净的,传统的无标量类型无关的C ++模板API。 示例代码: #include &nabo/nabo.h& using namespace N using namespace E ... NNSearchF* nns = NNSearchF::createKDTreeLinear...
最近更新:&&发布于 3个月前
librangetree 是一个c++模板,实现一个2d范围树,用于计数和报告查询。
最近更新:&&发布于 11个月前
FLENS是灵活高效的数值解开发库。这个C++可以作为实施其他(高级)数字库或数字应用的一个builing块。它是一个C ++库(需要一个C ++11符合编译器)。安装方便,FLENS头只。它给你的稠密线性代数的矩阵/矢量类型的一个通用的BLAS(即模板)的实施,以及一个...
GetDP是一个通用的有限元求解器,采用混合元素离散在一个,两个,三个尺寸的的德拉姆型复合物。 GetDP主要特征的是定义离散问题(填写ASCII数据文件中的用户)和符号的这些问题的数学表达式的输入数据之间的接近程度。
最近更新:&&发布于 5个月前
OpenLB是一个c++库,实现了晶格玻尔兹曼模拟这一地址广泛的计算流体动力学问题。主要是打算作为一个编程库支持研究人员和工程师模拟流体流动通过晶格玻尔兹曼方法。
The Parma Polyhedra Library 是一个用户友好的、全动态的,采用标准 C++ 编写的、异常安全的、高效而且文档完善的数值抽象库。
TRIP是一个普遍的天体力学的计算机代数系统。它包括一个数字内核和接口gnuplot和xmgrace。计算可以进行双倍,四倍,或者多精度。用户可以动态加载外部库,用C写的,C++或Fortran。多元多项式可以进行并行计算
SUNDIALS (SUite of Nonlinear and DIfferential/ALgebraic equation Solvers)提供了强健的时间积分器和非线性solvers,它们可以很容易和已经存在的模拟编码合成。它从用户那获得最小的信息,就可以很容易的提供在solvers下面的资料数据。并且预先考虑到了...
SHTns 是一个高性能的球面谐波转换库。它的目的是在球面几何图形上进行各种数值模拟(流体流动,MHD等)。通过细致的向量化处理和运行时调整可达到很高的性能。使用 OpenMP 支持多线程转换。提供标量和矢量变换、合成和分析,灵活截断,规范化。包含一个P...
最近更新:&&发布于 4个月前
clBLAS 是 BLAS 的 OpenCL 实现
最近更新:&&发布于 21天前
FADBAD++ 利用 C++ 的模板和操作符重载的方法实现了 forward, backward and Taylor 方法。 These AD-templates enable the user to differentiate functions that are implemented in arithmetic types, such as doubles and intervals. One of the major ...
libefgy 包含一组 C++ 头文件,包含大量的跟数学相关的模板定义,包括分数算术、大整数、计算 n、e 数值等等。
最近更新:&&发布于 昨天(10:16)
ScalaBLAST 是 NCBI BLAST 库的一个高性能的多处理器实现。它支持所有5个主要类型:BLASTN,BLASTP,TBLASTN,tblastx和Blastx和多种输出格式(pairwise, tabular和XML)。 它运行在大多数已安装的MPI的多处理器系统,可以运行在一个互连的种类繁多,包括I...
最近更新:&&发布于 1年前
GPU的自动调整线性代数软件
SLEEF(评估初等函数的SIMD库)是一个有利于与SIMD指令的编程。它实现了无查表三角函数,反三角函数,指数和双精度对数函数,散射,或收集到SIMD寄存器,或有条件的分支机构。
GluCat 是一个库、模板类的模型通用Clifford 代数领域的实数,任意尺寸和任意签名。它实现的模型对应于每个非退化的二次形式由用户到最大设定每个Clifford代数。 GluCat类被设计成作为其他模板库的模板的参数可以使用。 GluCat包括的PyClical的扩展模块为P...
gNumerator 实现了在 Mac/GNUStep 平台上的各种计算物理项目
clFFT 是 FFT 的 OpenCL 实现
AnallogicA是一个基于逻辑命题生成逻辑表的应用程序。有可能比较逆等价或逻辑值。结果可以保存在文本文件,CSV格式,和一个内部格式。程序支持多达15个不同的变量,在组合将超过32000的可能性。它显示了在分析一步一步完成更换,一个特殊的函数为学生。...
libdeco-ostc 提供了用于潜水减压计算的开发库。库函数使用 OSTC 潜水计算器固件并反悔减压调度信息。减压模型使用带梯度因素的 Buhlmann (ZH-L16C),提供 C 和 Python API。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:216934次
积分:2999
积分:2999
排名:第10852名
原创:69篇
转载:59篇
评论:26条
(2)(1)(1)(1)(3)(1)(3)(3)(2)(6)(5)(7)(1)(2)(2)(1)(2)(1)(2)(1)(6)(9)(3)(5)(14)(12)(1)(2)(1)(5)(15)(1)(2)(4)(3)(1)矩阵运算库Armadillo,Eigen,MATCOM在windows+vs2010环境下的安装和测评(1)
作为一个遥感图像处理方向研究生,笔者在编程的时候免不得要和矩阵运算打交道,各种矩阵乘法协方差特征值。虽然在自己的研究实验中更喜欢用MATLAB来作为工具,但是在完成工程项目编软件的时候必须要用C++来作为编程语言。在C++中并不能像MATLAB一样,非常方便的进行矩阵运算。当然也可以自己编一些列矩阵运算的函数(笔者以前就干过这事),不过这个运算效率实在无法满足要求。
目前国际上提供了很多矩阵运算线性代数的库,这些库都进行了基于CPU和多核的运算优化,自然比我们自己做的这些函数效率要高的多,而且很多库都有着非常友好的使用方式,这就好比有了又快又舒服汽车自然也就不用再用自己的双腿走到累死。经过了多次折腾,笔者终于大概了解了几个比较常用的矩阵库的安装和使用方式,在这里做一个简要介绍,希望能为其他人提供一个方便。
笔者最早是使用的别人给的MATCOM库,这个库比较古老、不开源而且早就停止维护,唯一的优点就是可以在vc6.0上使用···最近又开始在找更加优质的矩阵运算库,就发现了Armadillo,并且在同学的推荐下用了一下Eigen,发现在vs2010的环境下,这两个库确实比MATCOM要好上N倍。以下就是各个运算库的介绍和安装,本文重点介绍的是Armadillo+OpenBLAS的组合,这个组合是我目前使用的库中最简单效率又最高的。
MATCOM矩阵库在国内用的貌似还不少,笔者就是从别的同学那里得到的这个库。根据度娘的介绍,MATCOM其实是mathtools公司提供讲MATLAB代码移植到c++上的一个工具,具体两者的关系笔者搞不太清,但是MATCOM在4.5版本之后据说就被合并到MATLAB中,没有再更新和维护。
MATCOM有两大优点,一是和MATLAB的使用方式非常像,基本函数都叫一个名字,所以可以非常容易地将MATLAB代码移植到C++上;二是可以在VC6上使用,这一点非常重要···因为目前大多数的库都已经不再支持VC6了。不过MATCOM的缺点也非常多,首先MATCOM并不开源,这一点在完成工程项目编软件的时候很麻烦;其次MATCOM在MathTools公司被合并之后就再也没有更新和维护,因此在代码的速度和健康程度上已经是落后于时代了。所以笔者认为除非是必须在VC6下进行编程,不然不建议再使用MATCOM这个矩阵库。
关于MATCOM的具体应用,可以参见这个博客,讲解的非常清楚。在度娘中搜索,也可以找到很多关于MATCOM的文章。不过笔者要提醒一点,在笔者的使用中发现有一些文章和说明中提到的函数和真正使用起来并不一样,这可能是版本差异,所以需要自己动手尝试。
笔者所获得的MATCOM一共只有4个文件,是编译好了的v4501v.lib,v4501v.dll,ago4501.dll和matlib.h文件。这几个文件读者可以在CSDN等网站上搜索下载。
安装方式很简单,只需要在工程中添加上v4501v.lib,在代码头包含#include
"matlib.h",并且把v4501v.dll,ago4501.dll放到应用文件,例如DEBUG或者RELEASE文件夹中,就可以使用。
2、Armadillo
Armadillo是一个开源的矩阵运算库,这个库可以在开源中国下载到
Armadillo的主页也非常友好
这个库其实是对底层的矩阵运算库(例如BLAS,LAPACK)的封装,也就是说,这个库本身的计算能力其实不强,但是这个库可以配合开源的底层库来使用,例如最基本的BLAS+LAPACK或者改进后的OpenBLAS,ACML还有强大的MKL。Armadillo的速度主要就是由底层库决定,其代码使用可以说是非常非常的简单,基本和MATLAB的代码没有什么差别,总之笔者是用的非常爽。
Armadillo的更新很频繁,这正是它还很有生命力的证据。
Armadillo可以从开源中国的连接或者是其主页的连接上下载,其安装说起来就是几步
1-将下载后的文件解压到某一个文件夹,例如D:\Program
Files\Armadillo\armadillo-3.910.0;
2-将D:\Program
Files\Armadillo\armadillo-3.910.0\include目录包含到在VS工程的文件目录中;
3-如果想要使用BLAS和LAPACK等底层库的加速,需要在将D:\Program
Files\Armadillo\armadillo-3.910.0\include\armadillo_bits\config.hpp中的取消一下两行代码的注释
ARMA_USE_LAPACK
ARMA_USE_BLAS
笔者推荐取消注释,这样才能发挥Armadillo的能力。
4-安装就基本完成了,以上安装可以参考以下两个网址
在度娘上可以搜索到很多Armadillo的安装文章,不过有一些是基于linux的,所以大家可以找针对windows的文章。
安装完毕后需要实践一下才能检验是否知道怎么使用,在压缩文件目录中,有一个examples文件夹,下面有两个例子,安装结束后请运行一下两个例子。
5-因为在Armadillo中使用到了BLAS和LAPACK,在examples\lib_win32中提供了两个已经编译好了的LIB和DLL,在使用到Armadillo的工程中加入两个LIB文件,并把DLL文件拷到执行文件的目录下。在这个文件夹中提供的两个库lapack_win32_MT和blas_win32_MT是提前编译好了的,非常好用,笔者测试后发现比网上自己下载的LAPACK和BLAS要快很多,而且还不需要其他的DLL支持。如果读者不想麻烦,就可以直接用这两个库。
6-请把压缩文件中的Readme.txt好好阅读一遍,这个帮助文件其实就讲的很详细了。还有docs.html,是一份非常详细的使用说明。
下载最新的LAPACK
可能有读者想使用自己下载的LAPACK库,笔者推荐在以下网址下载
读者可以直接在这个网址搜索“Using
LAPACKE subroutines in a Visual Studio C/C++
Project”,在这个小节下面有一个编译好的LAPACKE
examples,里面有编译好的LIB和DLL,可以拿来直接使用。
不过需要注意的是,网上目前大多数库,包括LAPACK和OpenBLAS,都是使用MinGW进行编译的,所以为了能顺利使用这些库,请读者先去安装一个MinGW吧。请在安装的时候选择C,C++和FORTRAN,这些编译环境都是经常需要的。
读者自己下载LAPACK之后,就可以使用LIB和DLL替换原来Armadillo提供的LIB和DLL,不过因为网上下载的LAPACK是使用MinGW编译的,需要相应的编译环境才能使用,单独使用会提示缺少必要的DLL。有两个办法解决这个问题,一是安装MinGW,并且在系统Path中进行配置,具体请度娘;二是将MinGW安装目录bin文件夹中的相应DLL拷到执行文件目录下,缺什么考什么。笔者推荐第二种方式,因为编好的软件一般都会在其他电脑上运行,不能要求所有的电脑都有MinGW环境。一般需要的DLL是libgcc_s_dw2-1.dll,libgfortran-3.dll和libquadmath-0.dll三个。
使用OpenBLAS
在Armadillo的Readme.txt中,一共推荐了三个库,并说“The OpenBLAS, MKL and ACML
libraries are generally the
fastest.”其中笔者推荐要用的,就是OpenBLAS。OpenBLAS是一个开源的库,这一点正好能够满足Armadillo联合使用工程项目编程的需要。下面就是OpenBLAS的主页
OpenBLAS有很多优点,计算效率高,开源免费,不过最最重要的一点,这是中国人写的!OpenBLAS是由中科院软件研究所的张先轶开发的一个开源计算库。为什么说这是一个很重要的优点,倒不是说笔者呼吁支持国货,而是如果有问题可以直接用中文问开发者!而且还是一个很热心的开发者!还有什么比这更大的优点。
下面就是作者Xianyi Zhang在开源中国开的博客
笔者在有问题的时候晚上9:29留言,开发者9:35就回答了,第二天更是写了一个“在Windows上Armadillo如何使用OpenBLAS”的博客,笔者当时是感动得泪流满面啊。
这就是开发者提供的如何使用Armadillo+OpenBLAS,里面步骤写的很详细,读者可以按照这个博客来做
唯一要补充一点就是这个库运行也需要MinGW环境,上面关于LAPACK的文字中有提到如何解决。只不过对于OpenBLAS只需要libgfortran-3.dll和libquadmath-0.dll。
在使用OpenBLAS的时候,只需要将LIB文件添加到工程中,再把DLL拷到执行文件目录下就行了。在笔者安装的时候拷到一些英文的安装方法说还需要BLAS或者LAPACK,其实OpenBLAS都已经包含了,除了MinGW环境不需要额外的库。
OpenBLAS已经编译好的文件可以在主页上直接下载到,也可以下载源代码自己编译,关于如何编译作者已经在他的博客中说道了。
Armadillo+OpenBLAS是笔者最推荐的组合。
其他库MKL ACML ATLAS
除了上面提到的BLAS+LAPACK和OpenBLAS,其他著名的库有Intel MKL,AMD
ACML以及开源的ATLAS。其中MKL是收费的,ACML和ATLAS是免费的。MKL听说是效率最高的库,但是在Windows下要收费,Linux免费,这是赤裸裸地鄙视Windows程序员的节奏吗。MATLAB就是使用的MKL和ATLAS。当然,有心人总能在网上找到免费的MKL,不过因为只能自己用,所以笔者也就没认真研究。曾经下载到一个MKL的库试过,发现不如OpenBLAS这样容易加到Armadillo,老是出错,也就没再深入过。ACML是免费的,不过貌似需要编译,笔者找到合心的库之后就不想麻烦了,就没弄,如果有兴趣的读者可以自己去网上下载。ATLAS因为是需要编译,笔者也懒了没弄。
Eigen也是一个开源的矩阵运算库,笔者在同学的推荐下尝试了一下这个库。据笔者同学说,在Windows下Eigen比OpenBLAS效率更高,而且在下面的这个测评中,Eigen比Armadillo要快很多,但是笔者猜这里的Armadillo没有使用OpenBLAS.
Eigen不是以动态库的形式,而是以头文件的方式使用,因此不需要再包含其他的DLL,应该算比较方便的。Eigen的安装方式很简单,就是将下载的压缩包直接解压,例如D:\Program
Files\Eigen,然后在VS工程中直接包含路径D:\Program
Files\Eigen\Eigen,也就是根目录下的Eigen文件夹就行了。
笔者猜测Eigen可能可以在VC6下使用,如果感兴趣的读者可以自己去尝试一下。
Eigen最大的缺点就是和MATLAB的使用方法差得太多,笔者用起来特别费劲。不过Eigen属于大多数算法都用模板函数,可能有人会觉得用起来更方便。
以上就是笔者最近尝试用过的矩阵运算库,接下来笔者会进行一个简单的测评。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 华为解密码锁 的文章

 

随机推荐