Cpp类似Matlab的矩阵运算库Armadillo

在C++中数值计算需要对矩阵进行操作,今天就介绍一款类似Matlab的矩阵运算库Armadillo。真的是太美了。下面介绍Ubuntu14.04下的安装及其使用。

1 安装

按照源码中的README.txt,安装步骤分别如下:

  • 需要有g++编译器,这就不用说了。
  • 需要安装cmake,可执行sudo apt-get install cmake
  • 推荐安装 OpenBLAS,LAPACK,SuperLU,ARPACK;分别执行sudo apt-get install libopenblas-dev,sudo apt-get install liblapacke-dev,sudo apt-get install libsuperlu3-dev,sudo apt-get install libarpack2-dev,也可以从源码编译安装。
  • 执行编译
    • cmake .
    • make
  • 安装sudo make install [DESTDIR=my_usr_dir]
  • 系统环境变量配置,将lib文件和include文件加入LD_LIBRARY_PATH和CPLUSE_INCLUDE_PATH。

2 开撸实例

2.1 基本的数据类型

  • 需要包含头文件和命名空间#include ;using namespace arma;
  • vec(n_elem, fill_type)声明一个n_elem个元素的列向量,向量的初值由fill_type决定。
  • rowvec(n_elem, fill_type)声明行向量,与列向量类似。
  • mat(n_rows, n_cols, fill_type)声明一个n_rows行n_cols列的矩阵,并用fill_type类型数据填充,fill_type可以是全0数据,全1数据,单位阵数据,[0,1]均匀分布的数据,标准高斯分布的数据,也可以不设置初值。
  • cube(n_rows, n_cols, n_slices, fill_type)声明3维矩阵,与mat类似。
  • field(n_rows, n_cols),field(n_rows, n_cols, n_slices)存储object_type类型的对象数组。

2.2 数组的成员函数和变量

  • n_rows:数组的行数
  • n_cols:数组的列数
  • n_elem:数组中所有单元的个数
  • n_slices:3D矩阵的分片数
  • n_nonzero:SpMat中的非零元素个数

2.3 基本的矩阵操作

  • 访问单个元素:(n),.at(n)访问向量的第n个元素,(i,j),.at(i,j)访问二维数组的第i,j个元素,(i,j,k),.at(i,j,k)访问3维数组的第i,j,k个元素。
  • 访问矩阵分片
    • 访问连续分片
      • X.col( col_number )取X的第col_number列
      • X.row( row_number )取X的第row_number行
      • X.cols( first_col, last_col )取X的第first_col到last_col列的数据
      • X.rows( first_row, last_row )取X的第first_row到last_row行的数据
      • X.submat( first_row, first_col, last_row, last_col )取X的第first_row到last_row行,第first_col到last_col列的数据
    • 访问不连续分片数据
      • X( vector_of_indices ),X.elem( vector_of_indices )访问vector_of_indices中存储的索引位置的X元素
      • X.cols( vector_of_column_indices )访问v你ector_of_column_indices存储的列所以
      • X.rows( vector_of_row_indices )
      • X.submat( vector_of_row_indices, vector_of_column_indices )
      • X( vector_of_row_indices, vector_of_column_indices )

2.4 数学计算

矩阵计算中常用的矩阵求逆,矩阵求伪逆,QR分解等可用inv,pinv,lu函数。还有其它各种函数方法,相见主页http://arma.sourceforge.net/docs.html#dot

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值