pre-allocating structures

13 views (last 30 days)
Romain W
Romain W on 1 Mar 2012
Hello everyone,
I'm trying to pre-allocate memory for a structure defined as follows:
% S : Structure containing geometrical description of polygons.
% S(i) contains all information relative to the i-th shape
% S(i).P(j) gives access to the geometrical description of the j-th
% element of the i-th shape.
% XData : S(i).P(j).x : Vector
% YData : S(i).P(j).y : Vector
% Hole : S(i).P(j).hole : Binary value
I'd like to pre-allocate before the following loop:
for i=1:ne
for j=1:2
S(i).P(j).x = v_proj(f(i,j),1);
S(i).P(j).y = v_proj(f(i,j),2);
S(i).P(j).hole = 0;
end
end
I'd like to have a number of shapes ne.
But I don't really know how to do that. Any help would be more than welcome.
Thank you very much,
% Romain

Accepted Answer

Oleg Komarov
Oleg Komarov on 1 Mar 2012
One way to preallocate:
P(1:2) = struct('x',zeros(10,1),'y',zeros(1,2),'hole',false);
ne = 10;
[S(1:ne).P] = deal(P);
  1 Comment
Romain W
Romain W on 1 Mar 2012
thank you very much, it works just fine.

Sign in to comment.

More Answers (1)

Jan
Jan on 1 Mar 2012
You can create the last element at first to do an implicite pre-allocation:
for i=ne:-1:1
for j=[2,1]
S(i).P(j).x = v_proj(f(i,j),1);
S(i).P(j).y = v_proj(f(i,j),2);
S(i).P(j).hole = 0;
end
end
  2 Comments
Oleg Komarov
Oleg Komarov on 1 Mar 2012
It doesn't work since structures use pointers:
S(20).P(20).x = 1:20;
S : 816.00 B
S(19).P(19).x = 1:20;
S : 1.37 KB
Jan
Jan on 13 Dec 2012
Edited: Jan on 13 Dec 2012
@Oleg: What does not work and why are the sizes of S interesting here? The code I've posted pre-allocates S in one step and the fields P for each S(:) in one step also. There is no way to pre-allocate all ne elements of P simulataneously, because they are distinct arrays. As far as I can see [S(1:ne).P] = deal(P) creates shared data copies for the contents of all S(:).P, such that writing values later on will consume additional time by creating deep data copies at first. Therefore your pre-allocation is faster only if no data are written and this is rarely needed in real world programs.

Sign in to comment.

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!