What is an elegant way to pack and unpack an array of structures to/from a single vector?

Asked by Lamont Granquist

Lamont Granquist (view profile)

on 7 Jun 2019
Latest activity Commented on by Lamont Granquist

Lamont Granquist (view profile)

on 7 Jun 2019
What I've got is an array of structures of somewhat complicated data:
data(1).r = [ 1 2 3 ];
data(1).v = [ 4 5 6 ];
data(1).m = 100;
data(2).r = [ 7 8 9 ];
data(2).v = [ 10 11 12 ];
data(2).m = 101;
I'd like to convert this to an array where each structure was packed together. My solution looks like this:
N = length(data);
x = [];
for i=1:N
x = [ x data(i).r data(i).v data(i).m ];
end
Which results in the correct order that I'd like the structures to be packed into the vector:
x =
1 2 3 4 5 6 100 7 8 9 10 11 12 101
Is there a more elegant way to do that packing, and what is the most elegant way to do the reverse operation and unpack that array back into an array of structures?

madhan ravi (view profile)

on 7 Jun 2019
Edited by madhan ravi

madhan ravi (view profile)

on 7 Jun 2019

z = struct2cell(data);
x = [z{:}]
data = cell2struct(z,{'r','v','m'}) % reverse

Lamont Granquist

Lamont Granquist (view profile)

on 7 Jun 2019
That is a lot better. But I want data as a function of an arbitrarily modified x vector, so its missing a step which would be the inverse of x = [z{:}]