how preallocate structure for better memory

436 views (last 30 days)
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?

Accepted Answer

Jan
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
Igor Gitelman on 20 May 2022
thanks! that
head = struct('number', cell(1, 10), 'pck_rv', cell(1, 10));
work fine!
Dyuman Joshi
Dyuman Joshi on 27 Mar 2024 at 8:47
I am accepting Jan's answer as it provides a robust solution to the question posted.

Sign in to comment.

More Answers (2)

Azzi Abdelmalek
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
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
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.

Sign in to comment.


Walter Roberson
Walter Roberson on 13 Dec 2012
head = struct('number', {3, 5}, 'pck_rcv', {[1 0 0], [1 0 1]})

Categories

Find more on Structures in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!