Please could someone help me to knew how to compute the partial partial-transposition of the following matrix?
mat = Table[ρ[i, j], {i, 1, 8}, {j, 1, 8}]
Mathematica Stack Exchange is a question and answer site for users of Wolfram Mathematica. It only takes a minute to sign up.
Sign up to join this communityClearAll[partialTranspose]
partialTranspose = ArrayFlatten @ Map[Transpose, #, {2}] &;
mat = Array[Subscript[ρ, Row @ {##}] &, {8, 8}];
MatrixForm[mat]
mat24 = Partition[mat, {2, 2}];
mat42 = Partition[mat, {4, 4}];
Row[MatrixForm /@ {mat, mat24, partialTranspose @ mat24}, Spacer[10]]
Row[MatrixForm /@ {mat, mat42, partialTranspose @ mat42}, Spacer[10]]
Alternatively, you can combine the partitioning and transposing steps:
ClearAll[flattenTransposePartition]
flattenTransposePartition = ArrayFlatten @* Map[Map[Transpose]] @* Partition;
flattenTransposePartition[mat, {2, 2}] == partialTranspose@mat24
True
flattenTransposePartition[mat, {4, 4}] == partialTranspose@mat42
True
You can also use BlockMap
:
ClearAll[blockTranspose]
blockTranspose = ArrayFlatten@BlockMap[Transpose, ##] &;
blockTranspose[mat, {2, 2}] == flattenTransposePartition[mat, {2, 2}]
True
blockTranspose[mat, {4, 4}] == flattenTransposePartition[mat, {4, 4}]
True