Initializing a struct with n-d fields.

98 visualizaciones (últimos 30 días)
Leo Simon
Leo Simon el 18 de Nov. de 2013
Respondida: Julian el 19 de Nov. de 2013
Hi, I have a struct with an indeterminate number of fields. For (very good) reasons I don't want to go into, I want to initialize each of these fields with NaNs. The closest I can find is a post by Shane, in 200 http://blogs.mathworks.com/loren/2008/02/01/structure-initialization/#15%20Initializing%20a%20struct%3Estructure-initialization/#15
that suggests something along the lines of
data = repmat(struct('field1',NaN(2,2,2),'fieldN',NaN(5)),[1,2,3,4]);
What I would like to do instead is build the structure in a loop, something along the lines of:
data = struct();
for ii=1:7;
data = repmat(struct(field{ii},NaN(2,2,2)),[1,2,3,4]);
end
But of course this doesn't work because the loop line wipes out the pre-existing struct.
There is presumably a way of initializing additional fields in a similar way, without having to do everything in the one line as Shane suggests. Obviously I could build a long string in a loop and evaluate it, but that's a pain.
Any advice would be most appreciated.

Respuesta aceptada

Matt J
Matt J el 19 de Nov. de 2013
for ii=1:7;
data.(field{ii}) = NaN(2,2,2);
end
data=repmat(data,[1,2,3,4]);
  1 comentario
Leo Simon
Leo Simon el 19 de Nov. de 2013
Thanks, Matt J, this is exactly what I needed.

Iniciar sesión para comentar.

Más respuestas (2)

Julian
Julian el 19 de Nov. de 2013
An alternative approach just using builtin functions
C = cell(numel(field),1,2,3,4); % pre-allocate cell-array to required size
C(:) = {NaN(2,2,2)}; % populate cell-array
C = cell2struct(C,field); % convert to struct array, field names along dimension 1

David Sanchez
David Sanchez el 19 de Nov. de 2013
Initialization as NaN of three fields called field1, field2, field3:
for k=1:3;
data.(strcat('field',num2str(k))) = NaN;
end
>> data
data =
field1: NaN
field2: NaN
field3: NaN

Categorías

Más información sobre Structures en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by