From 4d6a25def092c38096f80b955bb2d54cc0efefc5 Mon Sep 17 00:00:00 2001 From: AdityaNikhil Date: Tue, 9 Feb 2021 17:36:32 +0530 Subject: [PATCH] Added NumPy notebooks --- NumPy/Lesson 1 - Introduction.ipynb | 497 +++++++ NumPy/Lesson 2 - Dimensions.ipynb | 634 +++++++++ NumPy/Lesson 3 - Basic Operations.ipynb | 1279 +++++++++++++++++ NumPy/Lesson 4 - Indexing and Slicing.ipynb | 1383 +++++++++++++++++++ NumPy/Lesson 5 - Universal Functions.ipynb | 325 +++++ NumPy/Lesson 6 - Statistical Methods.ipynb | 672 +++++++++ NumPy/Lesson 7 - Linear Algebra.ipynb | 500 +++++++ NumPy/Lesson 8 - Arrays in Files.ipynb | 237 ++++ 8 files changed, 5527 insertions(+) create mode 100644 NumPy/Lesson 1 - Introduction.ipynb create mode 100644 NumPy/Lesson 2 - Dimensions.ipynb create mode 100644 NumPy/Lesson 3 - Basic Operations.ipynb create mode 100644 NumPy/Lesson 4 - Indexing and Slicing.ipynb create mode 100644 NumPy/Lesson 5 - Universal Functions.ipynb create mode 100644 NumPy/Lesson 6 - Statistical Methods.ipynb create mode 100644 NumPy/Lesson 7 - Linear Algebra.ipynb create mode 100644 NumPy/Lesson 8 - Arrays in Files.ipynb diff --git a/NumPy/Lesson 1 - Introduction.ipynb b/NumPy/Lesson 1 - Introduction.ipynb new file mode 100644 index 0000000..c2e1e8b --- /dev/null +++ b/NumPy/Lesson 1 - Introduction.ipynb @@ -0,0 +1,497 @@ +{ + "cells": [ + { + "attachments": { + "image-2.png": { + "image/png": "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" + } + }, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![NumPy Logo](attachment:image-2.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "NumPy which simply stands for **Numerical Python**.\n", + "\n", + "It is a python library responsible for carrying out complex array operations. It is a widely adopted library in python to perform various linear algebra operations, Fourier Transforms and random number generation. It is 50x faster than generic python lists and it was originally written in C, C++ for faster computation.\n", + "\n", + "NumPy Github link : https://github.com/numpy/numpy\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Installation " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: numpy in /opt/conda/lib/python3.8/site-packages (1.19.5)\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "%pip install numpy" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Import\n", + "\n", + "You can import the NumPy package using the below code. It is a common practice to import as `np`. You may use a different name than `np`, but you might find it convenient to follow the common practice of naming NumPy as `np`. " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can now operate on the variable `np` to use the NumPy functions.\n", + "\n", + "To get started, let us create a random matrix with NumPy. We will be using NumPy to mainly to handle matrices and perform operations on them. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# NumPy is Important. Why?\n", + "\n", + "In several of the machine learning programs, we have to deal with matrices. Rather, most data we have is in the form of a matrix.\n", + "\n", + "You can consider for example a simple sales register. This sales register could come from an Excel document. This simple data that comes from an Excel document, is arranged in the form of rows and columns. A row and column format is considred as a 2 dimensional matrix. This means if you have an excel sheet with 5 columns and 100 rows, then you have a matrix of size 100 x 5, or as we would write it in NumPy (100, 5)\n", + "\n", + "Here, the first number denotes the number of rows, and the second number denotes the number of columns.\n", + "\n", + "As a matter of fact, even image data and video data is in the form of matrices. We represent images as 3 dimensional matrices. If we have to pass input to machine learning models, and handle the output from machine learning models, we almost never can do it without the use of some form of matrix data. This is why understanding how to work on matrices in Python is very important. \n", + "\n", + "Keep in mind that NumPy is not your only option for handling matrix information. You could use simple arrays to handle dimensional data. However, NumPy was specifically written to handle large volumes of data efficiently. It was specially written to perform operations much faster than what those operations would take using simple arrays. \n", + "\n", + "In most scenarious, data is going to be very large. Using a package like NumPy is going to save you a ton of execution time. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Creating your first matrix" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Before we start creating our first array. Let's understand what is a **matrix**.
A **matrix** is a collection of numbers arranged into a fixed number of rows and columns. \n", + "\n", + "![](https://chortle.ccsu.edu/VectorLessons/vmch13/mtrx1.gif)\n", + "\n", + "This matrix is a 3x3 matrix because it has three rows and three columns. In describing matrices, the format is:\n", + "**rows X columns** \n", + "\n", + "Each number that makes up a matrix is called an element of the matrix.\n", + "\n", + "Let us create our first matrix using a random number based matrix generator. NumPy provides several inbuilt functions to quickly create matrices. This includes creating a matrix with random values. " + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[-0.14155633, -1.38513525, 1.12584434],\n", + " [-2.01933397, 1.07991499, -0.62370323],\n", + " [-0.07299109, -0.18702077, -0.74727163]])" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data = np.random.randn(3, 3)\n", + "data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There we go. We have successfully created a `3x3` matrix. This is a square matrix, filled with random numbers. \n", + "\n", + "Let us now try creating a matrix with 2 rows and 3 columns. Or, as we would call it a `2x3` matrix." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[-0.5848593 , -0.54368605, 1.28138602],\n", + " [-0.39456216, 0.21461109, -0.51766601]])" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.random.randn(2, 3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can also quickly try 3 rows and 2 columns, as shown below." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[-0.21009713, 0.71181626],\n", + " [ 0.03790045, 0.46613502],\n", + " [-0.30579528, -0.90247215]])" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.random.randn(3, 2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Performing mathematical operations\n", + "\n", + "In NumPy it is really easy to perform certain mathematical operations on the data. Let's try a few on randomly generated matrices. " + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Before [[-0.41243102 -0.52198758 -0.43280414]\n", + " [-1.24399283 -1.01050165 -0.01265889]]\n" + ] + } + ], + "source": [ + "data = np.random.randn(2, 3)\n", + "\n", + "print('Before', data)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "After [[ -4.12431021 -5.21987576 -4.32804135]\n", + " [-12.43992834 -10.1050165 -0.12658892]]\n" + ] + } + ], + "source": [ + "print('After', data * 10)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Keep in mind, the above multiplication operation will not actually change the original matrix. It returns a new matrix with values of the previous matrix multiplied by 10. We can check this by printing the values of `data`. " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[-0.41243102, -0.52198758, -0.43280414],\n", + " [-1.24399283, -1.01050165, -0.01265889]])" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are several different types of mathematical operations that we can perform on such matrices. NumPy provides us a simple and business user friendly syntax to perform such operations. Let's try a few more.\n", + "\n", + "## Add matrix to itself" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[-0.82486204, -1.04397515, -0.86560827],\n", + " [-2.48798567, -2.0210033 , -0.02531778]])" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data + data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Add 1 to each element of the matrix" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0.58756898, 0.47801242, 0.56719586],\n", + " [-0.24399283, -0.01050165, 0.98734111]])" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data + 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Divide by half" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[-0.20621551, -0.26099379, -0.21640207],\n", + " [-0.62199642, -0.50525083, -0.00632945]])" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data / 2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Add 2 different matrices" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Data 1 => [[-0.41243102 -0.52198758 -0.43280414]\n", + " [-1.24399283 -1.01050165 -0.01265889]]\n", + "Data 2 => [[ 0.23872176 1.87540312 0.25237765]\n", + " [-0.3875943 0.03512294 -0.00854803]]\n", + "Data 1 + Data 2 => [[-0.17370926 1.35341554 -0.18042649]\n", + " [-1.63158713 -0.97537871 -0.02120692]]\n" + ] + } + ], + "source": [ + "data2 = np.random.randn(2, 3)\n", + "\n", + "print('Data 1 =>', data)\n", + "print('Data 2 =>', data2)\n", + "print('Data 1 + Data 2 =>', data + data2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are some restrictions ofcourse. The two matrices must be of the same size, if they are to be added to each other. It will not work if you take matrices with different dimensions." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# NumPy is really fast\n", + "\n", + "The biggest advantage of NumPy is that it is really fast. That is the whole reason why we use it. \n", + "\n", + "Using the below code, let us compare a NumPy array to a Python list. We will take both the array and the list as the same size. We will perform exactly the same operation on the both the items. We will measure the time it takes to execute both, and we will have a comparision. " + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 0 ns, sys: 3.77 ms, total: 3.77 ms\n", + "Wall time: 3.43 ms\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "arr = np.arange(100000) # Numpy array\n", + "lis = list(range(100000))# Python List\n", + "%time for _ in range(10): arr2 = arr * 2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We have the result for NumPy above. Now let us try performing the same operation using a list in Python. The list should ideally take longer." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 80.7 ms, sys: 11.8 ms, total: 92.5 ms\n", + "Wall time: 90 ms\n" + ] + } + ], + "source": [ + "%time for _ in range(10): my_list2 = [x * 2 for x in lis]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There we go. The execution time for the list in `ms` (milli-seconds) is substantially larger.\n", + "\n", + "We have taken a large array, so that the time difference is noticeable. If we take a small array, the time to perform the operation would be really small, and the time in both cases could be very similar. You can try reducing the array size, and confirm that the time taken is almost the same. \n", + "\n", + "When handling large data, NumPy-based algorithms are generally 10 to 100 times faster (or more) than their\n", + "pure Python counterparts and they also use significantly less memory. When handling large data, the CPU time is not your only problem. You might actually run out of RAM. NumPy is optimised to save RAM. It can perform the same operations faster, and with a lesser memory footprint. " + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.6" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/NumPy/Lesson 2 - Dimensions.ipynb b/NumPy/Lesson 2 - Dimensions.ipynb new file mode 100644 index 0000000..61bcd98 --- /dev/null +++ b/NumPy/Lesson 2 - Dimensions.ipynb @@ -0,0 +1,634 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Dimensions & Shapes\n", + "\n", + "First things first. Let us understand what a matrix really is within Python. Is it a list, is it a tuple? Let's find out.\n", + "\n", + "To start, lets start by creating a list. " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1, 2, 3, 4, 5]\n" + ] + } + ], + "source": [ + "list1 = [1,2,3,4,5]\n", + "print(list1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that we have a list, let us convert this to an ndarray." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1 2 3 4 5]\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "\n", + "mat1 = np.array(list1)\n", + "print(mat1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "What changed? Nothing actually. `mat1` is exactly same as `list1`. Well, not really. A lot has changed. They both appear the same when you print them, but they are actually completely different objects. \n", + "\n", + "`list1` is of type `list`, where as `mat1` is of type `ndarray`. The `ndarray` is a class within the NumPy package. \n", + "\n", + "Let us confirm this once by looking at the specification of the two variables." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "list1?" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "mat1?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Ok, so what we just created as a list, is actually a 1D array in NumPy. Let us understand more about 1D arrays in Python." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 1D Array \n", + "\n", + "So, how do we define a one dimenstional array, or 1D array? \n", + "\n", + "*An array is said to be in 1D(one-dimension) if either the number of columns or rows are 1.* \n", + "\n", + "Yes, our `mat1` is a 1D array, because it has one row and 5 columns. \n", + "\n", + "In linear algebra, a 1D array is simply called a **vector**. We might interchangeably use the term `vector` and `1D array`, so get used to it. Both mean the same thing. \n", + "\n", + "Now, what if we wanted to created a 1D array that has 1 column and 5 rows. How would we do that? And we are going to do that using a `list` first and then using `ndarray`.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[1]\n", + " [2]\n", + " [3]\n", + " [4]]\n" + ] + } + ], + "source": [ + "list2 = [[1],[2],[3],[4]]\n", + "mat2 = np.array(list2)\n", + "print(mat2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Interesting uh? What just happened? In a literal sense, the line `list2 = [[1],[2],[3],[4]]` actually created 5 independent lists. \n", + "\n", + "1. [1] -> first list\n", + "2. [2] -> second list\n", + "3. [3] -> third list\n", + "4. [4] -> fourth list\n", + "5. [....] -> fifth list (the outer main list)\n", + "\n", + "\n", + "To create a vertical 1D array, or as you can say a column vector, we basically added lists within the primary list. We created the main list, but instead of adding plain numbers `1`, `2`, `3`, `4`, to the list, we put the numbers in a list of their own, each of size 1, and then added each of the lists `[1]`, `[2]`, `[3]` and `[4]` to the primary list to create a 1D column array. \n", + "\n", + "Let us spend some more time to understand the datatype of each item here. We have to very clearly understand what is actually going on here. To slice a matrix, find a transpose, interting matrices, the fundamental concepts of how the data is actually arranged in a matrix how to be very clear. \n", + "\n", + "Let us look at the type of `list2`" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "list2?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As expected, `list2` is of type `list`.\n", + "\n", + "Now what about the type of the element within the list? " + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "list2item1 = list2[0]\n", + "list2item1?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`list2item1` which represents the first element of `list2` is also of type `list`. Just to be sure, how does this compare to the `list1item1`? " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "list1item1 = list1[0]\n", + "list1item1?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And there we go. The `list1item1` is actually of type `int` and not `list`. This clearly explains that to create a row array we created a single list, but to create a column array, we created 5 lists. Some developers coming from C/C++ might call a vertical 1D matrix, as actually a 2D matrix. You would not be entirely incorrect in doing so.\n", + "\n", + "Let us see how to create a 2D matrix" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 2D Array \n", + "\n", + "An array that has **1D arrays as its elements** is called a 2D array. This is same as the column array that we saw above, but the inner arrays typically have more than one element each. Below is an example." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[1 1]\n", + " [2 2]\n", + " [3 3]\n", + " [4 4]]\n" + ] + } + ], + "source": [ + "list2d = [[1,1],[2,2],[3,3],[4,4]]\n", + "\n", + "mat2d = np.array(list2d)\n", + "\n", + "print(mat2d)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We first created a 2 dimensional list, and then converted that list into an `ndarray`. As a result, what we have effectively got is an array that has 4 rows, and each row has 2 columns. \n", + "\n", + "Keep in mind, each row is actually an independent list. \n", + "\n", + "``` Python\n", + "list2d = [[1,1],[2,2],[3,3],[4]]\n", + "mat2d = np.array(list2d)\n", + "```\n", + "\n", + "Do you think we could use an uneven combination like the one shown above? The last list has just 1 element in it instead of 2. The answer is, you cannot do this. We must past the right combination for `ndarray` to be able to matrix from it; else Python will throw an error." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Why use 2D arrays?\n", + "\n", + "It is simple actually. Most of the datasets you use will be in 2D form. If you have data in Excel and you want to read the Excel data, the same will be in 2D. You can easily represent any tabular data (row & column) in 2D, and most of the structured data you encounter will be in 2D form. Excel files and CSV files, are the most commonly encountered forms of 2D data. \n", + "\n", + "Here are some example datasets:
\n", + "1) [Titanic dataset](https://www.kaggle.com/c/titanic)
\n", + "2) [Auto-MPG dataset](https://www.kaggle.com/uciml/autompg-dataset)
\n", + "3) [Credit Card Fraud Detection dataset](https://www.kaggle.com/mlg-ulb/creditcardfraud)
\n", + "\n", + "We can represent all of these datasets as 2D matrices. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 3D Array \n", + "\n", + "An array that has **2D arrays as its elements** is called a 3D array. As you can see in the below code block, There are two 2D arrays stacked up on top of each other as elements. The process to create a 3D array is same as that of creating a 2D array. Let's look at an example." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[[1 1]\n", + " [2 2]\n", + " [3 3]\n", + " [4 4]]\n", + "\n", + " [[5 5]\n", + " [6 6]\n", + " [7 7]\n", + " [8 8]]]\n" + ] + } + ], + "source": [ + "list2d_1 = [[1,1],[2,2],[3,3],[4,4]]\n", + "list2d_2 = [[5,5],[6,6],[7,7],[8,8]]\n", + "\n", + "list3d = [list2d_1, list2d_2]\n", + "\n", + "mat3d = np.array(list3d)\n", + "print(mat3d)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[[ 1 2 3]\n", + " [ 4 5 6]]\n", + "\n", + " [[ 7 8 9]\n", + " [10 11 12]]]\n" + ] + } + ], + "source": [ + "arr3d = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])\n", + "print(arr3d)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We have basically combined 2 different 2D arrays to make a 3D array. Again, all lists must be appropriately sized to make a full formed 3D matrix; else we will receive an error.\n", + "\n", + "## Why use 3D arrays?\n", + "\n", + "Well there is lot of content that often comes in 3D form. We basically have rows and columns of data, but then each cell in this 2D matrix has more than one property associated with it; and that makes up the 3rd dimension. \n", + "\n", + "An example use case of a 3D array is image data. An image consists of a 2 dimensional space of pixels, and then each pixel has an RGB value. The RGB stands for Red, Green and Blue colors. Combinations of the RGB colors make the effective color of the pixel. \n", + "\n", + "Let's take a look at an image, and how the data corresponding to it would appear.\n", + "\n", + "An **image** is simply a matrix of pixels. (Checkout the below image)\n", + "![3D](./images/Numpy_lsn2.jpg)\n", + "\n", + "Each element in the above matrix is a pixel value in that image.\n", + "\n", + "
In the shape,
1) 500 - Width of the image.
2) 800 - Height of the image.
3) 3 - Color channel of the image.
\n", + "\n", + "For each image, there's a channel(RGB - Red, Green, Blue) associated to it which will give information of colour to the image. Hence a combination of a pixel co-ordinate and the channel produces an image with vivid colours. Therefore, images are 3 dimensional matrices.\n", + "\n", + "## How RGB color codes work\n", + "\n", + "The combination of 3 colors can supposedly create any color that we see. Our computer displays, televisions sets, render all colors as a combination of RGB values. The value of each color goes in numercial form from 0 to 255. \n", + "\n", + "So R = 0 would mean the color R is fully absent, and R = 255 would mean the color R is fully present. \n", + "\n", + "(R = 255, G = 255, B = 255) would mean that the colors Red, Green and Blue are mixed in equal proportions of 33% each to make the effective color. The effective color produced by mixing all in equal proportions is White.\n", + "\n", + "(R = 0, G = 0, B = 0) would mean no color is mixed. If all colors are absent, then we actually do not have a color. Or effectively, we do have a Black color. \n", + "\n", + "(R = 127, G = 127, B = 127) what would this mean? This means all colors are mixed equally. So would we get White? The answer is Yes and No. Since all are mixed equally the color has to be white. But the intensity of each color in computer form represents brightness. This means we have a white, but that is only half as bring as the (255,255,255). What does less bright white make? The answer is grey. We would thereby have a 50% grey shade. (255,255,255) would similarly be 100% grey, but 100% grey is called white. \n", + "\n", + "Let's take a few more examples: \n", + "\n", + "> (R = 255, G = 0, B = 0) would make solid Red color\n", + "\n", + "> (R = 0, G = 255, B = 0) would make solid Green color\n", + "\n", + "> (R = 0, G = 0, B = 255) would make solid Blue color\n", + "\n", + "> (R = 127, G = 0, B = 0) would make dark Red color\n", + "\n", + "> (R = 50, G = 0, B = 0) would make an even darker shade of Red\n", + "\n", + "\n", + "## Converting to Greyscale\n", + "\n", + "In many ML projects, you will convert RGB images to greyscale images. Greyscale are nothing but black and white images. Such shade only make use of the color grey. 0% grey would mean black, and 100% grey would mean white. Between these would exist several other shades of grey, with a total of 256 grey shades possible.\n", + "\n", + "Since to produce the color grey, we will always use equal proportions of Red, Green and Blue; we can represent greyscale images by a single number.\n", + "\n", + "50% grey, which is (127,127,127) could actually be represented by just the number 127. And this is the standard convention. For grey scale images we specify a single value for the % of grey used, in the range of 0 to 255, without specifying the individual RGB values. \n", + "\n", + "\n", + "## Grey scale images are 2D\n", + "\n", + "Since we don't need RGB values for greyscale images; we can fit the pixel data of a greyscale image in a 2D matrix. The rows and columns represent pixes, and the each pixel will then hold an integer value in the range of 0 to 255.\n", + "\n", + "```\n", + "[[0,0],[0,0]]\n", + "```\n", + "\n", + "The above list can represent an image of size 2x2. It is a greyscale image. There are 4 pixels in the image, and all pixes are in black color. So what we have here is a 2x2 square sized black image. \n", + "\n", + "\n", + "```\n", + "[[255,255], [255,255]]\n", + "```\n", + "\n", + "The above list represents a similar 2x2 greyscale image, but this one is a square white image. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**From above,** \n", + "\n", + "1) In 1 dimensional matrix(mat_1), **(6,)** denotes that the matrix is one-dimensional and there are 6 rows in it.
\n", + "2) In 3 dimensional matrix(mat_3), **(2,2,3)** denotes that there are 2 matrices of shape (2,3). \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# More than 3 dimensions\n", + "\n", + "As the level of complexity increases with the data, the dimensions keep increasing and algebraically we call it **N-Dimensions**. We can use `ndarray` to make arrays of any number of dimensions. \n", + "\n", + "To make a 4 dimensional array, we would simply put 3D arrays into a list; and so on and so forth to make any number of dimensions. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Determining Shape & Dimensions\n", + "\n", + "The number of dimensions and items in an array is defined by its shape, which is a tuple of N non-negative integers that specify the sizes of each dimension. The type of items in the array is specified by a separate data-type object (dtype), one of which is associated with each n-dimensional array(ndarray).\n", + "\n", + "Let's take a look." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(4, 2)\n", + "2\n" + ] + } + ], + "source": [ + "list2d = [[1,1],[2,2],[3,3],[4,4]]\n", + "mat2d = np.array(list2d)\n", + "\n", + "print(mat2d.shape)\n", + "print(mat2d.ndim)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The shape is returned in a form of a Tuple. We use the `shape` function to fetch the shape of a matrix. Here 4 is the number of rows, and 2 is the number of columns. We are basically looking at a 4x2 matrix. \n", + "\n", + "We also use the `ndim` function to determine the number of dimensions of the matrix. Here it returns `2` which means this is a 2D matrix.\n", + "\n", + "Let us try something interesting. Getting the shape of a 1D matrix. " + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1 2 3 4]\n", + "(4,)\n", + "1\n" + ] + } + ], + "source": [ + "mat1 = np.array([1,2,3,4])\n", + "print(mat1)\n", + "print(mat1.shape)\n", + "print(mat1.ndim)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "What we got is very interesting. We would have assumed for this matrix to have 1 row and 4 columns. This is not actually true. The shape of the matrix is actually 4 rows and no second dimension, which is represented as `(4,)`. This also effectively is same as a matrix with 1 row and 4 columns.\n", + "\n", + "We can confirm that this is a 1D matrix, as the `ndim` function returns the value `1`\n", + "\n", + "Let's try a vertical matrix." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[1]\n", + " [2]\n", + " [3]\n", + " [4]]\n", + "(4, 1)\n", + "2\n" + ] + } + ], + "source": [ + "mat2 = np.array([[1],[2],[3],[4]])\n", + "print(mat2)\n", + "print(mat2.shape)\n", + "print(mat2.ndim)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we see that the shape function officially considers this a 2D matrix. The shape is `(4,1)`, which means 4 rows and 1 column. The `(4,)` and `(4,1)` mean very different types of data. We need to understand this fully and keep this in mind at all times. The `ndim` function also returns the value `2`, thereby indeed confirming that this is a 2D matrix.\n", + "\n", + "Let's now try to get the shape of a 3D matrix." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[[1]\n", + " [2]]\n", + "\n", + " [[1]\n", + " [2]]]\n", + "(2, 2, 1)\n", + "3\n" + ] + } + ], + "source": [ + "mat3 = np.array([[[1],[2]],[[1],[2]]])\n", + "print(mat3)\n", + "print(mat3.shape)\n", + "print(mat3.ndim)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The above example clearly denotes, that this is a 3D matrix; where in there are 2 individual matrices each of shape `(2,1)`. \n", + "\n", + "So out of curiosity, how would we create a `(2,2,2)` matrix?" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[[1 1]\n", + " [2 2]]\n", + "\n", + " [[1 1]\n", + " [2 2]]]\n", + "(2, 2, 2)\n" + ] + } + ], + "source": [ + "mat3 = np.array([[[1,1],[2,2]],[[1,1],[2,2]]])\n", + "print(mat3)\n", + "print(mat3.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There you go. We have a (2,2,2) matrix. This is also the equivalent of a Cube. " + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.6" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/NumPy/Lesson 3 - Basic Operations.ipynb b/NumPy/Lesson 3 - Basic Operations.ipynb new file mode 100644 index 0000000..90e47f6 --- /dev/null +++ b/NumPy/Lesson 3 - Basic Operations.ipynb @@ -0,0 +1,1279 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Creating ndarray" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "NumPy offers several array creation functions. We have already tried the `.array` function to create an array from a List. There are several other built-in functions offered by NumPy for quick use. " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([1, 2, 3, 4, 6])" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import numpy as np\n", + "\n", + "a = [1,2,3,4,6] # This is a list\n", + "arr = np.array(a) # Passing the list, converting to numpy array\n", + "\n", + "arr" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is the default function we have used so far to create an array. \n", + "\n", + "Let's try something else. " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0 1 2 3 4]\n" + ] + } + ], + "source": [ + "a = np.arange(5)\n", + "print(a)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Nice uh? We have quickly created a 1D array, comprising of 5 integers, starting from the number 0 to the range value specified. \n", + "\n", + "Let's try again. " + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0 1 2 3 4 5 6 7 8 9]\n" + ] + } + ], + "source": [ + "a = np.arange(10)\n", + "print(a)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Since we specified `10` as input to `arange`, we got an array with 10 elements in it.\n", + "\n", + "Let's try some more examples." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0. 0. 0. 0. 0.]\n" + ] + } + ], + "source": [ + "a = np.zeros(5)\n", + "print(a)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here you go. We now have an array containing 5 elements, but each element has the value `0`. It is interesting to note that the value `0` is actually of type float. We can spot it because the value reads `0.` and not `0`. The `0.` is same as having the value as `0.0`\n", + "\n", + "So how do we produce an array with integer zeros? We do so by explicitely specifying the datatype. " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0 0 0 0 0]\n" + ] + } + ], + "source": [ + "a = np.zeros(5, dtype=np.int32)\n", + "print(a)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Many array creation functions in NumPy support an extra parameter of data type. Here `dtype=np.int32` explicitely specifies that we need the elements to be of type `int32`. We can see that the result now contains `0` and not `0.`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Array Creation Functions\n", + "\n", + "The below table shows an exhuastive list of array creation functions found in NumPy. You can give them a try and see how each of them works. We strongly encourage that you do try them and play around with them. \n", + "\n", + "![](./images/array_creation.JPG)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Data Types\n", + "\n", + "The below table shows an exhaustive list of data types. Keep in mind that you can also create 1D, 2D and 3D arrays with string data. You are not just restricted to Numercial data. In fact, elements of the array can be of any type, including objects. \n", + "\n", + "Do play around to create arrays using various of these data types. \n", + "\n", + "![](./images/data_types.JPG)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Datatype Conversions\n", + "\n", + "We can convert the datatype of elements in an array. NumPy provides a conveninet `astype` function to fetch a matrix in the desired datatype. For the operation to succeed, it must be possible to convert all elements to the specified datatype. " + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['1' '2' '3']\n", + "[1 2 3]\n" + ] + } + ], + "source": [ + "a = np.array(['1', '2', '3'])\n", + "print(a)\n", + "b = a.astype(np.int32)\n", + "print(b)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the above example, we started with an array of type String. The array `a` has all elements as string, and this can be viewed in the corresponding print. \n", + "\n", + "We used the `astype` function then to create a new array of type int. All elements within the array were convereted to int and returned. This is represented by the array `b`\n", + "\n", + "Keep in mind that calling the `astype` function creates a new array. The original array remains unchanged." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Arithmetic Operations\n", + "\n", + "Let's perform some basic arithmetic operations like **addition, subtraction, multiplication and division** on below 2 arrays using numpy. " + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "a = np.array([[1,1],[1,1]])\n", + "b = np.array([[2,2],[2,2]])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Addition" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[3, 3],\n", + " [3, 3]])" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a+b" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Subtraction" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[-1, -1],\n", + " [-1, -1]])" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a-b" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Multiplication" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[2, 2],\n", + " [2, 2]])" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a*b" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Division" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[0.5, 0.5],\n", + " [0.5, 0.5]])" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a/b" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Raising powers\n", + "\n", + "Also we can raise powers of array values." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1, 1],\n", + " [1, 1]])" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Array 'a' values raised to the power of 2.\n", + "np.power(a,2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's try the same thing with the `b` matrix and see if the power raise works. " + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[4, 4],\n", + " [4, 4]])" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Array 'b' values raised to the power of 2.\n", + "np.power(b,2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Reshaping a matrix\n", + "\n", + "We can also reshape our matrix using **reshape** function.\n", + "\n", + "## Reshaping a 1D matrix\n", + "Let's reshape a matrix with 1 dimension from shape (1,3) to (3,1).
\n", + "**Example 1**" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([1, 2, 3])" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a = np.array([1,2,3])\n", + "a" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1],\n", + " [2],\n", + " [3]])" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a = np.reshape(a, (3,1))\n", + "a" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Example 2**
\n", + "Reshaping a matrix from shape (1,8) to (8,1)." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 4, 5, 6, 12, 76, 26, 67, 73])" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a = np.array([4,5,6,12,76,26,67,73])\n", + "a\n", + "# Shape : (1,8)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 4],\n", + " [ 5],\n", + " [ 6],\n", + " [12],\n", + " [76],\n", + " [26],\n", + " [67],\n", + " [73]])" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.reshape(a, (8,1))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Reshaping a 2D matrix\n", + "Let's reshape a matrix with 2 dimensions from shape (2,3) to (3,2).\n", + "\n", + "**Example 1**" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1, 2, 3],\n", + " [4, 5, 6]])" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "b = np.array([[1,2,3],\n", + " [4,5,6]])\n", + "b" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1, 2],\n", + " [3, 4],\n", + " [5, 6]])" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "b = np.reshape(b, (3,2))\n", + "b" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It is important to closely observe how the matrix was actually reshaped. See how 3 and 4 got arranged on the same row after the reshape operation." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Example 2**
\n", + "Reshaping a matrix from shape (3,5) to (5,3)." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 56, 76, 31, 44, 55],\n", + " [ 33, 78, 123, 33, 28],\n", + " [ 12, 23, 43, 1, 2]])" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "b = np.array([[56,76,31,44,55],\n", + " [33,78,123,33,28],\n", + " [12,23,43,1,2]])\n", + "b\n", + "# Shape : (3,5)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 56, 76, 31],\n", + " [ 44, 55, 33],\n", + " [ 78, 123, 33],\n", + " [ 28, 12, 23],\n", + " [ 43, 1, 2]])" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.reshape(b, (5,3))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Reshaping a 3D matrix\n", + "\n", + "Let's reshape a 3D matrix from shape (2,2,3) to (3,2,2).\n", + "\n", + "**Example 1**" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[[ 1, 2, 3],\n", + " [ 4, 5, 6]],\n", + "\n", + " [[ 7, 8, 9],\n", + " [10, 11, 12]]])" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "c = np.array([[[1,2,3],\n", + " [4,5,6]],\n", + " \n", + " [[7,8,9],\n", + " [10,11,12]]])\n", + "\n", + "c" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[[ 1, 2],\n", + " [ 3, 4]],\n", + "\n", + " [[ 5, 6],\n", + " [ 7, 8]],\n", + "\n", + " [[ 9, 10],\n", + " [11, 12]]])" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.reshape(c, (3,2,2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Example 2**
\n", + "Reshaping a matrix from shape (1,2,3) to (1,3,2). This should effectively just reshape the inside 2D matrix. Let's give it a try. " + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[[1, 2, 3],\n", + " [4, 5, 6]]])" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "c = np.array([[[1,2,3],\n", + " [4,5,6]]])\n", + "c" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[[1, 2],\n", + " [3, 4],\n", + " [5, 6]]])" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.reshape(c, (1,3,2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**NOTE** : You can reshape the 2D matrices present inside a 3D matrix. Consider the above example, we reshaped a 3D matrix from shape (1,2,3) to (1,3,2). That is, we simply reshaped the inside 2D matrix (2,3) to (3,2). " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "# Joining\n", + "\n", + "Out of different join functions available in numpy, we mostly use `concatenate` to join 2 or more arrays. Make sure that either of one axes is the same.\n", + "\n", + "**Use Case** This is one of the most useful functions which can be used to combine two or more datasets to work on a single dataset.\n", + "\n", + "**Note** : In numpy,\n", + "\n", + "`axis=1 refers to rows`\n", + "`axis=0 refers to columns`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Joining two 1D arrays\n" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 1, 2, 3, 4, 5, 6, 12, 76, 26, 67, 73])" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a = np.array([1,2,3])\n", + "b = np.array([4,5,6,12,76,26,67,73])\n", + "\n", + "np.concatenate([a,b])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The contatenate function produces a new matrix. The orignal matrices `a` and `b` remain unchanged after the concatenate operation." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Joining two 2D arrays\n" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 1, 2, 3],\n", + " [ 4, 5, 6],\n", + " [ 56, 76, 31],\n", + " [ 44, 55, 33],\n", + " [ 78, 123, 33],\n", + " [ 28, 12, 23],\n", + " [ 43, 1, 2]])" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a = np.array([[1,2,3],\n", + " [4,5,6]])\n", + "b = np.array([[ 56, 76, 31],\n", + " [ 44, 55, 33],\n", + " [ 78, 123, 33],\n", + " [ 28, 12, 23],\n", + " [ 43, 1, 2]])\n", + "\n", + "np.concatenate([a,b], axis=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When we specify `axis=0` we actually mean that we want to append the columns. We can see that rows got added into the matrix, and the columns received the additional values. \n", + "\n", + "Let us try performing a concatenation for `axis=1`" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 1, 2, 3, 56, 76, 31],\n", + " [ 4, 5, 6, 44, 55, 33]])" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a = np.array([[1,2,3],\n", + " [4,5,6]])\n", + "b = np.array([[ 56, 76, 31],\n", + " [ 44, 55, 33]])\n", + "\n", + "np.concatenate([a,b], axis=1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Joining two 3D arrays" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[[ 1, 2, 3],\n", + " [ 4, 5, 6],\n", + " [ 99, 199, 299]],\n", + "\n", + " [[ 7, 8, 9],\n", + " [ 10, 11, 12],\n", + " [ 88, 188, 288]]])" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a = np.array([[[1,2,3],\n", + " [4,5,6]],\n", + " \n", + " [[7,8,9],\n", + " [10,11,12]]]) # Shape : (2,2,3)\n", + "\n", + "b = np.array([[[99,199,299]],[[88,188,288]]]) # Shape : (2,1,3)\n", + "\n", + "np.concatenate([a,b],axis=1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Splitting\n", + "We use `array_split` to split an array into `n` number of parts.\n", + "\n", + "**Use Case** Splitting can be used to divide the dataset, hence working or experimenting on various parts of data to understand it's behaviour." + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[array([1, 2]), array([3, 4]), array([5, 6])]\n" + ] + } + ], + "source": [ + "a = np.array([1, 2, 3, 4, 5, 6])\n", + "newarr = np.array_split(a, 3)\n", + "\n", + "print(newarr)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As you can see above, a new array is created, splitting `a` into `3` different arrays. \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Random\n", + "\n", + "The numpy.random module is responsible for generating arrays with random numbers. Each time you run the below cells, different numbers are generated." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## np.random.randn\n", + "\n", + "The **randn** generates an array of random float numbers whose shape is to be given and it draws the numbers from a **standard normal distribution.**" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0.34291505, 0.15846929],\n", + " [-0.28041854, 1.37424051],\n", + " [-1.00608324, -1.23477004]])" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import numpy as np\n", + "\n", + "# Below (3,2) represents the shape of the array.\n", + "np.random.randn(3,2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## np.random.randint\n", + "The **randint** generates an array of random integers.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[4, 7],\n", + " [3, 6],\n", + " [2, 9]])" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Below, an array of size (3,2) is generated with random values between 1 to 10.\n", + "np.random.randint(1,10, size=(3,2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## np.random.rand\n", + "The **rand** generates an array of random float numbers whose shape is to be given and are drawn from a **uniform distribution.**" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[0.61846814, 0.38662633, 0.25613095, 0.5793173 ],\n", + " [0.31091698, 0.79434679, 0.02547833, 0.11601057]])" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Below (2,4) represents the shape of the array.\n", + "np.random.rand(2,4)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## np.random.seed\n", + "\n", + "The **seed** is associated with a number and each **np.random** computation done below it shall be fixed and no matter how many times the cell is run, the array numbers are fixed and will not change.
Simply, each random arrays generated are associated with the seed value.\n", + "

In the below code block, \n", + "1. First we set the seed value to 5. \n", + "2. Next, we will generate an array of random integers between 1 to 10.\n", + "3. Now run the code block at least 2 times and you'll notice that the values are unchanged.\n", + "4. Now set a different seed value and run the code block at least 2 times to generate new random values." + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[4, 7],\n", + " [7, 1],\n", + " [9, 5]])" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.random.seed(seed=5)\n", + "\n", + "np.random.randint(1,10, size=(3,2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can try running the above code a multiple times, and you will always get the same matrix. This is because, we have explicity specified a seed value. This is why we call a random number generator in computer programming as a psudo random number generator. It does not generate numbers that are truly random. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "# Broadcasting\n", + "\n", + "This is one of the most essential topics in numpy. The term broadcasting describes how NumPy treats arrays with different shapes during arithmetic operations.\n", + "\n", + "NumPy operations are usually done element-by-element which requires two arrays to have exactly the same shape. However, convenience methods in NumPy allow us to use shortcuts. Let's say want to multiple the elements of an array with the number 2. How would we do it? " + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[2 4 6]\n" + ] + } + ], + "source": [ + "a = np.array([1, 2, 3])\n", + "b = 2\n", + "\n", + "print(a * b)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From above result, we can infer that the scalar `b` is stretched during the arithmetic operation into an array with same shape as `a` so the shapes are compatible for element-by-element multiplication.\n", + "![Array Broadcasting image](https://numpy.org/doc/stable/_images/theory.broadcast_1.gif \"Array Broadcasting image\") [source](https://numpy.org/doc/stable/user/theory.broadcasting.html#array-broadcasting-in-numpy)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The multiplication of the matrix by the number 2, is actually not a valid arithmatic operation. This is why we say that NumPy actually created an array from the `2` by stretching, and then performing the appropriate multiplication operation.\n", + "\n", + "## The Broadcasting Rule\n", + "\n", + "> In order to broadcast, the size of the axes of both arrays in an operation must either be the same size or one of them must be one.\n", + "\n", + "\n", + "Consider an example below,\n", + "\n", + "Suppose there's a matrix `a` and you would like to scale `1st row by 3 times, 2nd row by 4 times and 3rd row by 5 times`.\n", + "\n", + " a = [[1,2,3], \n", + " [4,5,6],\n", + " [7,8,9]]\n", + " \n", + " Shape of a = (3,3)\n", + " \n", + "Now in order to scale the matrix `a` by given values, we'll make another matrix `b`,\n", + " \n", + " b = [3,\n", + " 4,\n", + " 5]\n", + " \n", + " Shape of b = (3,1)\n", + " \n", + "As the broadcasting rule says,\n", + "1. Size of both arrays are same, (i.e) size of a = 3, size of b = 3.\n", + "2. One of the array's axes is equal to `1`. (i.e) `y` axis of array `b` = 1\n", + "\n", + "\n", + "Now since the **Broadcasting Rule** is met, the broadcasting can happen.\n", + "\n", + " Output = [[3,8,15],\n", + " [12,20,30],\n", + " [21,32,45]]" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 3 8 15]\n", + " [12 20 30]\n", + " [21 32 45]]\n" + ] + } + ], + "source": [ + "a = np.array([[1,2,3],\n", + " [4,5,6],\n", + " [7,8,9]])\n", + "\n", + "b = np.array([3,4,5])\n", + "\n", + "print(a*b)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "**Case when broadcast fails**
\n", + "When the trailing dimensions of the arrays are unequal, broadcasting fails because it is impossible to align the values in the rows of the 1st array with the elements of the 2nd arrays for element-by-element addition.\n", + "![Broadcast Fail](https://numpy.org/doc/stable/_images/theory.broadcast_3.gif \"Broadcast Fail\")\n", + "\n", + "[source](https://numpy.org/doc/stable/user/theory.broadcasting.html#array-broadcasting-in-numpy)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.6" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/NumPy/Lesson 4 - Indexing and Slicing.ipynb b/NumPy/Lesson 4 - Indexing and Slicing.ipynb new file mode 100644 index 0000000..3a0e649 --- /dev/null +++ b/NumPy/Lesson 4 - Indexing and Slicing.ipynb @@ -0,0 +1,1383 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Indexing and Slicing\n", + "\n", + "NumPy array indexing is a rich topic, as there are many ways you may want to select\n", + "a subset of your data or individual elements. So far we have studied the various types of arrays, and how to make them. Now let us look at how we can work with these arrays. \n", + "\n", + "Once you have created an array, you most definitely want to fetch data from it. There are various ways in which one can fetch data from an array. This chapter will cover some of the most useful operations you can perform on arrays.\n", + "\n", + "Let us start with a 1D array as shown in the below example." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![](./images/1.JPG)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "arr = np.array([1,2,3,4,5,6,7,8])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The first element of the array is marked by index `0` and the last element of the array is marked by index `7`. This is shown in the above representation for reference. \n", + "\n", + "We can directly query a single cell of the array by specifying the index we want to select. Let us try a few examples." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "8" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr[7]" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr[1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now what if we want to query a range of the array. Basically fetch out a slice from the primary array. We can do so by specifying an index range in the form `start:stop`. The `start` refers to the start index (inclusive) and the `stop` refers to the last index upto which we want to fetch (exclusive). This means element at `start` will be included in the slice, but element at `stop` will not be included in the slice." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![](./images/2.JPG)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([3, 4, 5])" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr[2:5]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As can be seen in this example, we fetched all values from index 2 to index 5. Obvious the value at index 5 was not included in the array, as the `stop` value is exlusive, but the `start` value is inclusive. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Values fetched are by reference\n", + "\n", + "There is one very important concept we need to understand here. The slice fetched is not actually a new array, but references the primary array. Which means any changes in the primary array, will reflect in the slice and vice-versa." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![](./images/3.JPG)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "arr_slice = arr[2:5]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "arr_slice[:] = 25" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 1, 2, 25, 25, 25, 6, 7, 8])" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can see that the 3 corresponding values within the array also got set to 25. It is important to note that we made the change to `arr_slice`, but the change also showed up inside `arr`. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Copying Values\n", + "\n", + "Let us say we did not want to pick up the slice by reference, but actually create a copy of the slice. We can do so by using the `copy()` function. Let us take a look. " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "arr = np.array([1,2,3,4,5,6,7,8])\n", + "arr_slice = arr[2:5].copy()\n", + "arr_slice[:] = 25" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1 2 3 4 5 6 7 8]\n" + ] + } + ], + "source": [ + "print(arr)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[25 25 25]\n" + ] + } + ], + "source": [ + "print(arr_slice)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we can see in the above example, the elements within `arr` did not change. The `arr_slice` however got the updated value of 25.\n", + "\n", + "Keep in mind that the `copy()` function is literally creating a new array from the slice. This operation could take a while to perform if the array is very large. It is always recommended to not use the copy and just get a view of the original array. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Broadcasting\n", + "\n", + "``` Python\n", + "arr[2:5] = 25\n", + "```\n", + "\n", + "This line is an example of broadcasting. Over here we can say that the value 25 is progated to the entire selection, or in other words we can say that the value 25 is broadcasted to the entire selection. \n", + "\n", + "In data science, Broadcasting is very commonly used in several data operations. Python makes it really easy for us to change the values of several elements, in a single command. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 2D Array\n", + "\n", + "Now that we say how a 1D array looks, let us perform some quick operations on 2D arrays." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![](./images/4.2.jpg)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 1, 2, 3, 4],\n", + " [ 5, 6, 7, 8],\n", + " [ 9, 10, 11, 12]])" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr2d = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])\n", + "arr2d" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![](./images/4.1.jpg)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Fetching a single element\n", + "\n", + "Let us use the row and column indexes of the array, to fetch a single element. It is important to the remember here, that this 2D array is actually made of 3 independent arrays that have the cell values, and another outer array that holds the 3 rows. Keep this in mind when you are fetching the indexes. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\"drawing\"" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "4" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr2d[0][3]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We have successfully fetched row = 0 and column = 3. The cell value of `4` gets returned. \n", + "\n", + "Let us try to fetch an entire row." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([5, 6, 7, 8])" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr2d[1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can see that we fetched the slice of an entire row. This is row #2 or rather the row at index 1." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 3D Array\n", + "\n", + "Let us take a look at a 3D array, and some of the operations we can perform on the same. " + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[[ 1, 2, 3],\n", + " [ 4, 5, 6]],\n", + "\n", + " [[ 7, 8, 9],\n", + " [10, 11, 12]]])" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr3d = np.array([[[1, 2, 3],\n", + " [4, 5, 6]], \n", + " \n", + " [[7, 8, 9], \n", + " [10, 11, 12]]])\n", + "\n", + "arr3d" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\"drawing\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The 3D array shown above, is actually 2 arrays, each of shape `(2,3)`." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(2, 2, 3)" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr3d.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Extracting a 2D Slice\n", + "\n", + "Let us try to extra one of the 2D arrays as a slice of the 3D arry" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\"drawing\"" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1, 2, 3],\n", + " [4, 5, 6]])" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr3d[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can see that `arr3d[0]` got us the row at index 0. And the row at index 0 is actually a 2D array, so `arr3d[0]` actually represents a 2D array." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Copy / Broadcasting" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[[31, 31, 31],\n", + " [31, 31, 31]],\n", + "\n", + " [[ 7, 8, 9],\n", + " [10, 11, 12]]])" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "vals = arr3d[0].copy() # Saving a copy of the first 2D array\n", + "arr3d[0] = 31 # Replacing the array elements of the first 2D array\n", + "\n", + "arr3d" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[[ 1, 2, 3],\n", + " [ 4, 5, 6]],\n", + "\n", + " [[ 7, 8, 9],\n", + " [10, 11, 12]]])" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr3d[0] = vals # Replacing the elements of the first 2D array with the copy we made earlier\n", + "\n", + "arr3d" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "By default we always get a view of the same primary array, unless we use the `copy()` function to create a new array. The broadcasting operation can be performed on the entire 2D array slice, wherein all elements in the 2D array, that is located within the 3D array, got set to value `31`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Advanced Operations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\"drawing\"" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([1, 2, 3])" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr3d = np.array([[[1, 2, 3],\n", + " [4, 5, 6]], \n", + " \n", + " [[7, 8, 9], \n", + " [10, 11, 12]]])\n", + "arr3d[0][0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The above example shows how to fetch the first row of the first 2D array that is present within the 3D array. Once we extract `arr3d[0]`, anything we do after that operates the same way as a 2D array. We should remember this for ease of understanding. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Indexing with Slices" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let us start with a 2D array. Here we will try and use some advanced slicing operations." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 1, 2, 3, 4],\n", + " [ 5, 6, 7, 8],\n", + " [ 9, 10, 11, 12]])" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr2d = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])\n", + "arr2d" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let us pick out the first 2 rows from the 2D array." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1, 2, 3, 4],\n", + " [5, 6, 7, 8]])" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr2d[:2]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can read this expression as\n", + "\n", + "> select the first 2 rows of arr2d\n", + "\n", + "We must become fully comfortable with this syntax and how it operates. We use such slicing operations extensively in machine learning problems. \n", + "\n", + "We can also pass the slice ranges for each dimension. " + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[2, 3, 4],\n", + " [6, 7, 8]])" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr2d[:2, 1:]" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1],\n", + " [5]])" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr2d[:2, :1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First of all, we did an index and slice extraction across both the dimensions. But what is the difference between `:1` and `1:`? \n", + "\n", + "It is simple actually. \n", + "\n", + "**:1**\n", + "\n", + "The `:` before the index means get everything before the specified index. Data at the specified index *IS NOT* included. This means `:0` would actually be an invalid operation. \n", + "\n", + "**1:**\n", + "\n", + "The `:` after the index means get everythign after the specified index; upto the end of the array. At the specified index *IS* included. \n", + "\n", + "## Few more examples" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1, 2, 3],\n", + " [4, 5, 6],\n", + " [7, 8, 9]])" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr2d = np.array([[1,2,3],[4,5,6],[7,8,9]])\n", + "arr2d" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([7, 8, 9])" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr2d[2, :] # same as arr2d[2]" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[7, 8, 9]])" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr2d[2:, :] # same as above" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([4, 5])" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr2d[1, :2]" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[4, 5]])" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr2d[1:2, :2] # same as above" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Boolean Indexing\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "names = np.array(['Tom', 'Amy', 'Will', 'Tom', 'Will', 'Will', 'Amy'])\n", + "data = np.array([[ 1, 2 , 3, 4],\n", + " [ 5, 6, 7, 8],\n", + " [ 9, 10, 11, 12],\n", + " [ 13, 14, 15, 16],\n", + " [ 17, 18, 19, 20],\n", + " [ 21, 22, 23, 24],\n", + " [ 25, 26, 27, 28]])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Lets us take 2 arrays. The `names` array represents the names of persons, where as the `data` array corresponds to some activity done by the persons. \n", + "\n", + "We have total 7 names inside the `names` array, and we have a row of data per person, thereby 7 rows of data inside the `data` array. " + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['Tom', 'Amy', 'Will', 'Tom', 'Will', 'Will', 'Amy'], dtype=' The boolean array must be of the same length as the array axis it’s indexing.\n", + "\n", + "Let us try some more examples. Say get only columns from index 2 and further where name == Amy" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 7, 8],\n", + " [27, 28]])" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data[names == 'Amy', 2:]\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can also do a not equals, to get all rows corresonding to people who are not named `Amy`" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 1, 2, 3, 4],\n", + " [ 9, 10, 11, 12],\n", + " [13, 14, 15, 16],\n", + " [17, 18, 19, 20],\n", + " [21, 22, 23, 24]])" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data[names != 'Amy']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The operation also supports combining multiple conditions" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 5, 6, 7, 8],\n", + " [ 9, 10, 11, 12],\n", + " [17, 18, 19, 20],\n", + " [21, 22, 23, 24],\n", + " [25, 26, 27, 28]])" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data[(names == 'Amy') | (names == 'Will')]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Setting values conditionally\n", + "\n", + "We can also use boolean indexs when setting values to elements in an array. All elements qualified with the boolean condition will get the value set. \n", + "\n", + "Let us try to set all even numbers in our data array to `0`. We can do this in a single line of code." + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [], + "source": [ + "data[data % 2 == 0] = 0" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 1, 0, 3, 0],\n", + " [ 5, 0, 7, 0],\n", + " [ 9, 0, 11, 0],\n", + " [13, 0, 15, 0],\n", + " [17, 0, 19, 0],\n", + " [21, 0, 23, 0],\n", + " [25, 0, 27, 0]])" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Fancy Indexing\n", + "\n", + "**Fancy indexing** simply means passing an array of indices to access multiple array elements at once. If we know that we want to pick up elements at a specific index, then we can simply specify that index rather than passing a Boolean array with `True` / `False` values. " + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [], + "source": [ + "arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Suppose we want to access three different elements. We could do it like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[4, 6, 8]" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[arr[3], arr[5], arr[7]]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Alternatively, we can pass a single list or array of indices to obtain the same result:" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([4, 6, 8])" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ind = [3, 5, 7]\n", + "arr[ind]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When using fancy indexing, the shape of the result reflects the shape of the index arrays rather than the shape of the array being indexed:" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[4, 8],\n", + " [5, 6]])" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ind = np.array([[3, 7],\n", + " [4, 5]])\n", + "arr[ind]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Negative indices\n", + "\n", + "We can use a negative index to count the index from the bottom of the array. A value of -1 means the last index of the array. -2 means the second last index, and so on. " + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([10, 9, 8])" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr[[-1, -2, -3]]\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.6" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/NumPy/Lesson 5 - Universal Functions.ipynb b/NumPy/Lesson 5 - Universal Functions.ipynb new file mode 100644 index 0000000..c55d272 --- /dev/null +++ b/NumPy/Lesson 5 - Universal Functions.ipynb @@ -0,0 +1,325 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Universal Functions\n", + "\n", + "NumPy provides some useful out of the box functions to perform operations on matrices. These functions are divided into 2 different segments:\n", + "1. Unary Functions\n", + "2. Binary Functions\n", + "\n", + "A Unary function operates on a single matrix by itself, while a binary function requires 2 matrices. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Unary Functions\n", + "\n", + "## np.sqrt\n", + "This function simply returns square root of all the elements in an array." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[2., 3., 4.],\n", + " [5., 6., 7.]])" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import numpy as np\n", + "a = np.array([[4,9,16],\n", + " [25,36,49]])\n", + "\n", + "np.sqrt(a)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## np.exp\n", + "This function computes the exponent of each element in an array." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[5.45981500e+01, 8.10308393e+03, 8.88611052e+06],\n", + " [7.20048993e+10, 4.31123155e+15, 1.90734657e+21]])" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.exp(a)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## np.log\n", + "This function will compute the natural logarithm (base e) of each element in an array. " + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1.38629436, 2.19722458, 2.77258872],\n", + " [3.21887582, 3.58351894, 3.8918203 ]])" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.log(a)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Similarly, we can also use **log10, log2, logp**." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## np.rint\n", + "This function rounds elements to their nearest integer. The function `rint` can be read as `Round to Integer`" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1., 2., 3.],\n", + " [3., 4., 4.]])" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a = np.array([[1.38629436, 2.19722458, 2.77258872],\n", + " [3.21887582, 3.58351894, 3.8918203 ]])\n", + "np.rint(a)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![](./images/ufuncs.JPG)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Binary Functions\n", + "\n", + "Lets start with 2 matrices and perform some basic arithmatic operations on them. " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "a = np.array([[1,2,3],\n", + " [4,5,6]])\n", + "\n", + "b = np.array([[2,4,8],\n", + " [16,32,64]])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Addition" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 3, 6, 11],\n", + " [20, 37, 70]])" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a+b" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Subtraction" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ -1, -2, -5],\n", + " [-12, -27, -58]])" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a-b" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Multiplication" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 2, 8, 24],\n", + " [ 64, 160, 384]])" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a*b" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Division" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[0.5 , 0.5 , 0.375 ],\n", + " [0.25 , 0.15625, 0.09375]])" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a/b" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are several binary functions that one can choose from. The table below shows some of the binary function operations available.\n", + "\n", + "> Keep in mind that the matrices have to always be of appropriate size for the binary operation to work. We cannot add a (2,2) matrix to a (3x3) matrix. If you can perform the matrix operation mathematically, then the system can also perform it for you. But it will fail on attempting an invalid matrix operation.\n", + "\n", + "\n", + "![](./images/binary_funcs.JPG)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.6" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/NumPy/Lesson 6 - Statistical Methods.ipynb b/NumPy/Lesson 6 - Statistical Methods.ipynb new file mode 100644 index 0000000..609ef90 --- /dev/null +++ b/NumPy/Lesson 6 - Statistical Methods.ipynb @@ -0,0 +1,672 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Statistical Methods\n", + "\n", + "NumPy provides several statistical functions. We use basic statistics very often in daily life. Computing average, sumation and several others. \n", + "\n", + "In Machine Learning, we often have to perform several statistical operations. Even when plotting charts, requires use of several statistical functions. Let's take a look at some of the statistical functions provided by NumPy." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "data_list = np.random.rand(4,4) # products a random (4,4) sized 2D matrix" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[0.72686874, 0.19474382, 0.05061276, 0.35455887],\n", + " [0.61115868, 0.55553073, 0.44741632, 0.92858649],\n", + " [0.02789257, 0.69665108, 0.31917997, 0.48274819],\n", + " [0.81314283, 0.11493034, 0.7677079 , 0.53254535]])" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_list" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Sum\n", + "\n", + "Used to fetch the summation of all values within the matrix. " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "7.624274629565662" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_list.sum()" + ] + }, + { + "attachments": { + "image.png": { + "image/png": "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" + } + }, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Mean\n", + "\n", + "The Mean value is nothing but the Average value. We simply produce a sum() of all numbers and then divide by the number of numbers we did a summation on. \n", + "\n", + "![image.png](attachment:image.png)\n", + "\n", + "`np.mean(array)` - returns mean of array-list." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.47651716434785385" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.mean(data_list)" + ] + }, + { + "attachments": { + "image.png": { + "image/png": "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" + } + }, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Median\n", + "\n", + "Median is that data point of given data, which have half of values lower than it and other half higher than it.\n", + "\n", + "![image.png](attachment:image.png)\n", + "\n", + "`np.median(array)` - returns median/middle value of array-list." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.5076467722525979" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.median(data_list)" + ] + }, + { + "attachments": { + "image.png": { + "image/png": "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" + } + }, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Standard Deviation\n", + "\n", + "Standard deviation provides an indication of the spread of the data\n", + "\n", + "![image.png](attachment:image.png)\n", + "\n", + "If Standard deviation is Low means that most of the data points are close to mean of the data. If it is High means that the data points are spread out away from the mean, or in simple words are more deviated/distributed in a high range.
\n", + "\n", + "`np.std(array)` - returns the standard deviation." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.2709284253978271" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.std(data_list)" + ] + }, + { + "attachments": { + "image.png": { + "image/png": "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" + } + }, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Variance\n", + "\n", + "Variance is another number which represents spreadness of data points. It's formula is square of standard deviation.\n", + "\n", + "![image.png](attachment:image.png)\n", + "\n", + "`np.var(array)` - returns the variance of array-list." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.07340221168854594" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.var(data_list)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Min/Max\n", + "\n", + "Returns the minimum/maximum value of array. Let's look at an example. " + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.02789257109099408" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.min(data_list)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.9285864855860084" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.max(data_list)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Argmin/Argmax\n", + "\n", + "Let's say we want to find the index of the element with the min or max value; we can do that using the `argmin` or `argmax` command." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "7" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.argmax(data_list)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "8" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.argmin(data_list)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Cumsum\n", + "\n", + "Returns the cumulative sum of the array, taking 1st addition with 0." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0.72686874, 0.92161255, 0.97222531, 1.32678418, 1.93794286,\n", + " 2.49347359, 2.94088991, 3.8694764 , 3.89736897, 4.59402004,\n", + " 4.91320002, 5.39594821, 6.20909104, 6.32402138, 7.09172928,\n", + " 7.62427463])" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.cumsum(data_list)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Cumprod\n", + "\n", + "Returns the cumulative product of the array, taking 1st product with 1." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([7.26868735e-01, 1.41553191e-01, 7.16439728e-03, 2.54020062e-03,\n", + " 1.55246566e-03, 8.62442384e-04, 3.85870794e-04, 3.58314404e-04,\n", + " 9.99431000e-06, 6.96254683e-06, 2.22230550e-06, 1.07281396e-06,\n", + " 8.72350983e-07, 1.00259595e-07, 7.69700829e-08, 4.09900599e-08])" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.cumprod(data_list)" + ] + }, + { + "attachments": { + "image-2.png": { + "image/png": "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EHebNIGPeBzSbdVfOt+PUJZtz38cPw2qRL3Epuo97Ws6m2jwtBan5UZJ9b2BJm7g7dTbz0pretBWfWcrDupE++jrKA2Mmu+N1H461nw6UvdxJRpzNLxZUePleIlftm1/Nm4neBbkH82WpgcdNe45ZXSvoc5BFmSOt+r37EzNnPEd7d6z4Li735ZGXu++bFnrcFV52K1K83/N5ElxMHRrpxodH0f7ziRKUUAv6T26dF/x9iavm6qYYJ9xfzrUNCrbiQbJOKRbd1saJgHpLAWLr060nWVp2u8tBjkDv/doFAzdS47HYEuVx31Nvo3UullW9dGuuq+GGn+aab5wjPppLi6bQPmg6uxtOz6vzPl2p67225k/hq+xtj2CvydfZhiHY8+DJA9fhmrdjc8Xc/NilJSP10s5Deo6vXLN6tOhOo8q8flsbnSY8+i5LXdrtOQYv99Tby87XtNj3+b/u85Tu2/+IoAAAggcJ0Bw9DghliOAAAIIIIAAAggggAACCCCAAAIIIIDAlRQgOHoli5VMIYAAAggggAACCCCAAAIIIIAAAggggMBxAgRHjxNiOQIIIIAAAggggAACCCCAAAIIIIAAAghcSQGCo1eyWMkUAggggAACCCCAAAIIIIAAAggggAACCBwnQHD0OCGWI4AAAggggAACCCCAAAIIIIAAAggggMCVFCA4eiWLlUwhgAACCCCAAAIIIIAAAggggAACCCCAwHECBEePE2I5AggggAACCCCAAAIIIIAAAggggAACCFxJAYKjV7JYyRQCCCCAAAIIIIAAAggggAACCCCAAAIIHCdAcPQ4IZYjgAACCCCAAAIIIIAAAggggAACCCCAwJUUIDh6JYuVTCGAAAIIIIAAAggggAACCCCAAAIIIIDAcQIER48TYjkCCCCAAAIIIIAAAggggAACCCCAAAIIXEkBgqNXsljJFAIIIIAAAggggAACCCCAAAIIIIAAAggcJ0Bw9DghliOAAAIIIIAAAggggAACCCCAAAIIIIDAlRQgOHoli5VMIYAAAggggAACCCCAAAIIIIAAAggggMBxAgRHjxNiOQIIIIAAAggggAACCCCAAAIIIIAAAghcSQGCo1eyWMkUAggggAACCCCAAAIIIIAAAggggAACCBwnQHD0OCGWI4AAAggggAACCCCAAAIIIIAAAggggMCVFCA4eiWLlUwh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J7ZzWa+qsDQkQAIkcIMIjNG+mxVo9QZVkVUhARIgARIgARL47QRoHP3tTcACkAAJXDeBMGCavcfxdWd6S9OfnlRRPkoGxFtDGN4Uo/Mxpmp7lO8DNO4uXn6q9vQbPatY+zCuYb1YJBIgARLYcAKziyFGnz2oMH2TV/vY3YQxZcOZs/gkQAIkQAIkcNsJ0Dh623sA608CN52AN0JbB/5JBPW46fX+jfWbntRQexsFuPuNRcnJeob+Y2tfSMdF9WRxeacnDbT+IwFqcpLmaRIgARIggcsT+NQy+4JLPIC9FkbqIxb/kQAJkAAJkAAJkMA1EqBx9BrhMmkSIIHfSyAzuIgOmPZ7y3Ubcvc/99F+K1G216/Gs7MGyq6jgzS1PywyeM4wfNXFKBkEZf2qxRKRAAmQwGYT8K2AZCqgKg2jm92eLD0JkAAJkAAJbAgBGkc3pKFYTBIgARIgARIgARIgARIgARIgARIgARIgARIggdUSoHF0tTyZGgmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQwIYQoHF0QxqKxSQBEiABEiABEiABEiABEiABEiABEiABEiABElgtARpHV8uTqZEACZAACZAACZAACZAACZAACZAACZAACZAACWwIARpHN6ShWEwSIAESIAESIAESIAESIAESIAESIAESIAESIIHVEqBxdLU8mRoJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkMCGEKBxdEMaisUkARIgARIgARIgARIgARIgARIgARIgARIgARJYLQEaR1fLk6mRAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAlsCAEaRzekoVhMEiABEiABEiABEiABEiABEiABEiABEiABEiCB1RKgcXS1PJkaCZAACZAACZAACZAACZAACZAACZAACZAACZDAhhCgcXRDGorFJAESIAESIAESIAESIAESIAESIAESIAESIAESWC0BGkdXy5OpkQAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJbAgBGkc3pKFYTBIgARIgARIgARIgARIgARIgARIgARIgARIggdUSoHF0tTyZGgmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQwIYQoHF0QxqKxSQBEiABEiABEiABEiABEiABEiABEiABEiABElgtARpHV8uTqZEACZAACZAACZAACZAACZAACZAACZAACZAACWwIARpHN6ShWEwSIAESIAESIAESIAESIAESIAESIAESIAESIIHVEqBxdLU8mRoJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkMCGEKBxdEMaisUkARIgARIgARIgARIgARIgARIgARIgARIgARJYLQEaR1fLk6mRAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAlsCAEaRzekoVhMEiABEiABEiABEiABEiABEiABEiABEiABEiCB1RKgcXS1PJkaCZAACZAACZAACZAACZAACZAACZAACZAACZDAhhCgcTTRUN7nAdp/7sA9GiWuXPNPf4bRmwYq2/vofbtCXqtKZ5ki+GO077lw77Ux9pd5sOC9151+wWLwNhL4LQR+zjB82UT/y2/JffWZeiN0X/Qx+bH6pJkiCZAACayMwO/Qp4LC+99G6D6pYOtRD7MrVGhV6SxThNlpDVvOFmqnVyl5fo7XnX5+ztdwRY3vxzWUth04joudP1vof74ORfoays4kSYAESIAESOCGEaBxVBrUn6B31ERtTykoDpxfaBz1/tNG858KXJWvc3nj6KrSESSF/1638fK60y9cUd5IAr+YwPchWocdjG+aIfHHBN2/auhyEviLOxSzW5rAtx729dgc6Aap4y2U7u+j/nKAqbd06nxgTQn8Nn0KHoYvmmg8dI0uemnj6KrSWb6Brtt4ed3pL1/jSz7xY4TWXgmtD0ZwTN9WzTzArWPw/ZJp8jESIAESIAESIIFLE1gT4+gU3Te/2FMzB5n/n8YvN46aokzRvX814+hq08kBdK2n16cfXGs1mfgtILCCvqwmTvcaGN40w6i0vq5fFb2vcoJ/SWB9CfhfuqGRdP/1BOLb5X8fo/d3yegN7ur6s3/eRf8qq0jWF+Xikn3povtx8W3Xf8eq9LJLlPRLF2VliL+0cTTIc1XpXKIKV35kbfrBlWuSmcD4RQnO/S6m4VUfo+dluNs0joZIeEACJEACJEACv5DAehhHv3RR+YWemnP5fmz9JuPoDL1HqzCOriqduZSu5+I69YPrqSFTvS0ErtyXp+g9dlE7vdmuaP6HJnb3WhjdVAPwbenvt6KeMrY62D9JLheeBuO3A+eBbey4LBgfwyfVq22xc9ms1+C56esKWmthHJU2v/yKnkvjFI/lqxpHV5XOpSty+QfXpx9cvg75T47RvrsC43d+BrxCAiRAAiRAAiSwJIE1MI7O0H/s/tJl7HMZ0Tg6F8/1XVyzfnB9FWXKN57A1fvy7GQfjtvEUNzTbiwz45lVej4OPfFubFVZsQ0nIIayLOMo4L2vmw+rThndK+4P7H9qoXSFLXY2GvS3PqquQ+Poqoyaq0rnV3eqteoH11D5WR/VVXgGX0PRmCQJkAAJkAAJ3FYCv9k46mPyOthjh56jt9hzdA37wW2VCKz3FQmsoC/7QzRdB86T4a0wGE5fl+E4NfS5x9oV+x4fv14C842jkA+rzhUNe9+HaOq9z3+Dt+L1AlycutqLWH0svyrDxTkVvEPa/De0xaqMmqtKpyCxldy2dv1gJbWKJ7KJ7RKvAX+RAAmQAAmQwI0jcL3G0e8jtA9K2FJfR90dlA8aaB82gqViMwz+KQdBiOxAB7YS6mH0so7KnWBjep1GC4PkHnXfJxi8aaB6J1iG9mOC3pMKdpSBYbuCxvtoR59YC3oT9I+sKJEPG+i9Crw/ksbaH/a9Kt0S9g+7GMdWvfqYXfTROaxgSz8/Deq4hcqLuGfU7LyD+sMdU//tEmrHPbT/WH5Z/XLpeJicNLC/t2U8XLYrqL8cIayCNbnTQamSX7VFmVPnrcmL/3WE3lEVO24LqZ1jF3Jb3A/mpg/A+7ePlvQzFe3zYR2d8+SyR8D7PED3SRU7j030V/9zD42gDbYeNNL9KtZZ+GNtCKgIwidt1B9sBd5FHkYS7dXdQfVl/F2Dvr8VyQcll/407557p4LGSbR/4MI6XlWmzX3e5C4eaNV36T4s5fM+WPJD9fl7NbTOEnLOn2F82ok4fR2gcc/VMrH9yYfiMve6zmyxDNZeroFMELkRW3Yckyu2fA9q86Gp5Un5daL8Uln+JYG1ICCGsmzP0eg9yOjjUn5P6Sb7QWRqB1sP6ugEwVjULf5FB/s6arWtEzlw/uv/hPud6nfM0k9GR/a99hi8SB/xMfvYQzvUVwDvQxs1rR+oqNlZgeAsWRvIncZxHY3UNgNS4fhfe8w1OlQTzcdtozd8C+RTQpbE9txcqE9oipeolynnMvrUSmSw4FERyy1dd2uvhvbbtmnzZZbVL5vO3P4Y9XeR67bep4oe63tSTt/D5MyMO7FxIKjrQm6L+sGC9FU2sXZ0tlA6aKH/b6jpBiW5TP8PHs35UyjfhB5ts83ilcxqIT/1wKKxfdF1nemisT+rf8RlX2b/SFaIv0mABEiABEhgjQhco3F0jPaei+rbqfF++ulhrL1E44MnRFGwlH3Dx8Pg0IVzt4FBYCPw/u0YZdFebvp5gP5JCxVlCFXL0D4M0DhsoHs6xPBUzlfSy9y+9lHbdlD6u4+pXrrqY3bWREkU81h5VF3U3kAdTAL9ava+gV11b7i/2AzDtz10JTDD0QAjNWmQKPR32xjrigUbrrsVtD8GiX0fh94SxaPVL5uO2sNQGWlH8H4C+Olh9KKijbNbfw9CA6n/bRB4rTgov5qku+pP5dUWBZ2YnPXRfxl4/zr2xEw9WoRbkEVOP5ifvo/pmyrcvTp6FxFLExzDRfn5KPS8U+n0npv6qsnW6H0D9Sdd9M+H6Mv5sC3T1eaZNSHwfYT+SRd17VnloHU2RuewjvbJAMMzOe+ieW7Wo/v/DtB704zkw8UA9b0qGsdtNP+KPs6UXpi3c34tryrTijyv9ho0xo68PfeU8dR1dtF4L4Jxgo7erziqN74N0YtxGukPUxIBefd//8/865pHQRkMH2GUXaeMzr8ZFD93ULbkRuwOefdjgSlid/AHCawBgcgYkDJi6KjT5r118zy+v/ZQ3bbH/RHaOiL5FupnccONMSokdCUAk1cV82Ezpp8A+CrBomQMXqSP/Df+72lcXxm/rKN+3MPgfBDqMe7TuPe6CiDjPu4FOhPgXXT1EvgUj6zW+j5A3S2hdR7U1Z9h8FQFspIym4fEyJyWf0X0CQ+jS9QLWE6fWokMljFHB6Zz4T5sYxR4zwtXbTgTo2MWU/vcsukU6Y+h3q76dh2DjL2hp2/2UToKPrKr8fm0F+qQyX5RiFtQp8x+sCB9wMPwaQnuwxaG3wId4NsQreA9q72TD3CX7Sc2cPu4aL7WMzLuFW1f5QiwbmO/b/ZG1/30fgcTNbdI/Ju8KhuZkXEtcSt/kgAJkAAJkMBvJ3B9xtFPLbgpZSojyIAoCEllP/O8mqwrJW0/EeFYzm+h9ibuBWaWbCY9PYLgCRnGsPHxbnryEXg+xRW9YDN1pxn3lpTIoHfr6Acert6XEcaBHUMHIHFcNP6T2Ezwex81bZhNT4iyesmy6eiomAf90Ahq0pRIrJZRRX10/k9DG02TEyP9zEUbleOkIWmEpi57fJIjywwLcctsb6l5dvpmX7YMlpii+0D1Exf199ak0xugrsq5XUP3s81fOBRjL6Xi399HYPzCvKflZ8NYn1Z9VyvqMXkiBsdd7B8NrMiwwPREDPsZH1CS1buqTCv0/Bgt+dCTGalaDDTxd01NmlS999/K5M8UXuTf7mE/qLeH6ccxZsFEZe71zHdSZG1SBivGysM/LksEoXdaw25KbshVeb/rGFivq1zlXxJYDwLy7ln6xI+Z9pKrBR9rtg66mGQYkORDYSrAmugL9gff0CMvYzwSL+yYfFN0RmhljcGSfo4+gou2+ch7r4mhva2FP0QjlZ6RTfUze+w0+kK1gOfo7F0Vzv/qIP7JVY3VcVmWaRRTVVxGD1uqXsBy+pT0g3i5LyeDfYye7cJxGxgm+o2SmcWNo8umYwzNxfqj6FNZY6SH/kF6S5Tp230zHsX6xXLccvsBgOz0AdXHXCejnD+GaOhxtYT2hSVNluwn1pOxw6XzVU/L+FrYOLocv7lju2Kot7NxkKkbSNliciZn7Be2CRlmAKn+sRtnHiPHHyRAAiRAAiSwXgSuzzgaKB37ryYx4wU+9tC3J/2Zg7Cy0I3Q3HZT3ouyTCPpVZDnaREq1JbRwD9vauNf3FfM3QMAACAASURBVGgXNEywxNOxlYIvPey7W2jEvDtEUUlMYKQ+z1ILzJU6Yox2WcvPMUWv8LL6ZdMZaYNL1jJd4ek+tw2eYvhNKr0+hk/30164uROzS3CzuYfvStbETyldygDayAxaE04sYgbwIJ0MZTTsP8ktG8Iy8GCdCOROnHLev7B9bdmjKyQTP8vgkVfRq8q0Is9LkIbcYCxqErwF917CyJBjNBFOzQ/ZlZp7fUkZjC9dVJRBJfbOqXwV44wJa1gkeb85iQqR8GANCciYr8ad+H/lv7oYfJ5j2f+oPhZX0U/tlCF930XrU1TlXHmV857nGkdz5GGYk1xPjbtSV/vjr0TXjlbQmHRG6M3ZAkTyMsZDy+M9uDA76cU+MItMSup4uIweVqhey+pTK5TBgcx0U+VU3sC94svql01nyf4o+lTqA9eXLvYT3sWqWaUN4zr25bil+kFu+kH/zFmBII4PsY/+S/V/6cnJv5fIVyUheWfoo8kczO/L8fsVY//0jfFor7yJf5zVOkFKH8iuHc+SAAmQAAmQwDoQuD7jKGboH5i9Ld17NXTOpnEjqdReFIQs5VDuUctJPg/MXp7BpCSpMBWfTIgXWU7QhNzJhxTG7FPUCvYsTC2Dn1cf8eLIVIZkMpIwtkq29t9l05EyJSZ0sQleokyhsmPvA/ith2rmkkGZ4MU9Kewiq2Vran+zS3HLMr5merZYOYZ1tieki4yjOX3CSpaH60FAJl9JOZA34ciVD5YHReyDSGY1ryrTCjwf9tsCckCVUe23rPaqk30KE3I0l1NQv0XXbQyLZLB6x4dPjfdozDNeGYVTXut2yiI/+P7ZVHi8bgRkjI4+pISe53stjBKef3bp5T2LjbmJ8dg2JOXKq1z9RN6hxBgs8iQhF8Ky5V6Xusbl0Oy0FuwhX0bt5QDTOfbgMA858Mdoqz2PHQdbj1rofUxZivWdwiol2yUd/fey+kRGvZbVp2LluJoMFu89u+3D5KVtErpZeN06WDYdYVy0P0KCBMY8XH2MjqoZH8vzjKNWgdXhFcYuKX+M29x2jDyPHbcVbHFlGShT70dGP0kUP/x5mXzVw0u0b5iXfXAFfioZYTj/PTMZLhz7M/sHoAzSKe9kuw48JgESIAESIIE1I3CNxlFVUx/Ts3YUYGB7H+1koBxREFLKiSE1O2+jemcHlcOO9swYBsEHkgN68cmEKD05E/HcyYcJZlS5s4PqUQ+jb8HS/KSH17z6SNqZyq6UKz4Zyewvy6YT3B8zWGQmbJ0MlZ1m6Jk5Pq7kLI/JmZjp5FbALcs4KpwT+5VFNZAy2TyDcxn8Tf/J6RNRojxaEwK5ir30i0Qb58qHYB8vPUnMkUHxKl9Vpi14XsqflCvxQgCzoQ4qtaMCupxN4J23jDdbog65nIL0Fl1XtxWVwTrJlPeoWoq3Fe4Bm6yG+S3vKt+/bD48ux4EZIyOjKN6r0q1LNpxzL56OQU18id7lUPWI7nySsb+xHu+0HM0dX+Qq8ib1HWpqz1+mmf8rwO0HwVBHZ0t7B8Pw206suoSP+dh/KaBsl7i7MC910AvEShnvky6qj6RUS9hmhgzTLkz7pcKrUAGi94RM/JJ+tI2meWSm8zfZdNZtj+qXMIP5uIdqLaCyvnoJW2YWa8VcMtMf247WsZIW2cUxkv0/zh5y+ia106Sh52vSkTO5z2Xyig4sQJ+KiVhmJxL2dkuM/aH/UMcKtQew9vR/MFOl8ckQAIkQAIksK4Ertk4KtX2LCOpi+qJtfRCFISUcjI1nqd7zTAgk0pNlMDkgG7OpxV5WVYfeYWJsusgc7mJKFh2eWSj+8fdMCATIOkk8sytj6VE/dGL7XtoKOWkJwjtv1LGoukEy7NSS6LsNDOOZRmSVnCVsfSPbka51YNi3Eh4rayKW1b69vLjzKXwUiZ7WSCNoxnNvJGnchV7ef8SE45c+WAZR5eLln4ZmWajznle9sWdYxydvlPeWyU0zyzPK5EJttwqMAHK5aiLupwMNrWLvEf1fr/KWBoGo7Prbx/LuxpfWmzfwWMS+P0EZIy2jaMA1DgX7DmqAtPEd+Q0pTZ7JBbfNiJXXuW857ljsMjDhFwIWeZel7om9JvwQcD7EhlJdZAm69rCw58zjEIjaQmtjxG1XJm0En0io17CtKg+pQyFK5LBos8m94rW/KRtEmNZFttl01m2P+o8ZV/8uy2MfGUs3c/96CVtmDSOropbZvp6T2+13YWt81m0hKfdznIu9X5k9BMrqdjhZfJVCUjeBdpX8lsVP5WeMEzOpUxelxj7Q4eKOgbfjTF92TmH1JN/SYAESIAESOB3Ebg+4+jHbnq5jTcwm6Lbk2VREBLKiQzcSW9HUQKTA/oyk4nRkVnalTlwi6JslcfcX07UJ0d5yqmPbmC55iT38lRXc9LL6hnLphMqLVGU+XiyU/TeDOOn1C/J524b/bf7c5bHiHEjbhxdGbcs46js3+o42eUKjEyx/aUknQxlNK9fpaHwzDoQEPmQlANhn020sWnf5DtsamKWJBYwXFxRpqHQ87LfbzLgUUBd3snk9hYZcks9kcspSG7edblWVAYHSSLce3Svje7zXaT2IQtvlAORH/YWGHKNf0lgXQjIGJ0wjqriqcjf2hsy8fE3KLrsc55rRPzaQ/c8qucy+ox5St6h+BgcykNLn4lyscb41HWpq20cHaErXmFhIh4GOhDbYvk5O+mGq1DCxz93zD7Fh4Nw2yWRO0nZvhp9IqNeIlOL6mVy/wpksNTVyfLAlHwSY1nIzjpYNp1l+6PJSi2jN17Stbd9tB60o+XpVlnUoZQnZhyV+qyQWyx90XOdnL4Y7PkdG4+kTIX6f6KS8vMy+apnJe8C7auzkvtXwE+lJ22UfM/sa8uO/eI9WjruonV33j7jukb8HwmQAAmQAAmsHYFrNI624CYHcfgY/O3AyTKOhvd6mH1TSpgJeBDfr8Yzzzuy/NKHHzgcjJ6p+21FPmCdZTS4aKOk9/vKMECkAjKJMp1QuH5O0Llv5fnDNx4jeQqMLo6HwWFgmH2W9DBZJiDT8unoaPWqznprgyn8IFq1/32M3t/lHA8A8QJLtFmqG2dNzK7KzfQDk1VW+iZKrqvqtNfCOHI80Y8Y5T8RmRRBVOwMZVT6W5aimKouT/x2AhKtNtVe8v4l2ljaN6nsSxRpJ3E/vo/QPe5iZEdwVkEsQjklCIrLNOXFvvj5gnsiJybTEilZPOT9H+aFkAlQut6m/POuC7OiMliIRHuPKvmY9SEoulMfiRd4TiCNxN38SQK/iYCMaRnGUWVs0JGyVZ/fQu2dtTpGl9ZEBzf7bbYx/CoDlg/vooe6ihYvp8IVMtHHHP/bzBgPZX/D5Pt/0TZGxqTXnMjDlNwKEErQn0LGIRXYMR1V3T+rw8kzSFktpWRNJWVcnaDzvxw4GcbRUGZ9n2HmC/uCethS9VpSnxKdMtkG7xUHB0vJYLX0WBvVd9H8YHUAxU3qkBybLKbh4dLpLNcfw3xk25S8j9LBjTKuxIyXV+Wm+4HJIDN9vX+4CQzkPu7DWlehH9KGO9d4NYb1EcaF+n/4VOpg+nrJfFUK8m4WaV91/1X5JUotDMP3zLp+6bE/NBQ7yDT4Z+lVVr48JAESIAESIIHfTeBajaOO46L8bIBpEKjA+7eLqpvwrJBlpG4FrdMBekctHc3eO6vriPKOW0HzZIDBSRv1wzZaf6nJh4P9F310jzrGKOaP0LprztdP4xECJq+M0uI86mIaGAT1PmHPy2H6rbMJZp6H6Xkb9Yclo+C6FTRetDH4AkxeBuf2auicDtF/00D9SQsNbRzdReNtH+0jo4zN3km56xmRaZXC20ctCJ5S+ruL0VcP3myM3tMaKkEdSgdNdN6OQ0+KzE6ybDo/xmg/NIZZrcBr47BhlrcUUOeb9bU9WSDx/nD20bWWuC/DDTn9QGeVk75uxyPTNlsHXYwDQ5b3bw/1vUQ/UzvgfmxhV9e7jr5t9FKG7gdBv5L9tJJ15O/1IfBzht6Baa/yy3FsGat31jDv9d0mhpYoEGXf2aujdxFc8GcYPC3BcZMe1R4GhyZ9e9JuJieXl2lFnxevnsylluo9CTzUKk97GJz10D6so31UM3LrURv9Ny10PvnAzxn6wccY97Cf3hdwwfWlZHCyd0j05IxIxslbESxL3H0xTl3iCRJYFwK+iswdjJuZ7xPUR91AV3BcVJ4PMJlFBi9fGTCDvTbjY3B8Wbmq7/iF8dBTOsLgtIPGK5FzYtRyod//8z46hzW0Pw7Q0mVzUfmnjc57Y5xdpI/MTgK5cT/QpQS2rPJxdtE8F0FqPlK695oYiHHXm6D72J2736okaYwxW6i9GcMLsMzOmig58frLhx73YQv9sx5agW61jD6xXL2W1MtWKYPDJfpqvCmh/maEqedhdtFD86AS6Csl1J510Psk7SBE43/Nkuvi6SzTH6OcPPTV2OvGjfnRdXUk3sQOdp8NIz12GW7WdjfJfpCbvi7EFL3HSs8147S8frPzFipuvJ+p25fuJ/GKWr+Wy1fprmpbAiMH4nqzlWj8cBl+C8b2RbrBVcZ+4z3qZjhc5OhV8VryFwmQAAmQAAn8VgLXahzduVdG+d6OMVaoCKV7tXRAJqUcvjcb9Lt3auh+lsmEj/HLKnbUZGK7hNrxSCtZ/qc2yq6LnT87GCujq3xNtYx9jt74XLwNAyOHvh73LFWbjdf2TGCBsGzKu+tOFW0V5CQ0pk4xeFLRUVrdOxU0TibaIGMit26h8mSAabgs3s4v8iKItbI3Qe9JxdTN3UHlSQ8TTwV4Uml1MfomDGJPpX8sm87PGYYqsvUdYyRVdW6dmrqkE5czShnO9/4KjU4W/8hboAg3ySe7H8xP3zw7O++g/lD62RZKBy30E0EestLRHh5Z/afol/yo6Dz6VQTE28Lqb8ZjXDyL4u+feJaa9t9H56yHhvSV8N1LF17e7dqp5X/ysYUrybTCzwdL63O8vfyLDqr6HVZ9vW28W4NI0Ep2dS78yCslxkk87i2vlbzrGklBGZzGp6Q6en8kvLwy7wPMtgZcgpeDh6d/N4FMmRPImZTHmQRqtOSQfc9siM5hMPY7wVgV6jxWRX+M0dFBj7ZQObIMTOqWrwM0Hii9xcXOwwb6+oOk8uqUYJFKf8iWh+LVmHddjd3iURYz4Oo6jNC6U0b5ftnoLkp2aN2sWEAmZYgq3S+jHOhcUv5kQCYlOwb/qI/XLnb+6mISfFzX5y+ph82vV8B9CX1qJTLYam71QVfGJdExPeXVuF1B480IYuSzHsk8XDqdov3Rzk0Z+Y9zPmRlvivRVg+FuIV5ZfSDBembRz1MTluhbu+ocf6wg6E1lF+u/4cFyzkokm/+2Ju58i2RUyF+mYx+4div+q29OtCqQ6ZeZV3nIQmQAAmQAAn8bgLXZxz93TVj/iRAAiQQEBDjaO/bZiDRS3TneueseT2U5+iDvABudtmNEWc3J5CNfSePSYAESIAESIAE1peA8hyN7eu6vkVlyUiABEiABEggRYDG0RQSniABErhpBDbNOKo9Lx+7iLywN6tFxse72YHSktVQ+z/vtTAKvcOSN/A3CZAACZAACZDA+hNQq17yV5qtf/lZQhIgARIggdtOgMbR294DWH8SuAUEwoBt1p64a1/tHyO07iX3Q13TUs/GGH6c6L0E/c8d7N9tYbRwdxC1T1sV3S8Lb1zTSrNYJEACJEACJHB7Ccwuhhh99qBC0k5e7YOrQG5vX2DNSYAESOAmEKBx9Ca0IutAAiSQT8Aboa2DpznY37SAW94IrT9bGM2PxZFf919yZYxWLNBMOvBFuhgeRscNa4/p9B08QwIkQAIkQAIksKYEgmCK4f7EXAWypg3FYpEACZAACRQlQONoUVK8jwRIYOMIZAYX0QHbNqkqHkYv2xjEAkqsU/l9jF/t64B1Ww8a6GUFmLGL60/Qf9XHZK0NvnaBeUwCJEACJEACJBAj4FuB41RgWW6PE8PDHyRAAiRAAptHgMbRzWszlpgESIAESIAESIAESIAESIAESIAESIAESIAESGAFBGgcXQFEJkECJEACJEACJEACJEACJEACJEACJEACJEACJLB5BGgc3bw2Y4lJgARIgARIgARIgARIgARIgARIgARIgARIgARWQIDG0RVAZBIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAKbR4DG0c1rM5aYBEiABEiABEiABEiABEiABEiABEiABEiABEhgBQRoHF0BRCZBAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiSweQRoHN28NmOJSYAESIAESIAESIAESIAESIAESIAESIAESIAEVkCAxtEVQGQSJEACJEACJEACJEACJEACJEACJEACJEACJEACm0eAxtHNazOWmARIgARIgARIgARIgARIgARIgARIgARIgARIYAUEaBxdAUQmQQIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIksHkEaBzdvDZjiUmABEiABEiABEiABEiABEiABEiABEiABEiABFZAgMbRFUBkEiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAptHgMbRzWszlpgESIAESIAESIAESIAESIAESIAESIAESIAESGAFBGgcXQFEJkECJEACJEACJEACJEACJEACJEACJEACJEACJLB5BGgc3bw2Y4lJgARIgARIgARIgARIgARIgARIgARIgARIgARWQIDG0RVAZBIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAKbR4DG0c1rM5aYBEiABEiABEiABEiABEiABEiABEiABEiABEhgBQRoHF0BRCZBAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiSweQRoHN28NmOJSYAESIAESIAESIAESIAESIAESIAESIAESIAEVkCAxtEVQGQSJEACJEACJEACJEACJEACJEACJEACJEACJEACm0eAxtHNazOWmARIgARIgARIgARIgARIgARIgARIgARIgARIYAUEaBxdAUQmQQIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIksHkEbq5x9FsftW0HWwd9zDavXVhiEiABEogTuKky7ecMw5dN9L/Eq7upv7yPXbTfTeBvagVYbhK4cQR8jI/LcN0y2p/4ZqaadzZE+6CELceB4+6getTH5EfqLp4gARIgARIgARIggRtNgMbRG928rBwJkMCNIXATjaPfh2gddjC+YRNx/3MXtb+6NDDchJfvWw/7ymiU+98WSvf3UX85wNS7CRW+iXWgcTSvVf2PLZT2Whipvvtzit5jV/d193AAduc8ajxPAiRAAiRAAiRwEwncXOPoTWwt1okESIAEbgqBHyO07jUwvGGGUWkeZXQoP+5hKif4d6MJ+F+6oZF0/3XkGex/H6P3d8kYT90qel9XU03/vIv+t9WkxVRIIJvAGO09B+XXlpTSctnF1t80jmYz41kSIAESIAESIIGbSoDG0ZvasqwXCZAACawtAeOhVDu9yb5JPkbPdlE6GnGJ/dr2w2UKNkPvkfEg3T9JbtYzDa85D7orMIj7GD6pokfj6DINxHuXJXDRxq7jIN2fl02I95MACZAACZAACZDA5hOgcXTz25A1IAESIIGNIjA72YfjNjG86dv/femi7JTQ4j6HG9U/sws7zzgKeO/rwdL7MrpX3D/X/9RCydmncTS7IXh2RQRm76q6z9I4uiKgTIYESIAESIAESGCjCdA4utHNx8KTAAmQwIYR8Idoug6cJ8Nb4FE5Rfe+A+egz/37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VyNA4+jV+PFpEiCBdSfgjdDWQTwc2ME41r3Yt6J83gitP1sYpeN1rE/1P7WCKOTBPpJZwU2SpVV97kmXEZGTXPibBEiABFZIQG3RYu+Pe5ngYCssDpMiARIgARIgARLYYAI0jm5w47HoJEAC8wlkB55QgTT4b30IeBi9bGOQFXh4HQrpW8FxVACvrGAqVjn9f/vonE7iQXSs6zwkARIgARJYEYFvAzTuuXBUQLIgkOuKUmYyJEACJEACJEACt4wAjaO3rMFZXRIgARIgARIgARIgARIgARIgARIgARIgARIgAUOAxlH2BBIgARIgARIgARIgARIgARIgARIgARIgARIggVtJgMbRW9nsrDQJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkACNo+wDJEACJEACJEACJEACJEACJEACJEACJEACJEACt5IAjaO3stlZaRIgARIgARIgARIgARIgARIgARIgARIgARIgARpH2QdIgARIgARIgARIgARIgARIgARIgARIgARIgARuJQEaR29ls7PSJEACJEACJEACJEACJEACJEACJEACJEACJEACNI6yD5AACZAACZAACZAACZAACZAACZAACZAACZAACdxKAjSO3spmZ6VJgARIgARIgARIgARIgARIgARIgARIgARIgARoHGUfIAESIAESIAESIAESIAESIAESIAESIAESIAESuJUEaBy9lc3OSpMACZAACZAACZAACZAACZAACZAACZAACZAACdA4yj5AAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRwKwnQOHorm52VJgESIAESIAESIAESIAESIAESIAESIAESIAESoHGUfYAESIAESIAESIAESIAESIAESIAESIAESIAESOBWEqBx9FY2OytNAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRA4yj7AAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQwK0kQOPorWx2VpoESIAESIAESIAESIAESIAESIAESIAESIAESIDGUfYBEiABEiABEiABEiABEiABEiABEiABEiABEiCBW0mAxtFb2eysNAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAI2j7AMkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAK3kgCNo7ey2VlpEiABEiABEiABEiABEiABEiAB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AAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAlcGwEaR68NNSMiARIgARIgARIgARIgARIgARIgARIgARIgARLYJAI0jm5SaTAtJEACJEACJEACJEACJEACJEACJEACJEACJEAC10aAxtFrQ82ISIAESIAESIAESIAESIAESIAESIAESIAESIAENokAjaObVBpMCwmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQwLURoHH02lAzIhIgARIgARIgARIgARIgARIgARIgARIgARIggU0iQOPoJpUG00ICJEACJEACJEACJEACJEACJEACJEACJEACJHBtBGgcvTbUjIgESIAESIAESIAESIAESIAESIAESIAESIAESGCTCNA4ukmlwbSQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAlcGwEaR68NNSMiARIgARIgARIgARIgARIgARIgARIgARIgARLYJAI0jm5SaTAtJEACJEACJEACJEACJEACJEACJEACJEACJEAC10aAxtFrQ82ISIAESIAESIAESIAESIAESIAESIAESIAESIAENokAjaObVBpMCwmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQwLURoHH02lAzIhIgARIgARIgARIgARIgARIgARIgARIgARIggU0iQOPoJpUG00ICJEACJEACJEACJEACJEACJEACJEACJEACJHBtBGgcvTbUjIgESIAESIAESIAESIAESIAESIAESIAESIAESGCTCNA4ukmlwbSQAAmQwGUT+DHD8HkT/c+XHfDPCS9430X77wnCnxM9YyUBEthmAuEY7fs+/PttjClkEH4dofu4gp2HPcy2udxdeWN9cJFZ/f5siPajEnY8D56/i+pRH5PvqwdT+AXLqRALb5IACZAACaxGgMbR1XjxbRIgARK4OQS+DdE67GB8WQOQDcl5+KmL2h/dyxtYbUi+mIwNJPC1hwM1mHf+30HplwPUnw8wDTYw/UzSagRoZIl5BRg+a6Lxq6/rPo2jNJav1pIyb4fvWyjttzBSMvLHFL3fdb3yDwe4FLHJdpvhzR8kQAIkQALrEaBxdD1u/IoESIAENpvA9xFa9xsYbplhVKCrwVb59x6mcoN/SeAKCYSfu4mR9OBlunI5/DZG78+SNiD5VfS+XE4iwrdd9L9eTlgMhQTWJvC5i7KaGLig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gARIgARIgAQ2ggCNoxtRDEwECZAACZAACZAACZAACZAACZAACZAACZAACZDAdROgcfS6iTM+EiABEiABEiABEiABEiABEiABEiABEiABEiCBjSBA4+hGFAMTQQIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkcN0EaBy9buKMjwRIgARIgARIgARIgARIgARIgARIgARIgARIYCMI0Di6EcXARJAACZAACZAACZAACZAACZAACZAACZAACZAACVw3ARpHr5s44yMBEiABEiABEiABEiABEiABEiABEiABEiABEtgIAjSObkQxMBEkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQALXTYDG0esmzvhIgARIgARIgARIgARIgARIgARIgARIgARIgAQ2ggCNoxtRDEwECZAACZAACZAACZAACZAACZAACZAACZAACZDAdROgcfS6iTM+EiABEiABEiABEiABEiABEiABEiABEiABEiCBjSBA4+hGFAMTQQIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkcN0EaBxdRDwco33fh3+/jXG46GU+JwESIIENJ3BlMi3A5O82Ou+CDQewZPKCEbrP+ph8X/J9vkYCJDCfwNc+anc87DzqYzb/zfWehjOMXjVQuXOA3lcziBDj4zJ8v4z2h+1W5IKPPTR+3YXvefDuVFB/PsLVS+RL5Htl/ZNZH27Odfh1hO7jCnYe9q6mzWw6CtaHyyuh2RDtRyXsKNng76J6dIn6Dcvp8sqJIZEACfxUAjSOLsJPgb+IEJ+TAAncJAJXIdO+T9B93MDgy00CsURaVb7+qKH7absNKkuQuL2vfO3hQA0mnf93UPrlAPXnA0yv3gp1s8vhCo2jwT9tNP9d0UZB73YaR6cnVez83sP0B4BghNa+rrelZ+Mrrjc0jl4+4ADDZ000fvW17KFxlAtULlDJwvctlPZbGKk+6scUvd91vfIPB5czeXIVeuUF8stPSYAESGBdAjSOrkuO35EACZAACQBQivYBup+3FMb3EVr3q+htm+F3S4vrqrIVfu4mRtKDlxOIuTz8Nkbvz5I2YPiXV0/Ct130M6sfrypn2xTuFN1flEHQNo5uUx4defk2QN330PhHaiaAL2qlro/y86s2jjrSxNsXJ/C5i7KamLmgcZTyRBVFiOGrK1q1vnZJT9F9NVr76+U+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Awh3HjVJHRC1QcnbtqRAltdaYnCOrhU/IgcBEAABEAABEAABEAABEAABEAABEAABEAABEFgXAThH10Ue8YIACIAACIAACIAACIAACIAACIAACIAACIAACKyVAJyja8WPyEEABEAABEAABEAABEAABEAABEAABEAABEAABNZFAM7RdZFHvCAAAiAAAiAAAiAAAiAAAiAAAiAAAiAAAiAAAmslAOfoWvEjchAAARAAARAAARAAARAAARAAARAAARAAARAAgXURgHN0XeQRLwiAAAiAAAiAAAiAAAiAAAiAAAiAAAiAAAiAwFoJwDm6VvyIHARAAARAAARAAARAAARAAARAAARAAARAAARAYF0E4BxdF3nECwIgAAIgAAIgAAIgAAIgAAIgAAIgAAIgAAIgsFYCcI6uFT8iBwEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQWBcBOEfXRR7xggAIgAAIgAAIgAAIgAAIgAAIgAAIgAAIgAAIrJUAnKNrxY/IQQAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAE1kUAztF1kUe8IAACIAACIAACIAACIAACIAACIAACIAACIAACayUA5+ha8SNyEAABEAABEAABEAABEAABEAABEAABEAABEACBdRGAc3Rd5BEvCIAACIAACIAACIAACIAACIAACIAACIAACIDAWgnAObpW/IgcBEAABEAABEAABEAABEAABEAABEAABEAABEBgXQTgHF0XecQLAiAAAiAAAiAAAiAAAiAAAiAAAiAAAiAAAiCwVgJwjq4VPyIHARAAARAAARAAARAAARAAARAAARAAARAAARBYFwE4R9dFHvGCAAiAAAiAAAiAAAiAAAiAAAiAAAiAAAiAAAislQCco2vFj8hBAARAAARAAARAAARAAARAAARAAARAAARAAATWRQDO0XWRR7wgAAIgAAIgAAIgAAIgAAIgAAIgAAIgAAIgAAJrJQDn6FrxI3IQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAIF1EYBzdF3kES8IgAAIgAAIgAAIgAAIgAAIgAAIgAAIgAAIgMBaCcA5ulb8cyKPZzR63aTanT3qfZ3zHh6BAAiAwDYQKKrTfsxo+OqI+p+3IVOL0xi971L7nwnFi1/FGyAAAltGIP46ot7xPt0NWzS6jrTHY2o/DCl82KYxlIibcNG2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7MmVtxLCluu0aESt31o02mQb+kNLn0qu94NzHWpgy5aQwcPi+9LZn+M3CIAACKyXwJa3LeuFh9g3lEBySI91iOeGJncjk5UctCf2aD44os7pIDmQSSypb/5WpfprtefyRmZg2xNVxiaNRtR91afJJtvYaywPyPIa4W9Q1D+vc5SXUvBm0frvws3ON6jwkBQQAIH5BNwbzKtDB+Z/uYVPb41Oi2j0qk0D3wF26y6a2DgsRxyet+Agjvhjnzpnk8wptevOAuIHARAAgcIEbk3bUjjHePHWE3AferWdW/usv7CizwPqHtapei9UE47kwT171Djp0WhTbbn1Y1tNCkrapKuJ9PaGAlm+vWVbNGc/r3O0KCG8BwIgAAIgAAIgAAIgAAIgAAIgAAIgAAIgAAIgcCsJwDl6K4sVmQIBEAABEAABEAABEAABEAABEAABEAABEAABEFhEAM7RRYTwHARAAARAAARAAARAAARAAARAAARAAARAAARA4FYSgHP0VhYrMgUCIAACIAACIAACIAACIAACIAACIAACIAACILCIAJyjiwjhOQiAAAiAAAiAAAiAAAiAAAiAAAiAAAiAAAiAwK0kAOforSxWZAoEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQGARAThHFxHCcxAAARAAARAAARAAARAAARAAARAAARAAARAAgVtJ4P8H1ZhJzdRHbpcAAAAASUVORK5CYII=" + } + }, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Some more common methods\n", + "\n", + "We encourage you to try out these functions. They will come to good use in several real-world data science problems you encounter. \n", + "\n", + "![image-2.png](attachment:image-2.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Array and Set operations\n", + "\n", + "## Unique\n", + "\n", + "`np.unique(array)` - returns the unique values of array in sorted order" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['apple', 'banana', 'mango', 'orange', 'kiwi', 'mango', 'lemon'],\n", + " dtype='\n" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['apple', 'banana', 'capsicum', 'kiwi', 'lemon', 'mango', 'orange',\n", + " 'spinach', 'tomato'], dtype='\n", + "Returns the sum of all diagonal elements." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "16" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.trace(Mat1)" + ] + }, + { + "attachments": { + "image.png": { + "image/png": "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UYn373//+5MV7l/+8pdnl1xySaNG4CIIpETgBz/4QXbGGWdkv/71r1MyC1sgAAEIQAACEIAABCAAAQhAAAIQgAAEILBUBEYj3uufzeY9Ra8n8fUam7PPPju74oorVv4hrf557bXXXptdd9112c9+9rPs+uuvz2666aaVd9lr/yc/+Ul25ZVXZldfffXKsdtuu23lH9qeeOKJ2b777rvydP9WW22VvfrVr84t0+zQcb0259vf/na2Zs2apXIcKjtNAhdffPGMz++0007ZWWedlT311FPTrDC1ggAEIAABCEAAAhCAAAQgAAEIQAACEIBAogRGI96/+93vnhEVJaAffvjhnWPVq3r0Kpxnnnkm+9Of/rRS3h//+Mfsz3/+c+dlUwAE+iZw/vnnz/Uz9TX9Q2f1t+985zsrN73UH0gQgAAEIAABCEAAAhCAAAQgAAEIQAACEIBAdwRGId5LLLen3W274447dkeFnCGwxAROOeWU7O1vf/tcn7O+p+2rXvWq7Oijj86+//3vZ6eddlp2zjnnZPp1zEUXXZRdfvnl2Z133pk99NBDKze+lhglVYcABCAAAQhAAAIQgAAEIAABCEAAAhCAQGMCoxDv9YobLxxq/9RTT21caS6EAAQWE7j99tuzQw45ZK7vhX1x0ee/+7u/y/bbb7+VJ/f19P7xxx+frVq1auWVVrfeeutiQzgDAhCAAAQgAAEIQAACEIAABCAAAQhAAAJLSGAU4r2e8A0FQr2nngQBCHRP4MEHH8y+8pWvZDvssEOmf8wc9sW2nz/0oQ9l999/f/cVoQQIQAACEIAABCAAAQhAAAIQgAAEIAABCIyIwCjE+z333HNGMJSASIIABPon8Ne//jW74IILsu22226mT7YV8DfYYIOVfyjdf40oEQIQgAAEIAABCEAAAhCAAAQgAAEIQAACaRIYhXj/lre8ZUYofOc735kmTayCwBIReOqppzL9P4p77rknu+6667ILL7xw5XU4emf+Jz7xieyf//mfs80333ym75aJ/LvvvvsS0aOqEIAABCAAAQhAAAIQgAAEIAABCEAAAhAoJzAK8f6Vr3zljAC49957l9eKoxCAQDIEHnnkkezaa6/NbrzxxhVx/5hjjlkR9z/ykY/M9Gu9G58EAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIvEAgefH++eefnxH49OSu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Put1YHvssUd22GGHZccdd9yKsK9/0HvzzTdnjz76aNUiV877zW9+k915553ZpZdemp166qnZFltssWLH5z//+Vr5cDIEIAABCEAAAhCAAAQgAAEIQAACEIBA/wRGLd5/6EMfmhPENthgg/4pUiIEINArgSeffHKu70v4/t///d9e7ahaWN4/2M0T7qt897KXvSzbaKONVoT4f/qnf8r233//7OCDD17Z7rvvvtlee+2Vbbfddtk666yTy8jKuPfee6uaz3kQgAAEIAABCEAAAhCAAAQgAAEIQAACAxAYtXj/yU9+MlecevbZZwdASZEQgEBfBP7yl7/k9v3bb7+9LxNql6On33fccceVP/1zXRPRh9o+9thjtevABRCAAAQgAAEIQAACEIAABCAAAQhAAAL9ERi1eH/UUUflCmC///3v+yNISRCAwCAE8kTvG264YRBbmhT6u9/9LrvyyiuzE088MdOviDbddNPceJZXzzbfbbbZZivlNrGZayAAAQhAAAIQgAAEIAABCEAAAhCAAAT6IzBq8f7rX/96rtjF6yD6cyBKgsBQBP7mb/5mrv9fddVVQ5kTpdwnnngiu+uuu1beb3/22Wdnp512WnbCCSdkn/70p7Pdd98923LLLbO8eheJ+euuu2628847Z3qdzhFHHJFdeOGFUewkEwhAAAIQgAAEIAABCEAAAhCAAAQgAIHuCYxavD/zzDPnxDuJWLfeemv35CgBAhAYlICE6VC01rvllyH93//9X/b444+vvONf/5D28ssvz1avXp1dfPHFK8L/jTfemN1///3LgII6QgACEIAABCAAAQhAAAIQgAAEIACByRIYtXivp0hD8U6f/+d//meyDUbFIACBLJN4ndf3JVqTIAABCEAAAhCAAAQgAAEIQAACEIAABCAwBQKjFu+vvvrqXAFv1apVU2gb6gABCBQQeOqpp3L7fsr/sLagKnwNAQhAAAIQgAAEIAABCEAAAhCAAAQgAIFcAqMW7yXU5T19+93vfje3snwJAQhMg8Bjjz2W2/f1vngSBCAAAQhAAAIQgAAEIAABCEAAAhCAAASmQGDU4v1vfvObXAHvK1/5yhTahjpAAAIFBJ5//vncvn/FFVcUXMHXEIAABCAAAQhAAAIQgAAEIAABCEAAAhAYF4FRi/dr1qzJFfCOOOKIcbUC1kIAArUJvPnNb57r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QIAAAQIExkBAeD8GqC5JYCIIDA0Nxf79+2Pu3LljFtIXFRVFeXl5nD17NmprayMVzqdeatvf3z8RiNRIgAABAgQIECBAgAABAgQIECBAIGsCwvus0RuYQHYFDh8+PKqh/fLly6Oqqir9EtkXL17E4OBgdidodAIECBAgQIAAAQIECBAgQIAAAQITWEB4P4Gbp3QCfyOwevXqEYf3S5cujYqKirh27Vo8fvxYUP83jXAuAQIECBAgQIAAAQIECBAgQIAAgQwCwvsMKL4ikA8CV69e/WN4n3pBbFlZWezduzcuXLgQzc3Nkbqj3rPn82F1mCMBAgQIECBAgAABAgQIECBAgEC2BYT32e6A8QlkUaC9vT3q6urSz6Lv7OyMnp6e+PDhQ/z48SOLVRmaAAECBAgQIECAAAECBAgQIECAAAHhvTVAgAABAgQIECBAgAABAgQIECBAgAABAgQSJiC8T1hDlEOAAAECBAgQIECAAAECBAgQIECAAAECBIT31gABAgQIECBAgAABAgQIECBAgAABAgQIEEiYgPA+YQ1RDgECBAgQIECAAAECBAgQIECAAAECBAgQEN5bAwQIECBAgAABAgQIECBAgAABAgQIECBAIGECwvuENUQ5BAgQIECAAAECBAgQIECAAAECBAgQIEBAeG8NECBAgAABAgQIECBAgAABAgQIECBAgACBhAkI7xPWEOUQIECAAAECBAgQIECAAAECBAgQIECAAAHhvTVAgAABAgQIECBAgAABAgQIECBAgAABAgQSJiC8T1hDlEOAAAECBAgQIECAAAECBAgQIECAAAECBIT31gABAgQIECBAgAABAgQIECBAgAABAgQIEEiYgPA+YQ1RDgECBAgQIECAAAECBAgQIECAAAECBAgQEN5bAwQIECBAgAABAgQIECBAgAABAgQIECBAIGECwvuENUQ5BAgQIECAAAECBAgQIECAAAECBAgQIEBAeG8NECBAgAABAgQIECBAgAABAgQIECBAgACBhAkI7xPWEOUQIECAAAECBAgQIECAAAECBAgQIECAAAHhvTVAgAABAgQIECBAgAABAgQIECBAgAABAgQSJiC8T1hDlEOAAAECBAgQIECAAAECBAgQIECAAAECBIT31gABAgQIECBAgAABAgQIECBAgAABAgQIEEiYgPA+YQ1RDgECBAgQIECAAAECBAgQIECAAAECBAgQEN5bAwQIECBAgAABAgQIECBAgAABAgQIECBAIGECwvuENUQ5BAgQIECAAAECBAgQIECAAAECBAgQIEBAeG8NECBAgAABAgQIECBAgAABAgQIECBAgACBhAkI7xPWEOUQIECAAAECBAgQIECAAAECBAgQIECAAAHhvTVAgAABAgQIECBAgAABAgQIECBAgAABAgQSJiC8T1hDlEOAAAECBAgQIECAAAECBAgQIECAAAECBIT31gABAgQIECBAgAABAgQIECBAgAABAgQIEEiYgPA+YQ1RDgECBAgQIECAAAECBAgQIECAAAECBAgQ+B/hOrQpIyh+XgAAAABJRU5ErkJggg==" + } + }, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## det (determinant)\n", + "![image.png](attachment:image.png)\n", + "Returns the determinant of matrix." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "23.999999999999993" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "linalg.det(Mat1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### eig (Eigen value) :\n", + "\n", + "Returns eigen values and eigen vectors of the matrix." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(array([15.90625326+0.j , 0.04687337+1.22745405j,\n", + " 0.04687337-1.22745405j]),\n", + " array([[ 0.23498454+0.j , 0.25910807-0.26656981j,\n", + " 0.25910807+0.26656981j],\n", + " [ 0.56518307+0.j , -0.74337498+0.j ,\n", + " -0.74337498-0.j ],\n", + " [ 0.79079097+0.j , 0.52232979+0.19070601j,\n", + " 0.52232979-0.19070601j]]))" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "linalg.eig(Mat1)" + ] + }, + { + "attachments": { + "image.png": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAyEAAAEYCAYAAABLBPm/AAAgAElEQVR4Ae2dC/hNVd7HJ4YxlMnLYxgNXp6MHgyDaQwGU00y6HUpYaKLEr0kii6uRSHJpXJJ5JpLhZLKrVLuhSJDCLl0cUslFLXe53veWdr/vdfaZ59z9n1/1/OcZ++zz9pr/dZnrb3O+u211u/3C8FAAiRAAiRAAiRAAiRAAiRAAj4S+IWPeTErEiABEiABEiABEiABEiABEhBUQtgISIAESIAESIAESIAESIAEfCVAJcRX3MyMBEiABEiABEiABEiABEiASgjbAAmQAAmQAAmQAAmQAAmQgK8EqIT4ipuZkQAJkAAJkAAJkAAJkAAJUAlhGyABEiABEiABEiABEiABEvCVAJUQX3EzMxIgARIgARIgARIgARIgASohbAMkQAIkQAIkQAIkQAIkQAK+EqAS4ituZkYCJEACJEACJEACJEACJEAlhG2ABEiABEiABEiABEiABEjAVwJUQnzFzcxIgARIgARIgARIgARIgASohLANkAAJkAAJkAAJkAAJkAAJ+EqASoivuJkZCZAACZAACZAACZAACZAAlRC2ARIgARIgARIgARIgARIgAV8JUAnxFTczIwESIAESIAESIAESIAESoBLCNkACJEACJEACJEACJEACJOArASohvuJmZiRAAiRAAiRAAiRAAiRAAlRC2AZIgARIgARIgARIgARIgAR8JUAlxFfczIwESIAESIAESIAESIAESIBKCNsACZAACZAACZAACZAACZCArwSohPiKm5mlI3Dw4EHRt2/f1GfNmjXpovN3EiABEiABEiABEiCBCBKgEhLBSouryDt37hT58+cXv/jFL85/Zs+eHdfislwkQAIkQAIkQAIkkFgCVEISW/XhK/j48ePPKx9SEalSpUr4BKVEJEACJEACJEACJEACORGgEpITPt7sJoHu3btblBAoI7t373YzG6ZFAiRAAiRAAiRAAiQQMAEqIQFXALP/mcCAAQOUSsicOXN+jsQzEiABEiABEiABEiCByBOgEhL5KoxPAR5//HGlEtK1a9f4FJIlIQESIAESIAESIAESEFRC2AhCQ2DSpElKJaR48eKhkZGCkAAJkAAJkAAJkAAJ5E6ASkjuDJmCSwTmzp2rVEKwL2Tfvn0u5cJkSIAESMB/AqtXrxaY7e3U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" + } + }, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## inv (inverse)\n", + "![image.png](attachment:image.png)\n", + "\n", + "Used to calculate inverse of a matrix.
" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0.58333333, 0.25 , -0.33333333],\n", + " [-1.79166667, -0.125 , 0.66666667],\n", + " [ 1.33333333, 0. , -0.33333333]])" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "linalg.inv(Mat1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## pinv(Pseudo-inverse)\n", + "\n", + "Used to calculate inverse of a matrix, using singular-value decomposition. " + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 5.83333333e-01, 2.50000000e-01, -3.33333333e-01],\n", + " [-1.79166667e+00, -1.25000000e-01, 6.66666667e-01],\n", + " [ 1.33333333e+00, 1.06466550e-15, -3.33333333e-01]])" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "linalg.pinv(Mat1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### qr (QR decomposition):\n", + "Decomposting a single matrix into two Q and R matrix.
\n", + "Q is orthogonal matrix, which means determinant of Q is 0.
\n", + "R is upper triangular matrix, means all elements present below diagonal are 0." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "Q, R = linalg.qr(Mat1)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Q is :\n", + "[[-1.23091491e-01 2.08978502e-01 -9.70142500e-01]\n", + " [-8.61640437e-01 -5.07519219e-01 -5.88802401e-16]\n", + " [-4.92365964e-01 8.35914008e-01 2.42535625e-01]]\n", + "R is :\n", + "[[-8.1240384 -9.35495331 -9.10877033]\n", + " [ 0. 4.06015375 5.61256548]\n", + " [ 0. 0. -0.72760688]]\n" + ] + } + ], + "source": [ + "print(\"Q is :\")\n", + "print(Q)\n", + "print(\"R is :\")\n", + "print(R)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "QR decomposition is used for solving linear least square problems (regression problems). " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## svd (Singular-value decomposition)\n", + "In SVD, a matrix is decomposed to 3 matrix.
\n", + "U is a Unitary array(s).
\n", + "S is a vector/array, containing eigenvalues.
\n", + "Vh is a Unitary array(s)." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "U, S, Vh = linalg.svd(Mat1)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "U is\n", + "[[-0.21895023 0.25194679 -0.94264713]\n", + " [-0.6126121 -0.78743835 -0.0681708 ]\n", + " [-0.75945192 0.56255102 0.32675546]]\n", + "S is\n", + "[16.49711482 3.56065557 0.4085764 ]\n", + "Vh is\n", + "[[-0.45735528 -0.61763457 -0.63980754]\n", + " [-0.84532681 0.07854498 0.5284442 ]\n", + " [-0.27613174 0.78253321 -0.55802602]]\n" + ] + } + ], + "source": [ + "print(\"U is\")\n", + "print(U)\n", + "print(\"S is\")\n", + "print(S)\n", + "print(\"Vh is\")\n", + "print(Vh)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## solve\n", + "\n", + "The `solve` function is used to solve a linear matrix equation\n", + "\n", + "> ax = b\n", + "\n", + "Here, matrix `a` and matrix `b` are know, and the matrix `x` needs to be found out, or one can also say that the equation is to be solved to find `x` such that `ax = b` is satisfied." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 10.37728873, -29.73002839, 21.85996095])" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "linalg.solve(Mat1,S)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Linear algebra module within NumPy provides several ready to use functions. You can find the complete list of such functions on the NumPy website. \n", + "\n", + "https://numpy.org/doc/stable/reference/routines.linalg.html" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.6" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/NumPy/Lesson 8 - Arrays in Files.ipynb b/NumPy/Lesson 8 - Arrays in Files.ipynb new file mode 100644 index 0000000..3113e56 --- /dev/null +++ b/NumPy/Lesson 8 - Arrays in Files.ipynb @@ -0,0 +1,237 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# File Input and Output with Arrays\n", + "\n", + "We will use a lot of arrays in our data science projects. Often we have too many arrays, and we need to save them to a file, so that we can work on them later without having to recompute them. \n", + "\n", + "NumPy provides some really convenient methods for saving arrays to files. Let's take a look at these." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import numpy as np\n", + "arr = np.arange(10)\n", + "arr" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Save" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "np.save('my_array', arr)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The above line of code saves the entire array to a file named `my_array`. The file is created in the same location where this Python program is running. The file location in other terms can be described as `./my_array`. \n", + "\n", + "If you check the folder, you will see that a new file has got created with name `my_array.npy`. The `.npy` is the extension name created by NumPy for files it creates. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Load" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr2 = np.load('my_array.npy')\n", + "arr2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There we go. We got the previous saved array back from the file. \n", + "\n", + "Keep in mind that you need not specify the file extension when using the `save` function. However, you must specify the complete file name, that is the name with the extension when using the `load` function. This is why we call `save` with `my_array`, but we have to call `load` with `my_array.npy`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Saving Multiple Arrays\n", + "\n", + "We can save multiple arrays in a single file. The arrays are just passed on as additional keyboard arguments. Let's take a look at how this done. " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "arr1 = np.arange(10)\n", + "arr2 = np.arange(5)\n", + "\n", + "np.savez('my_arrays', a=arr1, b=arr2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note: We use a different function here. We are using `savez` instead of `save`. The `savez` function creates an uncompressed archive of the arrays. " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "arrays = np.load('my_arrays.npz')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note, the extension of the saved file is changed to `npz` instead of the previous `npy`. The `load` method in this case loads both the arrays. \n", + "\n", + "So how do we access the individual arrays that we had saved? We can do this by using the keys we specified while saving them. " + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "First: [0 1 2 3 4 5 6 7 8 9]\n", + "Second: [0 1 2 3 4]\n" + ] + } + ], + "source": [ + "first = arrays['a']\n", + "second = arrays['b']\n", + "print('First:', first)\n", + "print('Second:', second)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Compressed Data\n", + "\n", + "NumPy provides an extra function called `savez_compressed`. This works same as the `savez` function, but the data is first compressed and then saved to the file. \n", + "\n", + "If you want to save disk space, and your data is in the nature for it to get compressed well, then you can use the `savez_compressed` function to save on disk space. However, compressing and uncompressing can take time in case of large files. So time to save and load the arrays might take longer when using the `savez_compressed`, but can help with saving disk space. " + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "np.savez_compressed('my_arrays', a=arr1, b=arr2)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "arrays = np.load('my_arrays.npz')" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "First: [0 1 2 3 4 5 6 7 8 9]\n", + "Second: [0 1 2 3 4]\n" + ] + } + ], + "source": [ + "first = arrays['a']\n", + "second = arrays['b']\n", + "print('First:', first)\n", + "print('Second:', second)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.6" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +}