Extracting data from struct as matrix
Mostra commenti meno recenti
Hi,
I have the following struct:
S(1).a = 1:5;
S(2).a = 11:10;
S(3).a = 21:27;
Is there a way to vertically concatenate them without looping? I cannot do vertcat(S.a) because data is of different size.
I want output like this [1:5; 11:10; 21:27]
Thank you
2 Commenti
A matrix with these dimensions cannot be constructed.
a = [1:5; 11:10; 21:27]
Stephen23
il 13 Giu 2024
"I want output like this [1:5; 11:10; 21:27]"
Matrices cannot have rows of different lengths.
Risposta accettata
Più risposte (2)
as you already said, you canot concatenate the data as matrix, since it has different size. you could use a cell array, but this would be no better than the struct. another possibility coul be to pad shorter variables with NaN. but here, you would need a loop.
S(1).a = 1:5;
S(2).a = 11:10;
S(3).a = 21:27;
sizes=arrayfun(@(in) length(in.a),S);
maxSize=max(sizes);
asMatrix=nan(numel(sizes),maxSize);
for sNr=1:numel(S)
asMatrix(sNr,1:sizes(sNr))=S(sNr).a;
end
asMatrix
This question seems similar to https://www.mathworks.com/matlabcentral/answers/2128126-extracting-data-from-struct-as-array?s_tid=answers_rc1-1_p1_MLT
You will need to modify the solution in the above answer as seen in the below code snippet to obtain the desired result.
S(1).a = 1:5;
S(2).a = 11:15;
S(3).a = 21:25;
M = vertcat(S.a)
Please note that the ranges you have provided cannot be concatenated vertically because they will not be of the same length. I am therefore assuming the ranges to be 1:5, 11:15 and 21:25. Since they all contain 5 elements, we can concatenate them to a matrix containing 5 columns.
Hope this helps!
Categorie
Scopri di più su Multidimensional Arrays in Centro assistenza e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!