Increase efficiency on nested loops
    2 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
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
0 Commenti
Risposta accettata
  James Tursa
      
      
 il 30 Apr 2015
        
      Modificato: James Tursa
      
      
 il 30 Apr 2015
  
      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?
0 Commenti
Più risposte (0)
Vedere anche
Categorie
				Scopri di più su Loops and Conditional Statements in Help Center e File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

