How do I preallocate memory
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Chuck Dalby
el 2 de Jul. de 2024
Respondida: Rik
el 2 de Jul. de 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
0 comentarios
Respuesta aceptada
Voss
el 2 de Jul. de 2024
Editada: Voss
el 2 de Jul. de 2024
One way is to do this before the outer loop:
clear OutData
OutData(length(hucPoly)) = struct();
1 comentario
Voss
el 2 de Jul. de 2024
Another way is to do this before the outer loop:
OutData = struct('hucID',num2cell(zeros(1,length(hucPoly))),'intsecArea',[]);
Más respuestas (1)
Rik
el 2 de Jul. de 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.
0 comentarios
Ver también
Categorías
Más información sobre Multidimensional Arrays en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!