1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
   | #include <iostream> #include <armadillo>
  using namespace std; using namespace arma;
  // Armadillo documentation is available at: // http://arma.sourceforge.net/docs.html
  // NOTE: the C++11 "auto" keyword is not recommended for use with Armadillo objects and functions
  int main(int argc, char** argv)   {   //cout << amradillo -v << endl;   cout << "Armadillo version: " << arma_version::as_string() << endl;      // construct a matrix according to given size and form of element initialisation   mat A(2,3,fill::zeros);      // .n_rows and .n_cols are read only   cout << "A.n_rows: " << A.n_rows << endl;   cout << "A.n_cols: " << A.n_cols << endl;      A(1,2) = 456.0;  // access an element (indexing starts at 0)   A.print("A:");      A = 5.0;         // scalars are treated as a 1x1 matrix   A.print("A:");      A.set_size(4,5); // change the size (data is not preserved)      A.fill(5.0);     // set all elements to a specific value   A.print("A:");      A = { { 0.165300, 0.454037, 0.995795, 0.124098, 0.047084 },         { 0.688782, 0.036549, 0.552848, 0.937664, 0.866401 },         { 0.348740, 0.479388, 0.506228, 0.145673, 0.491547 },         { 0.148678, 0.682258, 0.571154, 0.874724, 0.444632 },         { 0.245726, 0.595218, 0.409327, 0.367827, 0.385736 } };            A.print("A:");      // determinant   cout << "det(A): " << det(A) << endl;      // inverse   cout << "inv(A): " << endl << inv(A) << endl;      // save matrix as a text file   A.save("A.txt", raw_ascii);      // load from file   mat B;   B.load("A.txt");      // submatrices   cout << "B( span(0,2), span(3,4) ):" << endl << B( span(0,2), span(3,4) ) << endl;      cout << "B( 0,3, size(3,2) ):" << endl << B( 0,3, size(3,2) ) << endl;      cout << "B.row(0): " << endl << B.row(0) << endl;      cout << "B.col(1): " << endl << B.col(1) << endl;      // transpose   cout << "B.t(): " << endl << B.t() << endl;      // maximum from each column (traverse along rows)   cout << "max(B): " << endl << max(B) << endl;      // maximum from each row (traverse along columns)   cout << "max(B,1): " << endl << max(B,1) << endl;      // maximum value in B   cout << "max(max(B)) = " << max(max(B)) << endl;      // sum of each column (traverse along rows)   cout << "sum(B): " << endl << sum(B) << endl;      // sum of each row (traverse along columns)   cout << "sum(B,1) =" << endl << sum(B,1) << endl;      // sum of all elements   cout << "accu(B): " << accu(B) << endl;      // trace = sum along diagonal   cout << "trace(B): " << trace(B) << endl;      // generate the identity matrix   mat C = eye<mat>(4,4);      // random matrix with values uniformly distributed in the [0,1] interval   mat D = randu<mat>(4,4);   D.print("D:");      // row vectors are treated like a matrix with one row   rowvec r = { 0.59119, 0.77321, 0.60275, 0.35887, 0.51683 };   r.print("r:");      // column vectors are treated like a matrix with one column   vec q = { 0.14333, 0.59478, 0.14481, 0.58558, 0.60809 };   q.print("q:");      // convert matrix to vector; data in matrices is stored column-by-column   vec v = vectorise(A);   v.print("v:");      // dot or inner product   cout << "as_scalar(r*q): " << as_scalar(r*q) << endl;      // outer product   cout << "q*r: " << endl << q*r << endl;      // multiply-and-accumulate operation (no temporary matrices are created)   cout << "accu(A % B) = " << accu(A % B) << endl;      // example of a compound operation   B += 2.0 * A.t();   B.print("B:");      // imat specifies an integer matrix   imat AA = { { 1, 2, 3 },               { 4, 5, 6 },               { 7, 8, 9 } };      imat BB = { { 3, 2, 1 },                { 6, 5, 4 },               { 9, 8, 7 } };      // comparison of matrices (element-wise); output of a relational operator is a umat   umat ZZ = (AA >= BB);   ZZ.print("ZZ:");      // cubes ("3D matrices")   cube Q( B.n_rows, B.n_cols, 2 );      Q.slice(0) = B;   Q.slice(1) = 2.0 * B;      Q.print("Q:");      // 2D field of matrices; 3D fields are also supported   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     }      F.print("F:");   getchar();   return 0;   }
   |