I would like to sample from a matrix-Gaussian variable (not multivariate normal). so basically, let $X \in \mathbb{R}^{m\times n}$ be a random matrix distributed according to the matrix-normal law. Let it be zero mean. We can denote this distribution with, $${vec}(X) \sim \mathcal{N}(0,Q_1 \otimes Q_2)$$ where $vec$ is the vectorization operator, $0$ is the $m\times n$ all zero matrix. $\dim(Q_1) = n\times n$ and $\dim(Q_2) = m\times m$.

The obvious way to sample this in general of course is to sample this vectorized object and reshaping it. But this requires to compute this Kronecker product which can certainly be burdensome.

My problem: I would like to sample the matrix directly using $Q_1$ and $Q_2$ without computing the Kronecker product.

Any help is greatly appreciated!


See the section Drawing values from the distribution of the wikipage https://en.wikipedia.org/wiki/Matrix_normal_distribution

P.S.: To obtain $X \sim \mathcal{N}(0, I \otimes I)$, you only need to generate $n$ independent $m$-variate normal random vectors, then stack them into an $n \times m$ matrix.


We're looking for long answers that provide some explanation and context. Don't just give a one-line answer; explain why your answer is right, ideally with citations. Answers that don't include explanations may be removed.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy