Increase efficiency on nested loops
2 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
採用された回答
James Tursa
2015 年 4 月 30 日
編集済み: James Tursa
2015 年 4 月 30 日
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 件のコメント
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Loops and Conditional Statements についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!