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(AT):
K(m,n) vec(A) = vec(AT) .Here vec(A) is the mn × 1 column vector obtain by stacking the columns of A on top of one another:
vec ( A ) = [ A 1 , 1 , … , A m , 1 , A 1 , 2 , … , A m , 2 , … , A 1 , n , … , A m , n ] T {\displaystyle \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 = [Ai,j]. In other words, vec(A) is the vector obtained by vectorizing A in column-major order. Similarly, vec(AT) 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 P π {\displaystyle \mathbf {P} _{\pi }} , where π {\displaystyle \pi } is the permutation over { 1 , … , m n } {\displaystyle \{1,\dots ,mn\}} for which
- The determinant of K(m,n) is ( − 1 ) 1 4 n ( n − 1 ) m ( m − 1 ) {\displaystyle (-1)^{{\frac {1}{4}}n(n-1)m(m-1)}} .
- Replacing A with AT 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,
- The case of n=q=1 for the above equation states that for any column vectors v,w of sizes m,r respectively,
- Two explicit forms for the commutation matrix are as follows: if er,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
- The commutation matrix may be expressed as the following block matrix:
Code
For both square and rectangular matrices of m rows and n columns, the commutation matrix can be generated by the code below.
Python
import numpy as np def comm_mat(m, n): # determine permutation applied by K w = np.arange(m * n).reshape((m, n), order="F").T.ravel(order="F") # apply this permutation to the rows (i.e. to each column) of identity matrix and return result return np.eye(m * n)[w, :]Alternatively, a version without imports:
# Kronecker delta def delta(i, j): return int(i == j) def comm_mat(m, n): # determine permutation applied by K v = [m * j + i for i in range(m) for j in range(n)] # apply this permutation to the rows (i.e. to each column) of identity matrix I = [[delta(i, j) for j in range(m * n)] for i in range(m * n)] return [I[i] for i in v]MATLAB
function P = com_mat(m, n) % determine permutation applied by K A = reshape(1:m*n, m, n); v = reshape(A', 1, []); % apply this permutation to the rows (i.e. to each column) of identity matrix P = eye(m*n); P = P(v,:);R
# Sparse matrix version comm_mat = function(m, n){ i = 1:(m * n) j = NULL for (k in 1:m) { j = c(j, m * 0:(n-1) + k) } Matrix::sparseMatrix( i = i, j = j, x = 1 ) }Example
Let A {\displaystyle A} denote the following 3 × 2 {\displaystyle 3\times 2} matrix:
A = [ 1 4 2 5 3 6 ] . {\displaystyle A={\begin{bmatrix}1&4\\2&5\\3&6\\\end{bmatrix}}.}A {\displaystyle A} has the following column-major and row-major vectorizations (respectively):
v col = vec ( A ) = [ 1 2 3 4 5 6 ] , v row = vec ( A T ) = [ 1 4 2 5 3 6 ] . {\displaystyle \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 = K ( 3 , 2 ) = [ 1 ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ 1 ⋅ ⋅ ⋅ 1 ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ 1 ⋅ ⋅ ⋅ 1 ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ 1 ] , {\displaystyle 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 ⋅ {\displaystyle \cdot } denotes a zero). As expected, the following holds:
K T K = K K T = I 6 {\displaystyle K^{\mathrm {T} }K=KK^{\mathrm {T} }=\mathbf {I} _{6}} K v col = v row {\displaystyle K\mathbf {v} _{\text{col}}=\mathbf {v} _{\text{row}}}- Jan R. Magnus and Heinz Neudecker (1988), Matrix Differential Calculus with Applications in Statistics and Econometrics, Wiley.