I want to use the function ‘diag_matrix’ to create a diagonal matrix by indexing one row from a matrix, for example, I have a matrix
and I want to create n diagonal matrix (with a dimension of p*p) that uses each row of the matrix X as diagonal entries for computing such as for i in (1:n)
diag_matrix(X [i,]) ;
but it seems the stan did not allow the above syntax. Anyway to solve this? Thanks!
You can use the
row(matrix, int) => row_vector which extracts a row from a matrix.
Thanks! so for my case, can I use ‘diag_matrix (row(X, i))’ to extract for all the ith (for i in 1:n) row to make diagonal matrices?
There’s no difference between
row(X, i) and
X[i,], I think. Looking at the error message
diag_matrix wants a column vector and not a row vector. This seems like an arbitrary limitation; most functions in Stan can handle both. Anyway, the transpose operator
' turns a row into a column and vice versa.
matrix[p,p] y = diag_matrix(X[i,]');