How to Convert a Scalar Struct with Vector Fields to a Vector Struct with Scalar Fields?
Afficher commentaires plus anciens
I have a scalar struct S with each field a row vector of the same number of elements.
S.x = [1 2];
S.y = [10 20];
I want create a struct array, A, with same number of elements as in the fields in S, with the same field names as S, where each field value in each element of A is correspondingly indexed from the original field in S. I'm not sure I'm explaining this well.
So far I have this, which works:
C = [fieldnames(s) , arrayfun(@(c) mat2cell(c{1},1,ones(1,numel(c{1}))),struct2cell(s),'Uni',false)].';
A = struct(C{:})
[A.x]
[A.y]
Open to suggestions on better (e.g., easier to understand) alternatives.
Réponse acceptée
Plus de réponses (2)
S.x = [1 2];
S.y = [10 20];
C = [fieldnames(S) , cellfun(@num2cell,struct2cell(S),'Uni',false)].';
A = struct(C{:})
[A.x]
[A.y]
S.x = [1 2];
S.y = [10 20];
N = numel(S.x);
f = fieldnames(S);
NF = numel(f);
clear A
A(N) = S;
for ii = 1:N
for jj = 1:NF
A(ii).(f{jj}) = S.(f{jj})(ii);
end
end
A
[A.x]
[A.y]
Catégories
En savoir plus sur Structures 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!