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)
Mostrar comentarios más antiguos
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
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
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
La pregunta está cerrada.
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!