MATLAB Answers

0

Initializing a struct with n-d fields.

Asked by Leo Simon on 18 Nov 2013
Latest activity Answered by Julian
on 19 Nov 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.

  0 Comments

Sign in to comment.

3 Answers

Answer by Matt J
on 19 Nov 2013
 Accepted Answer

for ii=1:7;
data.(field{ii}) = NaN(2,2,2);
end
data=repmat(data,[1,2,3,4]);

  1 Comment

Thanks, Matt J, this is exactly what I needed.

Sign in to comment.


Answer by David Sanchez
on 19 Nov 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

  0 Comments

Sign in to comment.


Answer by Julian
on 19 Nov 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

  0 Comments

Sign in to comment.