How to index every field of a structure and reassign to a structure with a single element in each field
30 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
John Petersen
el 10 de Mzo. de 2017
Respondida: George Abrahams
el 30 de Dic. de 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 comentarios
Respuesta aceptada
KSSV
el 10 de Mzo. de 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
Más respuestas (2)
Chad Greene
el 18 de Jul. de 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 comentarios
George Abrahams
el 30 de Dic. de 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 comentarios
Ver también
Categorías
Más información sobre Structures en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!