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大小