MATLAB: Re-order array structs of arrays

struct arrays order

I have a struct array, x, with two fields, x.fld1 and x.fld2. x has n indices and all fields have m indices like x(1:n).fld1(1:m) and x(1:n).fld2(1:m). I want to re-order the struct to y(1:m).fld1(1:n) and y(1:m).fld2(1:n). Any ideas besides a triple for-loop cycling over the x indices, the fields, and the fld indices? Also, how would you pre-allocate y?
% my long way flds = fieldnames(x); nflds = length( flds ); n = length(x); m = length(x(1).fld{1}); for i = 1:n for j = 1:m for k = 1:nflds y(i).(flds{k})(j) = x(j).(flds{k})(i); end end end

Best Answer

Here is a 1x3 structure with two 1x4 numeric fields:
S(1).f1 = 0:3;
S(1).f2 = 2:5;
S(2).f1 = 1:4;
S(2).f2 = 3:6;
S(3).f1 = 4:7;
S(3).f2 = 5:8;
Convert this to a 1x4 structure with two 1x3 numeric fields:
C = num2cell(cell2mat(struct2cell(S)),3);
C = cellfun(@(v)v(:).',C,'uni',0);
T = cell2struct(C,fieldnames(S),1).';
Checking the sizes:
>> size(S)
ans =
1 3
>> size(T)
ans =
1 4
And checking the field data:
>> T.f1
ans =
0 1 4
ans =
1 2 5
ans =
2 3 6
ans =
3 4 7
>> T.f2
ans =
2 3 5
ans =
3 4 6
ans =
4 5 7
ans =
5 6 8