pre-allocating structures

3 vues (au cours des 30 derniers jours)
Romain W
Romain W le 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

Réponse acceptée

Oleg Komarov
Oleg Komarov le 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 commentaire
Romain W
Romain W le 1 Mar 2012
thank you very much, it works just fine.

Connectez-vous pour commenter.

Plus de réponses (1)

Jan
Jan le 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 commentaires
Oleg Komarov
Oleg Komarov le 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 le 13 Déc 2012
Modifié(e) : Jan le 13 Déc 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.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Interpolation 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