Hi,
I am trying to run a 3d for loop, which is taking 3 hrs to run. I tried some of the best practices for loops such as pre-allocating the array, indexing and parfor but it does not improve the processing time. Please can you suggest to improve the execution time.
for i1= 1:length(RGI_glacier_temp_C_avg) % length of 216
for j1 = 1:length(elev_bins) % array size 200
for k1 = 1:length(gl_max_elev) % array size 18,000
RGI_downscld_no_thre(i1,j1,k1) = temp2m_all_grids_avg(i1,:) + lr_era * (elev_bins(:,j1) - gl_max_elev(k1,:));
RGI_downscld_no_thre_C(i1,j1,k1) = temp2m_all_grids_C_avg(i1,:) + lr_era * (elev_bins(:,j1) - gl_max_elev(k1,:));
end
end
end

 Akzeptierte Antwort

Bruno Luong
Bruno Luong am 24 Aug. 2022
Bearbeitet: Bruno Luong am 25 Aug. 2022

0 Stimmen

Try this:
T = reshape(temp2m_all_grids_avg, [], 1, 1);
Tc = reshape(temp2m_all_grids_C_avg, [], 1, 1);
hbins = reshape(elev_bins,1,[],1);
maxh = reshape(gl_max_elev,1,1,[]);
Th = lr_era * (hbins - maxh);
RGI_downscld_no_thre = T + Th;
RGI_downscld_no_thre_C = Tc + Th;
These outputs require more than 10 Gb on RAM. You might compute the array in single if you run out of memory or it starts to swap on HD.

Weitere Antworten (0)

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Hilfe-Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by