Armadillo之列向量(column vector)

1 列向量类:定义Col<type>

2 常用的typedef

vec = colvec = Col<double>
fvec =  fcolvec= Col<float>
cx_vec =  cx_colvec  =  Col<cx_double>
cx_fvec = cx_fcolvec =  Col<cx_float>
uvec =  ucolvec =  Col<uword>
ivec =  icolvec =  Col<sword>

3 创建

vec v1 = "1,2,3,4";
vec v2 = initializer_list < double > {1, 2, 3, 4};

vec v3; //向量未初始化
v3 << 1 << 2 << 3 << 4;

vec v4(v1);
double *elem = new double[4]{1, 2, 3, 4};
vec v5(elem, 4); //这个是从elem指针指向的内存中复制元素,所以是安全的
vec v6(elem, 4, false);
//这个是直接使用elem指针所指向的内存,所以要保证elem所指向的内存在v6的生命期内有效且不被它人使用
//而且向量的大小不能被直接或间接改变
vec v7(elem, 4, false,false);
//这个是直接使用elem指针所指向的内存,所以要保证elem所指向的内存在v6的生命期内有效且不被它人使用
//而且向量的大小可以重新设定,大小重新设定后就不使用elem指向的内存了

vector<double> e = { 1, 2, 3, 4 };
vec v8(e);
mat m1 = "1;2;3;4;";
vec v9(m1); //如果m1不是列向量,将抛出std::logic_error异常
//以上v1,v2...v9都是相同的列向量,都为(1,2,3,4)T

vec v10 = vec::fixed<4>();
//创建一个固定大小的向量,并且只要创建后向量的大小(元素的个数)不可以改变。
//使用固定大小的向量运算速度快于动态分配的
vec v11 = vec::fixed<4>("1,2,3,4");
vec v12 = vec::fixed<4>();
v12 << 1 << 2 << 3 << 4;
//...以此类推,之前使用的几种构造函数都可以使用

//特别要指出向量的初始的填充构造函数
vec v13(4); //这个创建一个4个元素的向量
vec v14(4, fill::zeros); //创建一个4个元素的向量,每个元素都是0
vec v15(4, fill::ones); //创建一个4个元素的向量,每个元素都是1
vec v16(4, fill::randu); //创建一个4个元素的向量,每个元素是[0,1]之间的随机数
vec v17(4, fill::randn); //创建一个4个元素的向量,每个元素都是从一组平均值为0,方差为1的呈正态/高斯分布的随机数

 4 列向量的操作

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


你可能感兴趣的:(线性代数,Armadillo)