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 创建
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大小
Armadillo之行向量(row vector)
时间: 2024-10-11 16:26:43