Automatically put content of structure fields in a matrix
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Inti Vanmechelen
el 4 de Mayo de 2020
Comentada: Inti Vanmechelen
el 7 de Mayo de 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 comentarios
Stephen23
el 5 de Mayo de 2020
Editada: Stephen23
el 5 de Mayo de 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
Respuesta aceptada
darova
el 4 de Mayo de 2020
Editada: darova
el 4 de Mayo de 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 comentarios
darova
el 5 de Mayo de 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
Más respuestas (0)
Ver también
Categorías
Más información sobre Structures en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!