How to speed up for loop with a few calculations?
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Dawid Smolen
el 15 de Jun. de 2016
Comentada: Dawid Smolen
el 15 de Jun. de 2016
My question is how to speed up for loop with a number of different calculations, such as abs, multiplication, sqrt, ^2, cos(), and array indexing? (there is array(i) )
for i=ind1:ind2
A = ( array(i)*(i+ind2) + array(i)*(i+ind1) ) / sqrt((ind2-i)^2 + (ind1-i)^2);
A = cos(pi*A);
% and so on
end
Is it possible to use some really complicated bsxfun(), repmat()? I am not looking for exact solution, just would like to know if it is possible, when, and which functions might be helpful
0 comentarios
Respuesta aceptada
Guillaume
el 15 de Jun. de 2016
Your question is far too generic to be able to give a precise answer.
The first mistake people do is operate on an array one element at a time instead of operating on the whole array at once. Other than the fact that you constantly overwrite A, this appears to be the mistake you've made in your example.
%assuming array is a row vector
v = ind1:ind2; %make a vector of the values i iterates over
A = (array .* (v + ind2) + array .*(v + ind1)) ./ hypot(ind2 - v, ind1 - v);
A = cos(pi*A);
For more complicated stuff, bsxfun, repmat, ndgrid, etc. may be useful indeed.
Más respuestas (0)
Ver también
Categorías
Más información sobre Matrix Indexing en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!