Loops and Vectorization I

Note: Avoid loops whenever possible (even though the latest versions of MATLAB now optimize loops and are much more efficient than they used to be)

As a first example we compute the square of the length (or 2-norm) of a random vector:

Define the length of vector

n = 50000;

Define a random vector

x = rand(n,1);

How long does a for-loop take?

tic;
s = 0;
for i=1:n
    s = s + x(i)^2;
end
t1 = toc;
fprintf('norm(x) = %f \n', s)
fprintf('Time with for-loop: %f seconds\n\n', t1)
norm(x) = 16669.072777 
Time with for-loop: 0.056678 seconds

Now vectorized using MATLAB's sum function

tic;
s = sum(x.^2);
t2 = toc;
fprintf('norm(x) = %f \n', s)
fprintf('Time vectorized with sum: %f seconds\n\n', t2)
norm(x) = 16669.072777 
Time vectorized with sum: 0.000271 seconds

And using MATLAB's norm function

tic;
s = norm(x)^2;
t3 = toc;
fprintf('norm(x) = %f \n', s)
fprintf('Time vectorized with norm: %f seconds\n\n', t3)
norm(x) = 16669.072777 
Time vectorized with norm: 0.000455 seconds