Extracting data from struct as matrix
Afficher commentaires plus anciens
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 commentaires
A matrix with these dimensions cannot be constructed.
a = [1:5; 11:10; 21:27]
Stephen23
le 13 Juin 2024
"I want output like this [1:5; 11:10; 21:27]"
Matrices cannot have rows of different lengths.
Réponse acceptée
Plus de réponses (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!
Catégories
En savoir plus sur Multidimensional Arrays dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!