Effacer les filtres
Effacer les filtres

Initializing a struct with n-d fields.

127 vues (au cours des 30 derniers jours)
Leo Simon
Leo Simon le 18 Nov 2013
Réponse apportée : Julian le 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.

Réponse acceptée

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

Connectez-vous pour commenter.

Plus de réponses (2)

Julian
Julian le 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

David Sanchez
David Sanchez le 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

Catégories

En savoir plus sur Structures dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by