A Primer on Numpy The core data structure used in numpy is array.
Import Numpy
After install numpy, simply import it. Usually people import it as np for abbreviation.
Why using numpy? Why not python list? Python List L = [i for i in range (10 )] print (L)
output
script [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Python’s list may contain different data types
pro: flexibility
con: inefficient
Python Array Python also has data type array which can only take one type of data structure
import arrayarr = array.array("i" , (i for i in range (10 )))
An error will be raised if we assign another data type to array
arr[5 ] = "python" --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input -58 -249200ff8ac8> in <module> ----> 1 arr[5 ]="python" TypeError: an integer is required (got type str )
Python array does not treat the array data as vector or matrix, hence the methods used for vector or matrix are not implemented
Numpy Array It’s simple to create a numpy array:
nparr = np.array([i for i in range (10 )]) nparr
output
script array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
numpy array can only store one type of data
output
script
If we change an element to a different data type (e.g. from int to float), numpy array will automatically change this value back to the array datatype
nparr[5 ] = 5.8 print (nparr)print (nparr.dtype)
output
script array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) dtype('int32')
To create an array with float data type
nparr2 = np.array([1 ,2 ,3.0 ]) nparr2.dtype
output
script
Create Numpy Array and Matrix Alternative ways to create array There are a number of other built-in methods to create arrays
npzero = np.zeros(10 ) npzero npzero.dtype
output
script array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]) dtype('float64')
If we want to create a zero array of int data type
output
script array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
To create a matrix of 5 rows x 6 cols, instead of passing the size, we pass a tuple of row and col sizes
output
script array([[0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0.]])
output
script array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
Create a one matrix
output
script array([[1., 1., 1., 1.], [1., 1., 1., 1.], [1., 1., 1., 1.]])
Create an array/matrix with specific value
np.full((3 ,4 ), 20 ) np.full((3 ,4 ), 20.0 )
output
script array([[20, 20, 20, 20], [20, 20, 20, 20], [20, 20, 20, 20]]) array([[20., 20., 20., 20.], [20., 20., 20., 20.], [20., 20., 20., 20.]])
arange method In python, there’s a method called range
[i for i in range (1 ,20 ,3 )]
output
script [1, 4, 7, 10, 13, 16, 19]
In numpy, there’s a built-in method called arange, with similar usage
[i for i in np.arange(1 ,20 ,3 )]
output is the same
script [1, 4, 7, 10, 13, 16, 19]
However the big difference here is in python, the step can only be int, whereas float number can be used for step in np arange
[i for i in range (0 ,20 ,0.4 )] --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input -89 -ccd0e40a6b64> in <module> ----> 1 [i for i in range (0 ,20 ,0.4 )] TypeError: 'float' object cannot be interpreted as an integer
For np.arange
[i for i in np.arange(15 ,20 ,0.5 )]
output
script [15.0, 15.5, 16.0, 16.5, 17.0, 17.5, 18.0, 18.5, 19.0, 19.5]
Linspace method linspace method is used to create an evenly segmented range.
To create 10 evenly distributed data points between a range from 0 to 20
Note: for linspace the end point 20 is inclusive, which is different from aranage
script array([ 0. , 2.22222222, 4.44444444, 6.66666667, 8.88888889, 11.11111111, 13.33333333, 15.55555556, 17.77777778, 20. ])
Random To use the random module
Int random
To get a random int between 0 and 10 (non-inclusive)
To get an 8 element array containing int number between 0 and 100
np.random.randint(0,100,8)
output
script array([47, 9, 23, 48, 79, 42, 32, 80])
To get a 4x5 random int matrix
np.random.randint(0 ,100 ,(4 ,5 ))
output
script array([[69, 3, 25, 83, 48], [19, 52, 52, 13, 62], [ 6, 22, 79, 63, 48], [ 8, 8, 53, 21, 20]])
Set seed
all random numbers generated by computers are pseudo-random.
Use a random see to make sure that the random numbers generated each time are the same
To set a seed
np.random.seed(42 ) np.random.randint(0 ,100 ,(4 ,5 ))
script array([[51, 92, 14, 71, 60], [20, 82, 86, 74, 74], [87, 99, 23, 2, 21], [52, 1, 87, 29, 37]])
repeat above
np.random.seed(42 ) np.random.randint(0 ,100 ,(4 ,5 ))
script array([[51, 92, 14, 71, 60], [20, 82, 86, 74, 74], [87, 99, 23, 2, 21], [52, 1, 87, 29, 37]])
Float Random
script
script array([0.61748151, 0.61165316, 0.00706631, 0.02306243, 0.52477466, 0.39986097, 0.04666566, 0.97375552, 0.23277134, 0.09060643])
script array([[0.61838601, 0.38246199, 0.98323089, 0.46676289], [0.85994041, 0.68030754, 0.45049925, 0.01326496], [0.94220176, 0.56328822, 0.3854165 , 0.01596625]])
Normal Distribution In statistics, it’s common to generate a normal distribution. To generate a random normal distribution:
A random normal distribution number
script
A random normal distribution number with mean=10, variance=4
script
To get a random normal distribution array
script array([-1.10109776, 1.13022819, 0.37311891, -0.38647295, -1.15877024, 0.56611283, -0.70445345, -1.3779393 , -0.35311665, -0.46146572])
To get a random normal distribution matrix
np.random.normal(0 ,1 ,(3 ,5 ))
script array([[ 0.39637394, -0.6256163 , -0.52246148, 0.0130339 , 0.37776959], [ 0.0628246 , 0.50159637, -0.14694539, 0.18062297, 0.96481058], [-1.06483115, 0.1087118 , 0.10576365, 0.92066672, -0.22672246]])