for loop taking too long to operate

16 ビュー (過去 30 日間)
SChow
SChow 2020 年 10 月 6 日
コメント済み: SChow 2020 年 10 月 6 日
I have a matrices (b1 and popx) with size 25000x50000, code is a vector which contains unique values in b1 (of length 300). For elements in popx which correspond to each unique value of b1, I need the sum of popx,
The below code takes very long (>2 hours) to operate, Any help to lower computation time is much appreciated
for i=1:300
popx1=popx;
popx1(b1~=code(i))=NaN;
popn=nansum(nansum(popx1));
popn1(i)=popn;
end;

採用された回答

Jos (10584)
Jos (10584) 2020 年 10 月 6 日
Pre-allocation, and recoding using logical indexing and sum should speed things up
popn1 = nan(300,1) ; % pre-allocation
for i=1:300
tf = b1 == code(i) ;
popn1(i) = sum(popx(tf), 'all') ;
end;
  1 件のコメント
SChow
SChow 2020 年 10 月 6 日
much quicker , thanks

サインインしてコメントする。

その他の回答 (0 件)

Community Treasure Hunt

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

Start Hunting!

Translated by