function S_permuted = xxpp_to_xpxp(S) % Permutes the entries of the input from xxpp ordering to xpxp ordering. % % Args: % S (array): input even dimensional square matrix or array % % Returns: % S_permuted (array): permuted matrix or array shape = size(S); n = shape(1); 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 length(shape) == 2 if shape(1) ~= shape(2) error('The input matrix is not square'); end S_permuted = S(ind, ind); else S_permuted = S(ind); end end %!test %! [X, Y]=meshgrid (1:4, 1:4); %! Mxpxp=xxpp_to_xpxp(X); %! assert(any(any(X != Mxpxp))); %! Mxxpp=xpxp_to_xxpp(Mxpxp); %! assert(X, Mxxpp) %! Mxpxp=xxpp_to_xpxp(Y); %! assert(any(any(Y != Mxpxp))); %! Mxxpp=xpxp_to_xxpp(Mxpxp); %! assert(Y, Mxxpp)