Info

La pregunta está cerrada. Vuélvala a abrir para editarla o responderla.

Can any one explain me how to apply vectorized operation on the outer for loop of the given program?

3 visualizaciones (últimos 30 días)
a=[1+1i 2+2i 3+3i 4+4i 5+5i 6+6i 7+7i 8+8i 9+9i 1+1i 2+2i 3+3i 4+4i 5+5i 6+6i 7+7i 8+8i 9+9i];
for m=1:6
m=m-1;
k=1:1:4;
out_1(m+1)=(sum((a(k+m)).*(conj(a(k+12+m)))))/12;
end
  2 comentarios
Alexandra Harkai
Alexandra Harkai el 17 de Nov. de 2016
Does this code not give you an indexing error for a(k+12+m) after the 3rd loop? (k+12+3 = 1:4+12+3=16:19 and a has only 18 elements)

Respuestas (1)

Guillaume
Guillaume el 17 de Nov. de 2016
As Alexandra pointed out, your example is indexing past the end of the array.
Assuming a sufficiently large array, the following would work:
%input: %a, a vector with enough elements
%e.g:
a = repmat((1:9).*(1+1i), 1, 3)
m = 1:6; %row vector
k = (0:3).'; %column vector
assert(numel(a) >= max(m) + max(k) + 12, 'Not enough elements in a');
%in R2016b:
out = sum(a(m+k) .* conj(a(m+k+12))) / 12;
%prior to R2016b:
%indices = bsxfun(@plus, m, k);
%out = sum(a(indices) .* conj(a(indices+12))) / 12;
  1 comentario
Tamil selvan
Tamil selvan el 17 de Nov. de 2016
Editada: Guillaume el 17 de Nov. de 2016
Hello Guillaume,
Thanks for your code its working fine. When I am checking 100000 samples input, the execution time for the above code it takes 4times more than the original code had taken. Can you tell me any other execution time optimization for the above code?

La pregunta está cerrada.

Community Treasure Hunt

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

Start Hunting!

Translated by