A Quick Introduction to Vectorization in Matlab
Overview
Vectorization is the use of Matlab's implementation of matrix algebra syntax or
array operators
to perform calculation without the explicit use of loops.
Vectorized expression : x = linspace(0,2*pi); y = sin(x); Because x is a vector, Matlab auto- matically creates y as a vector of the same shape. Each element of y is the sine of the corresponding element of x |
Equivalent Loop : n = 100; dx = 2*pi/(n-1); x(1) = 0; y(1) = sin(x(1)); for i=2:n x(i) = x(i-1) + dx; y(i) = sin(x(i)); end |
Advantages
Vectorization is good because
•
Vectorization enables writing of code that is compact and idiomatic.
•
Compact, idiomatic code is easier to read and debug.
•
Vectorized code is faster, even though the same computations are performed.
Matrix Operations are Vectorized
The Matlab *, +, and - operators adhere (mostly) to the rules of linear algebra.
Examples:
>> x = [1; 2; 3]; y = [5; 1; -2];
>> z = x + y
z =
6
3
1
>> A = [2 -1 3; 4 0 7; 5 9 -6];
>> u = A*x
u =
9
25
5
Scalar addition
You cannot add a scalar to a vector or a matrix, but Matlab allows the following
abuse of the
notation of linear algebra .
>> s = 2
s =
2
>> B = A + s
>> v = z + s
v =
8
5
3
Array Operators
There are situations where vectorization would be good, but not supported by the
rules of linear
algebra.
Example: Compute the area of a set of circles , a =πr2, where r is a vector of
radii. According
to the rules of linear algebra , only square matrices can be squared.
To help the programmer, without breaking the rules of linear algebra , Matlab
provides array
operators. In the case of the square (or any power ), the expression y =x.^2
creates a vector y of the
same shape as x, and each element of y is the square of corresponding element of
x
Vectorized expression: a = pi*r.^2; |
Equivalent Loop : for i=1:length(r) a(i) = pi*x(i)^2; end |
Operator | Meaning | Vectorized Example |
Equivalent Loop |
.* | Element-by-element multiplication |
z = x.*y | for i=1:length(x) z(i) = x(i)*y(i); end |
./ | Element-by-element division |
z = x./y | for i=1:length(x) z(i) = x(i)/y(i); end |
.^ | Raise each element to a power |
z = x.^(1/3) | for i=1:length(x) z(i) = x(i)^(1/3); end |
Note: There is no need for .+, .- operators.
Prev | Next |