Python Numpy
Fast multidimensional array object and tools.
import numpy as np
Create array
a = np.array([1, 2, 3]) # 1 dimensional array of values 1., 2., 3.
a = np.array([[1, 2, 3], [4, 5, 6]])
"""
array([[1, 2, 3],
[4, 5, 6]])
"""
To create a 1 dimensional array of zeros
a = np.zeros(10) # 10 elements of zeros
a = np.ones(10) # 10 elements of ones
To create an array of 9 elements with values from 3 to 19, equally spaced.
a = linspace(3, 19, 9)
To reshape an array
a = np.array([0,1,2,3,4,5,6,7,8,9,10,11])
a.shape = (3,4) # turns it into a 2 dimensional array of 3 x 4 elements
"""
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
"""
To create an array of random values
np.random.seed(0) # seed the random number generator
a = np.random.randint(10, size=6) # exclusive max value of 10
a = np.random.randint(0, 10, size=6) # inclusive min of 0, exclusive max value of 10
# eg: array([5, 3, 4, 8, 2, 4])
a = np.random.randint(0,10, size=(4,4)) # create a 2 dimensional array 4 x 4 elements
Array properties
a = np.array([[1, 2, 3], [4, 5, 6]])
a.ndim # number of dimensions
a.itemsize # number of bytes in the array
a.dtype # data type in the array
a.size # size of the array (number of elements)
a.shape # length in each dimension, eg (2,3)
Functions to query the array
a = np.array([[1, 2, 3], [4, 5, 6]])
# returns single value results
a.max() # maximum element value
a.min() # minimum element value
a.sum() # sum total of all elements
np.median(a) # statistical median
np.prod(a) # product (multiplication) of each element
np.argmax(a) # index value of maximum
np.argmin(a) # index value of minimum
# returns arrays of same size+shape with results performed on each element
np.sqrt(a) # square root of each element
np.std(a) # standard deviation of each element
np.sin(a) # sine of each element
np.sort(a) # sort the array
# evaluate each element
a < 3 # where is each element < 3
"""
array([[ True, True, False],
[False, False, False]])
"""
a[a < 3] # return the array where each element is < 3
"""
array([1, 2])
"""
Matrix calculations
a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([[3, 1, 4], [1, 5, 9]])
c = a+b # matrix addition, eg: [[ 4, 3, 7], [ 5,10,15]]
d = a-b # matrix subtraction, eg: [[-2, 1,-1], [ 3, 0,-3]]
e = a*b # matrix multiplication, eg [[ 3, 2,12], [ 4,25,54]]
f = a/b # matrix division, eg [[0.3333, 2., 0.75], [4., 1., 0.6667.]]
g = a+10 # add 10 to each element
h = a*10 # multiply each element by 10
Dot product based calculations
Mathematically, a dot product is the sum of multiplying the matching elements of two arrays (most commonly vectors).
Using our arrays a and b below, this would be achieved by:
- 13 + 22 + 46 + 51
There are several ways to calulate the dot product with numpy
a = np.array([[1, 2], [4, 5]])
b = np.array([[3, 2], [6, 1]])
dot = np.sum(a*b) # = 100
dot = np.dot(a,b) # [[15, 4], [42, 13]]
dot = a.dot(b) # [[15, 4], [42, 13]]
dot = b.dot(a) # [[11,16], [10, 17]]
Array indexing, slicing
primes = [1, 2, 3, 5, 7, 11, 13, 17, 19, 23]
primes[2] # = 3
primes[2:5] # = [3, 5, 7]
primes[::-1] # = reverses the array
primes[::2] # = every 2nd element
Image manipulation
It's quite seemless to convert back and forth between PIL images and Numpy arrays
im = Image.open("/path/to/a/photo.jpg")
a = np.array(im)
print(a.shape) # (600, 800, 4) .... (rows, columns, colour channels)
b = a[::-1] # reverses the rows in the image
Image.fromarray(b).show()
b = a[60:540, 80:720] # create a 640x480 cut away from the centre of the photo
Image.fromarray(b).show()
Transpose
a = np.array([[1, 2, 3], [4, 5, 6]]).T # The .T will swap rows and columns
"""
array([[1, 4],
[2, 5],
[3, 6]])
"""