Created
June 21, 2019 23:13
-
-
Save aptgetupgrade/c63415947573b72d8f72ccc12e453a00 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/PY0101EN_edx_add_top\">\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": { | |
"collapsed": true | |
}, | |
"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 | |
}, | |
"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 | |
}, | |
"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 | |
}, | |
"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": 6, | |
"metadata": { | |
"collapsed": 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": 7, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([0, 1, 2, 3, 4])" | |
] | |
}, | |
"execution_count": 7, | |
"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": 8, | |
"metadata": { | |
"collapsed": 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": 9, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"numpy.ndarray" | |
] | |
}, | |
"execution_count": 9, | |
"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": 10, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"dtype('int64')" | |
] | |
}, | |
"execution_count": 10, | |
"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": 11, | |
"metadata": { | |
"collapsed": 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": 12, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"numpy.ndarray" | |
] | |
}, | |
"execution_count": 12, | |
"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": 13, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"dtype('float64')" | |
] | |
}, | |
"execution_count": 13, | |
"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": 6, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([20, 1, 2, 3, 4])" | |
] | |
}, | |
"execution_count": 6, | |
"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": 7, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([100, 1, 2, 3, 4])" | |
] | |
}, | |
"execution_count": 7, | |
"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": 8, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([100, 1, 2, 3, 0])" | |
] | |
}, | |
"execution_count": 8, | |
"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": 9, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([1, 2, 3])" | |
] | |
}, | |
"execution_count": 9, | |
"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": 10, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([100, 1, 2, 300, 400])" | |
] | |
}, | |
"execution_count": 10, | |
"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": 11, | |
"metadata": { | |
"collapsed": true | |
}, | |
"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": 12, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([100, 2, 300])" | |
] | |
}, | |
"execution_count": 12, | |
"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": 13, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([100000, 1, 100000, 100000, 400])" | |
] | |
}, | |
"execution_count": 13, | |
"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": 14, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([0, 1, 2, 3, 4])" | |
] | |
}, | |
"execution_count": 14, | |
"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": [ | |
"The attribute <code>size</code> is the number of elements in the array:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 15, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"5" | |
] | |
}, | |
"execution_count": 15, | |
"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": 16, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"1" | |
] | |
}, | |
"execution_count": 16, | |
"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": 17, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"(5,)" | |
] | |
}, | |
"execution_count": 17, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Get the shape/size of numpy array\n", | |
"\n", | |
"a.shape" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 18, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"# Create a numpy array\n", | |
"\n", | |
"a = np.array([1, -1, 1, -1])" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 19, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"0.0" | |
] | |
}, | |
"execution_count": 19, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Get the mean of numpy array\n", | |
"\n", | |
"mean = a.mean()\n", | |
"mean" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 20, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"1.0" | |
] | |
}, | |
"execution_count": 20, | |
"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": 21, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([-1, 2, 3, 4, 5])" | |
] | |
}, | |
"execution_count": 21, | |
"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": 22, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"5" | |
] | |
}, | |
"execution_count": 22, | |
"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": 23, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"-1" | |
] | |
}, | |
"execution_count": 23, | |
"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": 24, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([1, 0])" | |
] | |
}, | |
"execution_count": 24, | |
"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": 25, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([0, 1])" | |
] | |
}, | |
"execution_count": 25, | |
"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": 26, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([1, 1])" | |
] | |
}, | |
"execution_count": 26, | |
"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": 27, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"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": [ | |
"# 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": 28, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([1, 2])" | |
] | |
}, | |
"execution_count": 28, | |
"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": 29, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([2, 4])" | |
] | |
}, | |
"execution_count": 29, | |
"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": 30, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([1, 2])" | |
] | |
}, | |
"execution_count": 30, | |
"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": 31, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([3, 2])" | |
] | |
}, | |
"execution_count": 31, | |
"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": 32, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([3, 4])" | |
] | |
}, | |
"execution_count": 32, | |
"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": 33, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"7" | |
] | |
}, | |
"execution_count": 33, | |
"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": 34, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([ 1, 2, 3, -1])" | |
] | |
}, | |
"execution_count": 34, | |
"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": 35, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([2, 3, 4, 0])" | |
] | |
}, | |
"execution_count": 35, | |
"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": 36, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"3.141592653589793" | |
] | |
}, | |
"execution_count": 36, | |
"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": 37, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"# Create the numpy array in radians\n", | |
"\n", | |
"x = np.array([0, np.pi/2 , np.pi])" | |
] | |
}, | |
{ | |
"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": 38, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([0.0000000e+00, 1.0000000e+00, 1.2246468e-16])" | |
] | |
}, | |
"execution_count": 38, | |
"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": 39, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([-2., -1., 0., 1., 2.])" | |
] | |
}, | |
"execution_count": 39, | |
"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": 40, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([-2. , -1.5, -1. , -0.5, 0. , 0.5, 1. , 1.5, 2. ])" | |
] | |
}, | |
"execution_count": 40, | |
"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": 41, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"# Makeup a numpy array within [0, 2π] and 100 elements \n", | |
"\n", | |
"x = np.linspace(0, 2*np.pi, num=100)" | |
] | |
}, | |
{ | |
"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": 42, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"# Calculate the sine of x list\n", | |
"\n", | |
"y = np.sin(x)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 43, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[<matplotlib.lines.Line2D at 0x7fee9d545630>]" | |
] | |
}, | |
"execution_count": 43, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAD8CAYAAABzTgP2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3Xd4lfX9//HnO5sMEkLCyoAAYW9iUHAwBSeKC6yKOHBba2vFr7Zaq63WVlHEgThwax1AFWWjKCIEZEPIYCSsJISRQfbn90cO/pKYkHFOcp/xflzXuXLOfe475xVa88rnXh8xxqCUUkqd5mV1AKWUUs5Fi0EppVQ1WgxKKaWq0WJQSilVjRaDUkqparQYlFJKVaPFoJRSqhotBqWUUtVoMSillKrGx+oATREREWG6dOlidQyllHIpGzZsyDHGRNa3nksWQ5cuXUhKSrI6hlJKuRQR2deQ9XRXklJKqWq0GJRSSlWjxaCUUqoaLQallFLVaDEopZSqxiHFICJviUiWiGyr430RkZdEJFVEtojIkCrvTRWRFNtjqiPyKKWUajpHjRjeASac4f2LgHjbYzrwKoCIhAOPA8OAROBxEWnjoExKKaWawCHXMRhjvheRLmdYZSLwrqmcR3StiISJSEdgJLDUGJMLICJLqSyYjxyRSzVOQXEZqVn5pGXnc7ywlOKyCorLymnl60271v60Cwmga2QQHUNbWR1VKdWMWuoCtyggo8rrTNuyupb/hohMp3K0QWxsbPOk9DCnSspZm36UlclZfLc7m31HCxu0XafQAAZ3bsOIbhFc3L8DYYF+zZxUKdWSWqoYpJZl5gzLf7vQmDnAHICEhIRa11ENs+vwSd79aR/zfzlAYUnliGB4t7ZcMzSa7u1C6N4umIhgP/x9vPHz8aKwpIysvGKOnCwi+XAeG/YdY8O+Y3y95RCPL9zGBT3acfXQaC7s0x4vr9r+J1VKuZKWKoZMIKbK62jgoG35yBrLV7VQJo+zbk8u/1mSzM97cvH38eKygZ24fGAnEuPCCfD1rnO7kABfQgJ86RYZzPBuEUwbEYcxhu0HT7Jg0wEWbj7Isp1H6BYZxN0ju3P5oE74eusJb0q5Kqnc7e+Ab1R5jOErY0y/Wt67BLgXuJjKA80vGWMSbQefNwCnz1LaCAw9fcyhLgkJCUbvldRwKUfyePbbXSzbmUX71v7cMiKOaxNiaBPkmF1A5RWGRVsPMXtlKrsO59GlbSCPX9aXUb3aOeT7K6UcQ0Q2GGMS6lvPISMGEfmIyr/8I0Qkk8ozjXwBjDGvAYuoLIVUoBCYZnsvV0T+Dqy3fasn6ysF1XBFpeW8uDyF179LI8jPh4fG9+SWEXG08qt7dNAU3l7CZQM7cemAjizfmcU/vtnJtHfWM75ve/56WV+iwvRgtVKuxGEjhpakI4b6bco4zkP/3UxKVj7XJkQz46LehDtohFCfkrIK5v6QzqzlqYjAkxP7cdWQKET0+INSVmroiEF3BLsZYwyvrkpj0is/kl9cxjvTzuJfVw9ssVIA8PPx4u6R3Vn64Pn0jwrlT//dzB8+2UReUWmLZVBKNZ1LzsegapdfXMZD/93MN9sOc8mAjvxzUn9aB/halie6TSAf3n42s1emMnPZbn7JOM7cmxKIbx9iWSalVP10xOAm9uYUMPHlH1iy4wiPXtybl6cMtrQUTvP2Eu4fE88nd5xDYUk5k15Zw+qUbKtjKaXOQIvBDWzNPMFVr64ht6CE925N5Pbzuzrd/vyzuoQz/54RRLVpxc1vr+f9tQ2aSEopZQEtBhf3Q0oOk+f8RICvN5/dNZzh3SKsjlSnqLBWfHbXcC7oEclj87fx4rIUXPHkB6XcnRaDC/t22yGmvbOOmPBAvrh7ON0ig62OVK9gfx/euCmBq4ZE88Ky3fxrcbKWg1JORg8+u6gl2w9z74e/MCA6lLenJRLayvrjCQ3l7SU8d/UAAny9eHVVGkWl5fz10j5Ot/tLKU+lxeCCVuw6wj0fbqRvVCjzbkkkxAkOMjeWl5fw1BX98Pfx5q0f9+DjJfzfxb21HJRyAloMLmZ1SjZ3vreRXh1a866LlsJpIsJfLu1NeUUFb6zeQ1igH/eM6m51LKU8nhaDC9l24AR3vreBrpFBvHera+0+qouI8PhlfTlxqpTnFicT2sqXG87ubHUspTyaFoOLyMgtZNo76wlt5cu8WxLdag4ELy/huWsGkldUxl8WbCMi2I8J/TpaHUspj6VnJbmA44Ul3Pz2OopLy5l3SyLtWwdYHcnhfL29mP27IQyOCeOBTzaxJfO41ZGU8lhaDE6utLyCO9/fQEbuKd5w89tJBPh6M+emBCKC/bltXhKHTpyyOpJSHkmLwck9/fVO1qbn8sxV/RnWta3VcZpdRLA/b049i8KScm59J4mC4jKrIynlcbQYnNinSRm8s2Yvt50bx6Qh0VbHaTE9O4Qw6/rB7Dp8kj9/vkUvgFOqhTmkGERkgogki0iqiMyo5f0XRGST7bFbRI5Xea+8ynsLHZHHHWzcf4zHvtzGefERzLiol9VxWtyonu340/iefL3lEG//uNfqOEp5FLvPShIRb2A2MI7KOZzXi8hCY8yO0+sYY/5QZf37gMFVvsUpY8wge3O4k9yCEu75YCPtQ/2ZNWUwPh46f/JdF3Tjl/3H+ceinQyIDiWhS7jVkZTyCI74jZMIpBpj0o0xJcDHwMQzrD8F+MgBn+uWKioMf/x0E0fzS3j1d0Pd6rTUxhIR/nPtQKLbtOLuDzaSlVdkdSSlPIIjiiEKyKjyOtO27DdEpDMQB6yosjhARJJEZK2IXOGAPC7tjdXprEzO5rFLe9MvKtTqOJZrHeDLazcO5WRRKQ9+spmKCj3eoFRzc0Qx1HZzm7r+650MfGaMKa+yLNY2B+n1wEwR6Vbrh4hMtxVIUna2e070smFfLv9anMzF/Ttwo179+6teHVrz+GV9+SE1hzdWp1sdRym354hiyARiqryOBg7Wse5kauxGMsYctH1NB1ZR/fhD1fXmGGMSjDEJkZGR9mZ2OieLSrn/o01EhbXimasG6M3kaph8VgwX9evAc4uT2ZyhF78p1ZwcUQzrgXgRiRMRPyp/+f/m7CIR6Qm0AX6qsqyNiPjbnkcAI4AdNbf1BE8s3M7hk0XMnDzIKabkdDYiwj8n9ScyxJ/7P/6FfL2+QalmY3cxGGPKgHuBxcBO4FNjzHYReVJELq+y6hTgY1P9pPTeQJKIbAZWAs9UPZvJUyzaeogvNh7gnlHdGRLbxuo4Tiss0I+Z1w0iI7eQJ/+33eo4SrktccWLhxISEkxSUpLVMRziyMkixs/8ns7hgXx213B8PfTU1MZ49ttdvLoqjbduTmB0r/ZWx1HKZYjIBtsx3TPS30IWMsbw0GdbKC6t4IXrBmkpNNADY+Pp2T6Ehz/fyvHCEqvjKOV29DeRhf67IZPvd2fzyMW96OoC8zU7C38fb/5z7UCOFZTw+ELdpaSUo2kxWOTwiSL+/tUOhsWFc8MwPTW1sfpFhXLf6HgWbDrIt9sOWR1HKbeixWABYwyPfrmV0vIKnr1qAF5eempqU9w9qhv9olrz2PztnCgstTqOUm5Di8ECCzcfZPmuLP50YU+6RARZHcdl+Xp78cykARwrLOEfi3ZaHUcpt6HF0MJyC0p4YuF2BseGMW1EnNVxXF6/qFBuP68rnyRlsCY1x+o4SrkFLYYW9o9FO8krKuPZqwbgrbuQHOKBsfF0bhvII19upai0vP4NlFJnpMXQgn5KO8pnGzKZfn5XerjxFJ0tLcDXm39O6s++o4XMXJZidRylXJ4WQwspLivn0S+3EhseyH2j462O43aGd4vgmqHRzF2dTsqRPKvjKOXStBhayKur0kjPKeDvV/SjlZ+31XHc0oyLehHk78Nj87fpdKBK2UGLoQXsO1rAK6vSuGxgJy7o4X53hnUWbYP9eXhCL37ek8v8TQesjqOUy9JiaAFP/m8Hvl7CY5f0tjqK25t8VgwDY8J4+utdnDil1zYo1RRaDM1s+c4jLN+VxQNje9C+dYDVcdyel5fw9BX9yC0o5vklyVbHUcolaTE0o6LScv72vx10bxfMzSO6WB3HY/SLCuWGszvz3tp97Dp80uo4SrkcLYZm9Mb36ezPLeRvl/fVO6e2sAfH9aB1K1+eWLhdD0Qr1Uj626qZHDx+itmrUrmkf0dGdI+wOo7HCQv0448X9mRtei7fbDtsdRylXIpDikFEJohIsoikisiMWt6/WUSyRWST7XFblfemikiK7THVEXmcwbPf7sIYeOTiXlZH8VjXJ8bSq0MIT3+9U6+IVqoR7C4GEfEGZgMXAX2AKSLSp5ZVPzHGDLI95tq2DQceB4YBicDjIuLyc1tu2HeMBZsOMv38rkS3CbQ6jsfy9hKeuLwvB46f4vXv0q2Oo5TLcMSIIRFINcakG2NKgI+BiQ3cdjyw1BiTa4w5BiwFJjggk2UqKgxPfrWD9q39ufOCblbH8Xhnd23LJf078up3qRw+UWR1HKVcgiOKIQrIqPI607aspqtEZIuIfCYiMY3c1mUs2HyAzRnH+fP4yqtwlfVmXNSLigr4t56+qlSDOKIYartFaM3TQP4HdDHGDACWAfMasW3liiLTRSRJRJKys7ObHLY5FZaU8ew3yQyIDuXKwS7db24lJjyQaSO68PnGTLYdOGF1HKWcniOKIROIqfI6GjhYdQVjzFFjTLHt5RvA0IZuW+V7zDHGJBhjEiIjnfO2EnNX7+HwySL+cmkfnZXNydw9qjttAv146usdevqqUvVwRDGsB+JFJE5E/IDJwMKqK4hIxyovLwdOT7e1GLhQRNrYDjpfaFvmcrLzinn9uzTG923PWV3CrY6jaght5csfxsazNj2XZTuzrI6jlFOzuxiMMWXAvVT+Qt8JfGqM2S4iT4rI5bbV7heR7SKyGbgfuNm2bS7wdyrLZT3wpG2Zy5m5bDfFZRU8PEFPT3VWUxJj6RYZxD8X7aS0vMLqOEo5LXHFYXVCQoJJSkqyOsavUrPyGT/ze24YFsvfJvazOo46g2U7jnDbu0n8/Yp+3Hh2Z6vjKNWiRGSDMSahvvX0ymcHeOabXQT6enP/GJ2Ax9mN6d2OxC7hvLgshYLiMqvjKOWUtBjstG5PLst2HuHOkd1oG+xvdRxVDxFhxsW9yMkv5o3VetGbUrXRYrCDMYZnvtlJ+9b+3DIizuo4qoGGxLbhon4dmPN9Otl5xfVvoJSH0WKww9IdR9i4/zgPjO2h03W6mIfG96S4rIJZK1KsjqKU09FiaKLyCsNzi5PpGhnENUOjrY6jGqlrZDBTEmP48Of97M0psDqOUk5Fi6GJPt+YSUpWPg9d2BMfnWvBJd0/Oh5fby9eWLbb6ihKORX9jdYERaXlzFy6m4ExYUzo18HqOKqJ2rUOYNqILizcfJCdh3SmN6VO02JogvfX7uPgiSIeHt8TEb31hSu74/xuhPj78O/FeoM9pU7TYmik/OIyXl2VxrndIxiuM7O5vNBAX+4c2Y3lu7JI2uuSF90r5XBaDI309g97OFpQwp/G97Q6inKQacPjiAzx51+Lk/UGe0qhxdAoxwtLmLM6nXF92jMoJszqOMpBWvl5c//o7qzbk8vqlByr4yhlOS2GRnj9+3Tyi8v444U9rI6iHOy6s2KJCmvFv5foqEEpLYYGysor4u0f93D5wE706tDa6jjKwfx8vPj92Hi2ZJ5g6Y4jVsdRylJaDA30yso0SssND4zV0YK7mjQ4iriIIJ5fupuKCh01KM+lxdAAh06c4sN1+7l6SDRxEUFWx1HNxMfbiwfGxrPrcB5fbz1kdRylLKPF0ACzV6ZijOHe0d2tjqKa2WUDOtGzfQgvLNtNmU7mozyUQ4pBRCaISLKIpIrIjFref1BEdojIFhFZLiKdq7xXLiKbbI+FNbe1WuaxQj5Zn8G1CTHEhAdaHUc1My8v4Q/j4knPLmDBplqnH1fK7dldDCLiDcwGLgL6AFNEpE+N1X4BEowxA4DPgH9Vee+UMWaQ7XE5TmbW8lREREcLHmR83w706dial1ak6KhBeSRHjBgSgVRjTLoxpgT4GJhYdQVjzEpjTKHt5VrAJW5Huu9oAZ9tzOT6xFg6hrayOo5qISLCH8b1YN/RQr745YDVcZRqcY4ohiggo8rrTNuyutwKfFPldYCIJInIWhG5oq6NRGS6bb2k7Oxs+xI30EvLU/H1Fu4e2a1FPk85j7G929E/KpRZK1Io1VGD8jCOKIba7iJX67l+InIDkAA8V2VxrG1y6uuBmSJS629hY8wcY0yCMSYhMjLS3sz12pNTwJe/ZHLDsM60ax3Q7J+nnEvlqCGejNxTfL4h0+o4SrUoRxRDJhBT5XU08JujdiIyFngUuNwY8+t8isaYg7av6cAqYLADMtlt1vIU/Hy8uOMCHS14qlE92zEwJoxZK1IpKdNRg/IcjiiG9UC8iMSJiB8wGah2dpGIDAZep7IUsqosbyMi/rbnEcAIYIcDMtklPTuf+ZsOcOPZnYkM8bc6jrKIiPCHsfEcOH6Kz3TUoDyI3cVgjCkD7gUWAzuBT40x20XkSRE5fZbRc0Aw8N8ap6X2BpJEZDOwEnjGGGN5McxakYqfjxfTz9fRgqe7oEckg2LCmL1SRw3Kc/g44psYYxYBi2os+2uV52Pr2G4N0N8RGRwlLTufBZsOcNt5XXW0oBARHhgbz81vr+ezDZlcPyzW6khKNTu98rmGl1ek4u/jzfTzu1odRTkJHTUoT6PFUEW6bbRw4zmdiQjW0YKqdHrUcOD4KT7fqMcalPvTYqjiZduxhdvP09GCqu70qOFlPUNJeQAtBps9OQXM33SAG4bpmUjqt0SE3+uoQXkILQabl1ek4uvtxfQLdLSgajeyRyQDo0OZvTJVr4ZWbk2Lgcp7Is3fdIDfDetMuxC9ylnV7vSoIfPYKb7cqPdQUu5Li4HK+RZ8vIQ7dbSg6jGqZ+U9lF5emap3XlVuy+OLISO3kC82HmBKYqzeE0nVS0S4f0w8+3MLma/zNSg35fHF8MqqNLxEuFPviaQaaGzvdvTp2JrZOmpQbsqji6HyHjgZXHdWDB1CdbSgGub0qGFPTgH/26KjBuV+PLoYXluVBsBdOt+CaqQL+7SnV4cQXl6RSnlFrXeZV8pleWwxHD5RxCfrM7gmIYZOYTo7m2ocLy/hvtHxpGUXsGjrIavjKOVQHlsMr32XRoUx3KXHFlQTXdSvA/Htgnl5RSoVOmpQbsQjiyErr4iP1u1n0pAoYsIDrY6jXJSXl3Dv6O4kH8ljyY7DVsdRymE8shje+D6dsgrDPaO6Wx1FubhLB3Sia0QQLy1PxRgdNSj34JBiEJEJIpIsIqkiMqOW9/1F5BPb+z+LSJcq7z1iW54sIuMdkedMcvKLeX/tfiYO7ETntkHN/XHKzXl7CfeM6s6OQydZtjOr/g2UcgF2F4OIeAOzgYuAPsAUEelTY7VbgWPGmO7AC8Cztm37UDkVaF9gAvCK7fs1m7mr91BUVs49o3W0oBxj4qBOdG4byKwVKTpqUG7BESOGRCDVGJNujCkBPgYm1lhnIjDP9vwzYIyIiG35x8aYYmPMHiDV9v2axbGCEt77aS+XDuhEt8jg5voY5WF8vL24e2Q3tmSe4Lvd2VbHUcpujiiGKCCjyutM27Ja17HNEX0CaNvAbR3mrR/3UFBSzn06WlAOduXgaKLCWvHSch01qOaRmpXPtLfXsf9oYbN/liOKQWpZVvO/jLrWaci2ld9AZLqIJIlIUnZ20/4qyy0o4ZIBHenRPqRJ2ytVFz8fL+4a2Y2N+4+zJu2o1XGUG5q9MpW16bkE+Tfr3nbAMcWQCcRUeR0N1LxPwK/riIgPEArkNnBbAIwxc4wxCcaYhMjIyCYFffrK/rw0eXCTtlWqPtckRNOhdQAvLk+xOopyM3tyCn6ddrhtC0w77IhiWA/Ei0iciPhReTB5YY11FgJTbc+vBlaYyvH2QmCy7aylOCAeWOeATHXy9qptkKKU/fx9vLnzgq6s25PL2nQdNSjHeWVl5URit50X1yKfZ3cx2I4Z3AssBnYCnxpjtovIkyJyuW21N4G2IpIKPAjMsG27HfgU2AF8C9xjjCm3N5NSVpmcGEtkiD+zVuioQTlGRm4hX/xygOuHxbbYRGI+jvgmxphFwKIay/5a5XkRcE0d2z4NPO2IHEpZLcDXmzvO78pTX+9kw75chnYOtzqScnGvrErDW4Q7zm+52/d45JXPSjWn64fF0jbIj5eWp1odRbk4q6YG0GJQysEC/Xy4/fyufLc7m00Zx62Oo1zY699VTg1wZwtPDaDFoFQzuOHszoQF+jJLz1BSTXT4RBEfr8vg6qExRLXw1ABaDEo1g2B/H247N47lu7LYduCE1XGUC3r9+8qpAe62YCIxLQalmslNw7vQOsCHl3TUoBopK6+ID3+2bmoALQalmknrAF9uOTeOJTuOsOPgSavjKBdi9dQAWgxKNaNpw+MI8ffR6xpUg+XkF/Pe2n22u/ZaMzWAFoNSzSg00JdpI7rwzbbDJB/OszqOcgFvrE6npKzC0onEtBiUama3nBtHsL8PL+moQdUjt6CE937ax2UDrZ0aQItBqWYWFujH1OGdWbT1EClHdNSg6vbG6nROlVo/NYAWg1It4NZzu9LK15uXVujV0Kp2uQUlzFtTOZFY93bWTg2gxaBUCwgP8uOmc7rw1ZaDpGbpqEH91lzbaOF+J5hITItBqRZy+3lxlaMGvYeSquGYbbRwcf+OxDvBRGJaDEq1kLbB/tx0Thf+p6MGVcObP1ROO3z/6HirowBaDEq1qNOjhll6rEHZHCso4Z01e7mkf0d6drB+tABaDEq1qNOjhoWbD5KalW91HOUE5v6QTkFJGfePcY7RAthZDCISLiJLRSTF9rVNLesMEpGfRGS7iGwRkeuqvPeOiOwRkU22xyB78ijlCv7/sQa9rsHT5RaU8M6PlccWnGW0APaPGGYAy40x8cBy2+uaCoGbjDF9gQnATBEJq/L+Q8aYQbbHJjvzKOX0qh5r0OsaPNvc1ekUlpbzgBONFsD+YpgIzLM9nwdcUXMFY8xuY0yK7flBIAuItPNzlXJp08/vSqCvNy/qqMFjVb1uwRnORKrK3mJob4w5BGD72u5MK4tIIuAHpFVZ/LRtF9MLIuJvZx6lXEJ4kB83j+jC11sP6T2UPNQbttGCM1y3UFO9xSAiy0RkWy2PiY35IBHpCLwHTDPGVNgWPwL0As4CwoGHz7D9dBFJEpGk7Ozsxny0Uk7p9vO6EuTnw4vLd1sdRbWwnPxi3vlxL5c54WgBGlAMxpixxph+tTwWAEdsv/BP/+LPqu17iEhr4GvgMWPM2irf+5CpVAy8DSSeIcccY0yCMSYhMlL3RCnXFxboxy0jurBo62Gdr8HDvLYqjeKycn4/1rmOLZxm766khcBU2/OpwIKaK4iIH/Al8K4x5r813jtdKkLl8YltduZRyqXcem5XQgJ8mLlMRw2e4sjJIt5bu48rB0dbegfVM7G3GJ4BxolICjDO9hoRSRCRubZ1rgXOB26u5bTUD0RkK7AViACesjOPUi4lNNCX287typIdR9iaqXNDe4JXVqZSVmG4f4zzHVs4TYwxVmdotISEBJOUlGR1DKUcIq+olPP+tZJBMWG8M63OvanKDRw8foqRz61i0pAonrlqQIt/vohsMMYk1LeeXvmslMVCAny584JurErOJmlvrtVxVDN6eWUqBsO9TngmUlVaDEo5gZvO6UxEsD/PLU7GFUfxqn77jhbw6foMJp8VS3SbQKvjnJEWg1JOINDPh3tGdePnPbmsSTtqdRzVDGYuS8HHWyyfna0htBiUchJTEmPpGBqgowY3tPtIHvM3HWDqOV1o1zrA6jj10mJQykkE+Hpz/5h4NmUcZ9nOWi8JUi7qP0uSCfLz4c4LulkdpUG0GJRyItcMjSYuIoh/L06mvEJHDe5gc8ZxFm8/wm3nxdEmyM/qOA2ixaCUE/Hx9uLBcT1IPpLHgk0HrI6jHODfS5JpE+jLrefGWR2lwbQYlHIyl/TvSJ+OrXlh2W5Kyirq30A5rTWpOaxOyeHukd0JCfC1Ok6DaTEo5WS8vISHJvQkI/cUH6/fb3Uc1UTGGJ79dhedQgO48ZzOVsdpFC0GpZzQyB6RJMaF89LyVAqKy6yOo5rgm22H2Zx5ggfG9SDA19vqOI2ixaCUExIRHp7Qi5z8Yuau3mN1HNVIZeUV/HtxMvHtgrlqSLTVcRpNi0EpJzW0cxvG923PnO/TyMkvtjqOaoRPkzJJzyngofE98fYSq+M0mhaDUk7szxN6UVRWwUs6BajLKCwpY+ay3QyJDWNcn/ZWx2kSLQalnFi3yGCuOyuGD3/ez56cAqvjqAaYu3oPWXnFPHpJbyqnmnE9WgxKObkHxsTj6+3FvxcnWx1F1SMrr4jXvktjQt8ODO0cbnWcJtNiUMrJtWsdwO3nxfH11kNs3H/M6jjqDGYuS6GkrIKHL+pldRS72FUMIhIuIktFJMX2tU0d65VXmb1tYZXlcSLys237T2zTgCqlarjjgm5Ehvjz1Fc79AZ7Tio1K49P1mdww9mdiYsIsjqOXewdMcwAlhtj4oHltte1OWWMGWR7XF5l+bPAC7btjwG32plHKbcU5O/DH8f1YOP+43y99ZDVcVQtnvlmF4G2GyG6OnuLYSIwz/Z8HnBFQzeUyqMyo4HPmrK9Up7mmoQYenUI4dlvd1FUWm51HFXFDyk5LNuZxV2juhHuIjfKOxN7i6G9MeYQgO1ruzrWCxCRJBFZKyKnf/m3BY4bY05f1pkJRNmZRym35e0lPHZJHzJyTzFvzV6r4yibsvIK/v7VDmLCW3HLCNe5Ud6Z+NS3gogsAzrU8tajjficWGPMQRHpCqwQka3AyVrWq3PnqYhMB6YDxMbGNuKjlXIf58ZHMKpnJC+vSOXqodG0Dfa3OpLH+yQpg+Qjebz6uyEud+uLutQ7YjDGjDXG9KvlsQA4IiIdAWxfa51dxBhz0PY1HVgFDAZygDAROV1O0cDBM+SYY4xJMMYkREaojnEAAAAPnklEQVRGNuJHVMq9PHpJb06VlvPvJbutjuLxThaV8p8lu0mMC2dCv9r+fnZN9u5KWghMtT2fCiyouYKItBERf9vzCGAEsMNUnlqxErj6TNsrparr3i6EqcO78PH6/Ww7cMLqOB7t5RWpHCss4a+X9nHZi9lqY28xPAOME5EUYJztNSKSICJzbev0BpJEZDOVRfCMMWaH7b2HgQdFJJXKYw5v2plHKY9w/5h4wgP9eGLhdj191SJp2fm8/eMerh4STb+oUKvjOFS9xxjOxBhzFBhTy/Ik4Dbb8zVA/zq2TwcS7cmglCcKbeXLQ+N7MuOLrSzcfJCJg/S8jZZkjOGJhdsJ8PHmzxNc+2K22uiVz0q5qGsSYugfFco/F+2isETnbGhJi7cfYXVKDn8Y14PIEPc7AUCLQSkX5e0lPHF5Hw6fLGLWilSr43iMUyXl/P2rHfRsH8JNLjYzW0NpMSjlwoZ2DufahGje+D6dlCN5VsfxCK9+l8aB46f428S++Hi7569Q9/yplPIgD0/oRZC/D39ZsE0PRDezvTkFvPZdGpcP7MTZXdtaHafZaDEo5eLaBvvz8IRerE3PZcGmOi8FUnYyxvDY/G34e3vx6CW9rY7TrLQYlHIDk8+KYWBMGE99vZMTp0qtjuOWFm4+yA+pOfx5Qk/atw6wOk6z0mJQyg14eQlPX9GP3IJinv12l9Vx3M7xwhL+/tUOBsaEcf0w9zzgXJUWg1Juol9UKLed15UPf97Pz+lHrY7jVp79dhfHCkv5x5X98PZynyuc66LFoJQb+cPYHsSEt+KRL7bqrbkd5Of0o3y0LoNbz42jbyf3usK5LloMSrmRVn7e/OPK/qTnFPCyXttgt1Ml5Tz8+RZiwwN5YKzrT8DTUFoMSrmZ8+IjuWpINK99l8aOg7Xd3V411PNLk9l7tJBnrupPoJ9ddxByKVoMSrmhxy7pTVigH3/872ZKyiqsjuOSNu4/xps/7OF3w2IZ3i3C6jgtSotBKTfUJsiPf07qz85DJ3l5RYrVcVxOUWk5f/5sCx1aBzDjIve7SV59tBiUclPj+rRn0pAoZq9KY3PGcavjuJT/LEkmNSuff0zqT0iAr9VxWpwWg1Ju7PHL+hIZ7M8f/7tZz1JqoDVpOcz9YQ83nB3LyJ51TWPv3rQYlHJjoa18efbqAaRm5euFbw1w4lQpf/p0M3Ftg3j04j5Wx7GMXcUgIuEislREUmxf29SyzigR2VTlUSQiV9jee0dE9lR5b5A9eZRSv3VBj0imntOZt3/cy8rkWqdlVzZ/XbCNrLxiXrhuEK38vK2OYxl7RwwzgOXGmHhgue11NcaYlcaYQcaYQcBooBBYUmWVh06/b4zZZGcepVQtHrm4N706hPCnTzeTlVdkdRynNP+XAyzYdJD7x8QzMCbM6jiWsrcYJgLzbM/nAVfUs/7VwDfGmEI7P1cp1QgBvt7MmjKY/OIy/vjpZioq9PbcVaVl5/N/X24lsUs4d4/sZnUcy9lbDO2NMYcAbF/rO1IzGfioxrKnRWSLiLwgInXOkSci00UkSUSSsrOz7UutlAeKbx/CXy7tw+qUHOasTrc6jtMoKi3nng82EuDrzUtTBrvt5DuNUe+/gIgsE5FttTwmNuaDRKQj0B9YXGXxI0Av4CwgHHi4ru2NMXOMMQnGmITIyMjGfLRSyuZ3w2K5pH9H/vXtLn5K0xvtAfztf9vZdTiP568dSIdQ976ddkPVWwzGmLHGmH61PBYAR2y/8E//4j/Tka1rgS+NMb/eLN4Yc8hUKgbeBhLt+3GUUmciIjx79QDiIoK476ONHD7h2ccbvtiYyUfrMrhrZDePPTW1NvaOmRYCU23PpwILzrDuFGrsRqpSKkLl8YltduZRStUj2N+H128cSmFJOfd8uNFjb5mxJfM4M77YyrC4cP44rofVcZyKvcXwDDBORFKAcbbXiEiCiMw9vZKIdAFigO9qbP+BiGwFtgIRwFN25lFKNUD3diH86+oBbNh3jCe/2m51nBaXlVfE9Hc3EBnszyu/G6LHFWqw63aBxpijwJhalicBt1V5vReIqmW90fZ8vlKq6S4d0ImtB07w+nfpdI8M5uYRcVZHahElZRXc/f5Gjp8q4fO7htM2uM5zXjyW59xHVin1Gw+P78We7AKe/GoHnSOCGOXm+9mNMTzyxVaS9h1j1pTBHjPxTmPp+EkpD+blJcycPIjeHVtz34e/kHw4z+pIzer5pbv5fGMmD4yN57KBnayO47S0GJTycIF+PsydmkCQvzdT31pHRq57Xn/64c/7mbUilesSYvj9GM+Zja0ptBiUUnQMbcW8WxIpLCnjxjd/Jjuv2OpIDrV0xxEem7+VkT0jeerKflSeCKnqosWglAKgV4fWvD0tkSMni7nprXWcOFVa/0YuYGVyFvd8sJH+UaHMvn4IvnoGUr30X0gp9auhndvw+o1DSc3KY6oblMP3u7O5470NxLcP5t1bhhHkr+fbNIQWg1KqmvN7RDL7+iFsP3iC699YS25BidWRmuTH1BxufzeJrhFBvH/rMEIDPW8mtqbSYlBK/caFfTvwxk0JpGblM3nOTy53q+6vtxxi2tvr6dI2iA9uG0abID+rI7kULQalVK1G9mzH2zefReaxU1z96k+kZuVbHalB3vtpL/d+tJEB0aF8csfZegFbE2gxKKXqNLx7BB/cNozCkjImvfIjP6bmWB2pTuUVhme/3cVfFmxnTK92vHfrMMICdaTQFFoMSqkzGhzbhi/vHkGH0ACmvrWO99fuwxjnmujnWEEJ095Zz6ur0piSGMtrNwz16Kk57aXFoJSqV0x4IJ/fNZwR3SN4bP427vvoF04WOccZS9sOnOCyl39gbdpR/jmpP/+c1F9vimcn/ddTSjVISIAvb918Fg+N78k32w5z8Yur2bDvmGV5SssreGl5Cle+8iNl5YZP7jibKYmxluVxJ1oMSqkG8/YS7hnVnU/vOAdj4OrX1vCX+ds4Udiyo4cdB09yxewfeX7pbi7q15Fvfn8eg2PbtGgGdybOtq+wIRISEkxSUpLVMZTyaCeLSnl+yW7e/WkvbQL9eHhCLyYNiWrW3TiHTpzi+SWVN8ILD/LjqSv6M6Ffh2b7PHcjIhuMMQn1rmdPMYjINcATQG8g0TYPQ23rTQBeBLyBucaY0xP6xAEfUznf80bgRmNMvVfTaDEo5Ty2HzzBX+ZvY+P+48SGB3LnBd24amgU/j6OO/ibkVvIuz/t5d2f9mEM3HROZ+4d3V3POmqkliqG3kAF8Drwp9qKQUS8gd1UzvCWCawHphhjdojIp8AXxpiPReQ1YLMx5tX6PleLQSnnUlFhWLbzCLNXprI58wSRIf5cMagTEwdF0bdT6ybdtK6otJw1aTl8+PN+lu/KQoCJg6J4cFwPYsIDHf9DeICGFoO9M7jttH3YmVZLBFKNMem2dT8GJorITmA0cL1tvXlUjj7qLQallHPx8hIu7NuBcX3a80NqDvPW7OOdNXt5Y/Ue4iKCOLtrOENi2zA4NoyosMDfnEpqjOFoQQkpR/JJPnyS1Sk5/JiWQ1FpBRHBftwzsjvXD4ulU1gri35Cz9ISd5SKAjKqvM4EhgFtgePGmLIqy38z/adSynWICOfFR3JefCTHC0tYtPUwS3Yc5usth/ho3f//NRDi70N4sB8VxlBcWkFhSTn5xWW/vh8T3orrEmIY2bMdw7u3dehuKVW/eotBRJYBtR3dedQYs6ABn1HbcMKcYXldOaYD0wFiY/WUNKWcXVigH9cPi+X6YbFUVBjSsvPZeuAEh08WkXWymKMFJfh6Cf6+Xvj7eBMbHkh8+2C6twumQ+sAnTPBQvUWgzFmrJ2fkQnEVHkdDRwEcoAwEfGxjRpOL68rxxxgDlQeY7Azk1KqBXl5CfHtQ4hvH2J1FNUALXEdw3ogXkTiRMQPmAwsNJVHvVcCV9vWmwo0ZASilFKqGdlVDCJypYhkAucAX4vIYtvyTiKyCMA2GrgXWAzsBD41xmy3fYuHgQdFJJXKYw5v2pNHKaWU/fQCN6WU8hANPV1Vb4mhlFKqGi0GpZRS1WgxKKWUqkaLQSmlVDVaDEoppapxybOSRCQb2NfEzSOovLjOVbl6fnD9n8HV84Pr/wyunh+s+Rk6G2Mi61vJJYvBHiKS1JDTtZyVq+cH1/8ZXD0/uP7P4Or5wbl/Bt2VpJRSqhotBqWUUtV4YjHMsTqAnVw9P7j+z+Dq+cH1fwZXzw9O/DN43DEGpZRSZ+aJIwallFJn4FHFICITRCRZRFJFZIbVeRpDRN4SkSwR2WZ1lqYQkRgRWSkiO0Vku4j83upMjSUiASKyTkQ2236Gv1mdqSlExFtEfhGRr6zO0hQisldEtorIJhFxubtpikiYiHwmIrts/z2cY3WmmjxmV5KIeAO7gXFUTh60HphijNlhabAGEpHzgXzgXWNMP6vzNJaIdAQ6GmM2ikgIsAG4wlX+/QGkckqxIGNMvoj4Aj8AvzfGrLU4WqOIyINAAtDaGHOp1XkaS0T2AgnGGJe8jkFE5gGrjTFzbXPUBBpjjludqypPGjEkAqnGmHRjTAnwMTDR4kwNZoz5Hsi1OkdTGWMOGWM22p7nUTk3h0vN8W0q5dte+toeLvWXlYhEA5cAc63O4olEpDVwPra5Z4wxJc5WCuBZxRAFZFR5nYmL/WJyFyLSBRgM/Gxtksaz7YbZBGQBS40xrvYzzAT+DFRYHcQOBlgiIhtsc8G7kq5ANvC2bXfeXBEJsjpUTZ5UDLXNLO5Sf+25AxEJBj4HHjDGnLQ6T2MZY8qNMYOonKM8UURcZreeiFwKZBljNlidxU4jjDFDgIuAe2y7WV2FDzAEeNUYMxgoAJzueKcnFUMmEFPldTRw0KIsHsm2X/5z4ANjzBdW57GHbfi/CphgcZTGGAFcbttH/zEwWkTetzZS4xljDtq+ZgFfUrmb2FVkAplVRpqfUVkUTsWTimE9EC8icbYDPpOBhRZn8hi2A7dvAjuNMc9bnacpRCRSRMJsz1sBY4Fd1qZqOGPMI8aYaGNMFyr//7/CGHODxbEaRUSCbCcvYNsFcyHgMmfqGWMOAxki0tO2aAzgdCdg+FgdoKUYY8pE5F5gMeANvGWM2W5xrAYTkY+AkUCEiGQCjxtj3rQ2VaOMAG4Ettr20QP8nzFmkYWZGqsjMM92hpsX8KkxxiVP+XRh7YEvK//OwAf40BjzrbWRGu0+4APbH6jpwDSL8/yGx5yuqpRSqmE8aVeSUkqpBtBiUEopVY0Wg1JKqWq0GJRSSlWjxaCUUqoaLQallFLVaDEopZSqRotBKaVUNf8PSkPz2rqC2OEAAAAASUVORK5CYII=\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": 46, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([ 1, -1])" | |
] | |
}, | |
"execution_count": 46, | |
"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", | |
"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": 48, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([-4, -8])" | |
] | |
}, | |
"execution_count": 48, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Write your code below and press Shift+Enter to execute\n", | |
"\n", | |
"z = np.array([2, 4])\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": 51, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([ 1, 4, 9, 16, 25])" | |
] | |
}, | |
"execution_count": 51, | |
"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, 2, 3, 4, 5])\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": 57, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"The dot product is 0\n" | |
] | |
}, | |
{ | |
"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([1, 1])\n", | |
"Plotvec2(a,b)\n", | |
"print(\"The dot product is \" + str(np.dot(a, b)))" | |
] | |
}, | |
{ | |
"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": 60, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"The dot product is 0\n" | |
] | |
}, | |
{ | |
"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, 0])\n", | |
"b = np.array([0, 1])\n", | |
"Plotvec2(a,b)\n", | |
"print(\"The dot product is \" + str(np.dot(a, b)))" | |
] | |
}, | |
{ | |
"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": 61, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"The dot product is 1\n" | |
] | |
}, | |
{ | |
"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", | |
"print(\"The dot product is \" + str(np.dot(a, b)))" | |
] | |
}, | |
{ | |
"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" | |
] | |
}, | |
{ | |
"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/PY0101EN_edx_add_bbottom\"><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 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.6.8" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment