Effacer les filtres
Effacer les filtres

Array of Structures to Structure of arrays

82 vues (au cours des 30 derniers jours)
Andrew C
Andrew C le 30 Sep 2021
How can I convert an array of structures into a structure of arrays.
I currently have an array of structs of size N that the only way to access it is to call them by
var = struct(1).fieldname
Where the fieldname is referencing a array of 1xM.
When I try to call var = struct.fieldname or var = struct(:).fieldname I only get one value, while I would like to get all values.
I have tried to do struct2cell and cell2mat, but these options expand the nested array.
What I want is to call each fieldname and get a matrix of NxM.
  2 commentaires
Jan
Jan le 30 Sep 2021
Modifié(e) : Jan le 30 Sep 2021
The question is not clear yet, because the readers cannot know, how your struct looks like.
Andrew C
Andrew C le 30 Sep 2021
Apologies. I will try to make it a bit clearer

Connectez-vous pour commenter.

Réponses (2)

Sulaymon Eshkabilov
Sulaymon Eshkabilov le 1 Oct 2021
Jan is right that your questions are not quite clear for the reader as described here. But what I've understood is the following:
% Let's say that X is the structure array:
FNames = fieldnames(X); % ALL Field Names residing in X structure array can be obtained
% This part seems to be optional for your exercise:
XX=zeros(length(FNames), 1);
for ii = 1:length(FNames)
xi = getfield(X, FNames{ii}); % Field Values
XX(ii) = xi;
end

Chunru
Chunru le 1 Oct 2021
% array of structure
M = 5;
for i=1:M
a(i).f1 = rand(1,1);
a(i).f2 = rand(1,1);
end
a
a = 1×5 struct array with fields:
f1 f2
a(1)
ans = struct with fields:
f1: 0.6493 f2: 0.9459
% struncrure of array [assuming each field is a scalar in a]
f = fields(a(1));
for i=1:length(f)
b.(f{i}) = [a.(f{i})];
end
b
b = struct with fields:
f1: [0.6493 0.7285 0.1068 0.3718 0.3805] f2: [0.9459 0.5456 0.5360 0.2124 0.6030]

Catégories

En savoir plus sur Cell Arrays dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by