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() or trans(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 << endl or
M.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) = A or
F(1,0) = B | 
fields store arbitrary objects, such as matrices |