Skip to content

Matrix

Create

Action Code Details
Declare N by M matrix
matrix[N,M] m;
Declare constrained matrix
matrix<lower=0, upper=1>[N,M] m;
Declare matrix with values
matrix[3,2] m = [ [1, 2], [3, 4], [5, 6] ];
Declare matrix filled with zeros
matrix[N,M] m = rep_matrix(0, N, M);
Declare matrix from series of row vectors
matrix[3,M] m = [ rv1, rv2, rv3 ];
Declare matrix from series of column vectors
matrix[N,3] m = [ v1', v2', v3']';
Create N by M matrix from replicated column vector of length N
rep_matrix(v, M)
Create N by M matrix from replicated row vector of length N
rep_matrix(v, N)
Declare K by K covariance matrix
cov_matrix[K] Omega;
Declare K by K correlation matrix
corr_matrix[K] Sigma;
Declare K by K Cholesky factors of covariance matrix
cholesky_factor_cov[K] L;
Declare M by N Cholesky factors of covariance matrix
cholesky_factor_cov[M,N] L;
Declare Cholesky factors of correlation matrix
cholesky_factor_corr[K] L;

Properties

Action Code Details
Number of elements (NxM)
num_elements(m)
Dimension sizes
dims(m)
Number of columns (M)
cols(m)
Number of rows (N)
rows(m)

Extract

Action Code Details
Element at row i, column j
m[i,j]
Extract _j_th column
m[, j]
Extract _j_th column
col(m, j)
Extract _j_th column as a matrix
block(m, 1, j, N, 1)
Extract _i_th row
m[i, ]
Accessing column-wise is much faster than row-wise
Extract _i_th row
row(m, i)
Extract _i_th row as a matrix
block(m, i, 1, 1, M)
Diagonal
diagonal(m)

Derive

For many useful functions, see https://jrnold.github.io/ssmodels-in-stan/stan-functions.html

Map

Action Code Details
Inverse
inverse(m)
Sum elementwise
m + m2
Multiply elementwise
m .* m2
Column-wise vector multiplication
rep_matrix(v, N) .* m
Row-wise vector multiplication
rep_matrix(v', M) .* m

Grow

Action Code Details
Append vector as column
append_col(m, v)
Append vector as row
append_row(m, v)

Shrink

Action Code Details
Slice columns
m[, 2:3]
Slice rows
m[2:3, ]
Submatrix by slicing rows and columns
m[1:2, 3:4]
Submatrix by start row and columns with length
block(m, rowstart, colstart, rowN, colN)

Reshape

Change dimensions or form of the matrix

Action Code Details
Cross-product (post-multiply)
tcrossprod(m)
m * m'
Cross-product (pre-multiply)
crossprod(m)
m' * m
Quadratic form with matrix
quad_form(m, m2)
m2' * m * m2
Quadratic form with vector
quad_form(m, v)
v' * m * v

Computations

Action Code Details
Column-wise self dot product
columns_dot_self(m)
Row-wise self dot product
rows_dot_self(m)
Dot product between columns
columns_dot_product(m, m2)
vector result
Dot product between rows
rows_dot_product(m, m2)
vector result
QR decomposition
Q = qr_Q(m);
R = qr_R(m);
Thin QR decomposition
Q = qr_thin_Q(m) * sqrt(N - 1);
R = qr_thin_R(m) / sqrt(N - 1);

Convert

Action Code Details
To vector
to_vector(m)