Getting rid of a loop
5 ビュー (過去 30 日間)
古いコメントを表示
Hi,
I have a loop that takes forever. I am wondering if i can get rid of it by using a one step procedure
[yd,md,dd]=datevec(RSSD9999d);%RSSD9999d is the dates vector for my sample
[y,m,~]=datevec(RSSD9999);% RSSD9999 is the dates vector from the database > sample size
for i=1:length(RSSD9001d)% I am running the loop to compute the previous 3 year historical average
x0=find(RSSD9001==RSSD9001d(i) & ismember(RSSD9999,[datenum(yd(i)-3,md,dd):RSSD9999d(i)-1]));
% the minus one is not a mistake, the data has the form year, then quarter (could be 3,6,9,or 12), then day
% by putting minus 1 i ensure that the 3 year average will not include the current date
EquityCapitalgta = RCFD3210(x0)./GTA(x0);
EquityCapital_GTAavg3y(i,1)=nanmean(EquityCapitalgta);
end
0 件のコメント
採用された回答
Jan
2016 年 11 月 10 日
編集済み: Jan
2016 年 11 月 10 日
Did you pre-allocate the output?
EquityCapital_GTAavg3y = zeros(1, length(RSSD9001d))
Use the profiler to find out, how many time is spent in datenum . If this matters, replace it.
ismember sorts its inputs. Try to sort it at first an call ismembc (see code of ismember.
This part:
ismember(RSSD9999,[datenum(yd(i)-3,md,dd):RSSD9999d(i)-1]))
might be accelerated by:
RSSD9999>=datenum(yd(i)-3,md,dd) && RSSD9999 <= RSSD9999d(i)-1
The names of your variables are horrifying. It is really hard to read your code. Note that a working algorithm does not depend on the meaning of the variables, so you could use some leaner names.
0 件のコメント
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Tables についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!