Initializing a struct with n-d fields.

91 ビュー (過去 30 日間)
Leo Simon
Leo Simon 2013 年 11 月 18 日
回答済み: Julian 2013 年 11 月 19 日
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.

採用された回答

Matt J
Matt J 2013 年 11 月 19 日
for ii=1:7;
data.(field{ii}) = NaN(2,2,2);
end
data=repmat(data,[1,2,3,4]);
  1 件のコメント
Leo Simon
Leo Simon 2013 年 11 月 19 日
Thanks, Matt J, this is exactly what I needed.

サインインしてコメントする。

その他の回答 (2 件)

Julian
Julian 2013 年 11 月 19 日
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 2013 年 11 月 19 日
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

カテゴリ

Help Center および File ExchangeStructures についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by