Increase efficiency on nested loops

I have a loop that looks like:
for t=1:size(datesdaily1,1)
for i=1:size(secids,1)
for j=1:size(secids,1)
if not(isnan(weig1(t,i)*weig1(t,j)*rho(i,j)*sqrt(Rates(t,i)*Rates(t,j))))
numerator=numerator + weig1(t,i)*weig1(t,j)*rho(i,j)*sqrt(Rates(t,i)*Rates(t,j));
denominator=denominator+ weig1(t,i)*weig1(t,j)*(1-rho(i,j))*sqrt(Rates(t,i)*Rates(t,j));
end
end
end
end
It takes a lot of time to run... is there anyway to increase efficiency? (maybe avoiding loops?)
Thanks, V

 Akzeptierte Antwort

James Tursa
James Tursa am 30 Apr. 2015
Bearbeitet: James Tursa am 30 Apr. 2015

1 Stimme

This gets the inner loops vectorized (gets about a 100x speed improvement on my machine):
rho1 = 1 - rho;
for t=1:size(datesdaily1,1)
w = weig1(t,:) .* sqrt(Rates(t,:));
x = w.' * w;
y = x .* rho;
z = x .* rho1;
numerator = numerator + sum(y(~isnan(y)));
denominator = denominator + sum(z(~isnan(z)));
end
Could potentially vectorize the outer loop as well, but may run into memory issues if the variable sizes are large. What are your variable sizes?

Weitere Antworten (0)

Kategorien

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

Gefragt:

V
V
am 30 Apr. 2015

Bearbeitet:

am 30 Apr. 2015

Community Treasure Hunt

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

Start Hunting!

Translated by