how to concatenate structure fields

Hello I have a structure s(i).f(j).d where i=1:40 and j=1:10.I want to concantenate all the fields in to one single matrix. for eg
for j=1:10
m(:,j)=s(1).f(j).d
with the following code above
this concatenates 10 column matrix into m .But this is just for s(1) how to proceed for s1..s2...s40 for all the 40 fields?

 Respuesta aceptada

Azzi Abdelmalek
Azzi Abdelmalek el 15 de Jul. de 2016
Look at this example
s(1).f(1).d=11
s(1).f(2).d=12
s(2).f(1).d=21
s(2).f(2).d=22
a=s.f
n=numel(a)
for k=1:numel(s)
M(k,:)=[s(k).f(1:n).d]
end

4 comentarios

Newman
Newman el 15 de Jul. de 2016
Subscripted assignment dimension mismatch. this is the error it is showing
Azzi Abdelmalek
Azzi Abdelmalek el 15 de Jul. de 2016
attach your data
Newman
Newman el 15 de Jul. de 2016
this is my structure file
load lbpstructure
a=s.f;
n=numel(a);
M=[]
for k=1:numel(s)
b=[s(k).f(1:n).d];
M=[M;b];
end
M

Iniciar sesión para comentar.

Más respuestas (1)

Guillaume
Guillaume el 15 de Jul. de 2016
Use a double for loop, then:
m = zeros(numel(s(1).f(1).d), numel(s(1).f(1)), numel(s)); %preallocation is advised
for sidx = 1:numel(s)
for fidx = 1:numel(s(sidx).f)
m(:, fidx, sidx) = s(sidx).f(fidx).d;
end
end
Note that I've concatenated the s1, ... s40 along the 3rd dimension. You didn't specify what you wanted exactly.

2 comentarios

Newman
Newman el 15 de Jul. de 2016
Editada: Newman el 15 de Jul. de 2016
This is exactly what I want: please see the image below
your code is returning m as 10304x10x40 double where as I want it as 10304x400.(400= 10 fields in s(1) or s(2) etc. so for 40 s(i) = 40x10=400)
Whichever shape you want for the output, the idea is still the same. Iterate over both arrays. To get the above:
m = zeros(numel(s(1).f(1).d, numel(s) * numel(s(1).f));
col = 1;
for sidx = 1 : numel(s)
for fidx = 1 : numel(f)
m(:, col) = s(sidx).f(idx).d;
col = col + 1;
end
end

Iniciar sesión para comentar.

Categorías

Productos

Etiquetas

Preguntada:

el 15 de Jul. de 2016

Comentada:

el 15 de Jul. de 2016

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by