Skip to content

Instantly share code, notes, and snippets.

@Georjay
Created July 8, 2019 12:41

Revisions

  1. Georjay created this gist Jul 8, 2019.
    2,296 changes: 2,296 additions & 0 deletions PY0101EN-5-1-Numpy1D.ipynb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,2296 @@
    {
    "cells": [
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "<div class=\"alert alert-block alert-info\" style=\"margin-top: 20px\">\n",
    " <a href=\"https://cocl.us/topNotebooksPython101Coursera\">\n",
    " <img src=\"https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/PY0101EN/Ad/TopAd.png\" width=\"750\" align=\"center\">\n",
    " </a>\n",
    "</div>"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "<a href=\"https://cognitiveclass.ai/\">\n",
    " <img src=\"https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/PY0101EN/Ad/CCLog.png\" width=\"200\" align=\"center\">\n",
    "</a>"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "<h1>1D <code>Numpy</code> in Python</h1>"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "<p><strong>Welcome!</strong> This notebook will teach you about using <code>Numpy</code> in the Python Programming Language. By the end of this lab, you'll know what <code>Numpy</code> is and the <code>Numpy</code> operations.</p>"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "<h2>Table of Contents</h2>\n",
    "<div class=\"alert alert-block alert-info\" style=\"margin-top: 20px\">\n",
    " <ul>\n",
    " <li><a href=\"pre\">Preparation</a></li>\n",
    " <li>\n",
    " <a href=\"numpy\">What is Numpy?</a>\n",
    " <ul>\n",
    " <li><a href=\"type\">Type</a></li>\n",
    " <li><a href=\"val\">Assign Value</a></li>\n",
    " <li><a href=\"slice\">Slicing</a></li>\n",
    " <li><a href=\"list\">Assign Value with List</a></li>\n",
    " <li><a href=\"other\">Other Attributes</a></li>\n",
    " </ul>\n",
    " </li>\n",
    " <li>\n",
    " <a href=\"op\">Numpy Array Operations</a>\n",
    " <ul>\n",
    " <li><a href=\"add\">Array Addition</a></li>\n",
    " <li><a href=\"multi\">Array Multiplication</a></li>\n",
    " <li><a href=\"prod\">Product of Two Numpy Arrays</a></li>\n",
    " <li><a href=\"dot\">Dot Product</a></li>\n",
    " <li><a href=\"cons\">Adding Constant to a Numpy Array</a></li>\n",
    " </ul>\n",
    " </li>\n",
    " <li><a href=\"math\">Mathematical Functions</a></li>\n",
    " <li><a href=\"lin\">Linspace</a></li>\n",
    " </ul>\n",
    " <p>\n",
    " Estimated time needed: <strong>30 min</strong>\n",
    " </p>\n",
    "</div>\n",
    "\n",
    "<hr>"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "<h2 id=\"pre\">Preparation</h2>"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 1,
    "metadata": {},
    "outputs": [],
    "source": [
    "# Import the libraries\n",
    "\n",
    "import time \n",
    "import sys\n",
    "import numpy as np \n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline "
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 2,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [],
    "source": [
    "# Plotting functions\n",
    "\n",
    "def Plotvec1(u, z, v):\n",
    " \n",
    " ax = plt.axes()\n",
    " ax.arrow(0, 0, *u, head_width=0.05, color='r', head_length=0.1)\n",
    " plt.text(*(u + 0.1), 'u')\n",
    " \n",
    " ax.arrow(0, 0, *v, head_width=0.05, color='b', head_length=0.1)\n",
    " plt.text(*(v + 0.1), 'v')\n",
    " ax.arrow(0, 0, *z, head_width=0.05, head_length=0.1)\n",
    " plt.text(*(z + 0.1), 'z')\n",
    " plt.ylim(-2, 2)\n",
    " plt.xlim(-2, 2)\n",
    "\n",
    "def Plotvec2(a,b):\n",
    " ax = plt.axes()\n",
    " ax.arrow(0, 0, *a, head_width=0.05, color ='r', head_length=0.1)\n",
    " plt.text(*(a + 0.1), 'a')\n",
    " ax.arrow(0, 0, *b, head_width=0.05, color ='b', head_length=0.1)\n",
    " plt.text(*(b + 0.1), 'b')\n",
    " plt.ylim(-2, 2)\n",
    " plt.xlim(-2, 2)"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "Create a Python List as follows:"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 3,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [],
    "source": [
    "# Create a python list\n",
    "\n",
    "a = [\"0\", 1, \"two\", \"3\", 4]"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "We can access the data via an index:"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "<img src=\"https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/PY0101EN/Chapter%205/Images/NumOneList.png\" width=\"660\" />"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "We can access each element using a square bracket as follows: "
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 4,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [
    {
    "name": "stdout",
    "output_type": "stream",
    "text": [
    "a[0]: 0\n",
    "a[1]: 1\n",
    "a[2]: two\n",
    "a[3]: 3\n",
    "a[4]: 4\n"
    ]
    }
    ],
    "source": [
    "# Print each element\n",
    "\n",
    "print(\"a[0]:\", a[0])\n",
    "print(\"a[1]:\", a[1])\n",
    "print(\"a[2]:\", a[2])\n",
    "print(\"a[3]:\", a[3])\n",
    "print(\"a[4]:\", a[4])"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "<hr>"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "<h2 id=\"numpy\">What is Numpy?</h2>"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "A numpy array is similar to a list. It's usually fixed in size and each element is of the same type. We can cast a list to a numpy array by first importing numpy: "
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 6,
    "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": 7,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": 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,
    "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": 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 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,
    "jupyter": {
    "outputs_hidden": 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": null,
    "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": null,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [],
    "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": null,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [],
    "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": 11,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [
    {
    "data": {
    "text/plain": [
    "array([20, 1, 2, 3, 4])"
    ]
    },
    "execution_count": 11,
    "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": 12,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [
    {
    "data": {
    "text/plain": [
    "array([100, 1, 2, 3, 4])"
    ]
    },
    "execution_count": 12,
    "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": 13,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [
    {
    "data": {
    "text/plain": [
    "array([100, 1, 2, 3, 0])"
    ]
    },
    "execution_count": 13,
    "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": 14,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [
    {
    "data": {
    "text/plain": [
    "array([1, 2, 3])"
    ]
    },
    "execution_count": 14,
    "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": 16,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [
    {
    "data": {
    "text/plain": [
    "array([100, 1, 2, 300, 400])"
    ]
    },
    "execution_count": 16,
    "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": 17,
    "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": 18,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [
    {
    "data": {
    "text/plain": [
    "array([100, 2, 300])"
    ]
    },
    "execution_count": 18,
    "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": 19,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [
    {
    "data": {
    "text/plain": [
    "array([100000, 1, 100000, 100000, 400])"
    ]
    },
    "execution_count": 19,
    "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": 20,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [
    {
    "data": {
    "text/plain": [
    "array([0, 1, 2, 3, 4])"
    ]
    },
    "execution_count": 20,
    "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": 21,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [
    {
    "data": {
    "text/plain": [
    "5"
    ]
    },
    "execution_count": 21,
    "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": 22,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [
    {
    "data": {
    "text/plain": [
    "1"
    ]
    },
    "execution_count": 22,
    "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": 24,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [
    {
    "data": {
    "text/plain": [
    "(5,)"
    ]
    },
    "execution_count": 24,
    "metadata": {},
    "output_type": "execute_result"
    }
    ],
    "source": [
    "# Get the shape/size of numpy array\n",
    "\n",
    "a.shape"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 25,
    "metadata": {},
    "outputs": [],
    "source": [
    "# Create a numpy array\n",
    "\n",
    "a = np.array([1, -1, 1, -1])"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 27,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [
    {
    "data": {
    "text/plain": [
    "0.0"
    ]
    },
    "execution_count": 27,
    "metadata": {},
    "output_type": "execute_result"
    }
    ],
    "source": [
    "# Get the mean of numpy array\n",
    "\n",
    "mean = a.mean()\n",
    "mean"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": null,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [],
    "source": [
    "# Get the standard deviation of numpy array\n",
    "\n",
    "standard_deviation=a.std()\n",
    "standard_deviation"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 28,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [
    {
    "data": {
    "text/plain": [
    "array([-1, 2, 3, 4, 5])"
    ]
    },
    "execution_count": 28,
    "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": 29,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [
    {
    "data": {
    "text/plain": [
    "5"
    ]
    },
    "execution_count": 29,
    "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": 30,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [
    {
    "data": {
    "text/plain": [
    "-1"
    ]
    },
    "execution_count": 30,
    "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": 31,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [
    {
    "data": {
    "text/plain": [
    "array([1, 0])"
    ]
    },
    "execution_count": 31,
    "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": 32,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [
    {
    "data": {
    "text/plain": [
    "array([0, 1])"
    ]
    },
    "execution_count": 32,
    "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": 33,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [
    {
    "data": {
    "text/plain": [
    "array([1, 1])"
    ]
    },
    "execution_count": 33,
    "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": 36,
    "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": 37,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [
    {
    "data": {
    "text/plain": [
    "array([1, 2])"
    ]
    },
    "execution_count": 37,
    "metadata": {},
    "output_type": "execute_result"
    }
    ],
    "source": [
    "# Create a numpy array\n",
    "\n",
    "y = np.array([1, 2])\n",
    "y"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "We can multiply every element in the array by 2:"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 38,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [
    {
    "data": {
    "text/plain": [
    "array([2, 4])"
    ]
    },
    "execution_count": 38,
    "metadata": {},
    "output_type": "execute_result"
    }
    ],
    "source": [
    "# Numpy Array Multiplication\n",
    "\n",
    "z = 2 * y\n",
    "z"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    " This is equivalent to multiplying a vector by a scaler: "
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "<h3 id=\"prod\">Product of Two Numpy Arrays</h3>"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "Consider the following array <code>u</code>:"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 39,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [
    {
    "data": {
    "text/plain": [
    "array([1, 2])"
    ]
    },
    "execution_count": 39,
    "metadata": {},
    "output_type": "execute_result"
    }
    ],
    "source": [
    "# Create a numpy array\n",
    "\n",
    "u = np.array([1, 2])\n",
    "u"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "Consider the following array <code>v</code>:"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 40,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [
    {
    "data": {
    "text/plain": [
    "array([3, 2])"
    ]
    },
    "execution_count": 40,
    "metadata": {},
    "output_type": "execute_result"
    }
    ],
    "source": [
    "# Create a numpy array\n",
    "\n",
    "v = np.array([3, 2])\n",
    "v"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    " The product of the two numpy arrays <code>u</code> and <code>v</code> is given by:"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 41,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [
    {
    "data": {
    "text/plain": [
    "array([3, 4])"
    ]
    },
    "execution_count": 41,
    "metadata": {},
    "output_type": "execute_result"
    }
    ],
    "source": [
    "# Calculate the production of two numpy arrays\n",
    "\n",
    "z = u * v\n",
    "z"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "<h3 id=\"dot\">Dot Product</h3>"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "The dot product of the two numpy arrays <code>u</code> and <code>v</code> is given by:"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 42,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [
    {
    "data": {
    "text/plain": [
    "7"
    ]
    },
    "execution_count": 42,
    "metadata": {},
    "output_type": "execute_result"
    }
    ],
    "source": [
    "# Calculate the dot product\n",
    "\n",
    "np.dot(u, v)"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "<h3 id=\"cons\">Adding Constant to a Numpy Array</h3>"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "Consider the following array: "
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 43,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [
    {
    "data": {
    "text/plain": [
    "array([ 1, 2, 3, -1])"
    ]
    },
    "execution_count": 43,
    "metadata": {},
    "output_type": "execute_result"
    }
    ],
    "source": [
    "# Create a constant to numpy array\n",
    "\n",
    "u = np.array([1, 2, 3, -1]) \n",
    "u"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "Adding the constant 1 to each element in the array:"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 44,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [
    {
    "data": {
    "text/plain": [
    "array([2, 3, 4, 0])"
    ]
    },
    "execution_count": 44,
    "metadata": {},
    "output_type": "execute_result"
    }
    ],
    "source": [
    "# Add the constant to array\n",
    "\n",
    "u + 1"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    " The process is summarised in the following animation:"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "<img src=\"https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/PY0101EN/Chapter%205/Images/NumOneAdd.gif\" width=\"500\" />"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "<hr>"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    "<h2 id=\"math\">Mathematical Functions</h2>"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
    " We can access the value of pie in numpy as follows :"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 46,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [
    {
    "data": {
    "text/plain": [
    "3.141592653589793"
    ]
    },
    "execution_count": 46,
    "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": 50,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": 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": 52,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [
    {
    "data": {
    "text/plain": [
    "array([0.0000000e+00, 1.0000000e+00, 1.2246468e-16])"
    ]
    },
    "execution_count": 52,
    "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": 53,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [
    {
    "data": {
    "text/plain": [
    "array([-2., -1., 0., 1., 2.])"
    ]
    },
    "execution_count": 53,
    "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": 54,
    "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": 54,
    "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": 58,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [
    {
    "data": {
    "text/plain": [
    "array([0. , 0.06346652, 0.12693304, 0.19039955, 0.25386607,\n",
    " 0.31733259, 0.38079911, 0.44426563, 0.50773215, 0.57119866,\n",
    " 0.63466518, 0.6981317 , 0.76159822, 0.82506474, 0.88853126,\n",
    " 0.95199777, 1.01546429, 1.07893081, 1.14239733, 1.20586385,\n",
    " 1.26933037, 1.33279688, 1.3962634 , 1.45972992, 1.52319644,\n",
    " 1.58666296, 1.65012947, 1.71359599, 1.77706251, 1.84052903,\n",
    " 1.90399555, 1.96746207, 2.03092858, 2.0943951 , 2.15786162,\n",
    " 2.22132814, 2.28479466, 2.34826118, 2.41172769, 2.47519421,\n",
    " 2.53866073, 2.60212725, 2.66559377, 2.72906028, 2.7925268 ,\n",
    " 2.85599332, 2.91945984, 2.98292636, 3.04639288, 3.10985939,\n",
    " 3.17332591, 3.23679243, 3.30025895, 3.36372547, 3.42719199,\n",
    " 3.4906585 , 3.55412502, 3.61759154, 3.68105806, 3.74452458,\n",
    " 3.8079911 , 3.87145761, 3.93492413, 3.99839065, 4.06185717,\n",
    " 4.12532369, 4.1887902 , 4.25225672, 4.31572324, 4.37918976,\n",
    " 4.44265628, 4.5061228 , 4.56958931, 4.63305583, 4.69652235,\n",
    " 4.75998887, 4.82345539, 4.88692191, 4.95038842, 5.01385494,\n",
    " 5.07732146, 5.14078798, 5.2042545 , 5.26772102, 5.33118753,\n",
    " 5.39465405, 5.45812057, 5.52158709, 5.58505361, 5.64852012,\n",
    " 5.71198664, 5.77545316, 5.83891968, 5.9023862 , 5.96585272,\n",
    " 6.02931923, 6.09278575, 6.15625227, 6.21971879, 6.28318531])"
    ]
    },
    "execution_count": 58,
    "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": 60,
    "metadata": {},
    "outputs": [
    {
    "data": {
    "text/plain": [
    "array([ 0.00000000e+00, 6.34239197e-02, 1.26592454e-01, 1.89251244e-01,\n",
    " 2.51147987e-01, 3.12033446e-01, 3.71662456e-01, 4.29794912e-01,\n",
    " 4.86196736e-01, 5.40640817e-01, 5.92907929e-01, 6.42787610e-01,\n",
    " 6.90079011e-01, 7.34591709e-01, 7.76146464e-01, 8.14575952e-01,\n",
    " 8.49725430e-01, 8.81453363e-01, 9.09631995e-01, 9.34147860e-01,\n",
    " 9.54902241e-01, 9.71811568e-01, 9.84807753e-01, 9.93838464e-01,\n",
    " 9.98867339e-01, 9.99874128e-01, 9.96854776e-01, 9.89821442e-01,\n",
    " 9.78802446e-01, 9.63842159e-01, 9.45000819e-01, 9.22354294e-01,\n",
    " 8.95993774e-01, 8.66025404e-01, 8.32569855e-01, 7.95761841e-01,\n",
    " 7.55749574e-01, 7.12694171e-01, 6.66769001e-01, 6.18158986e-01,\n",
    " 5.67059864e-01, 5.13677392e-01, 4.58226522e-01, 4.00930535e-01,\n",
    " 3.42020143e-01, 2.81732557e-01, 2.20310533e-01, 1.58001396e-01,\n",
    " 9.50560433e-02, 3.17279335e-02, -3.17279335e-02, -9.50560433e-02,\n",
    " -1.58001396e-01, -2.20310533e-01, -2.81732557e-01, -3.42020143e-01,\n",
    " -4.00930535e-01, -4.58226522e-01, -5.13677392e-01, -5.67059864e-01,\n",
    " -6.18158986e-01, -6.66769001e-01, -7.12694171e-01, -7.55749574e-01,\n",
    " -7.95761841e-01, -8.32569855e-01, -8.66025404e-01, -8.95993774e-01,\n",
    " -9.22354294e-01, -9.45000819e-01, -9.63842159e-01, -9.78802446e-01,\n",
    " -9.89821442e-01, -9.96854776e-01, -9.99874128e-01, -9.98867339e-01,\n",
    " -9.93838464e-01, -9.84807753e-01, -9.71811568e-01, -9.54902241e-01,\n",
    " -9.34147860e-01, -9.09631995e-01, -8.81453363e-01, -8.49725430e-01,\n",
    " -8.14575952e-01, -7.76146464e-01, -7.34591709e-01, -6.90079011e-01,\n",
    " -6.42787610e-01, -5.92907929e-01, -5.40640817e-01, -4.86196736e-01,\n",
    " -4.29794912e-01, -3.71662456e-01, -3.12033446e-01, -2.51147987e-01,\n",
    " -1.89251244e-01, -1.26592454e-01, -6.34239197e-02, -2.44929360e-16])"
    ]
    },
    "execution_count": 60,
    "metadata": {},
    "output_type": "execute_result"
    }
    ],
    "source": [
    "# Calculate the sine of x list\n",
    "\n",
    "y = np.sin(x)\n",
    "y"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": null,
    "metadata": {
    "collapsed": false,
    "jupyter": {
    "outputs_hidden": false
    }
    },
    "outputs": [],
    "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": 63,
    "metadata": {},
    "outputs": [
    {
    "data": {
    "text/plain": [
    "array([ 1, -1])"
    ]
    },
    "execution_count": 63,
    "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": 66,
    "metadata": {},
    "outputs": [
    {
    "data": {
    "text/plain": [
    "array([-4, -8])"
    ]
    },
    "execution_count": 66,
    "metadata": {},
    "output_type": "execute_result"
    }
    ],
    "source": [
    "# Write your code below and press Shift+Enter to execute\n",
    "\n",
    "z = np.array([2, 4])\n",
    "w = (-2)*z\n",
    "w"
    ]
    },
    {
    "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": 67,
    "metadata": {},
    "outputs": [
    {
    "data": {
    "text/plain": [
    "array([1, 0, 3, 0, 5])"
    ]
    },
    "execution_count": 67,
    "metadata": {},
    "output_type": "execute_result"
    }
    ],
    "source": [
    "# Write your code below and press Shift+Enter to execute\n",
    "a = np.array([1, 2, 3, 4, 5])\n",
    "b = np.array([1, 0, 1, 0, 1])\n",
    "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": 72,
    "metadata": {},
    "outputs": [
    {
    "name": "stdout",
    "output_type": "stream",
    "text": [
    "The dot product of a & b 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",
    "\n",
    "Plotvec2(a,b) #plot the arrays as vectors using the function Plotvec2\n",
    "print('The dot product of a & b 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": 73,
    "metadata": {},
    "outputs": [
    {
    "name": "stdout",
    "output_type": "stream",
    "text": [
    "The dot product is 0\n"
    ]
    },
    {
    "data": {
    "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYQAAAD8CAYAAAB3u9PLAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAATUklEQVR4nO3de4zd5X3n8feHi0Hcys0EB+wmUazlkvVuYCCkRCt2k1QEVZgU0hI1G9MkGiVblFbaP8IuSrrKP9vsSpWKSMpOGlSyQoQurRt3Y65JkBctpgwUzMVQHMSGkWkwEDlBJiEO3/3jPITpcI5n7PObc8bm/ZKOzu/ynN/z5fEwn/O7TqoKSZIOGncBkqSlwUCQJAEGgiSpMRAkSYCBIElqDARJEtBBICRZmeT7SbYmeSzJH/ZpkyTXJNmWZEuSs4btV5LUrUM62MZu4D9W1YNJjgYeSHJnVT0+q81HgNXt9T7gz9u7JGmJGHoPoaqeq6oH2/RPga3AKXOarQW+WT2bgWOTrBi2b0lSd7rYQ/iVJO8A3gvcN2fVKcCzs+Zn2rLn+mxjEpgEOPLII88+7bTTuixRkg5oDzzwwAtVtXxfPttZICQ5Cvhr4I+q6idzV/f5SN9nZlTVFDAFMDExUdPT012VKEkHvCT/b18/28lVRkkOpRcGN1bV3/RpMgOsnDV/KrC9i74lSd3o4iqjAN8AtlbVnw5otgH4ZLva6DxgZ1W96XCRJGl8ujhkdD7w74FHkjzUlv1nYBVAVV0HbAQuArYBu4Df76BfSVKHhg6EqrqH/ucIZrcp4A+G7UuStHi8U1mSBBgIkqTGQJAkAQaCJKkxECRJgIEgSWoMBEkSYCBIkhoDQZIEGAiSpMZAkCQBBoIkqTEQJEmAgSBJagwESRJgIEiSGgNBkgQYCJKkppNASHJ9kueTPDpg/QVJdiZ5qL2+1EW/kqTuDP03lZu/BK4FvrmHNv+nqn6ro/4kSR3rZA+hqjYBL3WxLUnSeIzyHML7kzyc5NYkZ46wX0nSAnR1yGg+DwK/XlUvJ7kI+Ftgdb+GSSaBSYBVq1aNqDxJ0kj2EKrqJ1X1cpveCBya5MQBbaeqaqKqJpYvXz6K8iRJjCgQkpycJG363Nbvi6PoW5K0MJ0cMkpyE3ABcGKSGeCPgUMBquo64DLgc0l2A68Al1dVddG3JKkbnQRCVX18nvXX0rssVZK0RHmnsiQJMBAkSY2BIEkCDARJUmMgSJIAA0GS1BgIkiTAQJAkNQaCJAkwEKRF88wzz/Ce97xn3GVIC2YgSJIAA0FaVLt372bdunWsWbOGyy67jF27do27JGkgA0FaRE8++SSTk5Ns2bKFY445hq997WvjLkkayECQFtHKlSs5//zzAfjEJz7BPffcM+aKpMEMBGkRtb8LNXBeWkoMBGkR/fCHP+Tee+8F4KabbuIDH/jAmCuSBjMQpL30e78Hn/vcwtqefvrp3HDDDaxZs4aXXnqJzy30g9IYZCn/JcuJiYmanp4edxnSr/z4x7BiBRx0ELzwAhxxxLgrkv65JA9U1cS+fNY9BGkv3HgjHHxw73XLLeOuRupWJ4GQ5Pokzyd5dMD6JLkmybYkW5Kc1UW/0qj92Z/Brl3w8su9aelA0tUewl8CF+5h/UeA1e01Cfx5R/1KI/MP/wDbt78x//jjsG3b+OqRutZJIFTVJuClPTRZC3yzejYDxyZZ0UXf0qjcdhv84hdvzP/yl3DHHeOrR+raqM4hnAI8O2t+pi17kySTSaaTTO/YsWMkxUkL8fnPw6ZNb8xv2gSf+tT46pG6NqpA6Hc3Tt/Lm6pqqqomqmpi+fLli1yWtHBHHgnnndebPuqo3vThh4+3JqlLowqEGWDlrPlTge0D2kqSxmBUgbAB+GS72ug8YGdVPTeiviVJC3BIFxtJchNwAXBikhngj4FDAarqOmAjcBGwDdgF/H4X/UqSutNJIFTVx+dZX8AfdNGXJGlxeKeyJAkwECRJjYEgSQIMBElSYyBIkgADQZLUGAiSJMBAkCQ1BoIkCTAQJEmNgSBJAgwESVJjIEiSAANBktQYCJIkwECQJDUGgiQJMBAkSU0ngZDkwiRPJtmW5Ko+669IsiPJQ+31mS76lSR1Z+i/qZzkYOCrwIeBGeD+JBuq6vE5TW+uqiuH7U+StDi62EM4F9hWVU9X1avAt4C1HWxXkjRCXQTCKcCzs+Zn2rK5Lk2yJcktSVYO2liSySTTSaZ37NjRQXmSpIXoIhDSZ1nNmf874B1VtQa4C7hh0MaqaqqqJqpqYvny5R2UJ0laiC4CYQaY/Y3/VGD77AZV9WJV/bzNfh04u4N+JUkd6iIQ7gdWJ3lnkmXA5cCG2Q2SrJg1ezGwtYN+JUkdGvoqo6raneRK4HbgYOD6qnosyZeB6araAHw+ycXAbuAl4Iph+5UkdStVcw/3Lx0TExM1PT097jKkfyaBo46Cn/503JVIb5bkgaqa2JfPeqeyJAkwECRJjYEgSQIMBElSYyBIkgADQZLUGAiSJMBAkCQ1BoIkCTAQJEmNgSBpv3HJJZdw9tlnc+aZZzI1NTXucg44Qz/cTpJG5frrr+f444/nlVde4ZxzzuHSSy/lhBNOGHdZBwwDQdJ+45prrmH9+vUAPPvsszz11FMGQocMBEn7hbvvvpu77rqLe++9lyOOOIILLriAn/3sZ+Mu64DiOQRJ+4WdO3dy3HHHccQRR/DEE0+wefPmcZd0wDEQJO0XLrzwQnbv3s2aNWv44he/yHnnnTfukg44HjKStF847LDDuPXWW8ddxgHNPQRJEtBRICS5MMmTSbYluarP+sOS3NzW35fkHV30K0nqztCHjJIcDHwV+DAwA9yfZENVPT6r2aeBH1fVu5NcDnwF+N1h+5Z0APjCF+DRR+Gcc+DMM+GMM2D1ali2bNyVveV0cQ7hXGBbVT0NkORbwFpgdiCsBf5Lm74FuDZJqqo66F8aqWWHFse++jycfsG4SzkwPPFE7/222+DII3vTr7wCJ50Ep58OZ58NV18NxxwzvhrfIroIhFOAZ2fNzwDvG9SmqnYn2QmcALwwd2NJJoFJgFWrVnVQntStTV9/ksOv+J03fpGpG6+9Brt29UJh2TL4p3+CBA46CF59ddzVvSV0EQjps2zuN/+FtOktrJoCpgAmJibcg9CS8751p8G6LeMu48Bx2WXw4IO9w0WzDxu9+91w6KHjru4tpYtAmAFWzpo/Fdg+oM1MkkOAXwNe6qBvSfu7W24ZdwVqurjK6H5gdZJ3JlkGXA5smNNmA7CuTV8GfM/zB5K0tAy9h9DOCVwJ3A4cDFxfVY8l+TIwXVUbgG8A/zPJNnp7BpcP268kqVud3KlcVRuBjXOWfWnW9M+Aj3XRlyRpcXinsiQJMBAkSY2BIEkCDARJUmMgSJIAA0GS1BgIkiTAQJAkNQaCJAkwECRJjYEgSQIMBElSYyBIkgADQZLUGAiSJMBAkCQ1BoIkCTAQJEnNUIGQ5PgkdyZ5qr0fN6DdL5M81F4bhulTkrQ4ht1DuAr4blWtBr7b5vt5par+dXtdPGSfkqRFMGwgrAVuaNM3AJcMuT1J0pgMGwhvq6rnANr7SQPaHZ5kOsnmJHsMjSSTre30jh07hixPkrRQh8zXIMldwMl9Vl29F/2sqqrtSd4FfC/JI1X1g34Nq2oKmAKYmJiovehDkjSEeQOhqj40aF2SHyVZUVXPJVkBPD9gG9vb+9NJ7gbeC/QNBEnSeAx7yGgDsK5NrwO+PbdBkuOSHNamTwTOBx4fsl9JUseGDYQ/AT6c5Cngw22eJBNJ/qK1OR2YTvIw8H3gT6rKQJCkJWbeQ0Z7UlUvAh/ss3wa+Eyb/r/AvxymH0nS4vNOZUkSYCBIkhoDQZIEGAiSpMZAkCQBBoIkqTEQJEmAgSBJagwESRJgIEiSGgNBkgQYCJKkxkCQJAEGgiSpMRAkSYCBIElqDARJEmAgSJKaoQIhyceSPJbktSQTe2h3YZInk2xLctUwfUqSFsewewiPAr8NbBrUIMnBwFeBjwBnAB9PcsaQ/UqSOnbIMB+uqq0ASfbU7FxgW1U93dp+C1gLPD5M35Kkbo3iHMIpwLOz5mfasr6STCaZTjK9Y8eORS9OktQz7x5CkruAk/usurqqvr2APvrtPtSgxlU1BUwBTExMDGwnSerWvIFQVR8aso8ZYOWs+VOB7UNuU5LUsVEcMrofWJ3knUmWAZcDG0bQryRpLwx72elHk8wA7we+k+T2tvztSTYCVNVu4ErgdmAr8FdV9dhwZUuSujbsVUbrgfV9lm8HLpo1vxHYOExfkqTF5Z3KkiTAQJAkNQaCJAkwECRJjYEgSQIMBElSYyBIkgADQZLUGAiSJMBAkCQ1BoIkCTAQJEmNgSBJAgwESVJjIEiSAANBktQYCJIkwECQJDXD/k3ljyV5LMlrSSb20O6ZJI8keSjJ9DB9SpIWx1B/Uxl4FPht4H8soO2/raoXhuxPkrRIhgqEqtoKkKSbaiRJYzOqcwgF3JHkgSSTI+pTkrQX5t1DSHIXcHKfVVdX1bcX2M/5VbU9yUnAnUmeqKpNA/qbBCYBVq1atcDNS5KGNW8gVNWHhu2kqra39+eTrAfOBfoGQlVNAVMAExMTNWzfkqSFWfRDRkmOTHL069PAb9I7GS1JWkKGvez0o0lmgPcD30lye1v+9iQbW7O3AfckeRj4e+A7VXXbMP1Kkro37FVG64H1fZZvBy5q008D/2qYfiRJi887lSVJgIEgSWoMBEkSYCBIkhoDQZIEGAiSpMZAkCQBBoIkqTEQJEmAgSBJagwESRJgIEiSGgNBkgQYCJKkxkCQJAEGgiSpMRAkSYCBIElqDARJEjBkICT570meSLIlyfokxw5od2GSJ5NsS3LVMH1KkhbHsHsIdwLvqao1wD8C/2lugyQHA18FPgKcAXw8yRlD9itJ6thQgVBVd1TV7ja7GTi1T7NzgW1V9XRVvQp8C1g7TL+SpO4d0uG2PgXc3Gf5KcCzs+ZngPcN2kiSSWCyzf48yaOdVbg4TgReGHcRC2Cd3bLObllnd/7Fvn5w3kBIchdwcp9VV1fVt1ubq4HdwI39NtFnWQ3qr6qmgKm23emqmpivxnHaH2oE6+yadXbLOruTZHpfPztvIFTVh+bpfB3wW8AHq6rfL/oZYOWs+VOB7XtTpCRp8Q17ldGFwBeAi6tq14Bm9wOrk7wzyTLgcmDDMP1Kkro37FVG1wJHA3cmeSjJdQBJ3p5kI0A76XwlcDuwFfirqnpsgdufGrK+UdgfagTr7Jp1dss6u7PPNab/UR5J0luNdypLkgADQZLULKlA2B8ehZHkY0keS/JakoGXnyV5Jskj7dzKPl8Gtq/2os6xPlYkyfFJ7kzyVHs/bkC7X7axfCjJyC5KmG98khyW5Oa2/r4k7xhVbXPqmK/OK5LsmDWGnxlDjdcneX7QvUXpuab9N2xJctaoa2x1zFfnBUl2zhrLL42hxpVJvp9ka/v//A/7tNn78ayqJfMCfhM4pE1/BfhKnzYHAz8A3gUsAx4GzhhhjafTu/HjbmBiD+2eAU4c41jOW+e4x7LV8N+Aq9r0Vf3+zdu6l8cwhvOOD/AfgOva9OXAzUu0ziuAa0dd25wa/g1wFvDogPUXAbfSu3fpPOC+JVrnBcD/HvNYrgDOatNH03t00Nx/870ezyW1h1D7waMwqmprVT05qv721QLrXAqPFVkL3NCmbwAuGXH/e7KQ8Zld/y3AB5P0uxlzMS2Ff8d5VdUm4KU9NFkLfLN6NgPHJlkxmuresIA6x66qnquqB9v0T+ldwXnKnGZ7PZ5LKhDm+BS9dJur36Mw5g7EUlDAHUkeaI/jWIqWwli+raqeg94POXDSgHaHJ5lOsjnJqEJjIePzqzbty8xO4ISRVNenhmbQv+Ol7dDBLUlW9lk/bkvh53Gh3p/k4SS3JjlznIW0w5TvBe6bs2qvx7PLZxktyKgfhbEvFlLjApxfVduTnETvPo0n2jePznRQ56KPJey5zr3YzKo2nu8Cvpfkkar6QTcVDrSQ8RnJGM5jITX8HXBTVf08yWfp7dX8u0WvbO8shbFciAeBX6+ql5NcBPwtsHochSQ5Cvhr4I+q6idzV/f5yB7Hc+SBUPvBozDmq3GB29je3p9Psp7ebn2ngdBBnSN5rMie6kzyoyQrquq5tjv7/IBtvD6eTye5m943osUOhIWMz+ttZpIcAvwaoz/cMG+dVfXirNmv0ztHt9TsF4+5mf2Lt6o2JvlakhOraqQPvUtyKL0wuLGq/qZPk70ezyV1yCgHyKMwkhyZ5OjXp+mdLF+KT21dCmO5AVjXptcBb9qzSXJcksPa9InA+cDjI6htIeMzu/7LgO8N+CKzmOatc86x44vpHXNeajYAn2xXx5wH7Hz9cOJSkuTk188TJTmX3u/RF/f8qc5rCPANYGtV/emAZns/nuM8U97nzPk2ese8Hmqv16/eeDuwcc7Z83+k9w3x6hHX+FF6yftz4EfA7XNrpHe1x8Pt9dioa1xoneMey9b/CcB3gafa+/Ft+QTwF236N4BH2ng+Anx6hPW9aXyAL9P70gJwOPC/2s/u3wPvGvUYLrDO/9p+Fh8Gvg+cNoYabwKeA37RfjY/DXwW+GxbH3p/TOsH7d954FV8Y67zylljuRn4jTHU+AF6h3+2zPp9edGw4+mjKyRJwBI7ZCRJGh8DQZIEGAiSpMZAkCQBBoIkqTEQJEmAgSBJav4/G+KjtAyKgV8AAAAASUVORK5CYII=\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",
    "\n",
    "Plotvec2(a,b)\n",
    "print(\"The dot product is\", 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": 76,
    "metadata": {},
    "outputs": [
    {
    "name": "stdout",
    "output_type": "stream",
    "text": [
    "The dot product is 1\n",
    "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",
    "\n",
    "Plotvec2(a, b)\n",
    "print(\"The dot product is\", 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/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 &copy; 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.7"
    }
    },
    "nbformat": 4,
    "nbformat_minor": 4
    }