Transcript for:
Comprehensive NumPy Tutorial Overview

Hello everyone, this is Dathan. Welcome to my YouTube channel. In this video, I'm going to give you a complete hands-on tutorial on NumPy in Python.

NumPy is one of the most important libraries in Python, which is used in several domains like machine learning, data science, etc. Okay, so in this video, I will be giving you a complete walkthrough of several functions in NumPy and several properties of NumPy arrays. Okay, so if you are new to this channel, in this channel, I'm making a hands-on machine learning course with Python. I will be...

publishing three videos per week two videos will be on this machine learning course order so these two videos will be posted on monday evening and wednesday evening and i will be posting one project video every week and that video will be posted on friday evening okay so subscribe to my channel for more videos and stay tuned so you can join my telegram group i will give the link for the telegram group in the description of this video so that i can notify you once i post new videos okay so let's get started first of all numpy so the full form for numpy is nothing but numerical python okay so this numpy is basically used for several numerical operations and other numerical things which we want to do in our project or in our domain say for example in machine learning we will encounter large data sets so data set containing lakhs and even millions of data points and numbers okay so this numpy library is used for processing that numerical values better and other such kind of things okay so hence it is the short form for numerical python is numpy okay so numpy arrays has two main advantages over list and tuple so list and tuple are the inbuilt data types in python so they store more than one values in a data type say for example integer or float can only store one value but in a list we can store multiple values so list and tuples are nothing but a collection of values okay and the numpy arrays are you know they are just like you know a list and tuple but they are more advanced than that okay so the advantages of numpy array over list is that they allow several mathematical operations to be performed on them compared to list okay so we cannot perform as many operations that we can do on a numpy array on a list okay so and the other main important thing is the operations that we do on a numpy array are very fasted as compared to list okay so these are the main advantages of it and so you you can see this documentation here so you can just search for numpy documentation so you will find this numpy.org site so this is where you can find the explanation about the several functions and what is meant by numpy and what is meant by numpy arrays and all those kind of things so if you are uh if you have any doubt while you are working on this okay so now let's get started with this so first in order to use numpy you need to import this library okay so for that you just need to give import numpy okay so now what i'm going to do is i'm going to shorten this numpy to np so i'll import numpy as np so what happens is this will import the numpy library in the abbreviation np okay so you can run this so press shift plus enter to run this so this environment is called as google collaboratory so in this google collaboratory you can run python codes so if you are new to this google collaboratory check out my google collaboratory basics video and the index of that video is 2.1 so in that i have explained you how you can use google collaboratory and other features of google collaboratory okay so here we have successfully imported numpy okay so as i told you earlier numpy is a python library so libraries are nothing but pre-made functions and pre-made classes which are stored in a python file okay so we can access these functions which are pre-made for our programming say for example that can be underline of code okay a particular function can be under lines of code so we don't have to write the entire underlines of code so rather than what you can do is you can create a module or a library and store that underlines of code in a single word or a function okay so using that particular library you can call that call that function and this is the use of libraries so instead of just recreating the code you can just call it with a function or libraries okay so that is the use of libraries in Python so and here we have this numpy library and i have imported numpy as np so as i have told you the one main advantage of numpy arrays is that the operations are faster in it okay so i'll just show you i'll show you how we can find that so i create a text here as list versus numpy time taken so here what i'm going to do is i'm going to perform a simple task on both list and numpy separately and i'm going to find that time taken to do that particular operation okay so or that particular process okay so for this i need to import time so from time so time is another library so from time input process time okay so this process time is used to measure the time required for a particular process okay so i'll run this okay now let's see the time taken for a particular task in a list time taken by a list okay one second okay so what i'll do is i'll create a python list so i'll declare the list as python list so we are creating a list named as python list and so list should be enclosed in square brackets and what i'm going to do is i'm going to create a for loop to assign values to this list okay so i for i in range or i in range let's say 10 000 okay so what i'm basically doing is i want this python list to have values starting from 1 to 10 000 so that is what i have mentioned through this range uh 10 000 so i'm creating a for loop that will uh give the list values from one to or zero to ten thousand okay so now what i'm doing is i'm mentioning this start time okay so start time is equal to Process time so we are using this process time to measure the time taken by this particular process now What I am going to do is so again I'm calling this list Python list and in this list I am going to add the value 5 to all the variables So we have totally we would have 10,000 value side from 0 to 10,000 So I am going to add 5 to all the values in this particular list. Okay, so we can do that by using this line of code so i plus pi for i in python list so this is the similar for loop as we have used it so the difference is that so i am taking all the values from this python list and for each value i am uh adding the value 5 okay so this is the process i am doing doing and i'll just give a end time here okay so end time is equal to Process time and let's print the amount of time required by this particular process So it can be found by n time minus start thing Okay So what I'm basically doing is I am first initiating or creating a list and in that list I am putting the values from 0 to 10,000 and I am creating a start time area and an end time area and between that we have this particular process happening, which is to add 5 to all the values of this particular list so what happens is we have this start time and end time so this particular process time function process time function will find the amount of time required or the amount of seconds required for this particular process to complete and we are finding the difference in it and this will print the number of seconds taken by this process to complete okay so let's run this so as you can see the amount of time required for this particular process so it's this is in seconds so it is around 1.7 milliseconds right so this is the amount of process taken by a list to complete this particular process now what we we shall do is now let's create an umpire array and do the similar process and see how much time an umpire array takes okay so i'll declare the variable as np array and let's say np array is equal to np dot array so you can see here I have imported the numpy library as np so I am just calling that numpy library here and this numpy dot array function is used to create arrays okay so numpy array I am just using the same code I have used in the previous cell which is i for i in range 10,000 okay it's the same code that we have used so i want to create a numpy array in this case with values from 0 to 10 000 and i'll create a start time okay i'll just copy the code from here so start time and now what we will do is we will add this 5 to all the values in this numpy array so it is the same process that we have done here so np array plus is equal to 5 you okay so this is similar to just adding numpy array is equal to numpy array plus five so this line so we have this line right so this is similar to this so np array plus is equal to five is similar to numpy array numpy array plus five so what i'm basically doing is i am adding this value five to all the elements of this array okay so that's what i am doing which is very similar to this process we have done okay so the only difference is that in this case we have added five for all the elements in a list but in this case we are adding five to all the elements in a numpy array now we need to mention this end time okay so i'll just copy this end time and start time so this is basically the same process now this process again will take place and uh for all the values in this number array five will be added and the amount of time taken for this process to complete is calculated okay so you can see the difference here so the time taken for this number array to complete is very much less as compared to this particular line right so it is almost 5 to 10 percentage faster than the list okay so this is the significance of numpy array so you can say that this time difference is not much right but in this case we are just dealing with uh you know 10 000 values but there are cases where we will deal with uh you know a million of data points or million of numbers so in that case the time uh difference is quite significant okay so this is one advantage that i have mentioned to you that in numpy array we can do operations much faster as compared to a list okay so now let's get into numpy arrays so let's see how we can create numpy arrays and how we can perform several operations or functions on a numpy array okay so i'll create a text as okay sorry numpy arrays so let me show you how you can initiate a list so we are creating a list here so this one so I mean I am declaring the name of the list as list one and let's say that the value of this list are 1 2 3 4 & 5 ok so I want to print this list print this one and I want to check the data type of the list ok so type list okay so first let's create a list and see so as you know the list should be enclosed in square brackets okay so this type list will give us the data type of this particular uh data type okay of this particular object so we you can us okay sorry it's list one okay as you can see here we have printed the list and we have found the data type of this particular object as list okay now let's do the same for numpy array i'll declare the numpy array as np array and this numpy array is equal to let's say np dot array which is equal to so you need to uh pay and attention to this parenthesis and square brackets so you need to mention this parenthesis first and inside this you we need to create a list and put the elements in this particular square brackets okay so we are going to create an umpire array and the values are same to this okay so one two three four five okay so now i'll print this numpy array so np array and also i'll check the data type ones type np array okay so this is an example of a numpy array so you can see here in list the elements are separated by a comma but in this case the values or elements are not separated by comma in the case of numpy okay and we have found the data type to be numpy dot nd array so nd represents n dimension array so arrays are similar to matrices okay so we would have studied about vectors and matrices in mathematics so this array is similar to a matrix in matrix okay so let's see how we can create these kind of arrays and more dimensional arrays okay so creating a one dimensional array so it is the same as we have done here so i will declare the variable as here so the name of the array will be a in this case so a is equal to np dot array and let's say the values are 1 2 3 and 4 and now we can print a okay so we have successfully printed the numpy array here now what you can do is we can check the shape of this number this particular function shape will give us the number of frozen columns in that particular number array okay So you can see here we have only one value because this numpy array is one dimensional. So this four represents we have four columns. Okay.

So now let's create a two dimensional array. So I'll create or I'll declare the variable as b. So b is equal to np dot array.

And what I'll do is let's say the values are 1, 2, 3 and 4. 5 6 7 and 8 okay so now let me print b as you can see here this is similar to a 2 cross 4 matrix containing 2 rows and 4 columns right so this is how you can create arrays with multiple dimensions so in this case we have just created a one dimensional array containing one row but here we have created an array with two rows and four columns so now you can check the shape of b okay so the first value represents the number of rows and the second value represents the number of columns so we have two rows and four columns in the case of the array b okay so in this case we have just only one dimension so we have just one number here okay so in this case four represents the number of columns but in this case so the first value represents the number of rows and the second value represents the number of columns so totally we have two rows and four columns in this case now let's do another thing I'll create another array as c is equal to np dot array and so as you can see here all the values are integers in this case right so now let's see how we can put values with float floating points floating points are nothing but the decimal values so np dot array which is equal to say 1 2 3 and 4 and 5 6 7 and 8 okay and now you can mention the data type as d type so d type represents data type float okay now let's print c as you can see here now we have floating point values which is this is similar to 1.0 2.0 etc so by mentioning the data type float so you can create an array with floating point values so if you don't mention any mention any data types the default value is integers so we get an array of integer values okay so now let's discuss about placeholders in array so now we are going to discuss about initial placeholders in numpy arrays okay so these initial placeholders are nothing but in some cases we want to initiate arrays with certain values say for example in several cases we may need to initialize an array in which all the values are zero in some other cases we need the initial values to be one in all the values so such kind of things so that is meant by initial placeholder so initial placeholder placeholder means the initial values present in that particular numpy array okay so now let's create a numpy array of So let's name the array as x. So x is equal to np.zeros. So zeros is the function which is used to create an array containing all the values as zero.

So in this particular parenthesis you need to mention the shape of your array 4 comma 5. Let's say that we want to create an array of four column four rows and five columns and we need all the values to be zero. Okay so that's what we are trying to do here. So you can note here that I have used used two parentheses here so inside this parentheses i mentioned the shape of the array that i want so now let me print x okay now as you can see here we have created an array with all the values as zero of four rows and five columns okay so you need to use this np.zeros function and inside that you need to mention the dimension of the array that you need now let's create an umpi array with all the values as one okay create a numpy array of ones so i'll create a the numpy array as y so np dot ones is the function that's used to create array with value one so now let's uh put the shape of the array as let's say um 3 comma 3 okay so i want a 3 comma 3 array with all the values as one let's print y as you can see here we have created a 3 cross 3 array with all the values as 1 so this is some example of initiating an array with the values of 0 and 1 now let's see how we can create an array of a particular value okay so particular value so let's say that the array is z and z is equal to np dot full this full function helps us to create an array with a specific value so first you need to mention the shape or the dimension of the array you want so let's say that i want an array of 5 comma 4 shape so it means 5 rows and 4 columns right and next you need to mention the value which you want to give let's say that i want a 4 cross 5 array or 4 cross 5 matrix with all the values as 5 and now let me print is it as you can see here we have got uh five rows and 4 column matrix with all the value as 5. Okay. So, this is how you can create an array with a specific value.

Now, let us see how we can create an identity matrix. So, create an identity matrix. So, we would have studied about this identity matrix in our basic mathematics. So, this identity matrix means all the diagonal values will be having the value of 1 and other values will be 0. Okay. so this identity matrix is also used in various cases in our programming so i'll create the number as a and for creating an identity matrix you need to use the function i so np dot i and in that mention the the shape of your matrix okay now you you should not mention the number of rows and columns because identity matrix have the same number of rows and columns okay so we cannot have a identity matrix of 5 comma 4 array or we cannot have an identity matrix of 4 comma 5 array.

Okay, so in the case of identity matrix, the number of rows and columns should be equal. So example this case. So the number of rows and columns is equal.

So in such case, we can have an identity matrix or in case where the shape of the array is 4 cross 4 or 5 cross 5. So those kind of things. So you need to mention. So let's say that we want identity matrix of 4 rows into 4 columns. Okay.

so let's print a now as you can see here we got identity matrix where all the diagonal values is equal to one and the remaining values are nothing but zero so this is an identity matrix so you can just change this value and see so this will give us a 5 cross 5 matrix but it is an identity matrix okay so this is how we can create identity matrix using np dot i function okay so we have just given this pre-made values in this case so we were we created array with all the values as zeros and then one and a particular value all those kind of things now let's see how we can create an umpire array so create an umpire array with random values so i want to create an umpire array with random values let's say that the numpy array is b and you can use the function np dot random dot random so in that you need to mention the shape of the array that you want let's say that we want a 3 cross 4 matrix uh three rows four column matrix or three cross four column three rows four column array with random values so but there is one important thing to note here so let me run this first so we got these random values in our numpy array but the main thing to note here is all the values will be from or all the values will be between 0 and 1 okay so let's run this again we will get some other value okay so we won't get the same value so we will get some other values but that value will be between 0 and 1 okay so this is how we can create an umpire array with random values now let's see how we can create a an array with random values but we need random integers okay so let's see that so random value random values array and in this case we want integer okay so random values array random integer values array and we can mention the range we need so random integer values arrays within a specific range okay so i'll create the number is c so c is equal to np dot random so we have used this random dot random function to create numperes with values between 0 and 1 so now you can use this function np.random.randint so it means random integers okay so now you need to mention the starting and ending point of your value so here you just need to mention the range in between you want the values to be let's say that it's 10 to 100 okay and next we need to mention the shape we want let's say that we want a three rows and five column array so basically what happens is we will get a three cross five array and all the values will be in the range of 10 to 100 okay so now let's print this so as you can see here in the previous case we got a decimal values between 0 and 1 and now we have got all the values between 10 and 100 okay so this is how you can create a random value array with specifying their starting point and ending point okay so if you run this again you will get some other value but the value will be in this range 10 and 100 okay so you can change this shape to get a different dimension array okay so next what we will do is let's see how we can create an array of p only spaced values evenly spaced values so d is equal to for this you can use the function np dot lint space okay so np dot lint space in that you need to mention the starting point and ending point or the range in which you want the values let's say that i want the values between the range 10 to 30 okay so i want five values in this particular array okay so what i'm doing is i'm mentioning the starting point and ending point and the number of values i need so let's run this and see so we will get five values between this range uh 10 to 30 but all these five values will be evenly spaced so i am running this so as you can see here we got five values and these five values are evenly spaced okay so or you can just use uh 6 and c so i want uh 6 values and they should be evenly spaced and that value should be like we should like between 10 and 30 okay so here we are getting an array of evenly spaced values and here we are specifying the number of values you want specifying the number of values required okay so there is another method of creating a evenly spaced values but in this case we can mention the step number okay so i'll just do this and explain you so array of evenly spaced values and now we need to specify specifying the step okay so i'll explain you what is meant by this step so let's create the array as e so e is equal to for this uh you can use the function a range so a range i want the values between 10 and 30 and i want the step value to be 5 okay so in this case you need to note errors so we are not mentioning that i need five values here we are mentioning that the step should be five so the value if the value starts from 10 the step should be 5 the other value should be 15 20 30 uh 15 20 25 like that okay so let's run this so print e as you can see here we get the step as 5 so here we are not mentioning that we need number of values so here you can see we have only four values so here we are mentioning the step value which we want okay so we want the values to jump with five units so that's what we are mentioning this using this CA range function but in the case of linspace you will mention the number of values you want so let's say for example in this case let's mention 5 so these both are the same but we are just using different function let's run and see this so it will give us five evenly spaced values but this will give us evenly spaced values between this particular range and mentioning this state so this is how you can create in evenly spaced arrays now let's see how we can convert a list to an array convert a list to a numpy array okay so let's declare the list So let's say that list2 is equal to so the list should be enclosed in square packet Let's say that the list has values 10 20 30 40 and 50. Okay, so let's create a numpy array as np array and We can use the function np dot as array. So this np dot as array will convert one particular data type to a numpy array. So we are converting this list to an umpire here inside this mention list two okay so this will convert this list to which is a typically a list to an umpire array and now let's print this np array and let's also check the data type print sorry type so this will give the data type let's run this as you can see here we have converted this list to a numpy array as you can see there are no comma here so we have successfully converted this list to into a numpy array and we have got the data type as n numpy dot nd array okay so this is how you can convert a list to a numpy array so you can also convert a tuple to an umpire so the tuple will be enclosed in parenthesis but the list will be enclosed in a square breakage okay so this is how you can convert a different data type to an umpire array now let's see how we can analyze a particular array so analyzing so analyzing is nothing but getting various information about that array it's just inspecting array okay so analyzing an umpire so let's say that so let's create an array as c so c is equal to np dot random dot random so i want random values let's take integer values so random dot randint so in that i want the values between let's say 10 to 90 and i want a 5 cross 5 matrix okay so i want a 5 cross 5 matrix or 5 cross by array with values ranging between 10 and 90 okay so i'll also print this c so print c so we got a 5 cross 5 array with the values between 10 and 90 so let's do some analysis on this so you can find the array dimension using this function so we have already seen this so array dimension so what you need to do is i'm just printing this so mention the array name so here in this case the array is nothing but c okay so put c here so c dot shape so this will give us the shape of the array shape of the array is nothing but the number of rows and columns okay now let's check the number of dimension it has so number of dimensions so let's print so for that you can use the function c dot n so i'm using c because the name of this particular array is c okay so this is the function we have so n dot a time so it means it gives the dimension value so as you can see here we have two dimensions two dimensions because we have rows and columns here right so it is a two dimensional array so if you have just a single row it it will be a single dimensional array as we have rows and columns in this case it is a double dimensional array or it is a 2d array okay so you can also check the number of elements present in the array so checking the number of elements in an array let's print c dot size so this size gives the number of elements so let's print this so as you can see here totally we have 25 values so we have five rows and five columns so totally we have 25 values so you can find the number of elements present in an array using this size function okay so now let's see how we can check the data type present in this array okay so checking the data of the values in the array okay so let's print it so print c dot d type so d type represents data type so we know that all the values are integers because we have initiated the random integers value so it is int 64 that means 60 in 64 bit integers values okay so this is how you can find what is the data type present in a particular numpy array okay so this is about analyzing or inspecting an array now let's see some mathematical operations that can be performed on an array so mathematical operations on a numpy array or np array so i just want to give you another example here so i need to show that in with the list so i'll create the list as list1 which is equal to 1 2 3 4 and 5 and i'll create another list as list2 which is equal to 6 7 8 9 and 10 okay so now what i'll do is i'll just add both of this list and print it so let's print list1 plus list2 Okay, so what do you expect this to give so let's try to run and see this so we have we tried to add this list but what actually happened is so when we use this add symbol the elements are not adding so these the element wise addition is not happening say for example the the addition value does not give us the values of 7 and 9 where we add the values element wise okay so in the case of list when you use this add symbol between two it will concatenate the to list okay so concatenate means just joining the to list so this plus sign will concatenate or joins to list so we cannot add or we cannot have element wise addition in the case of list so concatenate or join to list but we can do this in the case of an umpire is so let's see how we can do that so let's create an umpire is a so a is equal to np dot I'll just copy this from above sorry okay I'll just do that do this here so np dot random dot random so I want a random integers integer values and I want the values between 0 and 10 okay so 0 and 10 now let's mention the shape we want let's say I want a 3 cross 3 array so 3 row and 3 column array and all the values should be between 0 and 10 and yeah I'll create another array I'll name this array as b okay so we have basically we have two arrays a and b and now I want the values between 10 and 20 in this case okay so first array contains value between 0 and 10 and the second array contains value between 10 to 20 and the shape is similar which is 3 cross 3 so let's run this let's print both of these arrays so print a and lens print this b so as you can see here we we got an array with random values so the first array has values between 0 and 10 and the next array has values between 10 and 20. so now what we can do is we can run some mathematical operations in it so let's run let's say that it's a plus b so we want to print a plus b so in the case of list when we add the to list it will concatenate or joins the two list but in the case of numpy array when you add two numpy arrays so we will get element twice addition say for example in this case the first element is 7 in the first numpy array and in the second number array the first element is 15. so both these values will be added so that will be element wise addition so let's also do a minus b and let's do all the mathematical basic mathematical functions is a into b so you a into b and a divided by b so a by b okay so you can run this so this will give us element wise addition subtraction multiplication and division so we get four numpy arrays and all this the element wise operations will be done okay so in the first number array a and b will be added element wise then it will be subtracted then it will be multiplied and divided okay so this is one way of doing it where we just add both of these arrays so we can do this in an another way so it is we will just print just mention np dot add okay so in that you need to mention the two arrays which you want to add let's say that we want to add the two numpy arrays a and b so i'll just copy this and i'll just make another array here so i want another a and b so i'll run this now we will have different values for a and b so let me print that so print a comma b sorry so print a and print b so we will get new values for this so instead of just uh putting a plus b what you can do is you can mention this np dot add function this add function will add two arrays so i mentioned a and b now print np dot subtract so this will find the difference between the two arrays element wise so a comma b and then we can np dot multiply a comma b and finally let's print mp dot divide enb okay so let's run this so this is similar to this particular code but it is another way of doing that using this np.add on np.subtract function so we got the four mathematical basic operations performed on a numpy array okay so this is how you can perform some basic mathematical operations on it okay so now let's do some array manipulation so i'll just create a text here array manipulation so let's create an array so i'll declare the name of the array's array itself so np dot random dot random and i want the values between 0 and 10 and i want the shape of the array to be 2 comma 3 so it will be a 2 row and 3 column matrix as we know now i'll just print this array and also i'll print the shape of this array so print array dot shape okay so this is similar to a two cross three matrix where we have two rows and three columns right so now you can create the transpose of this matrix so i'm going to create the transpose so let's name the transpose as trans which is equal to for that you can use the function np dot transpose okay so np dot transfer so inside that mention the array which you want to convert so i want to convert this particular array and find its transpose so np dot transpose array and let's print this trans okay and now let's print the shape of this transpose array as well so trans dot shape so transpose is nothing but if the matrix is 2 comma 3 it will be converted into a 3 cross 2 matrix so all the rows will be converted into columns and the columns will be converted into rows so if we have the values as 1 2 807 the values will be 18, 20 and 27 so let's run and see this so as you can see here the array is transposed so this is how you can create an array and you can create the transpose of that particular matrix so there is another way of finding this transpose so i'll just copy this array so it will give us new values okay as you can see now the values are different so there is another method of finding the transpose so i'll create trans another transpose as trans2 which is equal to so mention the array name so here the array name is array dot t so when you mention this dot t it will find the transpose of this array and it it will store that in this trans2 okay so now let's print trans2 and Let's print the shape of this trans2.

So trans2.shape. Okay. So now we can see here that this particular matrix is transposed using this.t function.

So these are the two ways of finding the transpose of a matrix. So now let's see another thing. So this is the last function which we are going to see.

so reshaping array reshaping array so let's create a array as a which is equal to np dot random dot random and let's say that we want the values between 0 and 10 and i want the shape of the matrix or shape of the array to be 2 comma 3 so it is a 2 comma 2 rows and 3 column array with values between 0 and 10. so let's print a and also let's check the shape of a so a dot shape so as you can see here this is the random values which we got so it is a 2 comma 3 shape matrix or 2 comma 3 shaped array so now you can reshape this array let's say that let's create another array as b so b is equal to a dot b shape and let's say that 3 comma 2 so in this case we have a 2 comma 3 matrix and now let's say that i want to convert this to a 3 comma 2 matrix so in this case it will be a 3 rows and 2 column matrix so this particular array which is here so you can see this is the array a so this will be converted to a 3 comma 2 array okay so let's and it will be stored in this array b okay so let's print b and let's also print the shape of b So I'll run this. So now you can see here, this is how we can reshape array. So this reshape is one of the most important function we will be using in array. Okay.

So these are some of the most important functions and most important properties you need to know about array. So you can make note of this or you can save this code anything you want, but these are very important. So these can be seen very simple for you.

And it is actually very simple. And these will be used in various, you know, times when we are working on machine learning projects or any other projects. So this is why numpy array is very much important for us. So the main thing to note here is the numpy arrays are very faster than the inbuilt Python data types like list or tuple and we can do several mathematical operations and other operations as well.

So there are also other functions beyond this but these are the important functions which we will encounter regularly. So I hope you have understood all the things we have done here. So stay tuned to my channel. subscribe and share it with your friends so that we can reach more people as possible. Thanks for watching.