Borrar filtros
Borrar filtros

How do I preallocate memory

24 visualizaciones (últimos 30 días)
Chuck Dalby
Chuck Dalby el 2 de Jul. de 2024 a las 16:38
Respondida: Rik el 2 de Jul. de 2024 a las 18:23
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

Respuesta aceptada

Voss
Voss el 2 de Jul. de 2024 a las 17:04
Editada: Voss el 2 de Jul. de 2024 a las 17:05
One way is to do this before the outer loop:
clear OutData
OutData(length(hucPoly)) = struct();
  1 comentario
Voss
Voss el 2 de Jul. de 2024 a las 17:07
Another way is to do this before the outer loop:
OutData = struct('hucID',num2cell(zeros(1,length(hucPoly))),'intsecArea',[]);

Iniciar sesión para comentar.

Más respuestas (1)

Rik
Rik el 2 de Jul. de 2024 a las 18:23

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.

Categorías

Más información sobre Loops and Conditional Statements en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2024a

Community Treasure Hunt

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

Start Hunting!

Translated by