Info

此问题已关闭。 请重新打开它进行编辑或回答。

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

3 次查看(过去 30 天)
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

回答(1 个)

Guillaume
Guillaume 2016-11-17
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 个评论
Tamil selvan
Tamil selvan 2016-11-17
编辑:Guillaume 2016-11-17
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?

此问题已关闭。

Community Treasure Hunt

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

Start Hunting!

Translated by