Armadillo之行向量(row vector)

1 行向量类:定义Row<type>安全

2 经常使用的typedef函数

rowvec = Row<double>
frowvec = Row<float>
cx_rowvec = Row<cx_double>
cx_frowvec = Row<cx_float>
urowvec = Row<uword>
irowvec = Row<sword>

3 建立spa

rowvec r1 = "1,2,3,4";
rowvec r2 = initializer_list<double>{ 1, 2, 3, 4 };
rowvec r3; //行向量未初始化
r3 << 1 << 2 << 3 << 4;
rowvec r4(r1);
double *elem = new double[4]{1, 2, 3, 4};
rowvec r5(elem, 4); //这个是从elem指针指向的内存中复制元素,因此是安全的
rowvec r6(elem, 4, false);
//这个是直接使用elem指针所指向的内存,因此要保证elem所指向的内存在v6的生命期内有效且不被它人使用
//并且向量的大小不能被直接或间接改变
rowvec r7(elem, 4, false, false);
//这个是直接使用elem指针所指向的内存,因此要保证elem所指向的内存在v6的生命期内有效且不被它人使用
//并且向量的大小能够从新设定,大小从新设定后就不使用elem指向的内存了
vector<double> e = { 1, 2, 3, 4 };
rowvec r8(e);
mat m = "1,2,3,4;";
rowvec r9(m); //若是m不是行向量,将抛出std::logic_error异常
//以上r1,r2...r9都是相同的行向量,都为(1,2,3,4)
 
rowvec r10 = rowvec::fixed<4>();
//建立一个固定大小的行向量,而且只要建立后向量的大小(元素的个数)不能够改变。
//使用固定大小的行向量运算速度快于动态分配的
rowvec r11 = rowvec::fixed<4>("1,2,3,4");
rowvec r12 = rowvec::fixed<4>();
r12 << 1 << 2 << 3 << 4;
//...以此类推,以前使用的几种构造函数均可以使用
//特别要指出向量的初始的填充构造函数
rowvec v13(4); //这个建立一个4个元素的行向量
rowvec v14(4, fill::zeros); //建立一个4个元素的行向量,每一个元素都是0
rowvec v15(4, fill::ones); //建立一个4个元素的行向量,每一个元素都是1
rowvec v16(4, fill::randu); //建立一个4个元素的行向量,每一个元素是[0,1]之间的随机数
rowvec v17(4, fill::randn); //建立一个4个元素的行向量,每一个元素都是从一组平均值为0,方差为1的呈正态/高斯分布的随机数

4 行向量的操做指针

v1.n_cols()  //列数
v1.n_rows()  //行数,恒为1
v1(0)        //访问第0个元素,会检查是否越界,越界会抛出std::logic_error异常
v1[0]    //访问第0个元素,不检查是否越界
v1.clear();  //清空向量,向量变为0*1大小
相关文章
相关标签/搜索