# Commutation matrix

In mathematics, especially in linear algebra and matrix theory, the commutation matrix is used for transforming the vectorized form of a matrix into the vectorized form of its transpose. Specifically, the commutation matrix K$^{(m,n)}$ is the nm × mn permutation matrix which, for any m × n matrix A, transforms vec(A) into vec(A$^T$):
    K$^{(m,n)}$ vec(A) = vec(A$^T$) .
Here vec(A) is the mn × 1 column vector obtain by stacking the columns of A on top of one another:
    $\operatorname {vec} (\mathbf {A} )=[\mathbf {A} _{1,1},\ldots ,\mathbf {A} _{m,1},\mathbf {A} _{1,2},\ldots ,\mathbf {A} _{m,2},\ldots ,\mathbf {A} _{1,n},\ldots ,\mathbf {A} _{m,n}]^{\mathrm {T} }$
where A = [A$_{i,j}$]. In other words, vec(A) is the vector obtained by vectorizing A in column-major order. Similarly, vec(A$^T$) is the vector obtaining by vectorizing A in row-major order. The cycles and other properties of this permutation have been heavily studied for in-place matrix transposition algorithms.
In the context of quantum information theory, the commutation matrix is sometimes referred to as the swap matrix or swap operator

## Properties

* The commutation matrix is a special type of permutation matrix, and is therefore orthogonal. In particular, K$^{(m,n)}$ is equal to $\mathbf {P} _{\pi }$, where $\pi$ is the permutation over $\{1,\dots ,mn\}$ for which
       $\pi (i+m(j-1))=j+n(i-1),\quad i=1,\dots ,m,\quad j=1,\dots ,n.$
* The determinant of K$^{(m,n)}$ is $(-1)^{{\frac {1}{4}}n(n-1)m(m-1)}$.
* Replacing A with A$^T$ in the definition of the commutation matrix shows that K$^{(m,n)}$ = (K$^{(n,m)}$)$^T$. Therefore, in the special case of m = n the commutation matrix is an involution and symmetric.
* The main use of the commutation matrix, and the source of its name, is to commute the Kronecker product: for every m × n matrix A and every r × q matrix B,
       $\mathbf {K} ^{(r,m)}(\mathbf {A} \otimes \mathbf {B} )\mathbf {K} ^{(n,q)}=\mathbf {B} \otimes \mathbf {A} .$
    This property is often used in developing the higher order statistics of Wishart covariance matrices.
* The case of n=q=1 for the above equation states that for any column vectors v,w of sizes m,r respectively,
       $\mathbf {K} ^{(r,m)}(\mathbf {v} \otimes \mathbf {w} )=\mathbf {w} \otimes \mathbf {v} .$
    This property is the reason that this matrix is referred to as the "swap operator" in the context of quantum information theory.
* Two explicit forms for the commutation matrix are as follows: if e$_{r,j}$ denotes the j-th canonical vector of dimension r (i.e. the vector with 1 in the j-th coordinate and 0 elsewhere) then
       $\mathbf {K} ^{(r,m)}=\sum _{i=1}^{r}\sum _{j=1}^{m}\left(\mathbf {e} _{r,i}{\mathbf {e} _{m,j}}^{\mathrm {T} }\right)\otimes \left(\mathbf {e} _{m,j}{\mathbf {e} _{r,i}}^{\mathrm {T} }\right)=\sum _{i=1}^{r}\sum _{j=1}^{m}\left(\mathbf {e} _{r,i}\otimes \mathbf {e} _{m,j}\right)\left(\mathbf {e} _{m,j}\otimes \mathbf {e} _{r,i}\right)^{\mathrm {T} }.$
* The commutation matrix may be expressed as the following block matrix:
       $\mathbf {K} ^{(m,n)}={\begin{bmatrix}\mathbf {K} _{1,1}&\cdots &\mathbf {K} _{1,n}\\\vdots &\ddots &\vdots \\\mathbf {K} _{m,1}&\cdots &\mathbf {K} _{m,n},\end{bmatrix}},$
    Where the p,q entry of n x m block-matrix K$_{i,j}$ is given by
       $\mathbf {K} _{ij}(p,q)={\begin{cases}1&i=q{\text{ and }}j=p,\\0&{\text{otherwise}}.\end{cases}}$
    For example,
       $\mathbf {K} ^{(3,4)}=\left[{\begin{array}{ccc|ccc|ccc|ccc}1&0&0&0&0&0&0&0&0&0&0&0\\0&0&0&1&0&0&0&0&0&0&0&0\\0&0&0&0&0&0&1&0&0&0&0&0\\0&0&0&0&0&0&0&0&0&1&0&0\\\hline 0&1&0&0&0&0&0&0&0&0&0&0\\0&0&0&0&1&0&0&0&0&0&0&0\\0&0&0&0&0&0&0&1&0&0&0&0\\0&0&0&0&0&0&0&0&0&0&1&0\\\hline 0&0&1&0&0&0&0&0&0&0&0&0\\0&0&0&0&0&1&0&0&0&0&0&0\\0&0&0&0&0&0&0&0&1&0&0&0\\0&0&0&0&0&0&0&0&0&0&0&1\end{array}}\right].$

## Code

For both square and rectangular matrices of m rows and n columns, the commutation matrix can be generated by the code below.

### Python

Alternatively, a version without imports:

### R
## Example

Let $A$ denote the following $3\times 2$ matrix:
    $A={\begin{bmatrix}1&4\\2&5\\3&6\\\end{bmatrix}}.$
$A$ has the following column-major and row-major vectorizations (respectively):
    $\mathbf {v} _{\text{col}}=\operatorname {vec} (A)={\begin{bmatrix}1\\2\\3\\4\\5\\6\\\end{bmatrix}},\quad \mathbf {v} _{\text{row}}=\operatorname {vec} (A^{\mathrm {T} })={\begin{bmatrix}1\\4\\2\\5\\3\\6\\\end{bmatrix}}.$
The associated commutation matrix is
    $K=\mathbf {K} ^{(3,2)}={\begin{bmatrix}1&\cdot &\cdot &\cdot &\cdot &\cdot \\\cdot &\cdot &\cdot &1&\cdot &\cdot \\\cdot &1&\cdot &\cdot &\cdot &\cdot \\\cdot &\cdot &\cdot &\cdot &1&\cdot \\\cdot &\cdot &1&\cdot &\cdot &\cdot \\\cdot &\cdot &\cdot &\cdot &\cdot &1\\\end{bmatrix}},$
(where each $\cdot$ denotes a zero). As expected, the following holds:
    $K^{\mathrm {T} }K=KK^{\mathrm {T} }=\mathbf {I} _{6}$
    $K\mathbf {v} _{\text{col}}=\mathbf {v} _{\text{row}}$