0
$\begingroup$

Suppose I have a matrix $M$ acts on the space $\mathbb C^4\otimes \mathbb C^2\otimes \mathbb C^4\otimes \mathbb C^3$. Is there a method to permute the 2nd subsystem of $M$ and the 4th subsystem of $M$? In other words, I have a matrix $M=A_1\otimes A_2\otimes A_3\otimes A_4$, how can I permute the second and the fourth subsystem of $M$ to get $A_1\otimes A_4\otimes A_3\otimes A_2$ when I only have access to $M$ while don't have access to $A_i$?

For example, I have a matrix $$M=\left( \begin{array}{cccc} 1 & 2 & 3 & 4 \\ 5 & 6 & 7 & 8 \\ 9 & 10 & 11 & 12 \\ 13 & 14 & 15 & 16 \\ \end{array} \right)$$ how can I switch the first and second subsystems permitted the first system is of dimension $2$ and the second system is of dimension $2$. In index form, $M$ can be written as $$\left( \begin{matrix} m_{00,00}& m_{00,01}& m_{00,10}& m_{00,11}\\ m_{01,00}& m_{01,01}& m_{01,10}& m_{01,11}\\ m_{10,00}& m_{10,01}& m_{10,10}& m_{10,11}\\ m_{11,00}& m_{11,01}& m_{11,10}& m_{11,11}\\ \end{matrix} \right) .$$ The element $m_{00,10}$ after switching should be in place $00,01$. Anyway, the transformed $M$ in numerical form should be $$ \left( \begin{array}{cccc} 1 & 3 & 2 & 4 \\ 9 & 11 & 10 & 12 \\ 5 & 7 & 6 & 8 \\ 13 & 15 & 14 & 16 \\ \end{array} \right). $$

$\endgroup$
4
  • 1
    $\begingroup$ You do not have access to $A_i$. What is known then, dimensions? $\endgroup$
    – yarchik
    Commented Jan 1 at 15:40
  • $\begingroup$ Is this what you are looking for? myM[i1_,i2_,i3_,i4_]:= M[i1,i4,i3,i2] $\endgroup$ Commented Jan 1 at 16:24
  • $\begingroup$ @yarchik Thank you for your comment! I have access to $M$. $\endgroup$
    – narip
    Commented Jan 2 at 0:12
  • $\begingroup$ @DanielHuber Thank you for your comment, but I think it's not. I have $M$ in matrix form which can, but I don't know what $A_i$ is, be written as KroneckerProduct[A_1,A_2,A_3,A_4]. When I have access to the matrix $M$, how can I switch the two subsystems $A_2$ and $A_4$? $\endgroup$
    – narip
    Commented Jan 2 at 0:28

1 Answer 1

0
$\begingroup$

My current solution is as follows. The core idea is to utilize the TensorTranspose function. Let's clarify things using the example in the original question. I first reshape the matrix using

testmat = ArrayReshape[mat, {2, 2, 2, 2}];

Then I switch the first and second subsystems using TensorTranspose

testmat = TensorTranspose[testmat, {2, 1, 4, 3}];

Finally, I recover the matrix from testmat using reshape function

testmat = ArrayReshape[testmat, {4, 4}];

The code above is summarized as follows

mat = ArrayReshape[Range@16, {4, 4}];
testmat = ArrayReshape[mat, {2, 2, 2, 2}];
testmat = TensorTranspose[testmat, {2, 1, 4, 3}];
testmat = ArrayReshape[testmat, {4, 4}];
testmat // MatrixForm
$\endgroup$

Not the answer you're looking for? Browse other questions tagged or ask your own question.