How to Convert a Scalar Struct with Vector Fields to a Vector Struct with Scalar Fields?
5 次查看(过去 30 天)
显示 更早的评论
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.
0 个评论
采纳的回答
Voss
2024-4-25
S.x = [1 2];
S.y = [10 20];
C = [fieldnames(S) , struct2cell(structfun(@num2cell,S,'Uni',false))].';
A = struct(C{:})
[A.x]
[A.y]
0 个评论
更多回答(2 个)
Voss
2024-4-25
S.x = [1 2];
S.y = [10 20];
C = [fieldnames(S) , cellfun(@num2cell,struct2cell(S),'Uni',false)].';
A = struct(C{:})
[A.x]
[A.y]
0 个评论
Voss
2024-4-25
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]
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Data Type Conversion 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!