Automatically put content of structure fields in a matrix
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Inti Vanmechelen
am 4 Mai 2020
Kommentiert: Inti Vanmechelen
am 7 Mai 2020
Hi all,
For the following structure:
A.TEST=rand(15x8);
A.TEST1=rand(15x8);
A.TEST2=rand(15x8);
A.TEST3=rand(15x8);
A.TEST4=rand(15x8);
A.TEST5=rand(15x8);
I would like to find an optimal way to create a new matrix (let's say B) that contains all values from TEST to TEST5 concatenated vertically, which would be B = (15*5,8).
Preferabally automatically, since my real dataset is much bigger.
Thanks!
2 Kommentare
Stephen23
am 5 Mai 2020
Bearbeitet: Stephen23
am 5 Mai 2020
Better data design would make your code simpler too, e.g. a non-scalar structure:
A.S(1).TEST = rand(15,8)
A.S(2).TEST = rand(15,8)
A.S(3).TEST = rand(15,8)
A.S(4).TEST = rand(15,8)
A.S(5).TEST = rand(15,8)
M = vertcat(A.S.TEST) % <- this is all you need
Akzeptierte Antwort
darova
am 4 Mai 2020
Bearbeitet: darova
am 4 Mai 2020
Try getfield
fnames = fieldnames(A);
B = [];
for i = 1:length(fnames)
b1 = getfield(A,fnames{i});
B = [B; b1];
end
Use preallocation if for loop is slow
2 Kommentare
darova
am 5 Mai 2020
Use nested for loop
fnames = fieldnames(A);
B = [];
for i = 1:length(fnames)
b1 = getfield(A,fnames{i});
s = whos('b1');
if strcmp('struct',s.class) % if type of variable is 'struct'
fnames1 = fieldnames(b1);
for j = 1:length(fnames1)
b2 = getfield(b1,fnames1{j});
B = [B; b2];
end
else
B = [B; b1];
end
end
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Structures finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!