pre-allocating structures
3 次查看(过去 30 天)
显示 更早的评论
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
0 个评论
采纳的回答
Oleg Komarov
2012-3-1
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 个)
Jan
2012-3-1
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 个评论
Oleg Komarov
2012-3-1
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
2012-12-13
编辑:Jan
2012-12-13
@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.
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!