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 Kommentare

OCDER
OCDER am 21 Aug. 2018
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.
Eb Bed
Eb Bed am 21 Aug. 2018
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.
OCDER
OCDER am 21 Aug. 2018
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,"?
Eb Bed
Eb Bed am 21 Aug. 2018
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
OCDER
OCDER am 22 Aug. 2018
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.

Melden Sie sich an, um zu kommentieren.

Antworten (0)

Kategorien

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

Gefragt:

am 21 Aug. 2018

Kommentiert:

am 22 Aug. 2018

Community Treasure Hunt

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

Start Hunting!

Translated by