This vignette is adapted from the official Armadillo documentation.
The following table uses V for vectors, M
for matrices, Q for cubes and F for fields.
For operations, A, B and C denote
matrices. Because MATLAB indexes from 1 (as R does), the k-th column in
MATLAB has index k but in C++ it has index
k-1.
| Matlab/Octave | Armadillo | Notes | 
|---|---|---|
| M(1, 1) | M(0, 0) | indexing in C++ starts at 0 | 
| M(k, k) | M(k-1, k-1) | indexing in C++ starts at 0 | 
| size(M,1) | M.n_rows | read only | 
| size(M,2) | M.n_cols | read only | 
| size(Q,3) | Q.n_slices | |
| numel(A) | M.n_elem | |
| M(:, k) | M.col(k-1) | |
| M(k, :) | M.row(k) | |
| M(:, p:q) | M.cols(p, q) | |
| M(p:q, :) | M.rows(p, q) | |
| M(p:q, r:s) | M(span(p,q), span(r,s)) | |
| Q(:, :, k) | Q.slice(k) | |
| Q(:, :, t:u) | Q.slices(t, u) | |
| Q(p:q, r:s, t:u) | Q( span(p,q), span(r,s), span(t,u)) | |
| M' | M.t()ortrans(M) | matrix transpose / Hermitian transpose (for complex matrices, the conjugate of each element is taken) | 
| M = zeros(size(M)) | M.zeros() | |
| M = ones(size(M)) | M.ones() | |
| M = zeros(k) | M = zeros<mat>(k,k) | |
| M = ones(k) | M = ones<mat>(k,k) | |
| C = complex(A,B) | cx_mat C = cx_mat(A,B) | |
| A .* B | A % B | element-wise multiplication | 
| A ./ B | A / B | element-wise division | 
| A \ B | solve(A,B) | more efficient than inv(A)*B | 
| M = M + 1 | M++ | |
| M = M - 1 | M-- | |
| M = [1 2; 3 4;] | M = {{1, 2}, {3, 4}} | element initialization | 
| M = A(:) | M = vectorise(A) | |
| M = [A  B] | M = join_horiz(A,B) | |
| M = [A; B] | M = join_vert(A,B) | |
| M | cout << M << endlorM.print("M =") | |
| A = randn(2,3) | mat A = randn(2,3) | |
| B = randn(4,5) | mat B = randn(4,5) | |
| F = {A; B} | field<mat> F(2,1),F(0,0) = AorF(1,0) = B | fields store arbitrary objects, such as matrices |