How to index every field of a structure and reassign to a structure with a single element in each field
    18 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!