Syntax comparison for MATLAB/Octave users (original) (raw)
Matlab/Octave syntax and corresponding Armadillo syntax
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(k,k) | |
M = ones(k) | M = ones(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 F(2,1), F(0,0) = A or F(1,0) = B | fields store arbitrary objects, such as matrices |