parfor nested for loops

The following script works finely in for loop, but I need to implement parfor to speed up. I am looking for help how to implement parfor in the following nested for loop. Many thanks for your kind help.
Z_anom = zeros(n,m);
d = 0;
for y = 1:n
for c_day = 1:m
d = d + 1;
g = 0; % counter for the grid point
for i = 1:nlat
for j = 1:nlon
g = g + 1;
Z_anom(d,g) = (Z(c_day,y,i,j) - Z5(c_day,i,j))*sqrt(cosd(datalat(i)));
end
end
end
end

6 Comments

What are the values of these?
n
m
nlat
nlon
What are the sizes of these?
Z
Z5
datalat
Before using parfor, try to vectorize the Z-Z5*sqrt(costd(...)). It'll be much faster.
The variables are length i.e n-15,m -361, nlat-80 and nlon-70
Z =rand(361,15,80,70)
Z5 =rand(361,15,80,70)
datalat = rand(80)
Well, for one thing
sqrt(cosd(datalat(i)))
only needs to be calculated once each time i changes.
Can you double check this math?
(Z(c_day,y,i,j) - Z5(c_day,i,j))*sqrt(cosd(datalat(i)));
^ are you missing "y,"?
Dear OCDER it is not missed. Y is year c_day is day of the season and z5 is averaged over the year then subtract from z to get anomoloud
Hm, something isn't adding up.
Z_anom = zero(n, m);
for y = 1:n
for c_day = 1:m
d = d+1;
...
Z_anom(d, g) = ...
end
end
This means size of Z_anom will [n*m, nlat*nlon], and NOT [m, n] as you started out with.
Also, datalat size is [80, 80], but it seems you are accessing i from 1:nlat, where nlat = 80?
Please provide the size of all variable as per my 1st comment.

Sign in to comment.

Answers (0)

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Asked:

on 21 Aug 2018

Commented:

on 22 Aug 2018

Community Treasure Hunt

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

Start Hunting!