How do I preallocate memory

3 views (last 30 days)
Chuck Dalby
Chuck Dalby on 2 Jul 2024
Answered: Rik on 2 Jul 2024
I get the error message at the end of the first for loop (after code: OutData(ii).hucID = hucID;) that I should consider preallocating memory. How do I do that for the following code:
for ii = 1:length(hucPoly)
hucSub = polyshape(hucPoly(ii).X, hucPoly(ii).Y);
hucID = hucPoly(ii).Name;
OutData(ii).hucID = hucID;
for i = 1:size(inFiles,1)
inShapeOld = shaperead([dataFolder char(inFiles.OldShape(i))]);
inPolyOld = polyshape([inShapeOld.X],[inShapeOld.Y], 'Simplify', false);
inShapeNew = shaperead([dataFolder char(inFiles.NewShape(i))]);
inPolyNew = polyshape([inShapeNew.X],[inShapeNew.Y], 'Simplify', false);
inPolyNewsub = intersect(inPolyNew, hucSub,'KeepCollinearPoints',true);
inPolyOldsub = intersect(inPolyOld, hucSub);
[OutData(ii).intsecArea(i).Data, S] = polyIntersect(CoRegErrData, inPolyNewsub, inPolyOldsub);
OutData(ii).intsecArea(i).ID = char(inFiles.NewShape(i));
if ~isnan(S(1).X(1))
shapewrite(S, [dataFolder 'outShapes_S\' hucID '_outInt_' char(inFiles.NewShape(i))])
end
T = table(OutData(ii).intsecArea(i).Data, 'VariableNames', {'outInt_acres1' });
writetable(T, [dataFolder 'outTables_S\' hucID '_outInt_' char(inFiles.NewShape(i)) '.txt'])
end
end

Accepted Answer

Voss
Voss on 2 Jul 2024
Edited: Voss on 2 Jul 2024
One way is to do this before the outer loop:
clear OutData
OutData(length(hucPoly)) = struct();
  1 Comment
Voss
Voss on 2 Jul 2024
Another way is to do this before the outer loop:
OutData = struct('hucID',num2cell(zeros(1,length(hucPoly))),'intsecArea',[]);

Sign in to comment.

More Answers (1)

Rik
Rik on 2 Jul 2024

A third way to do it: loop backwards.

for ii = numel(hucPoly):-1:1

This also replaces the call to the length function. I have yet to see a situation where people actually mean max(size(A)) instead of the number of elements.

But the main point is that for a struct it is much less important to pre-allocate properly.

Categories

Find more on Multidimensional Arrays in Help Center and File Exchange

Products


Release

R2024a

Community Treasure Hunt

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

Start Hunting!