Sections
If you don’t know, in short - Numpy is a python library which provides support for fast computations over arrays (vectors, matrices, tensors). Its faster compared to structuring the same computation in base python because operations are vectorized & in general you end up writing code that is pretty close to mathematical notation of your operations instead of writing low level code & dealing with errors & overheads that might creep in during these operations.
Import numpy package for current session
import numpy as np
Vectors
Create vectors by generating different sequence of numbers : $\vec{V} = [a, b, c, d, e, . . . . . ]$
# sequence of integers between given bounds
w = np.arange(10,25, step=1)
# 10 random integers between given bounds
x = np.random.randint(low=0,high=10,size=10)
# 10 real numbers drawn from standard normal distribution
y = np.random.randn(10)
# A vector of length 10 with all zeroes
z = np.zeros(10)
# Another convenient way to generate a vetor or even an array of zeroes is as follows:
z = np.zeros_like(y)
# generate sequence of numbers between given bounds & fixed step
s = np.arange(start=15, stop=35, step=2)
print(x)
[8 5 8 2 2 6 1 0 2 5]
Single vector operations
- Sum of a sequence : \(Sum = \displaystyle\sum_{i=1}^{n} x_i\)
x.sum()
30
- Adding a constant to each element of vector : \(x_{i_{new}} = \displaystyle x_i+c\)
c = 2
X_new = x+c
print(X_new)
[ 2 2 11 4 5 8 7 6 3 2]
- Multiplying a constant to each element of vector : \(x_{i_{new}} = \displaystyle x_i*c\)
c = 5
X_new = x*c
print(X_new)
[ 0 0 45 10 15 30 25 20 5 0]
- Reverse a vector : $x_{ij} = x_{ji}$
S_new = s[::-1]
print(S_new)
[33 31 29 27 25 23 21 19 17 15]
Calculate basic statistical measures
- Mean (\(\mu = \frac{1}{N}\displaystyle\sum_{i=1}^{N}{x_i}\))
x = np.random.randint(low=0,high=1000,size=100)
x.mean(dtype=np.float32)
475.54001
- Standard deviation ( \(\sigma = \sqrt{\displaystyle\sum_{i=1}^{N}{\frac{(x_i - \mu)^2} {N}}}\) )
x.std(dtype=np.float32)
298.57318
- Variance ( \(\sigma^2 = \displaystyle\sum_{i=1}^{N}{\frac{(x_i - \mu)^2} {N}}\) )
x.var(dtype=np.float32)
89145.938
Subset a vector
- Index for maximum & minimum values in a sequence
x.argmax()
37
x.argmin()
3
- Subset using index
# 2nd to 5th element (excluding 5th)
x[2:5]
array([ 31, 1, 561])
Matrices
Create a matrix
- Get a matrix of particular shape by providing values
x = np.array([
[1,2,3,4],
[1,2,3,4],
[1,2,3,4]
])
x
array([[1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3, 4]])
- Transpose of a matrix
y = np.array([
[1,2,3,4],
[1,2,3,4],
[1,2,3,4]
]).T
y
array([[1, 1, 1],
[2, 2, 2],
[3, 3, 3],
[4, 4, 4]])
Get a matrix of particular shape
- Zero matrix of a specific shape
np.zeros(shape=(4,5))
array([[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.]])
- All-ones matrix
np.ones(shape=(4,5))
array([[ 1., 1., 1., 1., 1.], [ 1., 1., 1., 1., 1.], [ 1., 1., 1., 1., 1.], [ 1., 1., 1., 1., 1.]])
- All-ones matrix similar to another matrix
np.ones_like(x)
array([[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]])
- Randomly initialized matrix
np.random.rand(4,5)
array([[ 0.09429882, 0.34480325, 0.11695385, 0.96194279, 0.53927071],
[ 0.78844899, 0.7351646 , 0.43960103, 0.20815778, 0.50149201],
[ 0.26338585, 0.89077065, 0.20248855, 0.90770632, 0.91826611],
[ 0.62807109, 0.48525764, 0.55865624, 0.88327996, 0.51471048]])
Matrix operations
- Multiply a matrix by constant
5 * x
array([[ 5, 10, 15, 20],
[ 5, 10, 15, 20],
[ 5, 10, 15, 20]])
- Multiply a matrix by another
y@x # New matrix maultiplication operator in python3.5+ !
array([[ 3, 6, 9, 12],
[ 6, 12, 18, 24],
[ 9, 18, 27, 36],
[12, 24, 36, 48]])
np.dot(y,x) # numpy based dot product
array([[ 3, 6, 9, 12],
[ 6, 12, 18, 24],
[ 9, 18, 27, 36],
[12, 24, 36, 48]])
x*y.T # elementwise multiplication or hadamard product of two matrices with same shape
array([[ 1, 4, 9, 16],
[ 1, 4, 9, 16],
[ 1, 4, 9, 16]])
Subset a matrix
- Select all rows and columns (entire matrix)
x[:,:]
array([[1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3, 4]])
- Select all rows and specific range of columns
x[:,1:3]
array([[2, 3],
[2, 3],
[2, 3]])