Created
November 18, 2019 21:12
-
-
Save dorukismen/046688c74a32e7f19ad3de0433f38e95 to your computer and use it in GitHub Desktop.
Created on Cognitive Class Labs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<div class=\"alert alert-block alert-info\" style=\"margin-top: 20px\">\n", | |
" <a href=\"https://cocl.us/topNotebooksPython101Coursera\">\n", | |
" <img src=\"https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/PY0101EN/Ad/TopAd.png\" width=\"750\" align=\"center\">\n", | |
" </a>\n", | |
"</div>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<a href=\"https://cognitiveclass.ai/\">\n", | |
" <img src=\"https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/PY0101EN/Ad/CCLog.png\" width=\"200\" align=\"center\">\n", | |
"</a>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<h1>1D <code>Numpy</code> in Python</h1>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<p><strong>Welcome!</strong> This notebook will teach you about using <code>Numpy</code> in the Python Programming Language. By the end of this lab, you'll know what <code>Numpy</code> is and the <code>Numpy</code> operations.</p>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<h2>Table of Contents</h2>\n", | |
"<div class=\"alert alert-block alert-info\" style=\"margin-top: 20px\">\n", | |
" <ul>\n", | |
" <li><a href=\"pre\">Preparation</a></li>\n", | |
" <li>\n", | |
" <a href=\"numpy\">What is Numpy?</a>\n", | |
" <ul>\n", | |
" <li><a href=\"type\">Type</a></li>\n", | |
" <li><a href=\"val\">Assign Value</a></li>\n", | |
" <li><a href=\"slice\">Slicing</a></li>\n", | |
" <li><a href=\"list\">Assign Value with List</a></li>\n", | |
" <li><a href=\"other\">Other Attributes</a></li>\n", | |
" </ul>\n", | |
" </li>\n", | |
" <li>\n", | |
" <a href=\"op\">Numpy Array Operations</a>\n", | |
" <ul>\n", | |
" <li><a href=\"add\">Array Addition</a></li>\n", | |
" <li><a href=\"multi\">Array Multiplication</a></li>\n", | |
" <li><a href=\"prod\">Product of Two Numpy Arrays</a></li>\n", | |
" <li><a href=\"dot\">Dot Product</a></li>\n", | |
" <li><a href=\"cons\">Adding Constant to a Numpy Array</a></li>\n", | |
" </ul>\n", | |
" </li>\n", | |
" <li><a href=\"math\">Mathematical Functions</a></li>\n", | |
" <li><a href=\"lin\">Linspace</a></li>\n", | |
" </ul>\n", | |
" <p>\n", | |
" Estimated time needed: <strong>30 min</strong>\n", | |
" </p>\n", | |
"</div>\n", | |
"\n", | |
"<hr>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<h2 id=\"pre\">Preparation</h2>" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# Import the libraries\n", | |
"\n", | |
"import time \n", | |
"import sys\n", | |
"import numpy as np \n", | |
"\n", | |
"import matplotlib.pyplot as plt\n", | |
"%matplotlib inline " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"# Plotting functions\n", | |
"\n", | |
"def Plotvec1(u, z, v):\n", | |
" \n", | |
" ax = plt.axes()\n", | |
" ax.arrow(0, 0, *u, head_width=0.05, color='r', head_length=0.1)\n", | |
" plt.text(*(u + 0.1), 'u')\n", | |
" \n", | |
" ax.arrow(0, 0, *v, head_width=0.05, color='b', head_length=0.1)\n", | |
" plt.text(*(v + 0.1), 'v')\n", | |
" ax.arrow(0, 0, *z, head_width=0.05, head_length=0.1)\n", | |
" plt.text(*(z + 0.1), 'z')\n", | |
" plt.ylim(-2, 2)\n", | |
" plt.xlim(-2, 2)\n", | |
"\n", | |
"def Plotvec2(a,b):\n", | |
" ax = plt.axes()\n", | |
" ax.arrow(0, 0, *a, head_width=0.05, color ='r', head_length=0.1)\n", | |
" plt.text(*(a + 0.1), 'a')\n", | |
" ax.arrow(0, 0, *b, head_width=0.05, color ='b', head_length=0.1)\n", | |
" plt.text(*(b + 0.1), 'b')\n", | |
" plt.ylim(-2, 2)\n", | |
" plt.xlim(-2, 2)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Create a Python List as follows:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"# Create a python list\n", | |
"\n", | |
"a = [\"0\", 1, \"two\", \"3\", 4]" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We can access the data via an index:" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<img src=\"https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/PY0101EN/Chapter%205/Images/NumOneList.png\" width=\"660\" />" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We can access each element using a square bracket as follows: " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"a[0]: 0\n", | |
"a[1]: 1\n", | |
"a[2]: two\n", | |
"a[3]: 3\n", | |
"a[4]: 4\n" | |
] | |
} | |
], | |
"source": [ | |
"# Print each element\n", | |
"\n", | |
"print(\"a[0]:\", a[0])\n", | |
"print(\"a[1]:\", a[1])\n", | |
"print(\"a[2]:\", a[2])\n", | |
"print(\"a[3]:\", a[3])\n", | |
"print(\"a[4]:\", a[4])" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<hr>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<h2 id=\"numpy\">What is Numpy?</h2>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"A numpy array is similar to a list. It's usually fixed in size and each element is of the same type. We can cast a list to a numpy array by first importing numpy: " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"# import numpy library\n", | |
"\n", | |
"import numpy as np " | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
" We then cast the list as follows:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([0, 1, 2, 3, 4])" | |
] | |
}, | |
"execution_count": 6, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Create a numpy array\n", | |
"\n", | |
"a = np.array([0, 1, 2, 3, 4])\n", | |
"a" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Each element is of the same type, in this case integers: " | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<img src=\"https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/PY0101EN/Chapter%205/Images/NumOneNp.png\" width=\"500\" />" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
" As with lists, we can access each element via a square bracket:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"a[0]: 0\n", | |
"a[1]: 1\n", | |
"a[2]: 2\n", | |
"a[3]: 3\n", | |
"a[4]: 4\n" | |
] | |
} | |
], | |
"source": [ | |
"# Print each element\n", | |
"\n", | |
"print(\"a[0]:\", a[0])\n", | |
"print(\"a[1]:\", a[1])\n", | |
"print(\"a[2]:\", a[2])\n", | |
"print(\"a[3]:\", a[3])\n", | |
"print(\"a[4]:\", a[4])" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<h3 id=\"type\">Type</h3>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"If we check the type of the array we get <b>numpy.ndarray</b>:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"numpy.ndarray" | |
] | |
}, | |
"execution_count": 8, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Check the type of the array\n", | |
"\n", | |
"type(a)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"As numpy arrays contain data of the same type, we can use the attribute \"dtype\" to obtain the Data-type of the array’s elements. In this case a 64-bit integer: \n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"dtype('int64')" | |
] | |
}, | |
"execution_count": 9, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Check the type of the values stored in numpy array\n", | |
"\n", | |
"a.dtype" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We can create a numpy array with real numbers:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"# Create a numpy array\n", | |
"\n", | |
"b = np.array([3.1, 11.02, 6.2, 213.2, 5.2])" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"When we check the type of the array we get <b>numpy.ndarray</b>:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"numpy.ndarray" | |
] | |
}, | |
"execution_count": 11, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Check the type of array\n", | |
"\n", | |
"type(b)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"If we examine the attribute <code>dtype</code> we see float 64, as the elements are not integers: " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 12, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"dtype('float64')" | |
] | |
}, | |
"execution_count": 12, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Check the value type\n", | |
"\n", | |
"b.dtype" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<h3 id=\"val\">Assign value</h3>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We can change the value of the array, consider the array <code>c</code>:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 13, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([20, 1, 2, 3, 4])" | |
] | |
}, | |
"execution_count": 13, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Create numpy array\n", | |
"\n", | |
"c = np.array([20, 1, 2, 3, 4])\n", | |
"c" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We can change the first element of the array to 100 as follows:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 14, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([100, 1, 2, 3, 4])" | |
] | |
}, | |
"execution_count": 14, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Assign the first element to 100\n", | |
"\n", | |
"c[0] = 100\n", | |
"c" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We can change the 5th element of the array to 0 as follows:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 15, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([100, 1, 2, 3, 0])" | |
] | |
}, | |
"execution_count": 15, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Assign the 5th element to 0\n", | |
"\n", | |
"c[4] = 0\n", | |
"c" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<h3 id=\"slice\">Slicing</h3>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Like lists, we can slice the numpy array, and we can select the elements from 1 to 3 and assign it to a new numpy array <code>d</code> as follows:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 16, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([1, 2, 3])" | |
] | |
}, | |
"execution_count": 16, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Slicing the numpy array\n", | |
"\n", | |
"d = c[1:4]\n", | |
"d" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We can assign the corresponding indexes to new values as follows: " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 17, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([100, 1, 2, 300, 400])" | |
] | |
}, | |
"execution_count": 17, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Set the fourth element and fifth element to 300 and 400\n", | |
"\n", | |
"c[3:5] = 300, 400\n", | |
"c" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<h3 id=\"list\">Assign Value with List</h3>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Similarly, we can use a list to select a specific index.\n", | |
"The list ' select ' contains several values:\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 18, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# Create the index list\n", | |
"\n", | |
"select = [0, 2, 3]" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We can use the list as an argument in the brackets. The output is the elements corresponding to the particular index:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 19, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([100, 2, 300])" | |
] | |
}, | |
"execution_count": 19, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Use List to select elements\n", | |
"\n", | |
"d = c[select]\n", | |
"d" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We can assign the specified elements to a new value. For example, we can assign the values to 100 000 as follows:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 20, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([100000, 1, 100000, 100000, 400])" | |
] | |
}, | |
"execution_count": 20, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Assign the specified elements to new value\n", | |
"\n", | |
"c[select] = 100000\n", | |
"c" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<h3 id=\"other\">Other Attributes</h3>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Let's review some basic array attributes using the array <code>a</code>:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 24, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([0, 1, 2, 3, 8])" | |
] | |
}, | |
"execution_count": 24, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Create a numpy array\n", | |
"\n", | |
"a = np.array([0, 1, 2, 3, 8])\n", | |
"a" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"The attribute <code>size</code> is the number of elements in the array:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 22, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"5" | |
] | |
}, | |
"execution_count": 22, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Get the size of numpy array\n", | |
"\n", | |
"a.size" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"The next two attributes will make more sense when we get to higher dimensions but let's review them. The attribute <code>ndim</code> represents the number of array dimensions or the rank of the array, in this case, one:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 25, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"1" | |
] | |
}, | |
"execution_count": 25, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Get the number of dimensions of numpy array\n", | |
"\n", | |
"a.ndim" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"The attribute <code>shape</code> is a tuple of integers indicating the size of the array in each dimension:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 26, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"(5,)" | |
] | |
}, | |
"execution_count": 26, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Get the shape/size of numpy array\n", | |
"\n", | |
"a.shape" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 27, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# Create a numpy array\n", | |
"\n", | |
"a = np.array([1, -1, 1, -1])" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 28, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"0.0" | |
] | |
}, | |
"execution_count": 28, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Get the mean of numpy array\n", | |
"\n", | |
"mean = a.mean()\n", | |
"mean" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 29, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"1.0" | |
] | |
}, | |
"execution_count": 29, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Get the standard deviation of numpy array\n", | |
"\n", | |
"standard_deviation=a.std()\n", | |
"standard_deviation" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 30, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([-1, 2, 3, 4, 5])" | |
] | |
}, | |
"execution_count": 30, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Create a numpy array\n", | |
"\n", | |
"b = np.array([-1, 2, 3, 4, 5])\n", | |
"b" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 31, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"5" | |
] | |
}, | |
"execution_count": 31, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Get the biggest value in the numpy array\n", | |
"\n", | |
"max_b = b.max()\n", | |
"max_b" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 32, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"-1" | |
] | |
}, | |
"execution_count": 32, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Get the smallest value in the numpy array\n", | |
"\n", | |
"min_b = b.min()\n", | |
"min_b" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<hr>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<h2 id=\"op\">Numpy Array Operations</h2>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<h3 id=\"add\">Array Addition</h3>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Consider the numpy array <code>u</code>:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 33, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([1, 0])" | |
] | |
}, | |
"execution_count": 33, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"u = np.array([1, 0])\n", | |
"u" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Consider the numpy array <code>v</code>:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 34, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([0, 1])" | |
] | |
}, | |
"execution_count": 34, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"v = np.array([0, 1])\n", | |
"v" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We can add the two arrays and assign it to z:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 36, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([1, 1])" | |
] | |
}, | |
"execution_count": 36, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Numpy Array Addition\n", | |
"\n", | |
"z = u + v\n", | |
"z" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
" The operation is equivalent to vector addition:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 35, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"ename": "NameError", | |
"evalue": "name 'z' is not defined", | |
"output_type": "error", | |
"traceback": [ | |
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", | |
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", | |
"\u001b[0;32m<ipython-input-35-be8a3fa55c08>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m# Plot numpy arrays\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mPlotvec1\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mu\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mz\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mv\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", | |
"\u001b[0;31mNameError\u001b[0m: name 'z' is not defined" | |
] | |
} | |
], | |
"source": [ | |
"# Plot numpy arrays\n", | |
"\n", | |
"Plotvec1(u, z, v)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<h3 id=\"multi\">Array Multiplication</h3>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Consider the vector numpy array <code>y</code>:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 37, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([1, 2])" | |
] | |
}, | |
"execution_count": 37, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Create a numpy array\n", | |
"\n", | |
"y = np.array([1, 2])\n", | |
"y" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We can multiply every element in the array by 2:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 38, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([2, 4])" | |
] | |
}, | |
"execution_count": 38, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Numpy Array Multiplication\n", | |
"\n", | |
"z = 2 * y\n", | |
"z" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
" This is equivalent to multiplying a vector by a scaler: " | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<h3 id=\"prod\">Product of Two Numpy Arrays</h3>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Consider the following array <code>u</code>:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 39, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([1, 2])" | |
] | |
}, | |
"execution_count": 39, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Create a numpy array\n", | |
"\n", | |
"u = np.array([1, 2])\n", | |
"u" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Consider the following array <code>v</code>:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 40, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([3, 2])" | |
] | |
}, | |
"execution_count": 40, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Create a numpy array\n", | |
"\n", | |
"v = np.array([3, 2])\n", | |
"v" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
" The product of the two numpy arrays <code>u</code> and <code>v</code> is given by:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 41, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([3, 4])" | |
] | |
}, | |
"execution_count": 41, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Calculate the production of two numpy arrays\n", | |
"\n", | |
"z = u * v\n", | |
"z" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<h3 id=\"dot\">Dot Product</h3>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"The dot product of the two numpy arrays <code>u</code> and <code>v</code> is given by:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 42, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"7" | |
] | |
}, | |
"execution_count": 42, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Calculate the dot product\n", | |
"\n", | |
"np.dot(u, v)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<h3 id=\"cons\">Adding Constant to a Numpy Array</h3>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Consider the following array: " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 43, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([ 1, 2, 3, -1])" | |
] | |
}, | |
"execution_count": 43, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Create a constant to numpy array\n", | |
"\n", | |
"u = np.array([1, 2, 3, -1]) \n", | |
"u" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Adding the constant 1 to each element in the array:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 44, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([2, 3, 4, 0])" | |
] | |
}, | |
"execution_count": 44, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Add the constant to array\n", | |
"\n", | |
"u + 1" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
" The process is summarised in the following animation:" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<img src=\"https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/PY0101EN/Chapter%205/Images/NumOneAdd.gif\" width=\"500\" />" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<hr>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<h2 id=\"math\">Mathematical Functions</h2>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
" We can access the value of pie in numpy as follows :" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 45, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"3.141592653589793" | |
] | |
}, | |
"execution_count": 45, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# The value of pie\n", | |
"\n", | |
"np.pi" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
" We can create the following numpy array in Radians:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 48, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([0. , 1.57079633, 3.14159265])" | |
] | |
}, | |
"execution_count": 48, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Create the numpy array in radians\n", | |
"\n", | |
"x = np.array([0, np.pi/2 , np.pi])\n", | |
"\n", | |
"x" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We can apply the function <code>sin</code> to the array <code>x</code> and assign the values to the array <code>y</code>; this applies the sine function to each element in the array: " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 49, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([0.0000000e+00, 1.0000000e+00, 1.2246468e-16])" | |
] | |
}, | |
"execution_count": 49, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Calculate the sin of each elements\n", | |
"\n", | |
"y = np.sin(x)\n", | |
"y" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<hr>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<h2 id=\"lin\">Linspace</h2>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
" A useful function for plotting mathematical functions is \"linespace\". Linespace returns evenly spaced numbers over a specified interval. We specify the starting point of the sequence and the ending point of the sequence. The parameter \"num\" indicates the Number of samples to generate, in this case 5:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 50, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([-2., -1., 0., 1., 2.])" | |
] | |
}, | |
"execution_count": 50, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Makeup a numpy array within [-2, 2] and 5 elements\n", | |
"\n", | |
"np.linspace(-2, 2, num=5)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"If we change the parameter <code>num</code> to 9, we get 9 evenly spaced numbers over the interval from -2 to 2: " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 51, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([-2. , -1.5, -1. , -0.5, 0. , 0.5, 1. , 1.5, 2. ])" | |
] | |
}, | |
"execution_count": 51, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Makeup a numpy array within [-2, 2] and 9 elements\n", | |
"\n", | |
"np.linspace(-2, 2, num=9)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We can use the function line space to generate 100 evenly spaced samples from the interval 0 to 2π: " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 55, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"# Makeup a numpy array within [0, 2π] and 100 elements \n", | |
"\n", | |
"x = np.linspace(0, 2*np.pi, num=50)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We can apply the sine function to each element in the array <code>x</code> and assign it to the array <code>y</code>: " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 57, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# Calculate the sine of x list\n", | |
"\n", | |
"y = np.sin(x)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 58, | |
"metadata": { | |
"collapsed": false, | |
"jupyter": { | |
"outputs_hidden": false | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[<matplotlib.lines.Line2D at 0x7fbe66756080>]" | |
] | |
}, | |
"execution_count": 58, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAD4CAYAAADhNOGaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3deXhU5dnH8e+dDUiAhEAIWQhhCYGwQwQRF3YBF9RWKq1LtZZSRRRtrda2+trW2kWtVasi4lJ3XKmCbC4sipAAQthD2BK2sGSBJGS73z8y9IoYIMlMcmYy9+e65pqZc84z5zcuc+c5y/OIqmKMMcZ/BTgdwBhjjLOsEBhjjJ+zQmCMMX7OCoExxvg5KwTGGOPngpwOUB/t2rXTxMREp2MYY4xPSU9PP6yqUacv98lCkJiYSFpamtMxjDHGp4jI7pqW26EhY4zxc1YIjDHGz1khMMYYP2eFwBhj/JwVAmOM8XMeKQQiMltEDolIxhnWi4j8S0QyRWS9iAystm6ciGx1rbvPE3mMMcbUnqd6BC8D486yfjyQ5HpMAZ4FEJFA4BnX+hRgsoikeCiTMcaYWvDIfQSqulREEs+yyUTgVa0a83qliESISAyQCGSqahaAiLzl2naTJ3KZusstPEnGvny27C8kQKB1i2DCqz1aNw8mJqI5wYF2VNGYpqKxbiiLA/ZWe5/tWlbT8iE1fYCITKGqN0FCQkLDpPQzpeWVLN2Wy/qcfDbm5JOxL5+DBSfP2a518yDGpHRgfO8OXJjUjubBgY2Q1hjTUBqrEEgNy/Qsy7+/UHUmMBMgNTXVZtNxQ35xGW+u2sNLK3ZysOAkAQJdo1pyQdd29I4Lp3dsa3rGtiZQhPziMgpKysgvKiO/uIy8ojK+2XmURZsO8N6abMJCAhnZM5rxvTswPDmK0BCfvFndGL/WWP/XZgMdq72PB/YBIWdYbhpA9rEiXlqxi7dW7eFEaQXDurXlL9f04fwubc/4Ax7WLIhYWnxn2aTzOlJa3oevs44wf8N+Fm46yH+/3UdkWAj3jO3OdeclEBhQU403xnijxioEc4FprnMAQ4B8Vd0vIrlAkoh0BnKA64AfN1Imv7H7yAkeX7SNj9fvB+CKvjHcelEXeseF1/szQ4ICuKR7FJd0j+JPV1Xyzc6jPLlkOw98kMHrK/fw4BUpDOnS1lNfwRjTgDxSCETkTWA40E5EsoEHgWAAVX0OmAdMADKBIuBm17pyEZkGLAACgdmqutETmQyoKnPSsnnovxsR4OYLErn5ws7ERbQ4Z9u6CAoMYFi3dlzQtS2fbNjPI59s5kczV3JZ3xjuH9+D+DahHt2fMcazxBcnr09NTVUbffTsjp4o5f7317Ng40Eu6NqWxyb1IybcswXgTIpLK3h+6Q6e+3IHqnDb8G7cPqIrQXalkTGOEpF0VU09fbmd2WuClm7L5VdzviWvqIwHJvTkZxd2JqARj9m3CAnkrtHduTa1I3+Zt5knFm8jbfdRnp48kPDQ4EbLYYypHfsTrQkpKavgobkbuXH2KiJCg/nw9mH8/OIujVoEqouLaMHTPx7I337Ql5VZR7j63yvYkXvckSzGmDOzQtBEHDtRyo+e/5qXv9rFzcMSmTvtQlJiWzsdC6i6yuiNn59PfnEZVz2zgqXbcp2OZIypxgpBE3CooITrZq5k84FCnr9hEA9e0cvrbvI6LzGSj6YNIy6iBT99aRUvLt+JL56fMqYpskLg4/YeLeLa579m77EiXv7peVzaq4PTkc4ovk0o7/3yAkb3jOaPH2/iN++tp7S80ulYxvg9KwQ+bEfucSY9/zXHTpTy2q1DuKBbO6cjnVNYsyCeu34Qd4zsxjtp2cx4ex0VldYzMMZJdtWQj9q4L58bX1yFCLz9i6H0jPGO8wG1ERAg3DM2mdbNg/nzvM2EhgTy1x/0deyktjH+zgqBD0rffZSfvrSaVs2CeO3WIXSJaul0pHr5+cVdKDxZzr+WbCesWRAPXpGCiBUDYxqbFQIfs/VAITfNXk1Uq2a8dusQj98l3NhmjE7ieEk5s1fspHXzIO4em+x0JGP8jhUCH3KosIRbXl5NWLNA3vj5kEa7U7ghiQi/v7wnJ06W86/PMglrFsQvLunqdCxj/IoVAh9RXFrBra+kcfREKXOmDm0SReAUEeGRa/pworScv8zfQsvmQfxkSCenYxnjN6wQ+IDKSuWut9eyISefmTekujVqqLcKDBCe+FF/iksr+N2HGYS3CObyvrFOxzLGL9jloz7g0U+3sGDjQX5/WQpjUqKdjtNgggMDeOYnAxmU0IZfz1nPlgMFTkcyxi9YIfByr3+zm5lLs7hxaCduHpbodJwG1zw4kH//ZCAtmwcx9T/p5BeXOR3JmCbPCoEX+3JbLn/4aCPDk6P4w+X+c2ll+9bNefYnA8k+Vsw976yj0m44M6ZBWSHwUjsPn+D219eQ1L4lT/94oN+N5Z+aGMnvL09h8eZDPP15ptNxjGnSPPLrIiLjRGSriGSKyH01rP+1iKxzPTJEpEJEIl3rdonIBtc6m20GKC2vZPqbawkMEGbdlErLZv55Tv/GoZ24ekAcTyzexudbDzkdx5gmy+1CICKBwDPAeCAFmCwiKdW3UdW/q2p/Ve0P3A98qapHq20ywrX+ezPn+KO/L9jChpx8/vqDvn49zaOI8MjVfejRoTV3vrmWPUeKnI5kTJPkiR7BYCBTVbNUtRR4C5h4lu0nA296YL9N0udbD/HCsp1cf34C43p770iijaVFSCDPXz8IEeEXr6VTXFrhdCRjmhxPFII4YG+199muZd8jIqHAOOC9aosVWCgi6SIy5Uw7EZEpIpImImm5uU1zYpNDBSX86p1v6dGhFb+7LOXcDfxEQttQ/nldf7YcKOAPH2U4HceYJscThaCmS1nOdJnHFcCK0w4LDVPVgVQdWrpdRC6uqaGqzlTVVFVNjYqKci+xF6qsVO5+51tOlJbz1OQBXjexjNNGJLfn9uHdmJOezcKNB5yOY0yT4olCkA10rPY+Hth3hm2v47TDQqq6z/V8CPiAqkNNfuf5pVkszzzMHy7vRVJ0K6fjeKXpo5LoFdua336wgSPHTzodx5gmwxOFYDWQJCKdRSSEqh/7uadvJCLhwCXAR9WWhYlIq1OvgbGA3/X91+45xmMLt3JZnxgmD+547gZ+KiQogMcn9aeguJwHPsiwqS6N8RC3C4GqlgPTgAXAZuAdVd0oIlNFZGq1Ta8GFqrqiWrLooHlIvItsAr4RFU/dTeTLyksKWP6W2uJbt2cR67p4zc3jdVXcodW3D22O59uPMBH687U8TTG1IX44l9VqampmpbWNG45uP/9Dby9eg9zpg5lUKdIp+P4hIpKZdLzX7P9YCELZ1xCh/DmTkcyxieISHpNl+n71+2qXmZl1hHeXLWHn13Y2YpAHQQGCI9d24+yCuXe99bbISJj3GSFwCElZRXc//4GEiJDuXuMzcpVV4ntwvjthB4s3ZbLG6v2OB3HGJ9mhcAhTy7Zzs7DJ/jLNX1oEWKXitbH9ed34qKkdvz5k83sPnLi3A2MMTWyQuCAjJx8Zi7NYlJqPMO6tXM6js8SEf76g74EBgi/nrPeRik1pp6sEDSy8opK7nt/PW1CQ3hggt097K7YiBb8/vIUVu06yrvp2U7HMcYnWSFoZC8u30lGTgEPT+xFeGiw03GahGsHxTM4MZK/zN/MsROlTscxxudYIWhEuw6f4PFF2xibEs14G1DOY0SEP17Vm8KSch6dv8XpOMb4HCsEjURVuf/9DYQEBfDHq3rbjWMeltyhFT+7sDNvp+0lfffRczcwxvyPFYJGMictm6+zjvDbCT2Jbm03QDWE6aOSiA1vzgMfZFBeUel0HGN8hhWCRpBfXMajn27hvMQ2/CjVxhJqKGHNgvjDFb3YcqCQl7/a5XQcY3yGFYJG8M/F28grKuWhK3sREGCHhBrSpb2iGZEcxROLtrE/v9jpOMb4BCsEDWz7wUJe/Xo3kwcn0Cs23Ok4TZ6I8H9X9qa8Uvnjx5ucjmOMT7BC0IBUlYf+u5GwkEDuGWvDSDSWhLahTBvRjXkbDvCFTXpvzDlZIWhACzYeZEXmEe4Zm0xkWIjTcfzKlEu60KVdGA/O3UhJmc1zbMzZWCFoICVlFfzpk00kR7fiJ0MSnI7jd5oFBfLwxN7sPlLESyt2OR3HGK/mkUIgIuNEZKuIZIrIfTWsHy4i+SKyzvX4Q23b+qoXlmaRfayYB69MISjQ6q0TLkxqx+ie7Xnm80wO29SWxpyR279QIhIIPEPV5PMpwGQRqWkQnWWq2t/1eLiObX3Kvrxinvkikwl9OnBBVxtUzkn3T+hJSVkFTyza5nQUY7yWJ/5UHQxkqmqWqpYCbwETG6Gt13pk3mZU4bcTejodxe91jWrJ9ed34s1Ve9h2sNDpOMZ4JU8Ugjhgb7X32a5lpxsqIt+KyHwR6VXHtj5jZdYRPl6/n6mXdCW+TajTcQxw56gkWjYL4s+fbHY6ijFeyROFoKY7pE4fGH4N0ElV+wFPAR/WoW3VhiJTRCRNRNJyc3PrHbYhVVYqD/93E3ERLZh6SVen4xiXNmEhTB+VxJfbcu1yUmNq4IlCkA1UHzchHthXfQNVLVDV467X84BgEWlXm7bVPmOmqqaqampUVJQHYnveR9/msGl/AfeOS7ZZx7zMDUM70altKI/M22zjEBlzGk8UgtVAkoh0FpEQ4DpgbvUNRKSDuIbbFJHBrv0eqU1bX1FSVsE/Fmyjd1xrrugb63Qcc5pmQYHcP74H2w4e5+20veduYIwfcbsQqGo5MA1YAGwG3lHVjSIyVUSmujb7IZAhIt8C/wKu0yo1tnU3kxNeW7mbnLxi7hvX08YT8lKX9urA4MRIHl+4jcKSMqfjGOM1RNX35nlNTU3VtLQ0p2P8T35RGRf//XP6dYzg1VsGOx3HnMX67DyufHoFvxzeld+M6+F0HGMalYikq2rq6cvtTicP+PeXmRSUlHGf/bB4vb7xEVwzII4Xl+9k79Eip+MY4xWsELhpX14xL63YxdX940iJbe10HFMLvx6XjABPLLabzIwBKwRue9x1x+rdY7s7nMTUVkx4C356QSIfrM1h6wG7ycwYKwRu2HKggPfWZPPTCxLt5jEfM/WSrrQMCeIfC7c6HcUYx1khcMOj87fQqlkQtw23m8d8TZuwEH5xSRcWbTpI+u5jTscxxlFWCOrpqx2H+WJrLtNGdiMi1OYa8EU3D+tMu5Yh/H3BFnzx6jljPMUKQT2oKo/O30JcRAtuHJrodBxTT2HNgpg2ohsrs46ybPthp+MY4xgrBPWwYONB1mfnc9foJJoH21ASvmzykATi27Tgbwu2UFlpvQLjn6wQ1FFFpfL4oq10iQrj6gE+PVCqoWroiRmju5ORU8D8jANOxzHGEVYI6ujj9fvYdvA4M0Z3t5nHmoirBsTRPboljy3cagPSGb9kv2R1UF5RyT8Xb6dHh1Zc1ifG6TjGQwIDhF+NTSbr8AneTc92Oo4xjc4KQR28vyaHnYdPcM/YZBtYrokZkxLNgIQInlyynZKyCqfjGNOorBDU0snyCp5csp1+8eGM7tne6TjGw0SEey/twf78Ev7z9W6n4xjTqKwQ1NLbq/eSk1fMPWOTcU2tYJqYoV3bclFSO577cgdFpeVOxzGm0VghqIXi0gqe+iyTwYmRXJTUzuk4pgHdNbo7R06U8qr1CowfsUJQC6+t3E1u4UnuGdvdegNN3KBObbikexTPf7mD4yetV2D8g0cKgYiME5GtIpIpIvfVsP4nIrLe9fhKRPpVW7dLRDaIyDoR8Z7ZZlyOnyzn2S93cFFSO4Z0aet0HNMIZozpzrGiMl75apfTUYxpFG4XAhEJBJ4BxgMpwGQRSTlts53AJaraF/gjMPO09SNUtX9NM+c47aXlOzl6opR7xiY7HcU0kv4dIxjVoz0zl2ZRYFNaGj/giR7BYCBTVbNUtRR4C5hYfQNV/UpVTw3xuBKI98B+G1x+cRkzl2Uxumc0/TtGOB3HNKIZY7qTX1zGyyt2OR3FmAbniUIQB+yt9j7btexMfgbMr/ZegYUiki4iU87USESmiEiaiKTl5ua6Fbi2Zi/fSWFJOTPGJDXK/oz36B0XzpiUaF5YlkV+sfUKTNPmiUJQ09nTGkfvEpERVBWC31RbPExVB1J1aOl2Ebm4praqOlNVU1U1NSoqyt3M55RfXMbsFTu5tFc0vWLDG3x/xvvcNTqJwpJyXly+0+koxjQoTxSCbKBjtffxwL7TNxKRvsAsYKKqHjm1XFX3uZ4PAR9QdajJcad6A9NHWW/AX/WKDWd87w68tHwneUWlTscxpsF4ohCsBpJEpLOIhADXAXOrbyAiCcD7wA2quq3a8jARaXXqNTAWyPBAJrdYb8Ccctfo7hwvLWfWMusVmKbL7UKgquXANGABsBl4R1U3ishUEZnq2uwPQFvg36ddJhoNLBeRb4FVwCeq+qm7mdxlvQFzSnKHVkzoE8NLK6quHjOmKQryxIeo6jxg3mnLnqv2+lbg1hraZQH9Tl/uJOsNmNPdNSqJeRv2M3NpFveN7+F0HGM8zu4sPs1LK6w3YL4rKboVV/SN5dWvd1mvwDRJVgiqyS8u48Xl1hsw3zd9VDeKyyqYtSzL6SjGeJwVgmqsN2DOpFv7qsmIXvlql11BZJocKwQu1hsw53LHyCROlFbYfQWmybFC4GK9AXMuVVcQdeDlFbvIL7K7jU3TYYUA6w2Y2rtjZBKFJ8uZvcJ6BabpsEIAvLxil/UGTK30jGnNpb2imb1ip41MapoMvy8EhSVV9w2MSbHegKmdO0ZWjUFkI5OapsLvC8GrX+8mv7iM6SOtN2Bqp3dcOKN7RvPi8p0UWq/ANAF+XQhOnCxn1rIsRiRH0SfeegOm9u4clUR+cZnNbWyaBL8uBK+t3M2xojLusHMDpo76xIczskd7XliWZXMbG5/nt4WguLSCF5ZlcVFSOwYmtHE6jvFB00clkVdUxn+sV2B8nN8WgjdW7eHw8VK7UsjUW/+OEVzSPYoXlmVRVGq9AuO7/LIQlJRV8NyXOxjapS3nJUY6Hcf4sOmjkjh6opTXV+5xOoox9eaXheDt1XvJLTxpvQHjtkGd2jCsW1ueX5pFSVmF03GMqRe/KwQny6t6A+cltuH8LtYbMO6bPjKJw8dP8uYq6xUY3+SRQiAi40Rkq4hkish9NawXEfmXa/16ERlY27ae9m56NvvzS5g+KgkRaejdGT8wpEtbBneO5Lkvd1ivwPgktwuBiAQCzwDjgRRgsoiknLbZeCDJ9ZgCPFuHth5TWl7Jvz/fwYCECC7s1q6hdmP80J2jkjhYcJI56dlORzGmzjzRIxgMZKpqlqqWAm8BE0/bZiLwqlZZCUSISEwt23rMB2uzyckrZvpI6w0Yz7qga1sGJkTw3Bc7KC2vdDqOaYKOnSjl+lnfkJGT7/HP9kQhiAP2Vnuf7VpWm21q0xYAEZkiImkikpabm1uvoLmFJ0nt1IbhyVH1am/MmYgI00clkZNXzPtrrFdgPO/F5TtZnnmYkCDPn9r1xCfW9Ke11nKb2rStWqg6U1VTVTU1Kqp+P+TTRibx9i+GWm/ANIhLukfRNz6cZ77IpKzCegXGc/KLynj5q11M6NOB7tGtPP75nigE2UDHau/jgX213KY2bT0qMMCKgGkYIsIdI5PYe7SYj9Y16H/Gxs+89NVOjp8sZ9qIhrnk3ROFYDWQJCKdRSQEuA6Ye9o2c4EbXVcPnQ/kq+r+WrY1xmeM7tmenjGteebzTCoqa+zcGlMnBSVlzF5eNVR+SmzrBtmH24VAVcuBacACYDPwjqpuFJGpIjLVtdk8IAvIBF4AbjtbW3czGeMUEWH6yG7sPHyCj9dbr8C479WvdlFQUt6gQ+UHeeJDVHUeVT/21Zc9V+21ArfXtq0xvuzSXh3oHt2Spz7L5Iq+sQTY4UhTT8dPljNr+U5G9mjfoEPl+92dxcY0tIAAYdrIJDIPHWdexn6n4xgf9trK3eQVlXHHyG4Nuh8rBMY0gMv6xNA1KoynlmRSaecKTD0UlZbzwtKqofIHNPBQ+VYIjGkAgQFVVxBtPVjIwk0HnI5jfNAb3+zhyIlS7myEwTGtEBjTQK7oF0uXdmE8ab0CU0clZRU8vzSLC7q2JbURhsq3QmBMAwkMEG4f0Y3N+wtYvPmg03GMD3lr1Z5GHSrfCoExDWhi/1g6tQ3lySXbqbp4zpizqxoqP4vBiZGc36Vto+zTCoExDSgoMIDbR3Rj474Clmw+5HQc4wPeScvmQEFJo06cZYXAmAZ29YA4Oka24F+fWa/AnN3J8gqe/TyTgQkRDOvWOL0BsEJgTIMLDgzg9uHdWJ+dzxdb6zdyrvEPc9Ky2Zdfwowx3Rt1cEwrBMY0gmsGxhMX0cLOFZgzOllewb8/z2RQpzaNPnGWFQJjGkFIUAC3jejKur15LN1+2Ok4xgud6g3c6cA0ulYIjGkkPxwUT2x4c55cvM16BeY7TvUGBiZEcFFS40+ja4XAmEbSLCiQXw7vypo9eazIPOJ0HONF3k2v6g3cNbpxzw2cYoXAmEY06byOxIQ35wnrFRiX0vJKnvnMud4AWCEwplE1CwrkthHdSN99zM4VGADmpO91tDcAVgiMaXSTUquuIHpikfUK/J039AbAzUIgIpEiskhEtruevzdWqoh0FJHPRWSziGwUkTurrXtIRHJEZJ3rMcGdPMb4gmZBgUwb2Y11e/PsvgI/d6o3cKeDvQFwv0dwH7BEVZOAJa73pysH7lHVnsD5wO0iklJt/ROq2t/1sJnKjF/44aB4Oka2sHMFfqy0vJJ/f76DAQkRXOxgbwDcLwQTgVdcr18Brjp9A1Xdr6prXK8LqZqbOM7N/Rrj04IDA7hjRBLrs/NtDCI/9W56Njl5xY6eGzjF3UIQrar7oeoHH2h/to1FJBEYAHxTbfE0EVkvIrNrOrRUre0UEUkTkbTcXOtOG9939cA4OrUN5XE7V+B3SsoqeOqz7V7RG4BaFAIRWSwiGTU8JtZlRyLSEngPuEtVC1yLnwW6Av2B/cBjZ2qvqjNVNVVVU6Oiouqya2O8UnBgANNHJrFpfwELNtp8Bf7krVV72J9fwq/GJjveG4BaFAJVHa2qvWt4fAQcFJEYANdzjX1cEQmmqgi8rqrvV/vsg6paoaqVwAvAYE98KWN8xcT+sXRuF8Y/F2+zWcz8RFFpOU9/voPzu0RyQdfGG2H0bNw9NDQXuMn1+ibgo9M3kKpy9yKwWVUfP21dTLW3VwMZbuYxxqcEBQZw56gkthwo5NONNrexP3j1690cPn7Sa3oD4H4heBQYIyLbgTGu94hIrIicugJoGHADMLKGy0T/JiIbRGQ9MAKY4WYeY3zOFf1i6RoVxhOLtlFhvYImrbCkjOe+3MHw5KhGmYu4toLcaayqR4BRNSzfB0xwvV4O1Fj2VPUGd/ZvTFMQGCDcObo7099cyycb9nNlv1inI5kGMnv5LvKKyrhnTLLTUb7D7iw2xgtc3ieG5OhW/HPRNsorKp2OYxpAXlEps5ZlMa5XB/rEhzsd5zusEBjjBQIChHvGdifr8AneTc92Oo5pAM8vzeJ4aTkzxnR3Osr3WCEwxkuMSYlmQEIE/1y8nZKyCqfjGA/KLTzJyyt2cWW/WJI7tHI6zvdYITDGS4gI917agwMFJfzn691OxzEe9O8vMimtqOSu0d7XGwArBMZ4laFd23Jx9yie+SKTgpIyp+MYD9iXV8zrK/fww4HxdG4X5nScGlkhMMbL3HtpMnlFZcxamuV0FOMBT3+eiaLcMaqb01HOyAqBMV6md1w4l/WNYdbyneQWnnQ6jnHDjtzjvL16L5MHJxDfJtTpOGdkhcAYL3TPmO6cLK/kmc8znY5i3PD3T7fSPCiA6aOSnI5yVlYIjPFCXaJacu2geN74Zg97jxY5HcfUQ/ruY3y68QBTLu5Ku5bNnI5zVlYIjPFSd45OAoF/Lt7udBRTR6rKo/M3065lM269qLPTcc7JCoExXiomvAU3De3EB2uz2Xaw0Ok4pg4Wbz7E6l3HmDEmibBmbo3k0yisEBjjxW4b3o2wkCD+vmCr01FMLZVXVPLo/M10iQrjR6kdnY5TK1YIjPFibcJC+MUlXVi06SDfZB1xOo6phTnp2ezIPcG9l/YgKNA3fmJ9I6UxfuzWi7oQG96cP32y2Sav8XJFpeU8sWgbgzq14dJe0U7HqTUrBMZ4uebBgdw7rgcbcvL5cF2O03HMWby4bCeHCk9y//geXjPpTG24VQhEJFJEFonIdtdzjZPPi8gu1wQ060Qkra7tjfF3V/aLpV98OH/7dCvFpTYgnTc6cvwkzy/NYmxKtFdNOlMb7vYI7gOWqGoSsMT1/kxGqGp/VU2tZ3tj/FZAgPC7y1M4UFDCC8ts6Alv9NRnmRSXVXDvuB5OR6kzdwvBROAV1+tXgKsaub0xfuO8xEgm9OnAs1/s4GBBidNxTDU7co/z+je7mZTakW7tWzodp87cLQTRqrofwPXc/gzbKbBQRNJFZEo92htjgN+M60FFpfLYQruc1Jv88eNNNA8K5G4vnHSmNs5ZCERksYhk1PCYWIf9DFPVgcB44HYRubiuQUVkioikiUhabm5uXZsb0yR0ahvGT4clMic9m4378p2OY4DPthzki6253Dk6iahW3j2UxJmcsxCo6mhV7V3D4yPgoIjEALieD53hM/a5ng8BHwCDXatq1d7VdqaqpqpqalRUVF2+ozFNyu0juhHRIpg/f7IZVbuc1Eknyyt4+L+b6BoVxo1DE52OU2/uHhqaC9zken0T8NHpG4hImIi0OvUaGAtk1La9Mea7wlsEM2NMd77acYQlm8/4t5NpBLOX72LXkSIevKIXIUG+ezW+u8kfBcaIyHZgjOs9IhIrIvNc20QDy0XkW2AV8Imqfnq29saYs5s8OIGuUWE8Mm8zpeWVTsfxSwcLSnj6s+2M7hnNxd19+yiFW6MhqeoRYFQNy/cBE1yvs4B+dWlvjDm74MAAfnd5Cje/tJpZy7O4bbj3zn7VVP11/hbKKvPRYUQAAA5gSURBVJTfX97T6Shu892+jDF+bkRyey7tFc2/lmy3OQsaWfruo7y/NoefX9yZTm29cx7iurBCYIwPe/CKXgSI8H//3eR0FL9RWak8NHcTHVo3bzI9MSsExviw2IgW3DkqicWbD7Jo00Gn4/iFOel72ZCTz/0TevjEXAO1YYXAGB93y4WdSY5uxUNzN1JUWu50nCYtv7iMv326ldRObbiyX6zTcTzGCoExPi44MIA/Xd2bnLxinvrMJrtvSI/O38KxolIeurKXT40uei5WCIxpAs5LjOSHg+J5YWkW221aywaxMusIb67aw60XdaF3XLjTcTzKCoExTcT946uOWf/uwwy749jDSsoquO+99SREhjJjtG+OJ3Q2VgiMaSLatmzGb8b14JudR/lgrU1g40lPLtnOriNF/OWaPrQICXQ6jsdZITCmCbnuvI707xjBnz/ZTF5RqdNxmoSMnHxmLs1iUmo8w7q1czpOg7BCYEwTEhAg/Pnq3uQVl/HQ3I1Ox/F55RWV3Pf+etqEhvDAhBSn4zQYKwTGNDG9YsOZNqIbH67bx/wN+52O49NmLd9JRk4BD0/sRXhosNNxGowVAmOaoGkju9EnLpwHPswgt/Ck03F80s7DJ3hi0TbGpkQzvncHp+M0KCsExjRBwYEBPD6pH8dPlvPABxvsKqI6UlXuf389IUEB/PGq3k3qnoGaWCEwpolKim7Fr8cms3DTQd5fY1cR1cUbq/awMusov53Qk+jWzZ2O0+CsEBjThN1yYWcGJ0by0NyN7MsrdjqOT9h+sJA/fryJi5Lacd15HZ2O0yisEBjThAUGCP+4th8Vqtz77no7RHQOJWUVTHtjLWEhQTw2qV+TPyR0iluFQEQiRWSRiGx3PbepYZtkEVlX7VEgIne51j0kIjnV1k1wJ48x5vsS2obywGU9WZ55mNdW7nY6jlf70yeb2HqwkMcm9aN9q6Z/SOgUd3sE9wFLVDUJWOJ6/x2qulVV+6tqf2AQUETVBPanPHFqvarOO729McZ9Px6cwCXdo3hk3hZ2Hj7hdByv9GnGAV5buYefX9SZ4cntnY7TqNwtBBOBV1yvXwGuOsf2o4Adqmp/lhjTiESEv/6gLyFBAdz2+hqKSyucjuRVcvKK+c176+kTF86vL+3hdJxG524hiFbV/QCu53OV0euAN09bNk1E1ovI7JoOLZ0iIlNEJE1E0nJzc91LbYwf6hDenCev68+WAwV2SWk15RWV3PXWWsorKnlq8gBCgvzv1Ok5v7GILBaRjBoeE+uyIxEJAa4E5lRb/CzQFegP7AceO1N7VZ2pqqmqmhoVFVWXXRtjXIYnt2fG6O68vzaH/9j5AgD+9Vkmq3cd409X9yaxne/PP1wf55xnTVVHn2mdiBwUkRhV3S8iMcChs3zUeGCNqv5vPr3qr0XkBeDj2sU2xtTXtBHdWJ+dx8P/3URKTGtSEyOdjuSYlVlHePqz7VwzII6rB8Q7Hccx7vaB5gI3uV7fBHx0lm0nc9phIVfxOOVqIMPNPMaYcwgIEB6b1J/4Ni247fU1HCoscTqSI/YeLWLaG2tIiAzl4at6Ox3HUe4WgkeBMSKyHRjjeo+IxIrI/64AEpFQ1/r3T2v/NxHZICLrgRHADDfzGGNqIbxFMM/dMIjCknKmvb6WsopKpyM1qvziMm55eTWl5ZXMuimVlk1kEvr6El88YZSamqppaWlOxzDG5839dh/T31zLzcMSefCKXk7HaRRlFZXc/NJqVmYd4dVbBnNBE51joCYikq6qqacv9+8yaIyfu7JfLOv25DF7xU76xoc3+ePkqsrvP8xgeeZh/vbDvn5VBM7G/66TMsZ8x/0TenB+l0jufXc9n2852/Uevu/5pVm8tXovt4/oyqRU/xhHqDasEBjj54IDA5h5YyrJHVox9bV0vt5xxOlIDWL+hv08On8Ll/eN4Z4xyU7H8SpWCIwxtG4ezKu3DCEhMpRbX1nNur15TkfyqHV787jr7XUMTIjgH9f2IyDAPwaTqy0rBMYYACLDQnjt1iG0bdmMm2avYsuBAqcjeURGTj63vLya9q2b8cKNqTQPDnQ6ktexQmCM+Z/o1s15/dYhNA8O4PpZq3x+gLq0XUeZ/MJKWgQH8uotVUXOfJ8VAmPMd3SMDOX1W4dQqcr1s74hx0cntFm2PZcbXlxFu5bNeGfqUDr76fARtWGFwBjzPd3at+LVWwZTUFLGdTO/JvNQodOR6uTTjAP87OU0OrUN5Z1fDCUuooXTkbyaFQJjTI16x4Xzn58Nobi0kquf+cpnLi39YG02t7+xhpTY1rw9ZShRrexw0LlYITDGnFH/jhHMnTaMhLah3PLKamYu3eHVw1f/Z+VuZrz9LUM6R/LarUMIDw12OpJPsEJgjDmr2IgWzJk6lAm9Y3hk3hZ+NWc9J8u9a2KbwpIyfjXnW37/YQaje7Zn9k/P8/vxg+rC/kkZY84pNCSIp388gO5LWvHE4m3sPHyc524Y5BXz+qbtOsqMd9aRc6yY6SO7cceoJIID7W/curB/WsaYWhER7hydxLM/Gcjm/YVc+dQK5m/Y79ihorKKSh5buJVJz38NwJypQ7l7bLIVgXqwHoExpk7G94khoW0o97zzLb98fQ1Du7TlwStT6NGhdaNl2Hn4BHe9vY5v9+bxw0HxPHhFCq2a2/mA+rJhqI0x9VJeUcmbq/fy2MKtFBSX8ZMhnbh7THfahIU02D4PFpTw0opdvPLVLkKCAvjLNX2Y0Cfm3A0NcOZhqK0QGGPckldUyhOLtvHaN3to2SyIu8d059rUeEJDPHfAYeuBQl5YlsVH63KoqFTG94nh95el0CHc+XMUvqRBCoGIXAs8BPQEBqtqjb/OIjIOeBIIBGap6qmZzCKBt4FEYBcwSVWPnWu/VgiM8T5bDxTy8McbWZF5hObBAYxIbs+43h0Y2aN9vQ7bqCpf7TjCzKVZfLktlxbBgfzovI7cMqwzCW1DG+AbNH0NVQh6ApXA88CvaioEIhIIbKNqqspsYDUwWVU3icjfgKOq+qiI3Ae0UdXfnGu/VgiM8U6qyjc7jzJvw34+zTjAocKThAQGcFFSO8b17kDPmNa0bh5MeItgWjUP+t8ooJWVyu6jRWzIyWdjTj4Z+/LJyCkgv7iMdi2b8dMLOnH9+Z2ICG24w07+oEFmKFPVza4PP9tmg4FMVc1ybfsWMBHY5Hoe7truFeAL4JyFwBjjnUSE87u05fwubXnoil6s3XuMeRsO8GnGAZacdmeyCLRsFkR4i2Dyiso4frIcgJDAAJI7tGJCnw6kdorksr4xNmJoA2uMq4bigL3V3mcDQ1yvo1V1P4Cq7heR9mf6EBGZAkwBSEhIaKCoxhhPCQgQBnWKZFCnSH53WU827itgX14xBSXl5BeXkV9cRoHruWWzIPrEhdMrrjVJ7VsREmSXgDamcxYCEVkMdKhh1QOq+lEt9lFTd6HOx6NUdSYwE6oODdW1vTHGOSJC77hweseFOx3F1OCchUBVR7u5j2yg+uSg8cA+1+uDIhLj6g3EAL4xqpUxxjQhjdH/Wg0kiUhnEQkBrgPmutbNBW5yvb4JqE0PwxhjjAe5VQhE5GoRyQaGAp+IyALX8lgRmQegquXANGABsBl4R1U3uj7iUWCMiGyn6qqiR93JY4wxpu7shjJjjPETZ7p81E7NG2OMn7NCYIwxfs4KgTHG+DkrBMYY4+d88mSxiOQCu+vZvB1w2INxnODr38HyO8/Xv4Ov5wdnvkMnVY06faFPFgJ3iEhaTWfNfYmvfwfL7zxf/w6+nh+86zvYoSFjjPFzVgiMMcbP+WMhmOl0AA/w9e9g+Z3n69/B1/ODF30HvztHYIwx5rv8sUdgjDGmGisExhjj5/yqEIjIOBHZKiKZrjmSfYqIzBaRQyKS4XSW+hCRjiLyuYhsFpGNInKn05nqQkSai8gqEfnWlf//nM5UHyISKCJrReRjp7PUh4jsEpENIrJORHxu9EkRiRCRd0Vki+v/haGOZ/KXcwQiEghso2q462yq5kmYrKqbHA1WByJyMXAceFVVezudp65ckw/FqOoaEWkFpANX+cq/A6manDtMVY+LSDCwHLhTVVc6HK1ORORuIBVoraqXO52nrkRkF5Cqqj55Q5mIvAIsU9VZrjlaQlU1z8lM/tQjGAxkqmqWqpYCbwETHc5UJ6q6FDjqdI76UtX9qrrG9bqQqvkp4pxNVXta5bjrbbDr4VN/SYlIPHAZMMvpLP5IRFoDFwMvAqhqqdNFAPyrEMQBe6u9z8aHfoSaGhFJBAYA3zibpG5ch1XWUTWt6iJV9an8wD+Be4FKp4O4QYGFIpIuIlOcDlNHXYBc4CXX4blZIhLmdCh/KgRSwzKf+muuqRCRlsB7wF2qWuB0nrpQ1QpV7U/V3NuDRcRnDtGJyOXAIVVNdzqLm4ap6kBgPHC765CprwgCBgLPquoA4ATg+PlKfyoE2UDHau/jgX0OZfFbrmPr7wGvq+r7TuepL1d3/gtgnMNR6mIYcKXrGPtbwEgRec3ZSHWnqvtcz4eAD6g67OsrsoHsaj3Jd6kqDI7yp0KwGkgSkc6uEzTXAXMdzuRXXCdbXwQ2q+rjTuepKxGJEpEI1+sWwGhgi7Opak9V71fVeFVNpOq//89U9XqHY9WJiIS5LjTAdUhlLOAzV9Gp6gFgr4gkuxaNAhy/WCLI6QCNRVXLRWQasAAIBGar6kaHY9WJiLwJDAfaiUg28KCqvuhsqjoZBtwAbHAdZwf4rarOczBTXcQAr7iuQAsA3lFVn7wE04dFAx9U/U1BEPCGqn7qbKQ6uwN43fUHaRZws8N5/OfyUWOMMTXzp0NDxhhjamCFwBhj/JwVAmOM8XNWCIwxxs9ZITDGGD9nhcAYY/ycFQJjjPFz/w9WJi4Pv8BS9gAAAABJRU5ErkJggg==\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"# Plot the result\n", | |
"\n", | |
"plt.plot(x, y)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<hr>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<h2 id=\"quiz\">Quiz on 1D Numpy Array</h2>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Implement the following vector subtraction in numpy: u-v" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 60, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([ 1, -1])" | |
] | |
}, | |
"execution_count": 60, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Write your code below and press Shift+Enter to execute\n", | |
"\n", | |
"u = np.array([1, 0])\n", | |
"v = np.array([0, 1])\n", | |
"\n", | |
"z = u - v\n", | |
"\n", | |
"z" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Double-click __here__ for the solution.\n", | |
"\n", | |
"<!-- Your answer is below:\n", | |
"u - v\n", | |
"-->" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<hr>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Multiply the numpy array z with -2:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 61, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([-4, -8])" | |
] | |
}, | |
"execution_count": 61, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Write your code below and press Shift+Enter to execute\n", | |
"\n", | |
"z = np.array([2, 4])\n", | |
"\n", | |
"(-2) * z" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Double-click __here__ for the solution.\n", | |
"\n", | |
"<!-- Your answer is below:\n", | |
"-2 * z\n", | |
"-->" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<hr>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Consider the list <code>[1, 2, 3, 4, 5]</code> and <code>[1, 0, 1, 0, 1]</code>, and cast both lists to a numpy array then multiply them together:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 62, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([1, 0, 3, 0, 5])" | |
] | |
}, | |
"execution_count": 62, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Write your code below and press Shift+Enter to execute\n", | |
"a = np.array([1, 2, 3, 4, 5])\n", | |
"b = np.array([1, 0, 1, 0, 1])\n", | |
"\n", | |
"a*b" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Double-click __here__ for the solution.\n", | |
"\n", | |
"<!-- Your answer is below:\n", | |
"a = np.array([1, 2, 3, 4, 5])\n", | |
"b = np.array([1, 0, 1, 0, 1])\n", | |
"a * b\n", | |
"-->" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<hr>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Convert the list <code>[-1, 1]</code> and <code>[1, 1]</code> to numpy arrays <code>a</code> and <code>b</code>. Then, plot the arrays as vectors using the fuction <code>Plotvec2</code> and find the dot product:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 64, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"0" | |
] | |
}, | |
"execution_count": 64, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"# Write your code below and press Shift+Enter to execute\n", | |
"\n", | |
"a = np.array([-1, 1])\n", | |
"b = np.array([1, 1])\n", | |
"Plotvec2(a,b)\n", | |
"result = np.dot(a,b)\n", | |
"\n", | |
"result" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Double-click __here__ for the solution.\n", | |
"\n", | |
"<!-- Your answer is below:\n", | |
"a = np.array([-1, 1])\n", | |
"b = np.array([1, 1])\n", | |
"Plotvec2(a, b)\n", | |
"print(\"The dot product is\", np.dot(a,b))\n", | |
"-->" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<hr>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Convert the list <code>[1, 0]</code> and <code>[0, 1]</code> to numpy arrays <code>a</code> and <code>b</code>. Then, plot the arrays as vectors using the function <code>Plotvec2</code> and find the dot product:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 65, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"0" | |
] | |
}, | |
"execution_count": 65, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"# Write your code below and press Shift+Enter to execute\n", | |
"\n", | |
"a = np.array([1, 0])\n", | |
"b = np.array([0, 1])\n", | |
"Plotvec2(a,b)\n", | |
"result = np.dot(a,b)\n", | |
"\n", | |
"result" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Double-click __here__ for the solution.\n", | |
"\n", | |
"<!-- \n", | |
"a = np.array([1, 0])\n", | |
"b = np.array([0, 1])\n", | |
"Plotvec2(a, b)\n", | |
"print(\"The dot product is\", np.dot(a, b))\n", | |
" -->" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<hr>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Convert the list <code>[1, 1]</code> and <code>[0, 1]</code> to numpy arrays <code>a</code> and <code>b</code>. Then plot the arrays as vectors using the fuction <code>Plotvec2</code> and find the dot product:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 66, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"1" | |
] | |
}, | |
"execution_count": 66, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"# Write your code below and press Shift+Enter to execute\n", | |
"a = np.array([1, 1])\n", | |
"b = np.array([0, 1])\n", | |
"Plotvec2(a,b)\n", | |
"result = np.dot(a,b)\n", | |
"\n", | |
"result" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Double-click __here__ for the solution.\n", | |
"\n", | |
"<!-- \n", | |
"a = np.array([1, 1])\n", | |
"b = np.array([0, 1])\n", | |
"Plotvec2(a, b)\n", | |
"print(\"The dot product is\", np.dot(a, b))\n", | |
"print(\"The dot product is\", np.dot(a, b))\n", | |
" -->" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<hr>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Why are the results of the dot product for <code>[-1, 1]</code> and <code>[1, 1]</code> and the dot product for <code>[1, 0]</code> and <code>[0, 1]</code> zero, but not zero for the dot product for <code>[1, 1]</code> and <code>[0, 1]</code>? <p><i>Hint: Study the corresponding figures, pay attention to the direction the arrows are pointing to.</i></p>" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# Write your code below and press Shift+Enter to execute\n", | |
"\n", | |
"#The vectors used for question 4 and 5 are perpendicular." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Double-click __here__ for the solution.\n", | |
"\n", | |
"<!-- \n", | |
"The vectors used for question 4 and 5 are perpendicular. As a result, the dot product is zero. \n", | |
"-->" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<hr>\n", | |
"<h2>The last exercise!</h2>\n", | |
"<p>Congratulations, you have completed your first lesson and hands-on lab in Python. However, there is one more thing you need to do. The Data Science community encourages sharing work. The best way to share and showcase your work is to share it on GitHub. By sharing your notebook on GitHub you are not only building your reputation with fellow data scientists, but you can also show it off when applying for a job. Even though this was your first piece of work, it is never too early to start building good habits. So, please read and follow <a href=\"https://cognitiveclass.ai/blog/data-scientists-stand-out-by-sharing-your-notebooks/\" target=\"_blank\">this article</a> to learn how to share your work.\n", | |
"<hr>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<div class=\"alert alert-block alert-info\" style=\"margin-top: 20px\">\n", | |
"<h2>Get IBM Watson Studio free of charge!</h2>\n", | |
" <p><a href=\"https://cocl.us/bottemNotebooksPython101Coursera\"><img src=\"https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/PY0101EN/Ad/BottomAd.png\" width=\"750\" align=\"center\"></a></p>\n", | |
"</div>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<h3>About the Authors:</h3> \n", | |
"<p><a href=\"https://www.linkedin.com/in/joseph-s-50398b136/\" target=\"_blank\">Joseph Santarcangelo</a> is a Data Scientist at IBM, and holds a PhD in Electrical Engineering. His research focused on using Machine Learning, Signal Processing, and Computer Vision to determine how videos impact human cognition. Joseph has been working for IBM since he completed his PhD.</p>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Other contributors: <a href=\"www.linkedin.com/in/jiahui-mavis-zhou-a4537814a\">Mavis Zhou</a>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<hr>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<p>Copyright © 2018 IBM Developer Skills Network. This notebook and its source code are released under the terms of the <a href=\"https://cognitiveclass.ai/mit-license/\">MIT License</a>.</p>" | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python", | |
"language": "python", | |
"name": "conda-env-python-py" | |
}, | |
"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.6.7" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 4 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment