# How to use 'diag_matrix' function to creat a diagonal matrix using a certain row of another matrix?

Hello everyone,

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

``````matrix[n,p] X;
``````

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,]');
``````
2 Likes

thanks!