summaryrefslogtreecommitdiff
path: root/xpxp_to_xxpp.m
diff options
context:
space:
mode:
Diffstat (limited to 'xpxp_to_xxpp.m')
-rw-r--r--xpxp_to_xxpp.m32
1 files changed, 32 insertions, 0 deletions
diff --git a/xpxp_to_xxpp.m b/xpxp_to_xxpp.m
new file mode 100644
index 0000000..fc732e2
--- /dev/null
+++ b/xpxp_to_xxpp.m
@@ -0,0 +1,32 @@
+function S_permuted = xpxp_to_xxpp(S)
+ % Permutes the entries of the input from xpxp ordering to xxpp ordering.
+ %
+ % Args:
+ % S (array): input even dimensional square matrix or a row vector
+ %
+ % Returns:
+ % S_permuted (array): permuted matrix or vector
+
+ shape = size(S);
+ if length(shape) > 2
+ error('The input matrix is not 2 dimensional');
+ end
+
+ n = shape(2);
+
+ if mod(n, 2) ~= 0
+ error('The input array is not even-dimensional');
+ end
+
+ n = n / 2;
+ ind = reshape(1:2*n, 2, [])';
+ ind = ind(:)';
+
+
+ if shape(1) == shape(2)
+ S_permuted = S(ind, ind);
+ else
+ S_permuted = S(ind);
+ end
+end
+