Tutorial on Python Library: Numpy


Bikash Santra and Avisek Gupta

Indian Statistical Institute, Kolkata


1. Import library

In [1]:
import numpy as np
In [2]:
print(np.__version__)
1.15.1

2. Single-dimensional arrays, behave similar to row vectors

In [3]:
x = np.array([1,2,3,4,5])

print('x =', x)
x = [1 2 3 4 5]
In [4]:
print('x =', x)

y = x + 5
print('y =', y)

z = x * 2
print('z =', z)
x = [1 2 3 4 5]
y = [ 6  7  8  9 10]
z = [ 2  4  6  8 10]

3. Matrices: Two-dimensional arrays

In [5]:
A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

print(A)
[[1 2 3]
 [4 5 6]
 [7 8 9]]
In [6]:
C = A + 10
print(C)

print('')

D = A * 3
print(D)
[[11 12 13]
 [14 15 16]
 [17 18 19]]

[[ 3  6  9]
 [12 15 18]
 [21 24 27]]

4. Compatible operations for matrices and vectors

In [7]:
A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

x = np.array([1, 2, 3])

print(A + x)
[[ 2  4  6]
 [ 5  7  9]
 [ 8 10 12]]
In [8]:
x = np.array([1, 2, 3])

y = np.array([1, 2, 3])

inner = np.dot(x, y)

print(inner)

outer = np.outer(x,y)

print(outer)
14
[[1 2 3]
 [2 4 6]
 [3 6 9]]

5. Random matrices

In [9]:
A = np.random.rand(5,3)
print(A)

print('')

x = np.random.rand(5)
print(x)

# Will not work
#print(A + x)
[[0.20530299 0.56854599 0.6356497 ]
 [0.36592332 0.45788439 0.05672191]
 [0.97342743 0.18150415 0.23003348]
 [0.64144569 0.42757667 0.01718501]
 [0.90392084 0.60265528 0.25070755]]

[0.90380615 0.28060724 0.48269801 0.18133058 0.73557197]

6. Reshaping matrices

In [10]:
x = np.random.rand(5)
print(x)

print('')

y = np.reshape(x,(5,1))
print(y)
[0.77214798 0.34023746 0.52449063 0.73849445 0.10077221]

[[0.77214798]
 [0.34023746]
 [0.52449063]
 [0.73849445]
 [0.10077221]]
In [11]:
A = np.random.rand(5,3)
print(A)

print('')

x = np.random.rand(5)
print(x)

# Will not work
#print(A + x)

y = np.reshape(x,(5,1))
print(y)

print('')

print(A + y)
[[0.74693012 0.38334026 0.96260311]
 [0.99248339 0.6846442  0.26482562]
 [0.29606977 0.58012417 0.10864942]
 [0.96917494 0.10971353 0.66260344]
 [0.09639195 0.7199237  0.63751997]]

[0.27979475 0.51545151 0.67835145 0.05754659 0.0121255 ]
[[0.27979475]
 [0.51545151]
 [0.67835145]
 [0.05754659]
 [0.0121255 ]]

[[1.02672487 0.66313501 1.24239786]
 [1.5079349  1.20009571 0.78027714]
 [0.97442121 1.25847562 0.78700087]
 [1.02672153 0.16726012 0.72015003]
 [0.10851745 0.7320492  0.64964547]]

7. Combining (or stacking) matrices

In [12]:
x = np.random.rand(3)
print(x)
y = np.random.rand(3)
print(y)

z = np.vstack((x, y))
print(z)
[0.07596772 0.53721694 0.43617562]
[0.35320088 0.09782355 0.18115693]
[[0.07596772 0.53721694 0.43617562]
 [0.35320088 0.09782355 0.18115693]]

8. Dimension and shape of numpy arrays

In [13]:
A = np.random.rand(5,3)
print(A.ndim)
print(A.shape)

print('')

x = np.random.rand(5)
print(x.ndim)
print(x.shape)
2
(5, 3)

1
(5,)

9. Special Matrices

In [14]:
print(np.zeros((3,2)))

print('')

print(np.ones((2,3)))

print('')

print(np.eye(3))
[[0. 0.]
 [0. 0.]
 [0. 0.]]

[[1. 1. 1.]
 [1. 1. 1.]]

[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
In [15]:
A = np.arange(9)

print(A)
[0 1 2 3 4 5 6 7 8]
In [16]:
A = np.arange(9)
B = np.reshape(A, (3,3))

print(B)
[[0 1 2]
 [3 4 5]
 [6 7 8]]

10. Numpy array operations: max, argmax, min, argmin, sort, argsort

In [17]:
x = np.array([5,4,1,8,7,3,9,2,6])

print(np.max(x))
print(np.argmax(x))

print('')
print(np.min(x))
print(np.argmin(x))

print('')
print(np.sort(x))
print(np.argsort(x))
9
6

1
2

[1 2 3 4 5 6 7 8 9]
[2 7 5 1 0 8 4 3 6]

11. Statistical operations: mean, var, std...

In [18]:
x = np.array([5,4,1,8,7,3,9,2,6])

print(np.mean(x))
print(np.var(x))
5.0
6.666666666666667

12. Boolean Element-Wise Operations

In [19]:
x = np.random.rand(3,3)
print(x)

print(x>0.5)
[[0.61898049 0.56530855 0.34727539]
 [0.48239321 0.70760793 0.13939399]
 [0.13226832 0.01516784 0.26669568]]
[[ True  True False]
 [False  True False]
 [False False False]]

13. Boolean 'Mask'

In [20]:
x = np.random.rand(3,3)
print(x)

mask = x > 0.5
print(x[mask])
[[0.16096965 0.20711425 0.93422789]
 [0.61548788 0.4707459  0.27669234]
 [0.63980583 0.43348712 0.73657104]]
[0.93422789 0.61548788 0.63980583 0.73657104]
In [21]:
x = np.random.rand(3,3)

mask = x > 0.5
x[mask] = 0
print(x)

r, c = np.where(x==0)
print(r, c)
[[0.2507038  0.         0.        ]
 [0.45451111 0.08806421 0.        ]
 [0.         0.         0.23096753]]
[0 0 1 2 2] [1 2 2 0 1]