Commutation matrix

From testwiki
Jump to navigation Jump to search

Template:Distinguish

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(𝐀)=[𝐀1,1,,𝐀m,1,𝐀1,2,,𝐀m,2,,𝐀1,n,,𝐀m,n]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 [1]

Properties

  • The commutation matrix is a special type of permutation matrix, and is therefore orthogonal. In particular, K(m,n) is equal to 𝐏π, where π is the permutation over {1,,mn} for which
π(i+m(j1))=j+n(i1),i=1,,m,j=1,,n.
  • The determinant of K(m,n) is (1)14n(n1)m(m1).
  • Replacing A with AT in the definition of the commutation matrix shows that Template:Nowrap 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,
𝐊(r,m)(𝐀𝐁)𝐊(n,q)=𝐁𝐀.
This property is often used in developing the higher order statistics of Wishart covariance matrices.[2]
  • The case of n=q=1 for the above equation states that for any column vectors v,w of sizes m,r respectively,
𝐊(r,m)(𝐯𝐰)=𝐰𝐯.
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 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
𝐊(r,m)=i=1rj=1m(𝐞r,i𝐞m,jT)(𝐞m,j𝐞r,iT)=i=1rj=1m(𝐞r,i𝐞m,j)(𝐞m,j𝐞r,i)T.
  • The commutation matrix may be expressed as the following block matrix:
𝐊(m,n)=[𝐊1,1𝐊1,n𝐊m,1𝐊m,n,],
Where the p,q entry of n x m block-matrix Ki,j is given by
𝐊ij(p,q)={1i=q and j=p,0otherwise.
For example,
𝐊(3,4)=[100000000000000100000000000000100000000000000100010000000000000010000000000000010000000000000010001000000000000001000000000000001000000000000001].

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 denote the following 3×2 matrix:

A=[142536].

A has the following column-major and row-major vectorizations (respectively):

𝐯col=vec(A)=[123456],𝐯row=vec(AT)=[142536].

The associated commutation matrix is

K=𝐊(3,2)=[111111],

(where each denotes a zero). As expected, the following holds:

KTK=KKT=𝐈6
K𝐯col=𝐯row

References

Template:Reflist

  • Jan R. Magnus and Heinz Neudecker (1988), Matrix Differential Calculus with Applications in Statistics and Econometrics, Wiley.

Template:Matrix classes