How to speed up for loop with a few calculations?
1 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
Guillaume
2016-6-15
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.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!