0% found this document useful (0 votes)
27 views12 pages

03 Numpy

The document discusses NumPy arrays and various methods to create, manipulate and perform operations on arrays. It introduces NumPy arrays and their advantages over regular lists. It describes various built-in methods like arange, zeros, ones, linspace etc. to create arrays and also discusses random number generation and indexing/selection of elements in arrays. Finally it covers basic arithmetic, universal functions and operations that can be performed on arrays.

Uploaded by

Anonymous 001
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
27 views12 pages

03 Numpy

The document discusses NumPy arrays and various methods to create, manipulate and perform operations on arrays. It introduces NumPy arrays and their advantages over regular lists. It describes various built-in methods like arange, zeros, ones, linspace etc. to create arrays and also discusses random number generation and indexing/selection of elements in arrays. Finally it covers basic arithmetic, universal functions and operations that can be performed on arrays.

Uploaded by

Anonymous 001
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 12

01-Numpy-Arrays (3)

March 4, 2024

1 Importing Numpy
[99]: import numpy as np

1.1 Arrays
Why we use Numpy array and not just a list?
• Memory efficient
• Easily expandable to N-dimensions
• Speed of calculations of numpy array
• Broadcasting operations and functions

[100]: lst = [1,2,3]


arr = np.array(lst)

[101]: type(lst)

[101]: list

[102]: type(arr)

[102]: numpy.ndarray

[103]: mat = [[1,2,3],[4,5,6],[7,8,9]]


mat

[103]: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

[104]: np.array(mat)

[104]: array([[1, 2, 3],


[4, 5, 6],
[7, 8, 9]])

1
1.2 Built-in Methods to create arrays
[105]: #arange: return evenly spaces values within a given interval

np.arange(0,10)

[105]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

[106]: np.arange(0,11,3) # here the last column denotes the step size

[106]: array([0, 3, 6, 9])

1.3 Zeros and Ones : Gives 0 ans 1 matrix


[107]: np.zeros(4)

[107]: array([0., 0., 0., 0.])

[108]: np.zeros((3,4))

[108]: array([[0., 0., 0., 0.],


[0., 0., 0., 0.],
[0., 0., 0., 0.]])

[109]: np.ones((4,2))

[109]: array([[1., 1.],


[1., 1.],
[1., 1.],
[1., 1.]])

1.4 Linspace : Returns equally spaced values


[110]: np.linspace(0,15,5) # here the last column denotes how many numbers you want

[110]: array([ 0. , 3.75, 7.5 , 11.25, 15. ])

[111]: #Eye: gives Identity Matrix

np.eye(5)

[111]: array([[1., 0., 0., 0., 0.],


[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.]])

2
2 Random
[112]: #rand: create array of given shape and populates it with random samples from a␣
↪uniform distribution over [0,1)

np.random.rand(9)

[112]: array([0.89460666, 0.08504421, 0.03905478, 0.16983042, 0.8781425 ,


0.09834683, 0.42110763, 0.95788953, 0.53316528])

[113]: np.random.rand(3,4)

[113]: array([[0.69187711, 0.31551563, 0.68650093, 0.83462567],


[0.01828828, 0.75014431, 0.98886109, 0.74816565],
[0.28044399, 0.78927933, 0.10322601, 0.44789353]])

[114]: #randn: return a sample from the standard normal distribution i.e numbers will␣
↪be distributed around 0

np.random.randn(10)

[114]: array([-0.26788808, 0.53035547, -0.69166075, -0.39675353, -0.6871727 ,


-0.84520564, -0.67124613, -0.0126646 , -1.11731035, 0.2344157 ])

[115]: np.random.randn(5,4)

[115]: array([[ 1.65980218, 0.74204416, -0.19183555, -0.88762896],


[-0.74715829, 1.6924546 , 0.05080775, -0.63699565],
[ 0.19091548, 2.10025514, 0.12015895, 0.61720311],
[ 0.30017032, -0.35224985, -1.1425182 , -0.34934272],
[-0.20889423, 0.58662319, 0.83898341, 0.93110208]])

[116]: #randint: return integers from low(inclusive) to high(exclusive)


np.random.randint(1,10)

[116]: 8

[117]: np.random.randint(1,10,15) #excluding 10 here #here the last column denotes␣


↪how many numbers you want

## Also, everytime we run this command, different set of random numbers will be␣
↪generated, so if we want that everytime the same

# set of numbers to be generated then we can use 'Seed'

[117]: array([2, 8, 9, 5, 1, 2, 9, 3, 4, 2, 3, 8, 3, 7, 1])

3
2.1 Seed : generates same set of random numbers everytime for a particular
seed number
[118]: np.random.seed(1) #it is same as random_state in Train Test␣
↪split

np.random.randint(1,10,19) # here the last column denotes how many␣


↪numbers you want

# We have to run both the above commands in the same cell, otherwise it won't␣
↪give the same output

[118]: array([6, 9, 6, 1, 1, 2, 8, 7, 3, 5, 6, 3, 5, 3, 5, 8, 8, 2, 8])

2.2 Array attributes and Methods


[119]: arr = np.arange(25)
ranar = np.random.randint(0,50,10)

[120]: arr

[120]: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,


17, 18, 19, 20, 21, 22, 23, 24])

[121]: ranar

[121]: array([30, 32, 22, 13, 41, 9, 7, 22, 1, 0])

[131]: #reshape
arr.reshape(5,5) #Changes not permanent

[131]: array([[ 0, 1, 2, 3, 4],


[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])

[132]: arr1 = arr.reshape(5,5)

[123]: arr

[123]: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,


17, 18, 19, 20, 21, 22, 23, 24])

[124]: ranar

[124]: array([30, 32, 22, 13, 41, 9, 7, 22, 1, 0])

[125]: ranar.max()

4
[125]: 41

[126]: ranar.argmax() #gives at which index the value is maximum

[126]: 4

[127]: ranar.min()

[127]: 0

[128]: ranar.argmin() #gives at which index the value is minimum

[128]: 9

[133]: arr.shape

[133]: (25,)

[129]: arr1.shape

[129]: (5, 5)

[130]: ranar.shape

[130]: (10,)

5
02_Numpy_Indexing_Selection (1)

March 5, 2024

[2]: import numpy as np

[3]: arr = np.arange(0,21,2)


arr

[3]: array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20])

[4]: arr[4]

[4]: 8

[5]: arr[:7]

[5]: array([ 0, 2, 4, 6, 8, 10, 12])

0.1 Broadcasting
[6]: arr[0:5] = 100
arr

[6]: array([100, 100, 100, 100, 100, 10, 12, 14, 16, 18, 20])

[7]: slice_of_arr = arr[0:5]


slice_of_arr

[7]: array([100, 100, 100, 100, 100])

[8]: slice_of_arr[:] = 99
slice_of_arr

[8]: array([99, 99, 99, 99, 99])

[9]: arr #changes reflects in original array

[9]: array([99, 99, 99, 99, 99, 10, 12, 14, 16, 18, 20])

1
0.1.1 In Broadcasting, data is not copied. Its a view of original array. This avoids
memory problems

[10]: arr_copy = arr.copy()


arr_copy

[10]: array([99, 99, 99, 99, 99, 10, 12, 14, 16, 18, 20])

0.2 Indexing a 2D array (Matrices)


[11]: arr_2d = np.array(([5,10,15],[20,25,30],[35,40,45])) #since there are two␣
↪brackets after np.array, it means this is a 2D array!

arr_2d

[11]: array([[ 5, 10, 15],


[20, 25, 30],
[35, 40, 45]])

[12]: arr_2d[1]

[12]: array([20, 25, 30])

[13]: arr_2d[1][1]

[13]: 25

[14]: arr_2d[2][2]

[14]: 45

[15]: arr_2d[2][-1]

[15]: 45

[16]: arr_2d[-1][-1]

[16]: 45

[17]: arr_2d[-1,-1]

[17]: 45

[27]: arr_2d[0:2,1:] #arr[rows,columns]

[27]: array([[10, 15],


[25, 30]])

[19]: arr_2d[1:,:2]

2
[19]: array([[20, 25],
[35, 40]])

0.3 Conditional selection


[20]: arr = np.arange(1,11)
arr

[20]: array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

[21]: bool_arr = arr > 4

[22]: arr[bool_arr == False]

[22]: array([1, 2, 3, 4])

[23]: arr[bool_arr]

[23]: array([ 5, 6, 7, 8, 9, 10])

[24]: arr[arr > 7]

[24]: array([ 8, 9, 10])

[25]: x = 10/5
arr[arr>x]

[25]: array([ 3, 4, 5, 6, 7, 8, 9, 10])

3
03_Numpy_Operations

March 5, 2024

1 Arithmetic
[1]: import numpy as np

[2]: arr = np.arange(0,10)


arr

[2]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

[3]: arr+arr

[3]: array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])

[4]: arr*arr

[4]: array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81])

[5]: arr-arr

[5]: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])

[6]: arr/arr

C:\Users\shrey\AppData\Local\Temp\ipykernel_20396\1862401812.py:1:
RuntimeWarning: invalid value encountered in divide
arr/arr

[6]: array([nan, 1., 1., 1., 1., 1., 1., 1., 1., 1.])

[7]: 1/arr

C:\Users\shrey\AppData\Local\Temp\ipykernel_20396\255282349.py:1:
RuntimeWarning: divide by zero encountered in divide
1/arr

[7]: array([ inf, 1. , 0.5 , 0.33333333, 0.25 ,


0.2 , 0.16666667, 0.14285714, 0.125 , 0.11111111])

[8]: arr**0.5

1
[8]: array([0. , 1. , 1.41421356, 1.73205081, 2. ,
2.23606798, 2.44948974, 2.64575131, 2.82842712, 3. ])

1.1 Universal array functions


[9]: np.sqrt(arr)

[9]: array([0. , 1. , 1.41421356, 1.73205081, 2. ,


2.23606798, 2.44948974, 2.64575131, 2.82842712, 3. ])

[10]: np.exp(arr)

[10]: array([1.00000000e+00, 2.71828183e+00, 7.38905610e+00, 2.00855369e+01,


5.45981500e+01, 1.48413159e+02, 4.03428793e+02, 1.09663316e+03,
2.98095799e+03, 8.10308393e+03])

[11]: np.cos(arr)

[11]: array([ 1. , 0.54030231, -0.41614684, -0.9899925 , -0.65364362,


0.28366219, 0.96017029, 0.75390225, -0.14550003, -0.91113026])

[12]: np.log(arr)

C:\Users\shrey\AppData\Local\Temp\ipykernel_20396\3120950136.py:1:
RuntimeWarning: divide by zero encountered in log
np.log(arr)

[12]: array([ -inf, 0. , 0.69314718, 1.09861229, 1.38629436,


1.60943791, 1.79175947, 1.94591015, 2.07944154, 2.19722458])

1.1.1 Summary statistics

[16]: arr

[16]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

[17]: arr.sum()

[17]: 45

[18]: arr.mean()

[18]: 4.5

[19]: arr.max()

[19]: 9

[20]: arr.min()

2
[20]: 0

[21]: arr.var()

[21]: 8.25

[22]: arr.std()

[22]: 2.8722813232690143

1.2 Axis Logic


• axis 0 denotes the vertical axis
• axis 1 denotes the horizaontal axis

[23]: arr_2d = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])


arr_2d

[23]: array([[ 1, 2, 3, 4],


[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])

[24]: arr_2d.sum(axis = 0 )

[24]: array([15, 18, 21, 24])

[25]: arr_2d.sum(axis = 1 )

[25]: array([10, 26, 42])

3
4_Exercises

March 5, 2024

[1]: import numpy as np

[2]: #Create an array of 20 lineraly spaced points between 0 and 1


np.linspace(0,1,20)

[2]: array([0. , 0.05263158, 0.10526316, 0.15789474, 0.21052632,


0.26315789, 0.31578947, 0.36842105, 0.42105263, 0.47368421,
0.52631579, 0.57894737, 0.63157895, 0.68421053, 0.73684211,
0.78947368, 0.84210526, 0.89473684, 0.94736842, 1. ])

[3]: #reshape above array in 4*5 dimension


arr = np.linspace(0,1,20).reshape(4,5)
arr

[3]: array([[0. , 0.05263158, 0.10526316, 0.15789474, 0.21052632],


[0.26315789, 0.31578947, 0.36842105, 0.42105263, 0.47368421],
[0.52631579, 0.57894737, 0.63157895, 0.68421053, 0.73684211],
[0.78947368, 0.84210526, 0.89473684, 0.94736842, 1. ]])

[4]: arr.sum(axis=1)

[4]: array([0.52631579, 1.84210526, 3.15789474, 4.47368421])

[5]: #left bottom 3*3


arr[1:,:3]

[5]: array([[0.26315789, 0.31578947, 0.36842105],


[0.52631579, 0.57894737, 0.63157895],
[0.78947368, 0.84210526, 0.89473684]])

You might also like