Created
July 11, 2020 07:06
-
-
Save david-ikenna-ezekiel/ccd0ecfacd6df6f839f90c1840510cfa to your computer and use it in GitHub Desktop.
Created on Skills Network Labs
This file contains hidden or 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": null, | |
| "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": null, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [], | |
| "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": 3, | |
| "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": 4, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([0, 1, 2, 3, 4])" | |
| ] | |
| }, | |
| "execution_count": 4, | |
| "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": 5, | |
| "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": 6, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "numpy.ndarray" | |
| ] | |
| }, | |
| "execution_count": 6, | |
| "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": 7, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "dtype('int64')" | |
| ] | |
| }, | |
| "execution_count": 7, | |
| "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": 13, | |
| "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": 9, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "numpy.ndarray" | |
| ] | |
| }, | |
| "execution_count": 9, | |
| "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": 11, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "dtype('float64')" | |
| ] | |
| }, | |
| "execution_count": 11, | |
| "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": 12, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([20, 1, 2, 3, 4])" | |
| ] | |
| }, | |
| "execution_count": 12, | |
| "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": 19, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([100, 1, 50, 3, 0])" | |
| ] | |
| }, | |
| "execution_count": 19, | |
| "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": 18, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([100, 1, 50, 3, 0])" | |
| ] | |
| }, | |
| "execution_count": 18, | |
| "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": 20, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([ 1, 50, 3])" | |
| ] | |
| }, | |
| "execution_count": 20, | |
| "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": 23, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([100, 1, 250, 400, 400])" | |
| ] | |
| }, | |
| "execution_count": 23, | |
| "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\n", | |
| "\n", | |
| "c[2:4] = 250, 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": 24, | |
| "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": 31, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([100000, 100000, 100000])" | |
| ] | |
| }, | |
| "execution_count": 31, | |
| "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": 32, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([100000, 1, 100000, 100000, 400])" | |
| ] | |
| }, | |
| "execution_count": 32, | |
| "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": 33, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([0, 1, 2, 3, 4])" | |
| ] | |
| }, | |
| "execution_count": 33, | |
| "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": 28, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "5" | |
| ] | |
| }, | |
| "execution_count": 28, | |
| "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": 29, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "1" | |
| ] | |
| }, | |
| "execution_count": 29, | |
| "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": 34, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "(5,)" | |
| ] | |
| }, | |
| "execution_count": 34, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# Get the shape/size of numpy array\n", | |
| "\n", | |
| "a.shape" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 35, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "# Create a numpy array\n", | |
| "\n", | |
| "a = np.array([1, -1, 1, -1])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 37, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "0.0" | |
| ] | |
| }, | |
| "execution_count": 37, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# Get the mean of numpy array\n", | |
| "\n", | |
| "mean = a.mean()\n", | |
| "mean" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 38, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "1.0" | |
| ] | |
| }, | |
| "execution_count": 38, | |
| "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": null, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "# Create a numpy array\n", | |
| "\n", | |
| "b = np.array([-1, 2, 3, 4, 5])\n", | |
| "b" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 39, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "213.2" | |
| ] | |
| }, | |
| "execution_count": 39, | |
| "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": 40, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "3.1" | |
| ] | |
| }, | |
| "execution_count": 40, | |
| "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": 57, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([1, 0])" | |
| ] | |
| }, | |
| "execution_count": 57, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "u = np.array([1, 0])\n", | |
| "u\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Consider the numpy array <code>v</code>:" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 58, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([0, 1])" | |
| ] | |
| }, | |
| "execution_count": 58, | |
| "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": 59, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([1, 1])" | |
| ] | |
| }, | |
| "execution_count": 59, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# Numpy Array Addition\n", | |
| "\n", | |
| "z = u + v\n", | |
| "z\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| " The operation is equivalent to vector addition:" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 60, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": 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": 65, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([1, 2])" | |
| ] | |
| }, | |
| "execution_count": 65, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# Create a numpy array\n", | |
| "\n", | |
| "y = np.array([1, 2])\n", | |
| "y\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "We can multiply every element in the array by 2:" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 62, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([2, 4])" | |
| ] | |
| }, | |
| "execution_count": 62, | |
| "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": 66, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([1, 2])" | |
| ] | |
| }, | |
| "execution_count": 66, | |
| "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": 67, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([3, 2])" | |
| ] | |
| }, | |
| "execution_count": 67, | |
| "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": 68, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([3, 4])" | |
| ] | |
| }, | |
| "execution_count": 68, | |
| "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": 69, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "7" | |
| ] | |
| }, | |
| "execution_count": 69, | |
| "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": 70, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([ 1, 2, 3, -1])" | |
| ] | |
| }, | |
| "execution_count": 70, | |
| "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": 71, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([2, 3, 4, 0])" | |
| ] | |
| }, | |
| "execution_count": 71, | |
| "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": 72, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "3.141592653589793" | |
| ] | |
| }, | |
| "execution_count": 72, | |
| "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": 76, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([0. , 1.57079633, 3.14159265])" | |
| ] | |
| }, | |
| "execution_count": 76, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# Create the numpy array in radians\n", | |
| "\n", | |
| "x = np.array([0, np.pi/2 , np.pi])\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": 75, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([0.0000000e+00, 1.0000000e+00, 1.2246468e-16])" | |
| ] | |
| }, | |
| "execution_count": 75, | |
| "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": 77, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([-2., -1., 0., 1., 2.])" | |
| ] | |
| }, | |
| "execution_count": 77, | |
| "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": 78, | |
| "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": 78, | |
| "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": 94, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([-4., -3., -2., -1., 0., 1., 2., 3., 4.])" | |
| ] | |
| }, | |
| "execution_count": 94, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# Makeup a numpy array within [0, 2π] and 100 elements \n", | |
| "\n", | |
| "x = np.linspace(0, 2*np.pi, num=100)\n", | |
| "x" | |
| ] | |
| }, | |
| { | |
| "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": 105, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([ 0.7568025 , -0.14112001, -0.90929743, -0.84147098, 0. ,\n", | |
| " 0.84147098, 0.90929743, 0.14112001, -0.7568025 ])" | |
| ] | |
| }, | |
| "execution_count": 105, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# Calculate the sine of x list\n", | |
| "\n", | |
| "y = np.sin(x)\n", | |
| "y\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 106, | |
| "metadata": { | |
| "collapsed": false, | |
| "jupyter": { | |
| "outputs_hidden": false | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "[<matplotlib.lines.Line2D at 0x7f90c39db908>]" | |
| ] | |
| }, | |
| "execution_count": 106, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAD8CAYAAAB6paOMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3dd3TUd5rv+fdTpZwRCiiUhEQwQWSJYIOc3dhtgyOS3WBPJ3Wf233OzJw7917Pztm5s3u3z+md2ZnZnTt9x43d7jFgG3Cm2zi324AtASILkwWlHECgnPXdP1R41LJAElXSr8LzOqeOqn6h6uNuoad+4ft8xRiDUkqpwGWzOoBSSilraSFQSqkAp4VAKaUCnBYCpZQKcFoIlFIqwGkhUEqpAOeRQiAiL4tIg4iU3WC9iMi/iMh5ETkuIkuHrFsrImdc6573RB6llFJj56kjgn8H1t5k/YPALNejCPg3ABGxA79yrZ8HPC0i8zyUSSml1Bh4pBAYY/YATTfZZD2wxQwqAeJEJAVYDpw3xpQbY3qA7a5tlVJKTZKgSfqcNKByyOsq17KRlq8Y6Q1EpIjBowkiIyOXzZkzZ2KSKqWUnzp06NBlY0zi8OWTVQhkhGXmJsu/vdCYzcBmgNzcXFNaWuq5dEopFQBExDnS8skqBFWAY8jrdKAGCLnBcqWUUpNksm4f3QU867p7aCXQbIypBQ4Cs0QkS0RCgELXtkoppSaJR44IROR14C4gQUSqgP8OBAMYY14AdgMPAeeBDuD7rnV9IvJz4CPADrxsjDnpiUxKKaXGxiOFwBjz9CjrDfCzG6zbzWChUEopZQEdWayUUgFOC4FSSgU4LQRKKRXgJuv2UaWUAmBgwHDpSjsna1q43NbNxpWZBNv1O6mVtBAopSZMb/8A5xvaOFnTQll1M1/XtHCyppn2nv5vtokMCWJDnuMm76ImmhYCpZRHdPX2c7qulZM1zZRVt/B1TTOn6lrp6RsAIDzYzrzUGJ5Ylk5OaizzUmP4L28eZ/Pecp5clo7NNlKjATUZtBAopcattavX9e2+hbKawW/65xra6B8Y7BATExZETlosz63KJCctlvmpMWQlRGEf9se+KD+Lv9xxjD+ebeCeOclW/KcotBAopUZxpa2bk0P+6J+sbubSlY5v1idEhbIgLYb75iaTkxbD/NRY0qeEIzL6N/yHF6byDx+e4ddflGshsJAWAqUUAMYY6lq6KKtu+ZPTOzXNXd9skz4lnPmpMTyxNP2bb/pJMWG3/JnBdhs/WJ3F//X+KY5VXmORI84T/ylqnLQQKBWABgYMFU0dg9/wh1zIvdLeA4AIZCdEkjs9npy0mG/O6cdFhHg8S0Geg//v03Ns3lvOr55ZOvoOyuO0ECgVAM43tHGs8to3p3dO1bTQ2t0HQJBNmJ0czT1zkshJiyUnLYY502KIDJ2cPw/RYcE8szKDF/eUU3Glg4ypEZPyueo/aCFQys+9f7yWn712GICwYBtzU2JYvySVnNRYctJimZUcRWiQ3dKM3789i5f3XeTlLy/yd+vmW5olEGkhUMrPbd5zgezESF7YuIzshEiCvHDw1rTYMNYtSmPHwUr+/N5ZTIn0/CkodWPe9xuhlPKYY5XXOFbVzLMrM5mdHO2VReC6ovxsOnv72VYy4iRaagJ572+FUsptW0ucRITYeXxZutVRRnXbtGjunJ3IK8WX6OrtH3V75TlaCJTyU1fbe/jdsRoeXZJGTFiw1XHG5Cf52Vxu6+GdI9VWRwkoWgiU8lNvHqqiu2+ATSszrY4yZqtmTCUnLYYX95Yz4BqlrCaeFgKl/NDAgGHbfid506cwNyXG6jhjJiL8eE025Y3tfHa6weo4AcMjhUBE1orIGRE5LyLPj7D+v4jIUdejTET6RSTete6SiJxwrSv1RB6lAt2ec404r3SwadV0q6OM23cXpJAWF87mPResjhIw3C4EImIHfgU8CMwDnhaReUO3Mcb8gzFmsTFmMfDXwBfGmKYhm9ztWp/rbp7R6EUoFQi2FjtJiApl7fxpVkcZtyC7jR+uzuLgpascrrhqdZyA4IkjguXAeWNMuTGmB9gOrL/J9k8Dr3vgc8ftF+9/zcP/cx/G6LlH5b8qmzr4w5kGnl7uICTIN8/+FuQ5iAkL4sU95VZHCQie+C1JAyqHvK5yLfsWEYkA1gJvDVlsgI9F5JCIFHkgzw3NTo7mfEMbpU79lqH816v7KxDg6eUZVke5ZZGhQWxcmcmHJ+u4dLnd6jh+zxOFYKReszf6yv0I8OWw00J3GGOWMnhq6Wcikj/ih4gUiUipiJQ2NjbeUtDvLkwhKjSI7QcqR99YKR/U1dvPztJK7p+XTGpcuNVx3PJnt08n2GbjN/suWh3F73miEFQBQ+eZSwdqbrBtIcNOCxljalw/G4B3GDzV9C3GmM3GmFxjTG5iYuItBY0ICeKRRam8f6KGlq7eW3oPpbzZ7hO1NLX3sGnldKujuC0pJoxHl6TyxqFKmlxdUdXE8EQhOAjMEpEsEQlh8I/9ruEbiUgscCfw3pBlkSISff058ABQ5oFMN1SY56Crd4BdR29Uq5TyXVtLnGQnRnLHzKlWR/GIovxsunoH2FJ8yeoofs3tQmCM6QN+DnwEnAJ2GmNOishPReSnQzZ9DPjYGDP0hF8ysE9EjgEHgPeNMR+6m+lmFqbHMmdaNDsO6ukh5V/Kqps5UnGNjSsyxzQ7mC+YmRTNvXOS2FLs1Dv+JpBHbikwxuw2xsw2xswwxvzCtewFY8wLQ7b5d2NM4bD9yo0xi1yP+df3nUgiQmGegxPVzZysaZ7oj1Nq0mwtdhIebOcJH+grNB4/zs+mqb2HNw9VWR3Fb/nmvWVuenRJGiFBNnbqUYHyE80dvbx3rJpHl6QSG+4bfYXGakVWPIvSY3lpbzn92nZiQgRkIYiLCGHt/Gm8c6RaDzeVX3jjUCVdvQNs9KG+QmMlIhTlz+DSlQ4++bre6jh+KSALAQxeNG7p6uPDsjqroyjlloEBw7YSJ8sypzA/NdbqOBPiO/OTccRr24mJErCFYGX2VDLiI9h+sMLqKEq5Zd/5y1y60sGzq/zvaOC6ILuNH63O5nDFNQ45m0bfQY1LwBYCm00oyHNQUt6kIxeVT9tS7GRqZAhrc3yvr9B4PJWbTlxEML/+QttOeFrAFgKAJ5elYxPYWaoXjZVvqrrawR9O11O43GH5BPQTLSIkiE0rM/nkVD3ljW1Wx/ErAV0IkmPCuPu2JN44VEVf/4DVcZQat9f2D57afGaF/54WGurZVdMJttt4SdtOeFRAFwIY7HLY2NrN52durX+RUlbp7utnx8FK7p2bTJqP9xUaq8ToUJ5Yms6bh6q43NZtdRy/EfCF4O45SSRGh7JDLxorH/PBiTqutPf41FSUnvCjNVn09g+w5atLVkfxGwFfCILtNp5cls7nZxqpb+myOo5SY7a1xElWQiSrZyZYHWVSzUiM4r65yWwpcdLZo+OAPCHgCwHAhlwH/QNGh7Arn3GypplDzqt8b0UGNpt/9BUaj6L8bK519PLGIb3RwxO0EABZCZGsyIpnZ2klAzqEXfmAbSVOwoJtPLXMMfrGfig3cwpLMuJ4ae9FbTvhAVoIXAqXO3Be6aDk4hWroyh1U82dvbx7pIb1i9KIjfCvvkJjJSL8JD+biqYOPjqp3QHcpYXA5cGcFKLDgrQ9tfJ6bx2qorO3n01+PJJ4LO6fN43pUyP49Z5ynYfcTVoIXMKC7Ty2JI0Pyupo7tDZy5R3ut5XaElGHDlp/tlXaKzsNuGHa7I5VnmNg5d0HnJ3aCEYoiDPQU/fAO8erbY6ilIj+urCFcovt/t1X6HxeHJpOvGRIdqMzk1aCIaYnxpLTloMrx+o0ENN5ZW2FF8iPjKEB3NSrI7iFcJD7Gxamcmnpxo439BqdRyfpYVgmIK8DE7XtXKiWmcvU96l5lonn56qpyDPQViwf/cVGo9nV2USGmTjpb3aduJWaSEYZt2iVMKCbWzXi8bKy7y2vwIDPLM8w+ooXmVqVChP5abz9uFqGlp1UOit8EghEJG1InJGRM6LyPMjrL9LRJpF5Kjr8bdj3XeyxYYH89CCFH53tIaOnj6r4ygFQE/fANsPVnDvnCQc8RFWx/E6P1ydTe/AAK9o24lb4nYhEBE78CvgQWAe8LSIzBth073GmMWux/85zn0nVWFeBq3dfew+ofcnK+/wQVktl9t6/HIqSk/ISojkO/Omsa2kgvZu/QI3Xp44IlgOnDfGlBtjeoDtwPpJ2HfC5E2fQnZCpDaiU15jW4mTzKkR5M9KtDqK1yq6M5vmzl6dX+QWeKIQpAFD/5evci0bbpWIHBORD0Rk/jj3RUSKRKRUREobGye2ZbSIsCHPwcFLVznfoBNgKGudqm3h4KWrbFyRGZB9hcZqacYUcjOn8Jt9F3V+kXHyRCEY6Tdz+L2Xh4FMY8wi4H8C745j38GFxmw2xuQaY3ITEyf+W9HjS9MIsol+u1CW21riJDTIxlO56VZH8XpF+dlUXe3kgzI9rTsenigEVcDQzlfpQM3QDYwxLcaYNtfz3UCwiCSMZV+rJEWHce/cJN4+XEVPn367UNZo6erl3SPVrFuUSlxEiNVxvN59c5PJTohks7adGBdPFIKDwCwRyRKREKAQ2DV0AxGZJiLier7c9blXxrKvlQrzMrjc1sMfTtdbHUUFqLcPVdHRo32FxspmE360JpsT1c2UlDdZHcdnuF0IjDF9wM+Bj4BTwE5jzEkR+amI/NS12ZNAmYgcA/4FKDSDRtzX3Uyekj87kWkxYTqmQFnCGMPWEieLHHEsTI+zOo7PeHxpGglR2nZiPII88Sau0z27hy17YcjzfwX+daz7egu7TXgqN51//fw8Ndc6SQ2QeWGVdyi+cIULje38P08tsjqKTwkLtvPcqun84ydnOVvfyuzkaKsjeT0dWTyKDbkOjIE3SnX2MjW5thQ7iYsI5uGF2ldovDauzCQ82M6Le8qtjuITtBCMwhEfweqZCTp7mZpUtc2dfHKqnoJc7St0K6ZEhrAhN513j1brXORjoIVgDAryHFRf6+TLC5etjqICxOv7Kxgwhu+t0IvEt+qHq7PpHzD89stLVkfxeloIxuCB+cnERQTrRWM1KXr6Bnj9YCV3zU4kY6r2FbpVGVMjeDAnhVf3O2nTthM3pYVgDEKDBmcv+/hkHU3tPVbHUX7uo5N1NLZ28+yq6VZH8XlF+dm0dvWx/YC2i7kZLQRjVJDnoLff8PZhvWisJtbWEieO+HDyZ2tfIXctcsSxIiuel/ddpFfbTtyQFoIxmjMthsWOOHaWVuqIRTVhztS1cuBiExtXZGLXvkIeUZSfTU1zF7tP1FodxWtpIRiHwjwHZ+vbOFJ5zeooyk9tLblESJCNp3Ido2+sxuTu25KYmRTFr7/QthM3ooVgHB5elEpEiJ0dB/SisfK81q5e3jlczSMLU4mP1L5CnmKzCUVrsvm6toWvLlyxOo5X0kIwDlGhQTy8MIXfHa/RuxCUx71zpJp27Ss0IdYvSSUxOpRf6wCzEWkhGKeCvAw6evp5/7hXNElVfsIYw9ZiJwvTY1ns0L5CnhYaZOfPbp/OnrONnKptsTqO19FCME5LM+KYlRSlYwqUR5WUN3GuoU2nopxAG1dkEhFi58W9elQwnBaCcRIRCvIcHKm4xpm6VqvjKD+xrcRJbHgw6xalWh3Fb8VGBFOQ52DX0RpqmzutjuNVtBDcgseXphNsF3boUYHygPqWLj46WceG3HTtKzTBfnBHFga07cQwWghuQXxkCA/Mm8bbR6ro7uu3Oo7yca8fqKBvwOhpoUngiI/goQUpvLa/gpauXqvjeA0tBLeoIM/BtY5ePvlaZy9Tt663f4DX9ldw5+xEMqdGWh0nIPwkP5u2bm07MZQWglu0emYCaXHhenpIueWTr+tpaO3mWb1ldNLkpMVy+4ypvLzvks5H7qKF4BbZbMKGXAd7z12msqnD6jjKR20pvkRaXDh33ZZkdZSA8uP8bOpauvi93gYOeKgQiMhaETkjIudF5PkR1n9PRI67Hl+JyKIh6y6JyAkROSoipZ7IM1mezE1HBN4o1aMCNX7n6lspKW9i40rtKzTZ7pqdyG3J0Wzeo20nwAOFQETswK+AB4F5wNMiMm/YZheBO40xC4H/AWwetv5uY8xiY0yuu3kmU1pcOPmzEnnjUBX9OnuZGqetJU5C7DY25KZbHSXgiAg/zs/mdF0re8/phFOeOCJYDpw3xpQbY3qA7cD6oRsYY74yxlx1vSwB/OY3vzDPQW1zF3vONVodRfmQtu4+3j5czcMLU5gaFWp1nIC0blEqyTGhbNa2Ex4pBGnA0HMjVa5lN/JD4IMhrw3wsYgcEpGiG+0kIkUiUioipY2N3vNH9965yUyNDNFGdGpc3jlSTVt3Hxv1IrFlQoJsfP+OLPadv0xZdbPVcSzliUIw0snNEc+TiMjdDBaC/zZk8R3GmKUMnlr6mYjkj7SvMWazMSbXGJObmOg9E3aEBNl4Ylk6n56qp7G12+o4ygcYY9hW7CQnLYYl2lfIUs+syCAqNIiXArzthCcKQRUwtHl6OvCtS/EishB4CVhvjPmmF6wxpsb1swF4h8FTTT5lQ66DvgGdvUyNzYGLTZypb2XTykxE9CKxlWLCginMc/C747VUXwvcthOeKAQHgVkikiUiIUAhsGvoBiKSAbwNbDLGnB2yPFJEoq8/Bx4AyjyQaVLNTIoiN3MKOw7q7GVqdFtLnMSEBbFu0c3OoKrJ8oPVWQjw8r6LVkexjNuFwBjTB/wc+Ag4Bew0xpwUkZ+KyE9dm/0tMBX4X8NuE00G9onIMeAA8L4x5kN3M1mhIM9B+eV2Sp1XR99YBayGli4+LKvjqVwH4SHaV8gbpMaF88iiVLYfqKC5MzDbTnhkHIExZrcxZrYxZoYx5heuZS8YY15wPf+RMWaK6xbRb24Tdd1ptMj1mH99X1/03YUpRIUGsV0vGqub2H6wUvsKeaEfr8mmvaef1/YHZtsJHVnsIREhQaxbnMr7J2q0mZUaUZ+rr9CaWQlkJWhfIW8yLzWGNbMS+O2XFwOykaQWAg8qyHXQ1TvArqM6bF1926en6qlr6eLZVdOtjqJGUJSfTUNrd0D++9VC4EEL02OZMy1aG9GpEW0pdpIWF849c7SvkDdaPTOBuSkxvLg38NpOaCHwIBGhMM/BiepmTtYE9gAV9afON7Ty1YUrPLMiQ/sKeSkRoSg/i7P1bfzxrPcMWp0MWgg87NElaYQE2dipRwVqiG0lFYTYbRTkOUbfWFnm4YWppMSGsfmLwBpgpoXAw+IiQngwZxrvHKmmqzfwLjqpb2vv7uOtQ1U8tGAaCdpXyKsF22384I4sisuvBFTbCS0EE6Ag10FLVx8fltVZHUV5gXePVtPa3ccm7SvkEzbkOQgNsgXUtT4tBBNgZfZUMuIj2H4wMO9JVv/BGMPWYifzUmJYmjHF6jhqDGLDg/nughTePVpNZ09gHNVrIZgANptQkOegpLyJS5fbrY6jLFTqvMrpulY2rdK+Qr6kIM9Ba1cfH5TVWh1lUmghmCBPLkvHJrBTZy8LaFuLnUSHBbF+carVUdQ4LM+KJyshku0BcnpIC8EESY4J4545SbxxqIq+fp0gOxA1tnbzQVktTy5LJyIkyOo4ahxEBuckP3CxifLGNqvjTDgtBBNoQ66DxtZuPj8TWPckq0E7DlbQ2699hXzVE8vSsNuEnaX+315eC8EEuntOEonRoezQi8YBp69/gFf3V7B6ZgIzEqOsjqNuQVJ0GPfOSeLNQ1X0+vlRvRaCCRRst/HksnQ+P9NIfUuX1XHUJPrsdAO1zV16NODjCpc7uNzWzR9ON1gdZUJpIZhgG3Id9A8Y3jzk/4eX6j9sLXaSEhvGfXO1r5Avy5+VSHJMqN+PKdBCMMGyEiJZmR3PztJKBgYCq5FVoLrQ2Ma+85d5ZnkGQXb9J+bLguw2nlrm4I9nGqhr9t+jev0tnQQFeQ6cVzoouXhl9I2Vz9tW4iTYLhQs175C/mBDroMBA28e8t+jAi0Ek+DBnBSiw4L8/vBSQUdPH28eqmJtTgpJ0WFWx1EekDE1gjtmTmWHHx/Ve6QQiMhaETkjIudF5PkR1ouI/Itr/XERWTrWff1BWLCdx5ak8UFZHc0dOnuZP3vvaA2tXX08q32F/EpBXgaVTZ0Ul/vnUb3bhUBE7MCvgAeBecDTIjJv2GYPArNcjyLg38axr18oyHPQ0zfAu0errY6iJsj1vkJzpkWTm6l9hfzJA/OSiQ0P9tuRxp44IlgOnHdNRN8DbAfWD9tmPbDFDCoB4kQkZYz7+oX5qbEsSIvl9QMVATf7UaA4XHGVr2tbtK+QH7p+VP9RWR1X23usjuNxnigEacDQMlnlWjaWbcayLwAiUiQipSJS2tjomyN1N+Q5OF3XyokA6nMeSLYWO4kODeLRxSP+CisfV5DnoKffP4/qPVEIRvrqM/wr7422Gcu+gwuN2WyMyTXG5CYmJo4zondYtyiVsGCb3x5eBrLLbd3sPlHHE8vSiQzVvkL+aG5KDIsccWw/UOl3R/WeKARVwND75NKBmjFuM5Z9/UZseDAPLUjhd0dr6OjpszqO8qAdByvp6R9g48oMq6OoCVSY5+BMfSvHqvzrqN4TheAgMEtEskQkBCgEdg3bZhfwrOvuoZVAszGmdoz7+pXCvAxau/vYfUJnL/MX/QOG1/ZXcPuMqcxMirY6jppADy9MITzY7nf9w9wuBMaYPuDnwEfAKWCnMeakiPxURH7q2mw3UA6cB14E/tPN9nU3kzfLmz6F7IRIv/tFCmR/ON1A9bVONmlfIb8XHRbMwwtT2HW0hvZu/zmq98jJTGPMbgb/2A9d9sKQ5wb42Vj39WciwoY8B7/84DTnG9qYmaSdKX3d1hInyTGh3D8v2eooahIULnfwxqEq3j9Ry4Zc/xg9riOLLfD40jSCbMIbOnuZz7t4uZ09Zxt5Znmm9hUKEEszpjAzKcqvOgXob64FkqLDuHduEm8drqKnz7/7nPu7V0ucBNmEp7WvUMAQEQpyHRxyXuVcfavVcTxCC4FFCvMyuNzWwx9O11sdRd2izp5+dpZW8p2caSTFaF+hQPLY0jSC7eI3RwVaCCySPzuRaTFhOqbAh/3uWA0tXX08qxeJA05C1OA1obePVPvFUb0WAovYbcJTuel8cbaRmmudVsdR42SMYUvJJWYnR7E8K97qOMoCBXkZNLX38Okp3z+q10JgoQ25DoxBZy/zQUcrr1FW3cKmVdO1r1CAWj0zgbS4cL84qtdCYCFHfASrZyaw46D/9jn3V1uLnUSFBvHYEu0rFKjsNuHJZensPddI1dUOq+O4RQuBxQryHFRf6+TLC5etjqLGqKm9h98fr+XxpWlEaV+hgPZUbjoAb5T69lG9FgKLPTA/mbgI/+1z7o/+o6+QXiQOdOlTIlgzK5E3Sivp9+Gjei0EFgsNsvP4knQ+PllHfYv/To7tL/oHDK/ud7IyO57ZydpXSA02oqtp7mLfed89qtdC4AX+7Pbp9A8YfvvlJaujqFH88UwDVVc72bRyutVRlJe4b24y8ZEhPt0/TAuBF8iYGsGDOSm8ut9Jmx81svJHW0ucJEWH8sB87SukBoUE2Xh8SRqffF3P5bZuq+PcEi0EXqIoP5vWrj62H/DdbxX+znmlnS/ONvL08gyCta+QGqIgz0Fvv+Gdw745e5n+NnuJRY44lmfF8/K+i/T2+/5IRX/06v4KbCI8s0Inn1F/alZyNMsyp7D9oG/OSa6FwIv8JD+bmuYudp+otTqKGqar19VXaH4yydpXSI2gIM/BhcZ2DldctTrKuGkh8CJ335bEjMRIfv1FuU9+q/BnvztWw7WOXr1IrG7ouwtSiAyxs/2A790KroXAi9hsQlF+Nl/XtvDl+StWx1FDbC1xMispipXZ2ldIjSwyNIh1i1P5/fFaWrt6rY4zLloIvMyjS9JIiApl895yq6Mol2OV1zhe1cymVZnaV0jdVEFeBp29/fzumG+d3nWrEIhIvIh8IiLnXD+njLCNQ0Q+F5FTInJSRP58yLq/E5FqETnqejzkTh5/EBpk5/t3TGfP2UZO1bZYHUcBW4qdRIbYta+QGtWi9FjmTIv2uTEF7h4RPA98ZoyZBXzmej1cH/CfjTFzgZXAz0Rk3pD1/2yMWex6BMzcxTezcUUmESF2XtyjRwVWu9rew++O1/DY0jSiw4KtjqO8nIhQkOfgWFWzT32Rc7cQrAdecT1/BXh0+AbGmFpjzGHX81bgFKBfrW4iNiKYgjwHu47VUNuscxVYaWdpJT19A3qRWI3Zo4vTCLHbfGr2MncLQbIxphYG/+ADSTfbWESmA0uA/UMW/1xEjovIyyOdWhqyb5GIlIpIaWNjo5uxvd8P7sjCgLadsNDAgGHbfifLs+K5bZr2FVJjMyUyhO/kTOOdI9V09fZbHWdMRi0EIvKpiJSN8Fg/ng8SkSjgLeAvjDHXj5n+DZgBLAZqgX+80f7GmM3GmFxjTG5iYuJ4PtonOeIjeGhBCq/tr6DFx+5A8BdfnG2ksqmTTdplVI1TYZ6D5s5ePjpZZ3WUMRm1EBhj7jPG5IzweA+oF5EUANfPhpHeQ0SCGSwCrxpj3h7y3vXGmH5jzADwIrDcE/9R/qJoTTZt3dp2wipbS5wkRofynfnTrI6ifMyq7Kk44sN95vSQu6eGdgHPuZ4/B7w3fAMZvN/uN8ApY8w/DVuXMuTlY0CZm3n8yoL0WFZlT+XlfZf8YoJsX1LZ1MHnZxp4Os9BSJDeZa3Gx2YTNixz8NWFK1Rc8f7Zy9z9Df8lcL+InAPud71GRFJF5PodQHcAm4B7RrhN9O9F5ISIHAfuBv7SzTx+p+jObOpauvj98RqrowSUbfud2ER4WvsKqVv0ZG46Nhm84cDbuTXPnjHmCnDvCMtrgIdcz/cBI47CMcZscufzA8FdsxO5LTmazXvKeWxJmg5omgRdvf3sPFjJ/XOTSYkNtzqO8lEpseHcdVsSbxyq5C/um0WQF3es9d5kChi8L7TOfvsAABNBSURBVPlHa7I4XdfKnnO+OwOSL3n/eC1XO3p5dpVeJFbuKchzUN/SzRdnvftORy0EPmD94jSSY0J1gNkk2VLiZEZiJKtmTLU6ivJx98xJIiEq1OvnJNdC4ANCgmx8/44s9p2/TFl1s9Vx/Nrxqmscq7zGppXaV0i5L9hu44llafzhdAMNrd47J7kWAh/x9PIMIkPsvKjN6CbU1mIn4cF2Hl+WbnUU5ScKch30DxjeOuS9s5dpIfARseHBPL08g98fr6X6mradmAjXOnrYdayGR5ekEaN9hZSHZCdGsTwrnh1ePHuZFgIf8v3VWQC8vO+ixUn80xulVXT3DehIYuVxhXkOLl3pYP/FJqujjEgLgQ9JiwvnkYUpbD9QQXOntp3wpOt9hXIzpzAvNcbqOMrPPJiTQnRYkNeONNZC4GN+nJ9Ne08/r+3XthOetOdcI84rHWzSW0bVBAgPsbN+cSq7T9R65Zc4LQQ+Zn5qLKtnJvDbLy/S3ecbnQ19wbYSJwlRIazN0b5CamIU5mXQ3TfArqPed9FYC4EPKsrPpqG1m11Hte2EJ1Q2dfDZ6QYK8zIIDbJbHUf5qZy0WOanxnjlmAItBD5ozawE5kyL5sW95V57F4Ivee1ABQLaV0hNuMI8BydrWrxuPJAWAh8kIhTlZ3O2vo0/nvHuoeverqu3nx0HK7lvbjJpcdpXSE2sdYvTCA2ysd3L5jTWQuCjHlmUSkpsGJu17YRbPiirpam9Ry8Sq0kRGx7MQwtSeO9oDZ093nONTwuBjwq22/jBHVkUl1/hRJV3HWb6kq3FTrITIrljRoLVUVSAKMhz0NrVxwdltVZH+YYWAh9WuNxBdGgQv95zweooPqmsupnDFdf43spMbDbtK6Qmx4qseKZPjfCqi8ZaCHxYdFgwz6zIYPeJWiqbvH8WJG+zrcRJWLCNJ7WvkJpEIkJBXgYHLjZR3thmdRxAC4HP+/4dWdhE+I22nRiX5o5e3j1azaOL04gN175CanI9sSwNu03Y4SWzl2kh8HHTYsNYtziVHQcrudbRY3Ucn/Hm4Sq6egf0IrGyRFJ0GPfMSeKtQ9X09ls/H7lbhUBE4kXkExE55/o55QbbXXLNTXxURErHu7+6uaL8bDp7+3lV206MycCAYVuJk6UZccxPjbU6jgpQhXkOLrd184fTDVZHcfuI4HngM2PMLOAz1+sbudsYs9gYk3uL+6sbmDMthjtnJ/LbLy/R1es9t6R5qy8vXObi5XaeXTXd6igqgN05O5HkmFCvaETnbiFYD7ziev4K8Ogk769civKzudzWzbtHvK+PibfZUuxkamQIDy7QvkLKOkF2G08tc/DHMw3UNls7x4i7hSDZGFML4PqZdIPtDPCxiBwSkaJb2B8RKRKRUhEpbWzU0bTD3T5jKvNTY3hxbzkDA9p24kaqr3Xy2al6CvIc2ldIWW5DroMBA2+WVlmaY9RCICKfikjZCI/14/icO4wxS4EHgZ+JSP54gxpjNhtjco0xuYmJiePd3e9dbztxobHdK845eqvX9jsBeEb7CikvkDE1gttnTGXnoUpLv8CNWgiMMfcZY3JGeLwH1ItICoDr54h/gYwxNa6fDcA7wHLXqjHtr8bmoQUppMWFs1nnNR5Rd99gX6F75iSTPiXC6jhKAYMjjSubOikuv2JZBndPDe0CnnM9fw54b/gGIhIpItHXnwMPAGVj3V+NXbDdxg9WZ3HgYhNHK69ZHcfrfFhWx+U27SukvMt35k8jNjzY0pHG7haCXwL3i8g54H7Xa0QkVUR2u7ZJBvaJyDHgAPC+MebDm+2vbl1BnoPosCA2a9uJb9la7GT61AjWzNS+Qsp7hAXbeWxJGh+V1XG13ZqxQG4VAmPMFWPMvcaYWa6fTa7lNcaYh1zPy40xi1yP+caYX4y2v7p1UaFBbFyZyYdldTivtFsdx2t8XdNCqfMqG7WvkPJCBXkOevoHeMeiu/50ZLEf+v7t07HbtO3EUFtdfYWeWuawOopS3zI3JYZF6bHsOFhpyWRTWgj8UFJMGI8uTmNnaSVNFh1qepPmzl7ePVLNukWpxEZoXyHlnQryMjhT38oxC9rKayHwU0X52XT1DrCtxGl1FMu9fbiKzt5+HUmsvNoji1IID7azw4LZy7QQ+KlZydHcMyeJV74K7LYTxhi2ljhZ7IgjJ037CinvFR0WzHcXprDraA3t3X2T+tlaCPzYj9dkc6W9h7cOWztq0UpfXbhCeWM7z+oto8oHFOY5aO/p5/3jkzt7mRYCP7YyO56F6bG8tPdiwLad2FJ8ifjIEB5akGJ1FKVGtSxzCjMSIyd9ngItBH7setuJi5fb+eRUvdVxJl1tcyeffF3PhlwHYcHaV0h5PxGhMC+DQ86rnKtvnbTP1ULg59bOn0b6lHBe3BN4bSde21+BAb6nfYWUD3lsaRrBdpnU9tRaCPxckN3Gj1ZnUeq8yiHnVavjTJqevgFeP1DJPbcl4YjXvkLKdyREhXLf3GTePlJNd9/k3OihhSAAbMhzEBseHFBtJz48Wcfltm426kVi5YMK8hw0tffw6deT04dTC0EAiAgJYtPKTD7+up6LlwOj7cS2YicZ8RHcOUtblivfs2ZWIqmxYZN20VgLQYB47vbpBNttvBQALapP17Vw4FITG1dmaF8h5ZPsNuGpXAd7zzVSdbVjwj9PC0GASIwO5Ymlabx5qIrLbd1Wx5lQW4udhAZpXyHl257KTQfgjUmYvUwLQQD54epsuvsG2Frsv20nWrp6eedINY8sSmVKZIjVcZS6ZelTIlg9M4E3Sivpn+BxQFoIAsjMpCjum5vMluJLdPb4Z9uJdw5X09HTryOJlV8ozMugprmLvecmdp52LQQBpig/m6sdvbx5yLrZkCbK9b5Ci9JjWZgeZ3Ucpdx237wk4iND2DnBF421EASYvOlTWOyI46V9Fyf8cHOyFZdf4XxDG5u0y6jyE6FBdh5fksYnX9dP6LU9LQQBRkT4SX42zisdfHyyzuo4HrW12ElcRDAPL9S+Qsp/FOQ56O03vHN44mYvc6sQiEi8iHwiIudcP6eMsM1tInJ0yKNFRP7Cte7vRKR6yLqH3MmjxuaB+dPInBrBr/eUWzIb0kSoa+7i46/rKdC+QsrPzEqOZmlGHNsPVkzYv1d3jwieBz4zxswCPnO9/hPGmDPGmMXGmMXAMqADeGfIJv98fb0xZvfw/ZXn2W3Cj1ZncbTyGqV+0nbitQMVDBjD91boRWLlfwrzMrjQ2D5hbWLcLQTrgVdcz18BHh1l+3uBC8YY/71/0Uc8uczBlIhgfv2F7w8w6+0f4PUDFdw1O5GMqdpXSPmf7y5MITLEPmGN6NwtBMnGmFoA18+kUbYvBF4ftuznInJcRF4e6dSSmhjhIXY2rZrOp6fqudDYZnUct3x0so7G1m426S2jyk9FhgaxbnEqvz9eS2tXr8fff9RCICKfikjZCI/14/kgEQkB1gFvDFn8b8AMYDFQC/zjTfYvEpFSESltbJzYe2oDxXOrMgkN8v22E1uLnaRPCefO2aN9D1HKd23IddDZ28+X5y97/L1HLQTGmPuMMTkjPN4D6kUkBcD182at8h4EDhtjvpkhxRhTb4zpN8YMAC8Cy2+SY7MxJtcYk5uYqI3EPGFqVChPLkvnrcPVNLb6ZtuJM3Wt7L/YxMaVmdi1r5DyY4sdcXz+V3exNsfzd8W5e2poF/Cc6/lzwHs32fZphp0Wul5EXB4DytzMo8bpR2uy6e0fYEvxJauj3JJtJU5CgmxsyNW+Qsq/iQhZCZET8t7uFoJfAveLyDngftdrRCRVRL65A0hEIlzr3x62/9+LyAkROQ7cDfylm3nUOGUlRPLAvGS2ljjp6OmzOs64tHb18vbhKh5emEK89hVS6pYFubOzMeYKg3cCDV9eAzw05HUHMHWE7Ta58/nKM4ryZ/DRyXp2Hqzkz+7IsjrOmL17pJr2nn42rdSLxEq5Q0cWK5ZlTmFZ5hR+8+VF+voHrI4zJsYYthQ7WZAWy2KH9hVSyh1aCBQw2IyusqmTD32k7cT+i02ca2hj08pMRPQisVLu0EKgALh/bjJZCZFs9pG2E1tLnMSGB/PIolSroyjl87QQKABsNuFHa7I4XtXM/otNVse5qYorHXxUVsdTy9IJD9G+Qkq5y62Lxcq/PLE0nX/6+Cyb95SzMvtb1/Yt0dDSRVlNM2XVLZx0/ay+1ondJmzUi8RKeYQWAvWNsGA7z90+nX/65Czn6luZlRw9aZ9tjKHqaidl1c2U1TRzsqaFsuqWP+nBnpUQyZKMODauzGTNrASmT9A91UoFGi0E6k9sXJnJ//rjeV7cW87fP7loQj6jf8BQ3tjm+mM/+Ef/ZE0zLV2D4xjsNmFWUhR3zk5kfmoMOWmxzE2JJjoseELyKBXotBCoPxEfGcKGXAfbD1TyVw/cRlJMmFvv193Xz7n6tm9O65ysaeZUbSudvYNzJocE2Zg7LZqHF6UO/tFPjeW2adE6p4BSk0gLgfqWH67OYluJk3//6hL/de2cMe/X0dPHqdpW1x/9wW/6Z+tb6e0fvAspKjSIeSkxFC53kJMay/y0GGYkRhFs13sWlLKSFgL1LZlTI1mbM41tJU7+090ziQr99q9Jc0cvJ2ubOVnd8s05/fLGNq5PgzwlIpictFh+uDr7m9M7mfER2LQxnFJeRwuBGtGP12Sz+0QdOw5W8siilMHz+NWu0zu1zVQ2dX6zbUpsGPNTY/jugpRv/uinxIbpQC+lfIT4wuCh4XJzc01paanVMfzehheKKXU2ffMtH2D61Ajmu07rzE+NZX5qDAlRodaFVEqNmYgcMsbkDl+uRwTqhv73h+exrcTJ7GnRzE+NYV5qDDF6545SfkcLgbqhBemx/N9PLrQ6hlJqguntGkopFeC0ECilVIDTQqCUUgFOC4FSSgU4LQRKKRXg3CoEIvKUiJwUkQER+da9qUO2WysiZ0TkvIg8P2R5vIh8IiLnXD+nuJNHKaXU+Ll7RFAGPA7sudEGImIHfgU8CMwDnhaRea7VzwOfGWNmAZ+5XiullJpEbhUCY8wpY8yZUTZbDpw3xpQbY3qA7cB617r1wCuu568Aj7qTRyml1PhNxoCyNKByyOsqYIXrebIxphbAGFMrIkk3ehMRKQKKXC/bRGS0AnQjCcDlW9x3Immu8dFc46O5xsdbc4F72Uac1m/UQiAinwLTRlj1N8aY98bwwSN1Hht3gyNjzGZg83j3+1YYkdKRem1YTXONj+YaH801Pt6aCyYm26iFwBhzn5ufUQU4hrxOB2pcz+tFJMV1NJACNLj5WUoppcZpMm4fPQjMEpEsEQkBCoFdrnW7gOdcz58DxnKEoZRSyoPcvX30MRGpAlYB74vIR67lqSKyG8AY0wf8HPgIOAXsNMacdL3FL4H7ReQccL/r9URz+/TSBNFc46O5xkdzjY+35oIJyOaT8xEopZTyHB1ZrJRSAU4LgVJKBbiALgQi8lciYkQkweosACLyP0TkuIgcFZGPRSTV6kwAIvIPInLale0dEYmzOhOMvcXJJOYZsZWKlUTkZRFpEJEyq7MMJSIOEflcRE65/j/8c6szAYhImIgcEJFjrlz/h9WZhhIRu4gcEZHfe/J9A7YQiIiDwQvUFVZnGeIfjDELjTGLgd8Df2t1IJdPgBxjzELgLPDXFue5btQWJ5NllFYqVvp3YK3VIUbQB/xnY8xcYCXwMy/536sbuMcYswhYDKwVkZUWZxrqzxm86cajArYQAP8M/FduYXDbRDHGtAx5GYmXZDPGfOy6+wughMGxIJYbY4uTyXKzViqWMcbsAZqszjGcMabWGHPY9byVwT9uadamAjOozfUy2PXwin+HIpIOfBd4ydPvHZCFQETWAdXGmGNWZxlORH4hIpXA9/CeI4KhfgB8YHUILzRSKxXL/7D5AhGZDiwB9lubZJDr9MtRBge4fmKM8YpcwP/L4JfXAU+/sd9OXn+z1hjA/wY8MLmJBo3WssMY8zfA34jIXzM4/uK/e0Mu1zZ/w+Ah/auTkWmsubyER1qpBBoRiQLeAv5i2BGxZYwx/cBi17Wwd0Qkxxhj6TUWEXkYaDDGHBKRuzz9/n5bCG7UGkNEFgBZwDERgcHTHIdFZLkxps6qXCN4DXifSSoEo+USkeeAh4F7zSQOPvFAi5PJcrNWKmoEIhLMYBF41RjzttV5hjPGXBORPzJ4jcXqi+13AOtE5CEgDIgRkW3GmI2eePOAOzVkjDlhjEkyxkw3xkxn8B/w0skoAqMRkVlDXq4DTluVZSgRWQv8N2CdMabD6jxe6matVNQwMvgt7DfAKWPMP1md5zoRSbx+V5yIhAP34QX/Do0xf22MSXf9zSoE/uCpIgABWAi83C9FpExEjjN46sorbqkD/hWIBj5x3dr6gtWB4MYtTqwwSisVy4jI60AxcJuIVInID63O5HIHsAm4x/U7ddT1bddqKcDnrn+DBxm8RuDRWzW9kbaYUEqpAKdHBEopFeC0ECilVIDTQqCUUgFOC4FSSgU4LQRKKRXgtBAopVSA00KglFIB7v8H30ehN8PCrf0AAAAASUVORK5CYII=\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": 108, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([ 1, -1])" | |
| ] | |
| }, | |
| "execution_count": 108, | |
| "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": 110, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([-4, -8])" | |
| ] | |
| }, | |
| "execution_count": 110, | |
| "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": 112, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([1, 0, 3, 0, 5])" | |
| ] | |
| }, | |
| "execution_count": 112, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# Write your code below and press Shift+Enter to execute\n", | |
| "u = np.array([1, 2, 3, 4, 5])\n", | |
| "v = np.array([1, 0, 1, 0, 1])\n", | |
| "u*v" | |
| ] | |
| }, | |
| { | |
| "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": 114, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "the product dot 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", | |
| "\n", | |
| "a = np.array([-1, 1])\n", | |
| "b = np.array([1, 1])\n", | |
| "Plotvec2(a, b)\n", | |
| "print('the product dot is', 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": 116, | |
| "metadata": {}, | |
| "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": [ | |
| "# 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)" | |
| ] | |
| }, | |
| { | |
| "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": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "# Write your code below and press Shift+Enter to execute\n" | |
| ] | |
| }, | |
| { | |
| "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/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.10" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 4 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment