how preallocate structure for better memory
    193 views (last 30 days)
  
       Show older comments
    
I had created a structure made so:
head.number = 3;
head.pck_rcv = [1 0 0];
heads(2).number = 5;
head(2).pck_rcv = [1 1 0];
and so on.
How can I preallocate a structure?
0 Comments
Accepted Answer
  Jan
      
      
 on 22 Sep 2012
        
      Edited: Jan
      
      
 on 2 Oct 2017
  
      for k = n:-1:1    % Backwards!
  head(k).number = 3;
  head(k).pck_rcv = [1 0 0];
end
Now the final size of the struct array is created in the first iteration.
[EDITED] Alternatively:
head = struct('number', cell(1, 10), 'pck_rv', cell(1, 10));
Now head is a [1 x 10] struct array withe the fields 'number' and 'pck_rv'. Pre-allocating the contents of the fields is another job and you need a loop to do this. But now it can run in forward direction also.
5 Comments
  Igor Gitelman
 on 20 May 2022
				thanks! that 
head = struct('number', cell(1, 10), 'pck_rv', cell(1, 10));
work fine!  
  Dyuman Joshi
      
      
 on 27 Mar 2024
				I am accepting Jan's answer as it provides a robust solution to the question posted.
More Answers (2)
  Azzi Abdelmalek
      
      
 on 22 Sep 2012
        
      Edited: Azzi Abdelmalek
      
      
 on 22 Sep 2012
  
      heads=struct('numbers',zeros(10,1), 'pck_rcv',zeros(10,3))
%then
for k=1:n
heads.numbers(k)=2
heads.pck_rcv(k,:)=[1 2 3]
end
3 Comments
  Jan
      
      
 on 2 Oct 2017
				@Alexandra: I do not agree. Salvatore asked for a struct array: "head(2).numbers and so on". Azzi's suggestion creates a scalar struct only.
  Alexandra Simpson
 on 2 Oct 2017
				True, I just tried it out and realised it wasn't what I wanted either! Thanks for the response.
  Walter Roberson
      
      
 on 13 Dec 2012
        head = struct('number', {3, 5}, 'pck_rcv', {[1 0 0], [1 0 1]})
0 Comments
See Also
Categories
				Find more on Variables 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!







