c++的armadillo库语法指南
众所周知,armadillo库是一个很好的矩阵库,为了方便大家使用,给大家写了一份入门语法,可以留作使用。
初始化矩阵
mat A(2,3);
输出第n列/行
cout << "A.n_rows: " << A.n_rows << endl;
cout << "A.n_cols: " << A.n_cols << endl;
访问元素(下标为0开始)
A(1,2) = 456.0;
输出矩阵
A.print("A:");
改变矩阵大小(不保留矩阵中内容)
A.set_size(4,5);
将矩阵全部设为一个特定值
A.fill(5.0);
给矩阵一个值
vectorise(A)A << 0.165300 << 0.454037 << 0.995795 << 0.124098 << 0.047084 << endr
<< 0.688782 << 0.036549 << 0.552848 << 0.937664 << 0.866401 << endr
<< 0.348740 << 0.479388 << 0.506228 << 0.145673 << 0.491547 << endr
<< 0.148678 << 0.682258 << 0.571154 << 0.874724 << 0.444632 << endr
<< 0.245726 << 0.595218 << 0.409327 << 0.367827 << 0.385736 << endr;
行列式
det(A)
逆矩阵
inv(A)
将矩阵存为一个文件
A.save("A.txt", raw_ascii);
从文件读取矩阵
B.load("A.txt");
子矩阵
B( span(0,2), span(3,4) )
B( 0,3, size(3,2) )
B.row(0)
B.col(1)vectorise(A)
转置
B.t()
每一列中最大的值
max(B)
每一行中最大的值
max(B,1)
B中最大的值
max(max(B))
每一列之和
sum(B)
每一行之和
sum(B,1)
所有的数之和
accu(B)
矩阵的迹(对角元之和)
trace(B)
生成单元阵
eye<mat>(4,4)
生成随机阵
randu<mat>(4,4)
行向量(相当于一行的矩阵)
rowvec r;
r << 0.59119 << 0.77321 << 0.60275 << 0.35887 << 0.51683;
列向量(相当于一列的矩阵)
vec q;
q << 0.14333 << 0.59478 << 0.14481 << 0.58558 << 0.60809;
将矩阵一列一列地排列,转换成向量
vectorise(A)
内积
as_scalar(r*q)
外积
q*r
乘法累加运算(MAC)
accu(A % B)
混合运算
B += 2.0 * A.t();
整数矩阵
imat AA;
布尔矩阵和矩阵元素比较
umat ZZ = (AA >= BB);
三维矩阵(slice为第三维度)
cube Q( B.n_rows, B.n_cols, 2 );
Q.slice(0) = B;
Q.slice(1) = 2.0 * B;
矩阵域(将矩阵作为块矩阵存在一个大矩阵中)
field<mat> F(4,3);
for(uword col=0; col < F.n_cols; ++col)
for(uword row=0; row < F.n_rows; ++row)
{
F(row,col) = randu<mat>(2,3); // each element in field<mat> is a matrix
}