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