How to vectorize this nested loop for optimized performance

1 visualización (últimos 30 días)
Yodish
Yodish el 18 de Dic. de 2017
Comentada: Matt J el 19 de Dic. de 2017
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!

Respuesta aceptada

Matt J
Matt J el 18 de Dic. de 2017
Editada: Matt J el 19 de Dic. de 2017
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 comentario
Matt J
Matt J el 19 de Dic. de 2017
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

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Loops and Conditional Statements en Help Center y File Exchange.

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by