How to index every field of a structure and reassign to a structure with a single element in each field
35 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
John Petersen
am 10 Mär. 2017
Beantwortet: George Abrahams
am 30 Dez. 2022
I have a structure where every field is an array of the same length. I need to pass this structure on but only with a single element in each field. I thought of doing it this way
A.b = [1:10];
A.c = [2:11];
A.d = [3:12];
a = structfun(@(x) x(1),A)
but this results in
a = [1;2;3];
The answer I want for the first element is
a.b = 1;
a.c = 2;
a.d = 3;
I will want to run this in a for loop for use in the next function like this
for ii = 1:length(A.b)
...
a = structfun(@(x) x(ii),A); % but modified so that 'a' is a struct like 'A', not an array.
nextfcn(a);
...
end
0 Kommentare
Akzeptierte Antwort
KSSV
am 10 Mär. 2017
A.b = [1:10];
A.c = [2:11];
A.d = [3:12];
a= A ;
for f=fieldnames(a)'
a.(f{1})(2:end)=[];
end
Weitere Antworten (2)
Chad Greene
am 18 Jul. 2019
Alternatively, you could stick with the approach you were using, but include the 'uniformoutput',false option.
a = structfun(@(x) x(1),A,'Uni',false)
0 Kommentare
George Abrahams
am 30 Dez. 2022
Old question, but my fieldfun function on File Exchange / GitHub does what you expected structfun to do: output a structure a with the same fields as structure A.
A = struct( 'b', 1:10, 'c', 2:11, 'd', 3:12 );
nthelement = @(n) fieldfun( @(x) x(n), A );
a = nthelement(1)
% a = struct with fields:
% b: 1
% c: 2
% d: 3
a = arrayfun( nthelement, 1:numel(A.b) )
% a = 1×10 struct array with fields:
% b
% c
% d
0 Kommentare
Siehe auch
Kategorien
Mehr zu Structures finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!