speed up for loop execution

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

 Risposta accettata

Bruno Luong
Bruno Luong il 24 Ago 2022
Modificato: Bruno Luong il 25 Ago 2022
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.

Più risposte (0)

Categorie

Scopri di più su Loops and Conditional Statements in Centro assistenza e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by