Initializing a struct with n-d fields.
98 views (last 30 days)
Show older comments
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
Accepted Answer
More Answers (2)
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
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
See Also
Categories
Find more on Structures in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!