Info

Diese Frage ist geschlossen. Öffnen Sie sie erneut, um sie zu bearbeiten oder zu beantworten.

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

3 Ansichten (letzte 30 Tage)
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 Kommentare
Alexandra Harkai
Alexandra Harkai am 17 Nov. 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)

Antworten (1)

Guillaume
Guillaume am 17 Nov. 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 Kommentar
Tamil selvan
Tamil selvan am 17 Nov. 2016
Bearbeitet: Guillaume am 17 Nov. 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?

Diese Frage ist geschlossen.

Community Treasure Hunt

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

Start Hunting!

Translated by