Armadillo C++ Library

article/2025/8/20 22:10:04

Armadillo 简介

Armadillo C++ Library是一种C++的线性代数库(矩阵数学),具有良好的平衡速度与易用性。其底层可以调用不同的BLAS和LAPACK库来提高效率,同时利用模板编程提高了代码的操作性

官网下载链接:点这里下载

Visual Studio安装步骤

1 解压后进入目录 \armadillo-7.950.1\include\armadillo_bits\config.hpp,将

#define ARMA_USE_LAPACK
#define ARMA_USE_BLAS

前面的注释删除,表示使用,修改后config.cpp表头如下:

#if !defined(ARMA_USE_LAPACK)
#define ARMA_USE_LAPACK
//// Comment out the above line if you don't have LAPACK or a high-speed replacement for LAPACK,
//// such as Intel MKL, AMD ACML, or the Accelerate framework.
//// LAPACK is required for matrix decompositions (eg. SVD) and matrix inverse.
#endif#if !defined(ARMA_USE_BLAS)
#define ARMA_USE_BLAS
//// Comment out the above line if you don't have BLAS or a high-speed replacement for BLAS,
//// such as OpenBLAS, GotoBLAS, Intel MKL, AMD ACML, or the Accelerate framework.
//// BLAS is used for matrix multiplication.
//// Without BLAS, matrix multiplication will still work, but might be slower.
#endif

2 新建一个项目,进入项目属性。如果下载的是64位,选择平台“x64”

3 进入vc++目录,设置如下:

这里写图片描述

4 进入C/C++ 常规,设置如下:

这里写图片描述

5 进入链接器 输入,设置如下:

安装完成!

也可安装mkl ,英特尔数学核心函数库,Intel Math Kernel Library来使用armadillo,设置如下:

这里写图片描述

Armadillo使用说明

1.armadillo的命名空间是arma

2.主要用到的三个类型分别是arma::Mat(矩阵)、arma::Col(列向量)、arma::Row(行向量),是稠密矩阵类

3.armadillo主要有两种矩阵类(对稠密矩阵而言),分别是Mat和fixed(在arma::Mat内),前者是可改变size的,后者是固定size的,其效率和内部存储机制上有所不同

mat:

public:
const uword n_rows; //!< number of rows (read-only)
const uword n_cols; //!< number of columns (read-only)
const uword n_elem; //!< number of elements (read-only)
const uhword vec_state; //!< 0: matrix layout; 1: column vector layout; 2: row vector layout
const uhword mem_state;
// mem_state = 0: normal matrix which manages its own memory
// mem_state = 1: use auxiliary memory until a size change
// mem_state = 2: use auxiliary memory and don't allow the number of elements to be changed
// mem_state = 3: fixed size (eg. via template based size specification)
arma_aligned const eT* const mem; //!< pointer to the memory used for storing elements (memory is read-only)
protected:
arma_align_mem eT mem_local[ arma_config::mat_prealloc ]; // local storage, for small vectors and matrices直接通过mat.n_rows来获得矩阵的行数。请求的空间小于 arma_config::mat_prealloc 这个数(一般为 16 )时,Mat 直接使用数组 mem_local 的空间来存储矩阵元素,而当矩阵所需空间大于这个值时,其内部通过 new 空间来获得更大的堆空间(一般不能超过 20000*20000 的矩阵)

fixed:

private:
static const uword fixed_n_elem = fixed_n_rows * fixed_n_cols;
static const bool use_extra = (fixed_n_elem > arma_config::mat_prealloc);
arma_align_mem eT mem_local_extra[ (use_extra) ? fixed_n_elem : 1 ];

矩阵规模不超过200*200时,最好使用fixed来存储矩阵元素

Mat
typedef Mat <float> fmat;
typedef Col <float> fvec;
typedef Col <float> fcolvec;
typedef Row <float> frowvec;typedef Mat <double> dmat;
typedef Col <double> dvec;
typedef Col <double> dcolvec;
typedef Row <double> drowvec;typedef Mat <double> mat;
typedef Col <double> vec;
typedef Col <double> colvec;
typedef Row <double> rowvec;typedef Mat <cx_float> cx_fmat;
typedef Col <cx_float> cx_fvec;
typedef Col <cx_float> cx_fcolvec;
typedef Row <cx_float> cx_frowvec;typedef Mat <cx_double> cx_dmat;
typedef Col <cx_double> cx_dvec;
typedef Col <cx_double> cx_dcolvec;
typedef Row <cx_double> cx_drowvec;typedef Mat <cx_double> cx_mat;
typedef Col <cx_double> cx_vec;
typedef Col <cx_double> cx_colvec;
typedef Row <cx_double> cx_rowvec;fixed:
typedef cx_mat::fixed<2,2> cx_mat22;
typedef cx_mat::fixed<3,3> cx_mat33;
typedef cx_mat::fixed<4,4> cx_mat44;
typedef cx_mat::fixed<5,5> cx_mat55;
typedef cx_mat::fixed<6,6> cx_mat66;
typedef cx_mat::fixed<7,7> cx_mat77;
typedef cx_mat::fixed<8,8> cx_mat88;
typedef cx_mat::fixed<9,9> cx_mat99;typedef vec::fixed<2> vec2;
typedef vec::fixed<3> vec3;
typedef vec::fixed<4> vec4;
typedef vec::fixed<5> vec5;
typedef vec::fixed<6> vec6;
typedef vec::fixed<7> vec7;
typedef vec::fixed<8> vec8;
typedef vec::fixed<9> vec9;typedef cx_vec::fixed<2> cx_vec2;
typedef cx_vec::fixed<3> cx_vec3;
typedef cx_vec::fixed<4> cx_vec4;
typedef cx_vec::fixed<5> cx_vec5;
typedef cx_vec::fixed<6> cx_vec6;
typedef cx_vec::fixed<7> cx_vec7;
typedef cx_vec::fixed<8> cx_vec8;
typedef cx_vec::fixed<9> cx_vec9;

常用接口

打印:

.print() 
.print( header ) .print( stream ) 
.print( stream, header )

构造函数:

//构造函数
inline Mat();   //指定Mat行列,元素默认未初始化
inline explicit Mat(const uword in_rows, const uword in_cols);//以arma::size()方式获得的行列信息作为参数
inline explicit Mat(const SizeMat& s);//初始化设定矩阵大小同时用f方式填充
template<typename fill_type> inline Mat(const uword in_rows, const uword in_cols, const fill::fill_class<fill_type>& f);//以arma::size()方式获得的行列信息作为参数,同时用f方式填充
template<typename fill_type> inline Mat(const SizeMat& s, const fill::fill_class<fill_type>& f);//以文本作为输入,eg.”1 2;3 4;”就是用来新建一个矩阵的,空格表示不同元素,分号代表换行
inline Mat(const char* text);
inline Mat& operator=(const char* text);
inline Mat(const std::string& text);
inline Mat& operator=(const std::string& text);//以STL的vector作为输入
inline Mat(const std::vector<eT>& x);
inline Mat& operator=(const std::vector<eT>& x);//复制构造函数
inline Mat(const Mat& m);//此处subview是用过切片(获取子矩阵)得到的,这个在后面会讲到
inline Mat(cons::subview<eT>& X);

矩阵运算:

mat P = A + B;
mat Q = A - B;
mat R = -B;
mat S = A / 123.0;
mat T = A % B; //dot
mat U = A * C;

转置与共轭:

Eg.
mat A = randu<mat>(4,5);
mat B = A.t();  //转置
Eg.
cx_mat X = randu<cx_mat>(5,5);
cx_mat Y = conj(X); //共轭

切片:

X.col( col_number ) //取行
X.row( row_number ) //取列X.cols( first_col, last_col )
X.rows( first_row, last_row )

http://chatgpt.dhexx.cn/article/85wMYHAe.shtml

相关文章

C++中armadillo矩阵库使用说明

在http://blog.csdn.net/piaoxuezhong/article/details/58055709博文中介绍了eigen矩阵库的使用&#xff0c;这里介绍另一种矩阵库&#xff1a;armadillo~ Armadillo&#xff1a;C下的Matlab替代品 armadillo是目前使用比较广的C矩阵运算库之一&#xff0c;许多Matlab的矩阵操…

armadillo库安装教程

目录 armadillo库功能介绍 armadillo库安装 vs中添加步骤 测试 armadillo库功能介绍 在c编程中&#xff0c;我们在进行一些算法运算经常会面对矩阵计算&#xff0c;c的标准库中是没有关于矩阵运算的库的&#xff0c;在面对矩阵计算我们只能自己编写相关代码进行计算&#xf…

armadillo使用,armadillo提高编译效率和速度

Armadillo是一个全面的、基于模板的 C 线性代数库&#xff0c;设计有 LAPACK 和 ATLAS 库的替代接口。 armadillo使用工具旨在提供速度和易用性&#xff0c;以及类似于 Matlab 的熟悉语法(或 API)。 armadillo使用允许您编写可以集成到组件或应用程序中的各种类型的数学函数。它…

C++ Armadillo矩阵库的安装与基本用法

文章目录 Armadillo安装入门案例直接赋值切片常用函数 Armadillo 安装 Armadillo是一个具有Matlab风格的线性代数包。下载之后解压到任意文件夹&#xff0c;然后对VS工程进行设置。 菜单栏生成->配置管理器&#xff0c;将平台改为x64右键项目名称->属性(快捷键ShiftF4…

一个常见的大数据平台架构

这是一个典型的大数据架构&#xff0c;且对架构进行了「分层」&#xff0c;分为「数据源层」、「数据传输层」、「数据存储层」、「编程模型层」和「数据分析层」&#xff0c;如果继续往上走的话&#xff0c;还有「数据可视化层」和「数据应用层」。

大数据平台架构实践

说明 本篇博客整理自参考内容&#xff0c;完整内容请查看原文章&#xff1b; 技术选型 MOLAP 与Druid相类似的实时数据分析工具&#xff0c;还有Linkedln的Pinot和eBay的Kylin&#xff0c;它们都是基于Java开发的。Druid相对比较轻量级&#xff0c;用的人也多&#xff0c;毕…

网易大数据平台架构实践分享!

随着网易云音乐、新闻、考拉、严选等互联网业务的快速发展&#xff0c;网易开始加速大数据平台建设&#xff0c;以提高数据获取速度&#xff0c;提升数据分析效率&#xff0c;更快发挥数据价值。 本次演讲主要分享网易如何围绕和改造开源技术&#xff0c;以产品化思维打造网易自…

详解大数据平台架构

目录: 什么是大数据 Hadoop介绍-HDFS、MR、Hbase 大数据平台应用举例-腾讯 公司的大数据平台架构 “就像望远镜让我们能够感受宇宙,显微镜让我们能够观测微生物一样,大数据正在改变我们的生活以及理解世界的方式……”。 大数据的4V特征 公司的“大数据” 随着公司业…

京东金融大数据平台架构(附82页PPT)

公众号推文规则变了&#xff0c;点击上方 "数据社", 设为星标 后台回复【加群】&#xff0c;申请加入数据学习交流群 大家好&#xff0c;我是一哥&#xff0c;给大家分享一下京东金融大数据分析平台总体架构介绍&#xff0c;废话不说&#xff0c;干货收藏吧&#xff…

大数据平台架构设计探究

本文首发于 vivo互联网技术 微信公众号 链接&#xff1a;https://mp.weixin.qq.com/s/npRRRDqNUHNjbybliFxOxA 作者&#xff1a;刘延江 近年来&#xff0c;随着IT技术与大数据、机器学习、算法方向的不断发展&#xff0c;越来越多的企业都意识到了数据存在的价值&#xff0c;将…

乡村振兴大数据平台架构方案(附下载)

迎加入星球下载所有资料&#xff0c;转发朋友圈截图回复666亦可下载 加入星球&#xff0c;好资料一直有 推荐阅读&#xff1a; 世界的真实格局分析&#xff0c;地球人类社会底层运行原理 不是你需要中台&#xff0c;而是一名合格的架构师&#xff08;附各大厂中台建设PPT&#…

大数据平台架构+ETL

1 ETL&#xff0c;Extraction-Trasformation-Loading&#xff0c;即数据读取&#xff0c;转换&#xff0c;装载的过程&#xff0c;是构建数据仓库的重要环节。 ETL是将业务系统的数据经过抽取&#xff0c;清洗转换之后加载到数据仓库的过程&#xff0c;目的是将企业中的额分散的…

百度、阿里、腾讯平台架构都熟悉,小米大数据平台架构OLAP架构演进是否了解

阿里、百度、腾讯的大数据平台架构都有很多地方有介绍了&#xff0c;接下来给大家深入了解小米大数据平台架构OLAP架构演进 全网最详细的Hadoop文章系列&#xff0c;强烈建议收藏加关注&#xff01; 2021大数据领域优质创作博客&#xff0c;带你从入门到精通&#xff0c;该博客…

大数据平台架构的层次划分

1. 数据源层&#xff1a;包括传统的数据库&#xff0c;数据仓库&#xff0c;分布式数据库&#xff0c;NOSQL数据库&#xff0c;半结构化数据&#xff0c;无结构化数据&#xff0c;爬虫&#xff0c;日志系统等&#xff0c;是大数据平台的数据产生机构。 2. 数据整理层&#xff…

常见的大数据平台架构设计思路

近年来&#xff0c;随着IT技术与大数据、机器学习、算法方向的不断发展&#xff0c;越来越多的企业都意识到了数据存在的价值&#xff0c;将数据作为自身宝贵的资产进行管理&#xff0c;利用大数据和机器学习能力去挖掘、识别、利用数据资产。如果缺乏有效的数据整体架构设计或…

大数据平台架构浅析——以讯飞大数据平台Odeon为例

文章目录 大数据平台架构解析——以讯飞大数据平台Odeon为例定义功能数据采集数据开发数据分析数据编程补充 大数据平台架构解析——以讯飞大数据平台Odeon为例 定义 Odeon大数据平台以全图形化Web操作的形式为用户提供一站式的大数据能力&#xff1a;包括数据采集、任务编排、…

浅谈大数据平台架构设计

全文共3735个字&#xff0c;建议8分钟阅读 近年来&#xff0c;随着IT技术与大数据、机器学习、算法方向的不断发展&#xff0c;越来越多的企业都意识到了数据存在的价值&#xff0c;将数据作为自身宝贵的资产进行管理&#xff0c;利用大数据和机器学习能力去挖掘、识别、利用数…

大数据平台架构包含哪些功能

为了满足企业对于数据的各种需求&#xff0c;需要基于大数据技术构建大数据平台。结合大数据在企业的实际应用场景&#xff0c;如下图所示的大数据平台架构所示&#xff1a; 最上层为应用提供数据服务与可视化&#xff0c;解决企业实际问题。第2层是大数据处理核心&#xff0c;…

大数据平台层级架构图

主流数据平台架构 一般包含三个层级&#xff0c;ODS层、数据仓库层、数据应用层。 业务系统的操作和日志数据抽取到ODS层&#xff0c;ODS的数据经过ETL过程&#xff08;抽取Extraction&#xff0c;转化Transformation&#xff0c;加载Loading&#xff09;进入数据仓库&#xff…

大数据平台架构

1 大数据组件架构 大数据架构分为:数据采集,传输,存储,调度和处理这五个部分.其中任务定期执行和任务分配,分别使用Azkaban和Zookeeper&#xff0c;大数据平台整体架构如图1所示&#xff0c;由图1可知&#xff0c;大数据平台的基础是服务器&#xff08;硬件&#xff09;&#…