How to vectorize this nested loop for optimized performance

조회 수: 3 (최근 30일)
Yodish
Yodish 2017년 12월 18일
댓글: Matt J 2017년 12월 19일
hello everybody, I have been trying to optimize this nested for loop which is very very slow, but with no success
for i=1:size(Sxx,2)-1
for j=1:size(Sxx,2)-1
A=Sxx(:,i).*conj(Sxx(:,j));
B= (ifft(A, 'symmetric'));
[~, T(i,j)] = max(B(1:round(end/2)));
end
end
any help is appreciated!

채택된 답변

Matt J
Matt J 2017년 12월 18일
편집: Matt J 2017년 12월 19일
My advice would be not to vectorize it completely (although there are ways to do so), but rather reduce it to one loop as below.
[m,n]=size(Sxx);
k=1:round(m/2);
SxxConj=conj(Sxx(:,1:n-1));
T=nan(n-1);
for i=1:n-1
B=ifft(Sxx(:,i).*SxxConj, [],1,'symmetric'); %If <R2016b use bsxfun
[~,T(i,:)]=max(B(k,:),[],1); %EDITED
end
You could also convert this to a parfor loop if the serial performance is insufficient.
  댓글 수: 1
Matt J
Matt J 2017년 12월 19일
Comment by Yodish:
Definitely faster (probably not enough yet though for my purposes) and more elegant, thanks Matt
PS. index of B needs to be swapped in second last line

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by