how to concatenate structure fields
6 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Newman
am 15 Jul. 2016
Kommentiert: Azzi Abdelmalek
am 15 Jul. 2016
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?
0 Kommentare
Akzeptierte Antwort
Azzi Abdelmalek
am 15 Jul. 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 Kommentare
Azzi Abdelmalek
am 15 Jul. 2016
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
Weitere Antworten (1)
Guillaume
am 15 Jul. 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 Kommentare
Guillaume
am 15 Jul. 2016
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
Siehe auch
Kategorien
Mehr zu Structures finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
