{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "
\n", "\n", "UFF logo\n", "\n", "\n", "IC logo\n", "\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Machine Learning\n", "# 0. Python Tutorial" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### [Luis Martí](http://lmarti.com)\n", "#### [Instituto de Computação](http://www.ic.uff)\n", "#### [Universidade Federal Fluminense](http://www.uff.br)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### About the notebook/slides\n", "\n", "* The slides are _programmed_ as a [Jupyter](http://jupyter.org)/[IPython](https://ipython.org/) notebook.\n", "* **Feel free to try them and experiment on your own by launching the notebooks.**\n", "\n", "* You can run the notebook online: [![Binder](http://mybinder.org/badge.svg)](http://mybinder.org/)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "If you are using [nbviewer](http://nbviewer.jupyter.org) you can change to slides mode by clicking on the icon:\n", "\n", "
\n", "
\n", "
\n", "
\n", "
\n", " \n", "
\n", "
\n", "
\n", "
\n", "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Introduction\n", "\n", "* Python is a great general-purpose programming language,...\n", "* ...and with the help of a libraries such as `numpy`, `scipy` and `matplotlib` (among many others) it becomes a powerful environment for scientific computing." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "
\n", "
\n", "
 
\n", "
\n", "
\n", " \n", "
\n", "
\n", "
 
\n", "
\n", "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "
\n", "

Scripta volant, codex manent

\n", "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Python main characteristics:\n", "\n", "* dynamic type system\n", "* interpreted (actually: compiled to bytecode, `*.pyc` files)\n", "* multi-paradigm: imperative, procedural, object-oriented, (functional), *literate*; do whatever you want\n", "* **indentation is important!**" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "I assume that you have some programming experience:\n", "\n", "* Java (static type system, compiled, object-oriented, verbose)\n", "* C/C++ (static type system, compiled, multi-paradigm, low-level)\n", "* Matlab? R? " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "I also expect that many of you will have some experience with Python and numpy; for the rest of you, this section will serve as a quick crash course both on the Python programming language and on the use of Python for scientific computing.\n", "\n", "Some of you may have previous knowledge in Matlab, in which case we also recommend the numpy for Matlab users page (https://docs.scipy.org/doc/numpy-dev/user/numpy-for-matlab-users.html)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# In this tutorial\n", "\n", "* Basic Python: Basic data types, containers, loops, functions and classes.\n", "* `numpy`: arrays, array indexing, datatypes, array math and broadcasting.\n", "* `matplotlib`: plotting, subplots, images.\n", "* `Jupyter` and `IPython`: Creating notebooks and typical workflows." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Basics of Python\n", "\n", "* Python is a high-level, dynamically typed multiparadigm programming language. \n", "* Python code is often said to be almost like pseudocode, since it allows you to express very powerful ideas in very few lines of code while being very readable." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Required Python packages (libraries) to run this notebook:\n", "\n", "* `Python`\n", "* `Jupyter`/`IPython` - interactive Python shell\n", "* `numpy` - linear algebra library\n", "* `matplotlib` - plotting library\n", "\n", "Scientific Python Distributions (available for almost every platform):\n", "\n", "* [Anaconda](https://store.continuum.io/cshop/anaconda/).\n", "* [Enthought Python Distribution](https://www.enthought.com/products/epd/)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "As an example, here is an implementation of the classic [*quicksort algorithm*](https://en.wikipedia.org/wiki/Quicksort) in Python:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def quicksort(arr):\n", " if len(arr) <= 1:\n", " return arr\n", " pivot = arr[int(len(arr) / 2)]\n", " left = [x for x in arr if x < pivot]\n", " middle = [x for x in arr if x == pivot]\n", " right = [x for x in arr if x > pivot]\n", " return quicksort(left) + middle + quicksort(right)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "[1, 1, 2, 3, 6, 8, 10]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "quicksort([3,6,8,10,1,2,1])" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Python versions\n", "\n", "* There are currently two different supported versions of Python, 2.x and 3.x. \n", "* Python 3.0 introduced many backwards-incompatible changes to the language, so code written for 2.x may not work under 3.x and vice versa.\n", "* In our class we will be using Python 3.x.\n", "\n", "**Note:** You can check your Python version at the command line by running `python --version`." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Basic data types" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "## Numeric types\n", "Integers and floats work as you would expect from other languages:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3 \n" ] } ], "source": [ "x = 3\n", "print(x, type(x))" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4\n", "2\n", "6\n", "9\n" ] } ], "source": [ "print(x + 1) # Addition;\n", "print(x - 1) # Subtraction;\n", "print(x * 2) # Multiplication;\n", "print(x ** 2) # Exponentiation." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Autoincrements:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4\n", "8\n" ] } ], "source": [ "x += 1\n", "print(x) # Prints \"4\"\n", "x *= 2\n", "print(x) # Prints \"8\"" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Note that unlike many languages, Python does not have unary increment (`x++`) or decrement (`x--`) operators.\n", "\n", "Python also has built-in types for long integers and complex numbers; you can find all of the details in the [documentation](https://docs.python.org/2/library/stdtypes.html#numeric-types-int-float-long-complex)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Real numbers (`float`)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "2.5 3.5 5.0 6.25\n" ] } ], "source": [ "y = 2.5\n", "print(type(y)) # Prints \"\"\n", "print(y, y + 1, y * 2, y ** 2) # Prints \"2.5 3.5 5.0 6.25\"" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Booleans" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Python implements all of the usual operators for [Boolean algebra](https://en.wikipedia.org/wiki/Boolean_algebra), but uses English words rather than symbols (`&&`, `||`, `!`, etc.):" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "True False \n" ] } ], "source": [ "t, f, aa, bb = True, False, True, False # Hmm... yes you can do this in Python\n", "print(t, f, type(t))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Now we let's look at the operations:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "False\n", "True\n", "False\n", "True\n" ] } ], "source": [ "print(t and f) # Logical AND;\n", "print(t or f) # Logical OR;\n", "print(not t) # Logical NOT;\n", "print(t != f) # Logical XOR;" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Booleans and truth Testing\n", "\n", "* In programming we invariably need some concept of *conditions* to allow a program to react differently to different situations. \n", "* Python uses a combination of *Boolean* variables, which evaluate to either `True` or `False`, and `if` statements." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Sleep!!!\n" ] } ], "source": [ "day = \"Sunday\"\n", "if day == 'Sunday':\n", " print('Sleep!!!')\n", "else:\n", " print('Go to work')" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "There is no `switch` or `case` statements" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Week end is over!\n" ] } ], "source": [ "if day == 'Monday':\n", " print('Week end is over!')\n", "elif day == 'Sunday' or day =='Saturday':\n", " print('Sleep!')\n", "else:\n", " print('Meeeh')" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Do something with 234\n" ] } ], "source": [ "var_1 = 234\n", "if var_1:\n", " print('Do something with', var_1)\n", "else:\n", " print('Nothing to do')" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "1 == 2" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "50 == 2*25" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "There is another boolean operator `is`, that tests whether two objects are **the same type**:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "1 is 1" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "But not..." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "1 is int" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " \n" ] } ], "source": [ "print(type(1), type(int))" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "1 is 1.0" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Strings\n", "\n", "String literals can use single quotes (`''`) or or double quotes(`\"\"`); it does not matter." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "hello 5\n" ] } ], "source": [ "hello = 'hello'\n", "world = \"world\"\n", "print(hello, len(hello))" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "hello world\n" ] } ], "source": [ "hw = hello + ' ' + world # String concatenation\n", "print(hw)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "String formatting" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "hello world! your number is: 12\n" ] } ], "source": [ "hw12 = '%s %s! your number is: %d' % (hello, world, 12) # sprintf style string formatting\n", "print(hw12)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "**Note:** Checkout https://docs.python.org/3/library/string.html#formatspec for string formatting specs." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "String objects have a bunch of useful methods; for example:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hello\n", "HELLO\n", " hello\n", " hello \n", "he(ell)(ell)o\n", "world\n" ] } ], "source": [ "s = \"hello\"\n", "print(s.capitalize()) # Capitalize a string; prints \"Hello\"\n", "print(s.upper()) # Convert a string to uppercase; prints \"HELLO\"\n", "print(s.rjust(7)) # Right-justify a string, padding with spaces; prints \" hello\"\n", "print(s.center(7)) # Center a string, padding with spaces; prints \" hello \"\n", "print(s.replace('l', '(ell)')) # Replace all instances of one substring with another;\n", " # prints \"he(ell)(ell)o\"\n", "print(' world '.strip()) # Strip leading and trailing whitespace; prints \"world\"" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "Again, you can find a list of all string methods in the [documentation](https://docs.python.org/3/library/string.html)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Containers" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Python includes several built-in container types: *lists*, *dictionaries*, *sets*, and *tuples*." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Lists" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A list is the Python equivalent of an array, but is resizeable and can contain elements of different types:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[3, 1, 2] 2\n", "2\n" ] } ], "source": [ "xs = [3, 1, 2] # Create a list\n", "print(xs, xs[2])\n", "print(xs[-1]) # Negative indices count from the end of the list; prints \"2\"" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[3, 1, 'foo']\n" ] } ], "source": [ "xs[2] = 'foo' # Lists can contain elements of different types\n", "print(xs)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[3, 1, 'foo', 'bar']\n" ] } ], "source": [ "xs.append('bar') # Add a new element to the end of the list\n", "print(xs)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[3, 1, 'foo', 'bar', 'thing1', 'thing2']\n" ] } ], "source": [ "xs = xs + ['thing1', 'thing2'] # Adding lists (the += op works too)\n", "print(xs)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "Python lists also implement [queue](https://en.wikipedia.org/wiki/Queue_%28abstract_data_type%29) and [stack](https://en.wikipedia.org/wiki/Stack_%28abstract_data_type%29) data structures." ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "thing2 [3, 1, 'foo', 'bar', 'thing1']\n" ] } ], "source": [ "x = xs.pop() # Remove and return the last element of the list\n", "print(x, xs) " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "As usual, you can find all the gory details about lists in the documentation." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Slicing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In addition to accessing list elements one at a time, Python provides concise syntax to access sublists; this is known as slicing:" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0, 1, 2, 3, 4]\n" ] } ], "source": [ "nums = list(range(5)) # range is a built-in function (more on this later)\n", "print(nums)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2, 3]\n", "[2, 3, 4]\n", "[0, 1]\n", "[0, 1, 2, 3, 4]\n", "[0, 1, 2, 3]\n", "[0, 1, 8, 9, 4]\n" ] } ], "source": [ "print(nums[2:4]) # Get a slice from index 2 to 4 (exclusive); prints \"[2, 3]\"\n", "print(nums[2:]) # Get a slice from index 2 to the end; prints \"[2, 3, 4]\"\n", "print(nums[:2]) # Get a slice from the start to index 2 (exclusive); prints \"[0, 1]\"\n", "print(nums[:]) # Get a slice of the whole list; prints [\"0, 1, 2, 3, 4]\"\n", "print(nums[:-1]) # Slice indices can be negative; prints [\"0, 1, 2, 3]\"\n", "nums[2:4] = [8, 9] # Assign a new sublist to a slice\n", "print(nums) # Prints \"[0, 1, 8, 9, 4]\"" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Loops" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can loop over the elements of a list like this:" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "cat :)\n", "dog :)\n", "monkey :)\n" ] } ], "source": [ "animals = ['cat', 'dog', 'monkey']\n", "for animal in animals:\n", " aa = animal + ' :)'\n", " print(aa)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "If you want access to the index of each element within the body of a loop, use the built-in `enumerate` function:" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Item number 1 is a cat\n", "Item number 2 is a dog\n", "Item number 3 is a monkey\n" ] } ], "source": [ "animals = ['cat', 'dog', 'monkey']\n", "for idx, animal in enumerate(animals):\n", " print('Item number %d is a %s' % (idx + 1, animal))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Conditional loops\n", "\n", "In Python we have only a `while` loop." ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0\n", "1\n", "2\n" ] } ], "source": [ "i = 0\n", "while i < 3:\n", " print(i)\n", " i += 1" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# List comprehensions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When programming, frequently we want to transform one type of data into another. \n", "\n", "For example, consider the following code that computes square numbers:" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0, 1, 4, 9, 16]\n" ] } ], "source": [ "nums = [0, 1, 2, 3, 4]\n", "squares = []\n", "for x in nums:\n", " squares.append(x ** 2)\n", "print(squares)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "You can make this code simpler using a **list comprehension**:" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0, 1, 4, 9, 16]\n" ] } ], "source": [ "nums = [0, 1, 2, 3, 4]\n", "squares = [x ** 2 for x in nums]\n", "print(squares)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "List comprehensions can also contain conditions:" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0, 4, 16]\n" ] } ], "source": [ "nums = [0, 1, 2, 3, 4]\n", "even_squares = [x ** 2 for x in nums if x % 2 == 0]\n", "print(even_squares)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Dictionaries" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A dictionary stores (key, value) pairs, similar to a `Map` in Java or an object in Javascript. You can use it like this:" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": true }, "outputs": [], "source": [ "d = {'cat': 'cute', 'dog': 'furry'} # Create a new dictionary with some data" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "cute\n", "True\n" ] } ], "source": [ "print(d['cat']) # Get an entry from a dictionary; prints \"cute\"\n", "print('cat' in d) # Check if a dictionary has a given key; prints \"True\"" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "wet\n" ] } ], "source": [ "d['fish'] = 'wet' # Set an entry in a dictionary\n", "print(d['fish']) # Prints \"wet\"" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Handling not found keys:" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "ename": "KeyError", "evalue": "'monkey'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0md\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'monkey'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# KeyError: 'monkey' not a key of d\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mKeyError\u001b[0m: 'monkey'" ] } ], "source": [ "print(d['monkey']) # KeyError: 'monkey' not a key of d" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "N/A\n", "wet\n" ] } ], "source": [ "print(d.get('monkey', 'N/A')) # Get an element with a default; prints \"N/A\"\n", "print(d.get('fish', 'N/A')) # Get an element with a default; prints \"wet\"" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "N/A\n" ] } ], "source": [ "del d['fish'] # Remove an element from a dictionary\n", "print(d.get('fish', 'N/A')) # \"fish\" is no longer a key; prints \"N/A\"" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "It is easy to iterate over the keys in a dictionary:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "A person has 2 legs\n", "A cat has 4 legs\n", "A spider has 8 legs\n" ] } ], "source": [ "d = {'person': 2, 'cat': 4, 'spider': 8}\n", "for animal in d:\n", " legs = d[animal]\n", " print('A %s has %d legs' % (animal, legs))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Dictionary comprehensions\n", "\n", "These are similar to list comprehensions, but allow you to easily construct dictionaries. For example:" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{0: 0, 2: 4, 4: 16}\n" ] } ], "source": [ "nums = [0, 1, 2, 3, 4]\n", "even_num_to_square = {x: x ** 2 for x in nums if x % 2 == 0}\n", "print(even_num_to_square)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Sets" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A set is an unordered collection of distinct elements. As a simple example, consider the following:" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'dog', 'cat'}\n" ] } ], "source": [ "animals = {'cat', 'dog'}\n", "print(animals)" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "True\n", "False\n" ] } ], "source": [ "print('cat' in animals) # Check if an element is in a set; prints \"True\"\n", "print('fish' in animals) # prints \"False\"" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "True\n", "3\n" ] } ], "source": [ "animals.add('fish') # Add an element to a set\n", "print('fish' in animals)\n", "print(len(animals)) # Number of elements in a set;" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'dog', 'cat', 'fish'} 3\n", "{'dog', 'fish'} 2\n" ] } ], "source": [ "animals.add('cat') # Adding an element that is already in the set does nothing\n", "print(animals, len(animals)) \n", "animals.remove('cat') # Remove an element from a set\n", "print(animals,len(animals)) " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Loops in sets \n", "\n", "* Iterating over a set has the same syntax as iterating over a list; \n", "* however since sets are unordered, you cannot make assumptions about the order in which you visit the elements of the set." ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "#1: dog\n", "#2: cat\n", "#3: fish\n" ] } ], "source": [ "animals = {'cat', 'dog', 'fish'}\n", "for idx, animal in enumerate(animals):\n", " print('#%d: %s' % (idx + 1, animal))\n", "# Prints \"#1: fish\", \"#2: dog\", \"#3: cat\"" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Set comprehensions\n", "\n", "Like lists and dictionaries, we can easily construct sets using set comprehensions:" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Set: {0, 1, 2, 3, 4, 5}\n", "List: [0, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5]\n" ] } ], "source": [ "from math import sqrt\n", "print('Set:', {int(sqrt(x)) for x in range(30)})\n", "print('List:', [int(sqrt(x)) for x in range(30)])" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Tuples" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* An (**immutable**) ordered list of values;\n", "* is in many ways similar to a list; \n", "* one of the most important differences is that:\n", " * tuples can be used as keys in dictionaries and\n", " * as elements of sets, \n", "\n", "Here is a trivial example:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(5, 6) \n", "5 6\n" ] } ], "source": [ "t = (5, 6)\n", "print(t, type(t))" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{(0, 1): 0, (1, 2): 1, (2, 3): 2, (3, 4): 3, (4, 5): 4, (5, 6): 5, (6, 7): 6, (7, 8): 7, (8, 9): 8, (9, 10): 9}\n" ] } ], "source": [ "d = {(x, x + 1): x for x in range(10)} # Create a dictionary with tuple keys\n", "print(d)" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "5\n", "1\n" ] } ], "source": [ "print(d[t]) \n", "print(d[(1, 2)])" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [ { "ename": "TypeError", "evalue": "'tuple' object does not support item assignment", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mt\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m1\u001b[0m \u001b[0;31m# Produces TypeError 'tuple' object does not support item assignment\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mTypeError\u001b[0m: 'tuple' object does not support item assignment" ] } ], "source": [ "t[0] = 1 # Produces TypeError 'tuple' object does not support item assignment" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Functions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Python functions are defined using the `def` keyword. For example:" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def sign(x):\n", " if x > 0:\n", " return 'positive'\n", " elif x < 0:\n", " return 'negative'\n", " else:\n", " return 'zero'" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "negative\n", "zero\n", "positive\n" ] } ], "source": [ "for x in [-1, 0, 1]:\n", " print(sign(x))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "We will often define functions to take optional keyword arguments, like this:" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def hello(name, loud=False):\n", " if loud:\n", " print('HELLO, %s' % name.upper())\n", " else:\n", " print('Hello, %s!' % name)" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hello, Bob!\n", "HELLO, FRED\n" ] } ], "source": [ "hello('Bob')\n", "hello('Fred', loud=True)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## $\\lambda$-constructors (inline functions)" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "func = lambda x: x**x + 2\n", "print(type(func))" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "29" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "func(3)" ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[3, 3127, 29, 6, 823545, 16777218, 29, 46658]\n" ] }, { "data": { "text/plain": [ "[3, 3127, 29, 6, 823545, 16777218, 29, 46658]" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = [1, 5, 3, 2, 7, 8, 3, 6]\n", "\n", "print([func(elem) for elem in x])\n", "list(map(lambda x: x**x + 2, x)) # note the map() function" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Classes and object oriented programming" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* The syntax for defining classes in Python is straightforward.\n", "* Remember to include `self` as the first parameter of the class methods." ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": true }, "outputs": [], "source": [ "class Greeter():\n", " # Constructor\n", " def __init__(self, name):\n", " self.name = name # Create an instance variable\n", "\n", " # Instance method\n", " def greet(self, loud=False):\n", " if loud:\n", " print('HELLO, %s!' % self.name.upper())\n", " else:\n", " print('Hello, %s' % self.name)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hello, Fred\n", "HELLO, FRED!\n" ] } ], "source": [ "g = Greeter('Fred') # Construct an instance of the Greeter class\n", "g.greet() # Call an instance method; prints \"Hello, Fred\"\n", "g.greet(loud=True) # Call an instance method; prints \"HELLO, FRED!\"" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "For more information check the [Python docs](https://docs.python.org/3.5/tutorial/classes.html)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Exceptions\n", "\n", "As in many other modern languages Python can handle exceptions." ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def my_func(a):\n", " return a * a" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4\n" ] } ], "source": [ "print(my_func(2))" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "ename": "TypeError", "evalue": "can't multiply sequence by non-int of type 'str'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mmy_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'AAAAA'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m\u001b[0m in \u001b[0;36mmy_func\u001b[0;34m(a)\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mmy_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0ma\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mTypeError\u001b[0m: can't multiply sequence by non-int of type 'str'" ] } ], "source": [ "my_func('AAAAA')" ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Caught exception: can't multiply sequence by non-int of type 'str'\n" ] } ], "source": [ "try:\n", " print(my_func(\"A\"))\n", "except TypeError as e:\n", " print('Caught exception:', e)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# The `import` statement\n", "\n", "* We have seen already the `import` statement in action. \n", "* Python has a huge number of libraries included with the distribution. \n", "* Most of these variables and functions are not accessible from a normal Python interactive session. \n", "* Instead, you have to import them." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Modules\n", "\n", "* A module allows you to logically organize your Python code; \n", "* groups related code into a module makes the code easier to understand and use.\n", "\n", "* A module is a file consisting of Python code, can define functions, classes and variables. \n", "* A module can also include runnable code.\n", "\n", "**Note:** A module is also a Python object with arbitrarily named attributes that you can bind and reference." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Importing complete modules\n", "\n", "Importing whole modules with an additional short name:" ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import scipy.spatial.distance" ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.4142135623730951" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ], "source": [ "scipy.spatial.distance.euclidean((1,1), (2,2))" ] }, { "cell_type": "code", "execution_count": 67, "metadata": { "collapsed": true, "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "import scipy.spatial.distance as dists" ] }, { "cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.4142135623730951" ] }, "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dists.euclidean((1,1), (2,2))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Importing a particular function or class.\n", "\n", "For example, there is a `math` module containing many useful functions. To access, say, the square root function, you can" ] }, { "cell_type": "code", "execution_count": 69, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from math import sqrt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and then" ] }, { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "9.0" ] }, "execution_count": 70, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sqrt(81)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "#### Further reading \n", "* [Iterators](https://docs.python.org/3.5/tutorial/classes.html#iterators) and [generators](https://docs.python.org/3.5/tutorial/classes.html#generators).\n", "* map, reduce, zip\n", "* Decorators.\n", "* Installing packages pip/conda/etc." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# `numpy`: scientific computing with Python" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Numpy is the core library for scientific computing in Python. \n", "* It provides a high-performance multidimensional `array` object, and tools for working with these arrays. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "To use `numpy`, we first need to `import numpy` package:" ] }, { "cell_type": "code", "execution_count": 71, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Arrays" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A numpy `array` is a grid of values, all of the same type, and is indexed by a tuple of nonnegative integers. \n", "* The number of dimensions is the rank of the array; \n", "* The shape of an array is a tuple of integers giving the size of the array along each dimension.\n", "* useful linear algebra, Fourier transform, random number capabilities and more.\n", "* Complemented by [`scipy`](http://www.scipy.org/)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "We can initialize numpy arrays from nested Python lists, and access elements using square brackets:" ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " (3,) 1 2 3\n", "[5 2 3]\n" ] } ], "source": [ "a = np.array([1, 2, 3]) # Create a rank 1 array\n", "print(type(a), a.shape, a[0], a[1], a[2])\n", "a[0] = 5 # Change an element of the array\n", "print(a)" ] }, { "cell_type": "code", "execution_count": 73, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[1 2 3]\n", " [4 5 6]]\n" ] } ], "source": [ "b = np.array([[1, 2, 3], [4, 5, 6]]) # Create a rank 2 array\n", "print(b)" ] }, { "cell_type": "code", "execution_count": 74, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(2, 3)\n", "1 2 4\n" ] } ], "source": [ "print(b.shape)\n", "print(b[0, 0], b[0, 1], b[1, 0])" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Numpy provides many shortcut functions to create arrays:" ] }, { "cell_type": "code", "execution_count": 75, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 0. 0.]\n", " [ 0. 0.]]\n" ] } ], "source": [ "a = np.zeros((2,2)) # Create an array of all zeros\n", "print(a)" ] }, { "cell_type": "code", "execution_count": 76, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 1. 1.]]\n" ] } ], "source": [ "b = np.ones((1,2)) # Create an array of all ones\n", "print(b)" ] }, { "cell_type": "code", "execution_count": 77, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[7 7]\n", " [7 7]]\n" ] } ], "source": [ "c = np.full((2,2), 7)\n", "print(c)" ] }, { "cell_type": "code", "execution_count": 78, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 1. 0.]\n", " [ 0. 1.]]\n" ] } ], "source": [ "d = np.eye(2) # Create a 2x2 identity matrix\n", "print(d)" ] }, { "cell_type": "code", "execution_count": 79, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 0.09845823 0.09568912]\n", " [ 0.18341987 0.72051223]]\n" ] } ], "source": [ "e = np.random.random((2,2)) # Create an array filled with random values\n", "print(e)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Array indexing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Numpy offers several ways to index into arrays." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Slicing: Similar to Python lists, numpy arrays can be sliced. Since arrays may be multidimensional, you must specify a slice for each dimension of the array:" ] }, { "cell_type": "code", "execution_count": 80, "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/plain": [ "array([[ 1, 2, 3, 4],\n", " [ 5, 6, 7, 8],\n", " [ 9, 10, 11, 12]])" ] }, "execution_count": 80, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Create the following rank 2 array with shape (3, 4)\n", "a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])\n", "a" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Use slicing to pull out the subarray consisting of the first 2 rows and columns 1 and 2; b is the following array of shape `(2, 2)`:" ] }, { "cell_type": "code", "execution_count": 81, "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[2 3]\n", " [6 7]]\n" ] } ], "source": [ "b = a[:2, 1:3]\n", "print(b)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "A slice of an array is a view into the same data, so modifying it will modify the original array." ] }, { "cell_type": "code", "execution_count": 82, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2\n", "77\n" ] } ], "source": [ "print(a[0, 1]) \n", "b[0, 0] = 77 # b[0, 0] is the same piece of data as a[0, 1]\n", "print(a[0, 1]) " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "You can also mix integer indexing with slice indexing. However, doing so will yield an array of lower rank than the original array. \n", "\n", "**Note:** This is quite different from the way that MATLAB handles array slicing." ] }, { "cell_type": "code", "execution_count": 83, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 1 2 3 4]\n", " [ 5 6 7 8]\n", " [ 9 10 11 12]]\n" ] } ], "source": [ "# Create the following rank 2 array with shape (3, 4)\n", "a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])\n", "print(a)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Two ways of accessing the data in the middle row of the array.\n", "Mixing integer indexing with slices yields an array of lower rank,\n", "while using only slices yields an array of the same rank as the\n", "original array:" ] }, { "cell_type": "code", "execution_count": 84, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[5 6 7 8] (4,)\n", "[[5 6 7 8]] (1, 4)\n", "[[5 6 7 8]] (1, 4)\n" ] } ], "source": [ "row_r1 = a[1, :] # Rank 1 view of the second row of a \n", "row_r2 = a[1:2, :] # Rank 2 view of the second row of a\n", "row_r3 = a[[1], :] # Rank 2 view of the second row of a\n", "print(row_r1, row_r1.shape) \n", "print(row_r2, row_r2.shape)\n", "print(row_r3, row_r3.shape)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "We can make the same distinction when accessing columns of an array:" ] }, { "cell_type": "code", "execution_count": 85, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 2 6 10] (3,)\n", "[[ 2]\n", " [ 6]\n", " [10]] (3, 1)\n" ] } ], "source": [ "col_r1 = a[:, 1]\n", "col_r2 = a[:, 1:2]\n", "print(col_r1, col_r1.shape)\n", "print(col_r2, col_r2.shape)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Integer array indexing \n", "\n", "* When you index into numpy arrays using slicing, the resulting array view will always be a subarray of the original array. \n", "* In contrast, integer array indexing allows you to construct arbitrary arrays using the data from another array. \n", "\n", "Here is an example:" ] }, { "cell_type": "code", "execution_count": 86, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[1 2]\n", " [3 4]\n", " [5 6]]\n" ] } ], "source": [ "a = np.array([[1,2], [3, 4], [5, 6]])\n", "print(a)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "An example of integer array indexing. The returned array will have shape `(3,)`." ] }, { "cell_type": "code", "execution_count": 87, "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/plain": [ "array([1, 4, 5])" ] }, "execution_count": 87, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a[[0, 1, 2], [0, 1, 0]]" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "The above example of integer array indexing is equivalent to this:" ] }, { "cell_type": "code", "execution_count": 88, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1, 4, 5])" ] }, "execution_count": 88, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.array([a[0, 0], a[1, 1], a[2, 0]])" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "When using integer array indexing, you can reuse the same element from the source array:" ] }, { "cell_type": "code", "execution_count": 89, "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/plain": [ "array([2, 2])" ] }, "execution_count": 89, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a[[0, 0], [1, 1]]" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Equivalent to the previous integer array indexing example" ] }, { "cell_type": "code", "execution_count": 90, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "text/plain": [ "array([2, 2])" ] }, "execution_count": 90, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.array([a[0, 1], a[0, 1]])" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "One useful trick with integer array indexing is selecting or mutating one element from each row of a matrix:\n", "\n", "Create a new array from which we will select elements" ] }, { "cell_type": "code", "execution_count": 91, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 1 2 3]\n", " [ 4 5 6]\n", " [ 7 8 9]\n", " [10 11 12]]\n" ] } ], "source": [ "a = np.array([[1,2,3], [4,5,6], [7,8,9], [10, 11, 12]])\n", "print(a)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Create an array of indices" ] }, { "cell_type": "code", "execution_count": 92, "metadata": { "collapsed": true }, "outputs": [], "source": [ "b = np.array([0, 2, 0, 1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Select one element from each row of a using the indices in `b`." ] }, { "cell_type": "code", "execution_count": 93, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 1 6 7 11]\n" ] } ], "source": [ "print(a[np.arange(4), b]) # Prints \"[ 1 6 7 11]\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Mutate one element from each row of a using the indices in `b`." ] }, { "cell_type": "code", "execution_count": 94, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[11 2 3]\n", " [ 4 5 16]\n", " [17 8 9]\n", " [10 21 12]]\n" ] } ], "source": [ "a[np.arange(4), b] += 10\n", "print(a)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Boolean array indexing: Boolean array indexing lets you pick out arbitrary elements of an array. Frequently this type of indexing is used to select the elements of an array that satisfy some condition. Here is an example:" ] }, { "cell_type": "code", "execution_count": 95, "metadata": { "collapsed": true }, "outputs": [], "source": [ "a = np.array([[1,2], [3, 4], [5, 6]])" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Find the elements of a that are bigger than 2:" ] }, { "cell_type": "code", "execution_count": 96, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[False False]\n", " [ True True]\n", " [ True True]]\n" ] } ], "source": [ "bool_idx = (a > 2)\n", "print(bool_idx)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This returns a numpy array of Booleans of the same shape as a, where each slot of bool_idx tells whether that element of a is > 2." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "We use boolean array indexing to construct a rank 1 array consisting of the elements of a corresponding to the `True` values of `bool_idx`." ] }, { "cell_type": "code", "execution_count": 97, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[3 4 5 6]\n" ] } ], "source": [ "print(a[bool_idx])" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "We can do all of the above in a single concise statement:" ] }, { "cell_type": "code", "execution_count": 98, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[3 4 5 6]\n" ] } ], "source": [ "print(a[a > 2])" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "For brevity we have left out a lot of details about numpy array indexing; if you want to know more you should read the documentation." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Datatypes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Every numpy array is a grid of elements of the same type. Numpy provides a large set of numeric datatypes that you can use to construct arrays. Numpy tries to guess a datatype when you create an array, but functions that construct arrays usually also include an optional argument to explicitly specify the datatype. Here is an example:" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "int64 float64 float32\n" ] } ], "source": [ "import numpy as np\n", "x = np.array([1, 2]) # Let numpy choose the datatype\n", "y = np.array([1.0, 2.0]) # Let numpy choose the datatype\n", "z = np.array([1, 2], dtype=np.float32) # Force a particular datatype\n", "\n", "print(x.dtype, y.dtype, z.dtype)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can read all about numpy datatypes in the [documentation](http://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Array math" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Basic mathematical functions operate elementwise on arrays, and are available both as operator overloads and as functions in the numpy module:" ] }, { "cell_type": "code", "execution_count": 100, "metadata": { "collapsed": true }, "outputs": [], "source": [ "x = np.array([[1,2],[3,4]], dtype=np.float64)\n", "y = np.array([[5,6],[7,8]], dtype=np.float64)" ] }, { "cell_type": "code", "execution_count": 101, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 6. 8.]\n", " [ 10. 12.]]\n" ] } ], "source": [ "print(x + y)" ] }, { "cell_type": "code", "execution_count": 102, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 6. 8.]\n", " [ 10. 12.]]\n" ] } ], "source": [ "print(np.add(x, y))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Elementwise difference" ] }, { "cell_type": "code", "execution_count": 103, "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[-4. -4.]\n", " [-4. -4.]]\n", "[[-4. -4.]\n", " [-4. -4.]]\n" ] } ], "source": [ "print(x - y)\n", "print(np.subtract(x, y))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Elementwise product" ] }, { "cell_type": "code", "execution_count": 104, "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 5. 12.]\n", " [ 21. 32.]]\n", "[[ 5. 12.]\n", " [ 21. 32.]]\n" ] } ], "source": [ "print(x * y)\n", "print(np.multiply(x, y))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Elementwise division - both produce the same result." ] }, { "cell_type": "code", "execution_count": 105, "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 0.2 0.33333333]\n", " [ 0.42857143 0.5 ]]\n", "[[ 0.2 0.33333333]\n", " [ 0.42857143 0.5 ]]\n" ] } ], "source": [ "print(x / y)\n", "print(np.divide(x, y))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Elementwise square root; " ] }, { "cell_type": "code", "execution_count": 106, "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 1. 1.41421356]\n", " [ 1.73205081 2. ]]\n" ] } ], "source": [ "print(np.sqrt(x))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Important note:\n", "\n", "* Unlike MATLAB, `*` is elementwise multiplication, not matrix multiplication. \n", "* We instead use the `numpy.dot()` function to compute inner products of vectors, to multiply a vector by a matrix, and to multiply matrices. \n", "* `dot()` is available both as a function in the `numpy` module and as an instance method of array objects." ] }, { "cell_type": "code", "execution_count": 107, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "219\n", "219\n" ] } ], "source": [ "x = np.array([[1,2],[3,4]])\n", "y = np.array([[5,6],[7,8]])\n", "\n", "v = np.array([9,10])\n", "w = np.array([11, 12])\n", "\n", "# Inner product of vectors; both produce 219\n", "print(v.dot(w))\n", "print(np.dot(v, w))" ] }, { "cell_type": "code", "execution_count": 108, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[29 67]\n", "[29 67]\n" ] } ], "source": [ "# Matrix / vector product; both produce the rank 1 array [29 67]\n", "print(x.dot(v))\n", "print(np.dot(x, v))" ] }, { "cell_type": "code", "execution_count": 109, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[19 22]\n", " [43 50]]\n", "[[19 22]\n", " [43 50]]\n" ] } ], "source": [ "# Matrix / matrix product; both produce the rank 2 array\n", "# [[19 22]\n", "# [43 50]]\n", "print(x.dot(y))\n", "print(np.dot(x, y))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Numpy provides many useful functions for performing computations on arrays; one of the most useful is `sum`:" ] }, { "cell_type": "code", "execution_count": 110, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[1 2]\n", " [3 4]]\n" ] } ], "source": [ "x = np.array([[1,2],[3,4]])\n", "print(x)" ] }, { "cell_type": "code", "execution_count": 111, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "10" ] }, "execution_count": 111, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.sum(x) # Compute sum of all elements; prints \"10\"" ] }, { "cell_type": "code", "execution_count": 112, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "array([4, 6])" ] }, "execution_count": 112, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.sum(x, axis=0) # Compute sum of each column; prints \"[4 6]\"" ] }, { "cell_type": "code", "execution_count": 113, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "array([3, 7])" ] }, "execution_count": 113, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.sum(x, axis=1) # Compute sum of each row; prints \"[3 7]\"" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "You can find the full list of mathematical functions provided by numpy in the [documentation](http://docs.scipy.org/doc/numpy/reference/routines.math.html).\n", "\n", "Apart from computing mathematical functions using arrays, we frequently need to reshape or otherwise manipulate data in arrays. The simplest example of this type of operation is transposing a matrix; to transpose a matrix, simply use the T attribute of an array object:" ] }, { "cell_type": "code", "execution_count": 114, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[1 2]\n", " [3 4]]\n", "[[1 3]\n", " [2 4]]\n" ] } ], "source": [ "print(x)\n", "print(x.T)" ] }, { "cell_type": "code", "execution_count": 115, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1 2 3]\n", "[1 2 3]\n" ] } ], "source": [ "v = np.array([1,2,3])\n", "print(v) \n", "print(v.T)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Is `numpy` actually faster than 'plain' Python?" ] }, { "cell_type": "code", "execution_count": 116, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import random\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 117, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2.1 ms ± 93 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" ] } ], "source": [ "%timeit sum([random.random() for _ in range(random.randint(10000,10100))])" ] }, { "cell_type": "code", "execution_count": 118, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "177 µs ± 3.67 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)\n" ] } ], "source": [ "%timeit np.sum(np.random.random(random.randint(10000,10100)))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Broadcasting" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Broadcasting is a powerful mechanism that allows numpy to work with arrays of different shapes when performing arithmetic operations. \n", "* Frequently, we have a smaller array and a larger array, and \n", "* we want to use the smaller array multiple times to perform some operation on the larger array." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "For example, suppose that we want to add a constant vector to each row of a matrix. We could do it like this:" ] }, { "cell_type": "code", "execution_count": 119, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 1, 2, 3],\n", " [ 4, 5, 6],\n", " [ 7, 8, 9],\n", " [10, 11, 12]])" ] }, "execution_count": 119, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.array([[1,2,3], [4,5,6], [7,8,9], [10, 11, 12]])\n", "x" ] }, { "cell_type": "code", "execution_count": 120, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1, 0, 1])" ] }, "execution_count": 120, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v = np.array([1, 0, 1])\n", "v" ] }, { "cell_type": "code", "execution_count": 121, "metadata": { "collapsed": true, "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "y = np.empty_like(x) # Creates an empty matrix with the same shape as x\n", "\n", "# Add the vector v to each row of the matrix x with an explicit loop\n", "for i in range(4):\n", " y[i, :] = x[i, :] + v" ] }, { "cell_type": "code", "execution_count": 122, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 2, 2, 4],\n", " [ 5, 5, 7],\n", " [ 8, 8, 10],\n", " [11, 11, 13]])" ] }, "execution_count": 122, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "* This works; however when the matrix `x` is very large, computing an explicit loop in Python could be slow. \n", "\n", "* Note that adding the vector `v` to each row of the matrix `x` is equivalent to forming a matrix `vv` by stacking multiple copies of `v` vertically, then performing elementwise summation of `x` and `vv`. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "We could implement this approach like this:" ] }, { "cell_type": "code", "execution_count": 123, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[1, 0, 1],\n", " [1, 0, 1],\n", " [1, 0, 1],\n", " [1, 0, 1]])" ] }, "execution_count": 123, "metadata": {}, "output_type": "execute_result" } ], "source": [ "vv = np.tile(v, (4, 1)) # Stack 4 copies of v on top of each other\n", "vv" ] }, { "cell_type": "code", "execution_count": 124, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 2, 2, 4],\n", " [ 5, 5, 7],\n", " [ 8, 8, 10],\n", " [11, 11, 13]])" ] }, "execution_count": 124, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y = x + vv # Add x and vv elementwise\n", "y" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Numpy broadcasting allows us to perform this computation without actually creating multiple copies of v. Consider this version, using broadcasting:" ] }, { "cell_type": "code", "execution_count": 125, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 2, 2, 4],\n", " [ 5, 5, 7],\n", " [ 8, 8, 10],\n", " [11, 11, 13]])" ] }, "execution_count": 125, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.array([[1,2,3], [4,5,6], [7,8,9], [10, 11, 12]])\n", "v = np.array([1, 0, 1])\n", "y = x + v # Add v to each row of x using broadcasting\n", "y" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The line `y = x + v` works even though `x` has shape `(4, 3)` and `v` has shape `(3,)` due to broadcasting; this line works as if v actually had shape `(4, 3)`, where each row was a copy of `v`, and the sum was performed elementwise." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Broadcasting two arrays together follows these rules:\n", "\n", "1. If the arrays do not have the same rank, prepend the shape of the lower rank array with 1s until both shapes have the same length.\n", "2. The two arrays are said to be compatible in a dimension if they have the same size in the dimension, or if one of the arrays has size 1 in that dimension.\n", "3. The arrays can be broadcast together if they are compatible in all dimensions.\n", "4. After broadcasting, each array behaves as if it had shape equal to the elementwise maximum of shapes of the two input arrays.\n", "5. In any dimension where one array had size 1 and the other array had size greater than 1, the first array behaves as if it were copied along that dimension\n", "\n", "If this explanation does not make sense, try reading the explanation from the [documentation](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) or this [explanation](http://wiki.scipy.org/EricsBroadcastingDoc).\n", "\n", "Functions that support broadcasting are known as universal functions. You can find the list of all universal functions in the [documentation](http://docs.scipy.org/doc/numpy/reference/ufuncs.html#available-ufuncs)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "## Some applications of broadcasting:" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "**Compute outer product of vectors**" ] }, { "cell_type": "code", "execution_count": 126, "metadata": { "collapsed": true, "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "v = np.array([1,2,3]) # v has shape (3,)\n", "w = np.array([4,5]) # w has shape (2,)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "To compute an outer product, we\n", "* reshape `v` to be a column vector of shape `(3, 1)`, and\n", "* broadcast it against `w` to yield an output of shape `(3, 2)`, which is the outer product of `v` and `w`:" ] }, { "cell_type": "code", "execution_count": 127, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 4 5]\n", " [ 8 10]\n", " [12 15]]\n" ] } ], "source": [ "print(np.reshape(v, (3, 1)) * w)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "**Add a vector to each row of a matrix**" ] }, { "cell_type": "code", "execution_count": 128, "metadata": { "collapsed": true, "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "x = np.array([[1,2,3], [4,5,6]])" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "`x` has shape `(2, 3)` and `v` has shape `(3,)` so they broadcast to `(2, 3)`, producing the following matrix:" ] }, { "cell_type": "code", "execution_count": 129, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[2 4 6]\n", " [5 7 9]]\n" ] } ], "source": [ "print(x + v)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "Add a vector to each column of a matrix `x` has shape `(2, 3)` and `w` has shape `(2,)`.\n", "\n", "* If we transpose `x` then it has shape `(3, 2)` and can be broadcast against `w` to yield a result of shape `(3, 2)`;\n", "* transposing this result yields the final result of shape `(2, 3)` which is the matrix `x` with the vector `w` added to each column. \n", "\n", "This gives the following matrix:" ] }, { "cell_type": "code", "execution_count": 130, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 5 6 7]\n", " [ 9 10 11]]\n" ] } ], "source": [ "print((x.T + w).T)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "Another solution is to reshape `w` to be a row vector of shape `(2, 1)`; we can then broadcast it directly against `x` to produce the same output." ] }, { "cell_type": "code", "execution_count": 131, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 5 6 7]\n", " [ 9 10 11]]\n" ] } ], "source": [ "print(x + np.reshape(w, (2, 1)))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "**Multiply a matrix by a constant**\n", "\n", "* `x` has shape `(2, 3)`. \n", "* `numpy` treats scalars as arrays of shape `()`;\n", "* they can be broadcasted together to shape `(2, 3)`, \n", "* producing the following array:" ] }, { "cell_type": "code", "execution_count": 132, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 2 4 6]\n", " [ 8 10 12]]\n" ] } ], "source": [ "print(x * 2)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Broadcasting typically makes your code more concise and faster, so you should strive to use it where possible." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" } }, "source": [ "So far, we touched on many of the important things that you need to know about numpy, but is far from complete. \n", "* Check out the [numpy reference](http://docs.scipy.org/doc/numpy/reference/) to find out much more about numpy.\n", "* If you are already familiar with MATLAB, you might find this [tutorial](http://wiki.scipy.org/NumPy_for_Matlab_Users) useful to get started with `numpy`.\n", "* Nicolas P. Rougier's [Numpy tutorial](http://www.labri.fr/perso/nrougier/teaching/numpy/numpy.html) ***highly recommended***." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# [Matplotlib](http://matplotlib.org/)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Matplotlib is a plotting library. \n", "* Provides a plotting system similar -and in my opinion better- to that of MATLAB." ] }, { "cell_type": "code", "execution_count": 133, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "By running this special IPython notebook *magic* command, we will be displaying plots inline and with appropiate resolutions for *retina* displays. Check the docs for more options." ] }, { "cell_type": "code", "execution_count": 134, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%matplotlib inline\n", "%config InlineBackend.figure_format = 'retina'" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Plotting" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The most important function in `matplotlib` is `plot`, which allows you to plot 2D data. \n", "Here is a simple example:" ] }, { "cell_type": "code", "execution_count": 135, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nE/8flz5ktNbNja4AAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": { "image/png": { "height": 250, "width": 388 } }, "output_type": "display_data" } ], "source": [ "# Compute the x and y coordinates for points on a sine curve\n", "x = np.arange(0, 3 * np.pi, 0.1)\n", "y_sin = np.sin(x)\n", "\n", "# Plot the points using matplotlib\n", "plt.plot(x, y_sin);" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "With just a little bit of extra work we can easily plot multiple lines at once, and add a title, legend, and axis labels:" ] }, { "cell_type": "code", "execution_count": 136, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "image/png": { "height": 277, "width": 402 } }, "output_type": "display_data" } ], "source": [ "y_cos = np.cos(x)\n", "plt.plot(x, y_sin)\n", "plt.plot(x, y_cos)\n", "plt.xlabel('x axis label')\n", "plt.ylabel('y axis label')\n", "plt.title('Sine and Cosine')\n", "plt.legend(['Sine', 'Cosine']);" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Subplots " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can plot different things in the same figure using the subplot function. Here is an example:" ] }, { "cell_type": "code", "execution_count": 137, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA04AAAIvCAYAAABDf4vKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAWJQAAFiUBSVIk8AAAIABJREFUeJzs3Xd4VFX+BvD3zEx6JSE91IQAgRBIo9oQ1EWRotJLQhN7\n/a26rrprXdfVtSI9FEEFRcGGrIqoQEijQ4AkpPfe28z9/TGTm0SaYJI75f08j09yTjLh6yPeyXvv\nOecrJEkCERERERERXZpK6QKIiIiIiIiMHYMTERERERHRFTA4ERERERERXQGDExERERER0RUwOBER\nEREREV0BgxMREREREdEVMDgRERERERFdAYMTERERERHRFTA4ERERERERXQGDExERERER0RUwOBER\nEREREV0BgxMREREREdEVMDgRERERERFdAYMTERGZNCFEtBBCEkL8rHQtRERkvjRKF0BERNRKCKEB\nMA/ALAChANwB1AIoAJAO4FcAP0mSFK9YkUREZJEYnIiIyCgIITwAfAsgot10AwABYCCAQQAmAagE\n4NrueyoBnAGQ1T2VEhGRJRKSJCldAxEREYQQ3wO4BUA1gJcAbJYkqcDwNScAIwFMA3C7JEl9laqT\niIgsE4MTEREpTggxCMBpw/AeSZI+u8z32kqS1NA9lREREenxcAgiIjIGIe0+//py3/j70HS5wyGE\nEBmGr90ohHATQrwlhDgvhGgUQuQKIdYIIXwu9+cJIfoKId4TQpwRQtQJIaqFEElCiKeEEA5X8y9J\nRESmi8GJiIiMjV8X/Ex/AMkAHgPgCUAC4AtgCYADQogeF3uREGI69E/CHgQQZHidDYAwAP8CcFAI\n4dUF9RIRkZFhcCIiImOQ1O7zDwwHRXSm9wCUAxgjSZIDAEcAUwBUAOgL4Jnfv0AIEQngE+gPUnoF\ngL/htXYAxgBIhP5J2aZOrpWIiIwQgxMRESlOkqR0tAWQWwHkCCF+EEK8LISY0glBqhHABEmSDhr+\nvBZJknYBeNnw9bsv8pr/ArAC8KAkSX+XJCnX8Fqt4efcCiAfwC1CiIiLvJ6IiMwIgxMRERmLpQDe\nAtAEwBrAzQCeBfAlgCIhRLwQYq4QQlzDz14tSVLpRea/NHzs136/khAiAMBY6J9IrbvYD5QkqQzA\nd4bhxGuoiYiITAj7OBERkVGQJKkJwBNCiNehP3b8Buh7OgVC38spEsBHAKYIIWZJkqS7ih+fcIn5\n3Hafu0LfbBfQL8UD9Ev6ci6T1RwNH3tdRS1ERGSCGJyIiMioSJJUBGCV4R8YDl+YDOB56APKPQD2\nA3jnKn5s9SX+rIZ2ociq3ZdaT9rTAPgjhz/YX0UtRERkgrhUj4iIjJokSYWSJK2F/iS7QsP0oi7+\nY1vfH49KkiT+wD/RXVwPEREpjMGJiIhMgiRJJQB2GoZBXfzHtQY0LsEjIiIADE5ERGRaWvcgNXXx\nn3PQ8NFNCDGyi/8sIiIyAQxORESkOCFEP8NJdpf7HnsAUw3DI11ZjyRJKQDiDMN/CyGsLvW9Qgh7\nIYRNV9ZDRETKY3AiIiJjMATAGSHEDiHEDCFE6+EMEEI4CCEmA/gVQD/D9NUcDHGtHoa+/9P1AH4U\nQowTQqgMNamFEMOFEP8EkI62wySIiMhM8VQ9IiIyBs0A1NAfQz4NAIQQ9dAvyXNp931aAM9LkrSj\nqwuSJClBCDENwMcAroM+uDUKIWoMNbV/D5W6uh4iIlIWgxMRESlOkqTvhRADoT92fByAoQD8oO+T\nVAH9U51fAKyVJOlkN9b1nRAiCMBDACZB31PK1VDTGUNN2yVJyuyumoiISBlCkniTjIiIiIiI6HK4\nx4mIiIiIiOgKGJyIiIiIiIiugMGJiIiIiIjoChiciIiIiIiIroDBiYiIiIiI6AoYnIiIiIiIiK6A\nwYmIiIiIiOgKGJyIiIiIiIiugMGJiIiIiIjoChiciIiIiIiIrkCjdAHdQQhxHoAzgAyFSyEiIiIi\nou7TF0CVJEn9/uwPsojgBMDZzs7ObfDgwW5KF0JERERERN3j9OnTqK+v75SfZSnBKWPw4MFuSUlJ\nStdBRERERETdJDw8HMnJyRmd8bOMYo+TEOJuIcR7QohfhRBVQghJCPGR0nUREREREREBxvPE6e8A\nQgHUAMgBMEjZcoiIiIiIiNoYxRMnAI8BCIL+AIf7FK6FiIiIiIioA6N44iRJ0t7Wz4UQSpZCRERE\nRER0AaMITkSmSpIkNGslNGt1aNbqoFGr4GCt5g0AIiKiP0iSJEgSIBk+10mABAkqIWClNpbFUURm\nFpyEEJc6No97puiqVNY3I7O0Fpmlde0+1iGnvA51zVo0t+jQrJXQpNVd8FobjQoeTjbo6WjT9tHR\nGh5ONgjycsJQPxc42JjV/3pEREQXkCQJhVWNyCmvQ25FPXIr6pFXUY/c8tbPG1DT2HLZn9HD3gre\nLnbwdbGFt4stfF3t4O1sCx9XWwR4OMLL2bab/m2IzCw4EV2LphYdjuVU4GBaKeLOl+JUXhXK65qv\n+ec1tuiQU16PnPKL9wxQCSDQ0xHD/F0xzN8Fw/xdMdjHCTYa9TX/mUREREpr0eqQUlCNhIwyJGaU\nIyGjDEXVjX/qZ5bXNaO8rhmn86su+nU/VzuE9emB8N6uCO/jhkE+TnxKRV3GrIKTJEnhF5s3PIkK\n6+ZyyEi1aHU4nluJg+mlOJhWisSMctQ3a6/551mp9UsJrNQqNLZo0dB84VOo9nQScLawBmcLa/BZ\nUo78M4b6ueCWYG/cOsQL/T0cr7keIiKi7qDTSUjOKsf+1FIkZpYhObMctU3X/n4qBKASAsLwuVan\nX7Z3Oa1Psr46mgcAsLVSIdTfFeF9emBCsBdG9HLl8nnqNGYVnIguRaeTEHe+FF8k52L3iQJUX2Fp\ngI1GhT7u9ujj7oA+bvbo09MBfd3t0dvNHs62VrDSqPSBSaWCStV2QZYkCbVNWpRUN6K4prHDx9yK\nBpzIrcS5ouoL3giatRIOZ1XgcFYFXt+dgiAvR9w2xBu3DPHGEF9nXvSJiMgoSJKEE7lV2HU0F18f\ny0d+ZcNlv9/RRoP+Hg7wdbGDXw87+Lrawc/VDv6Gz13trDq8j7an1UkorWlEXmUDCirrkV/ZIP+T\nW16HU/lVF9ysbGjW4dD5Mhw6X4YVP6fBz9UOtw/zwR3DfBDi58L3U/pTGJzIrKUWVWNHci52HslD\nbsXFl84BQC83O4zu745R/d0R2dcNfq52l7yQX44QAo42GjjaaNC3p8NFv6e2sQUn86pwLKcCR3Mq\ncTynAhmldR2+R/9EKhXv/pQK/x52uG2IN+6O8Mcgb+erromIiOjPSi2qxq4jefjqWD7Ol9Re8vu8\nnW0R2c8NkX17ILKvG4K8nKC+hvdTAFCrBDydbeHpbAv0cr3g681aHVLyq5GUWYbkrAokZZZf8F6f\nW1GP1b+kY/Uv6ejtZo/bh/ng9hAf3pSkayIk6QrPQLuZEOJGAHsBbJEkaV4n/cyksLCwsKSkS50d\nQeakrLYJu47kYsfhXBzLqbzo9/i62GJUgDtG93fH6AB3+Pew7+YqOyqrbcLelCJ8f7IA+84Wo7Hl\n4sv9RvV3Q/SYvpgw2AsaruEmIqIu1NCsxWdJOfgoLhMpBdUX/Z4e9la4dYg3RvV3R0TfHvBztVM0\nkBRWNSA5sxx7zxTh+5OFqKy/+J7lIC9HLBrbD1NH+MHWinuMzVl4eDiSk5OTL7Wl52owOJHZyK2o\nx5pf0vFJQtZF9xn1sLfC5FBfTA/zR6i/8T6ur2tqwb4zxfj+ZAF+PF100WWFfq52mD+6D2ZG9EIP\nB2sFqiQiInNVWtOITQczsTkuE2W1TRd83dFGg1uGeGFyqC/GBfY02sMYmlp02J9agq+P5WPPqQJU\nN1z4furuYI15o/pg/ug+6Oloo0CV1NXMLjgJIaYCmGoYegO4FUA6gF8NcyWSJD35J34+g5MZSy2q\nxoc/p2PnkVy0/G7zkLVahZsHe2LaCD/cONAT1hrjvLhfSlOLDgfSSrA9KQe7TxRA+7t/PxuNClOH\n+yFmXF8u4yMioj/lfEkt1v6ajs+Sci5Y+WCj0b+fTh7mi5sGeZrcU5rGFi1+PVuCr4/lYc+pQtT9\n7hALa40K00f4YfG4fhjg5aRQldQVzDE4/QPAC5f5lkxJkvr+iZ/P4GSGjmZXYMXPqdhzqhC//2sc\n7OOMuaN6444QX7jYWylTYCfLr6zHlrgsbI3PuugdwMmhvnhiYtAl91YRERFdzJHsCqz8OQ3fnyq4\n4P3Uz9UOi8b1w4wIfzjZmsf7aVVDMz6Jz8KG/RnIu8jhFjcEeeCxiUEYfpF9VWR6zC44dTUGJ/Ny\nPKcSr+9OwW+pJRd8LaqfG+6/MQA3BHkY7VK8P6uhWYuvjuZhw4EMnMzr2NdCoxKYFdULD48foN9M\nS0REdAlZpXV4fXcKvjmef8HXhvg6Y9n1/XF7iI/Z7qlt1urw3YkCrP01/aJ7ou8Y5oO/3joIvd2V\n3QdNfw6D01VicDIPRdUNeGP3GXyWnHPBHbEJgz1x340BCO/jpkxxCpAkCUmZ5Vj1Szr+d6qww9fs\nrNRYNK4v7r0hAM5mcoeQiIg6R2VdM97few4bD2SiSdtxSd6NAz2w7Lr+GB3gbrY3IH9PkiQkZpZj\n7a/pF6xisVILLBjdFw+ND4SrPfcUmyIGp6vE4GTaGlu0WP9bBt7/6VyHxnpqlcDkYT5YfmOAxe/v\nScosx+u7UxB/vqzDvKu9Fe6/MQALRvc1ufXoRETUuZq1OnwUl4l3fjyHirqOp83dPswHD48fgIHe\nlr2/J724Bm98fwbfnSjoMO9sq8GD4wP5fmqCGJyuEoOTaZIkCXtOFeKVb04jq6xjn6MJgz3xt0mD\n0d/DUaHqjI8kSdh3thiv7z6D0/kdl/D16+mAV6eFYHSAu0LVERGRUlrfT//1XcoFPZjCervi2duD\nEd6nh0LVGaekzDK88s1pJGdVdJj3c7XDM5MG4fYQH4t5ImfqGJyuEoOT6TlbWI1/7DqJA2mlHeYH\neDriuTuCcX2Qh0KVGT+dTsJXx/Lw5p6zFwTOGRH++NukwVxuQERkIfIr6/G3Hcex90xxh/lebnZ4\n+rbBmBTizQBwCZIkYfeJAry+O+WCRvU3D/LEy9OGwsfFTqHq6I9icLpKDE6mo0Wrw8p9aXjnx3No\n1rb93XSxs8LjE4Mwd2Rvs92k2tmaWnTYeigTb+4526EXVE9Hazx3RzDuDPXlmyURkZmSJAmfJmTj\nlW9Od3gPcLLV4KHxgVg4pi9sNFxy9kc0a3XYeigL7/x4rsOptk42GjwzaTBmRfaCSsX3U2PF4HSV\nGJxMw7nCajyx/WiHk23UKoF5I3vj0QlBbPR6jQqrGvCPXScvWK9940APvDRlKHq58bQgIiJzkl1W\nh6d3HMP+1LZVG0IA80b2wWMTg+DG99NrUtXQjP98fwabDmZ2mB/V3w3/mj6M7UCMFIPTVWJwMm5a\nnYQ1v6bjrT1nO5zuM7yXK/599zAEsRFdp9hzsgDP7zyJgqq2nhV2Vmo8cUsQFo3tx7tlREQmTqeT\nsDkuE6/vTunQ4LVfTwf8++5hiOxrOSfPdqX482V46vNjHfaL2WhU8vspV8YYFwanq8TgZLzSimvw\n5PajONxu86W1WoXHbwnCknG8+HS26oZmvLnnLDYezOhw3Op1A3rizXtC2fuJiMhEnS+pxV8/O4qE\njHJ5TiWApdf1x2MTg3gSXCdraNbinR/PYfUv6dDq2t5Qh/m74K0ZwxHoycOrjAWD01VicDI+Op2E\n9fvP443vz6Cxpe0pU4ifC96cEcqnTF3scFY5ntlxHCkF1fKcu4M1/jMjFDcN9FSwMiIiulqfJ+Xg\n71+eQH1z21OmIC9H/PvuUAzv5apgZebveE4l/vr5sQ6n2dpbq/Hy1KGYHuavYGXUisHpKjE4GZfy\n2iY8tu0Ifm53wo+VWuCRmwfg3hsCYMWnTN2iWavD2z+cxYqf0zo8fVo8rh/+ettAbhomIjJydU0t\neH7nSXyWlCPPaVQC998YgAfGB/I63k2atTqs/iUd7/xwrsOWg7vC/PHilCFwsNEoWB0xOF0lBifj\ncTirHA9uPYzcinp5LtjHGW/OCMVgH8tuYquUA6klePTTIyiqbpTnhvg6473ZI9gni4jISJ0rrMb9\nW5JxrqhGngvwcMA7s0ZgqJ+LgpVZrlN5VXjw42SkF7ftfQrwcMD7c8L4O46COjM48dY+dQtJkrBh\n/3nMWHWwQ2i694b++PKBsbygKGhMYE/sfvR63DyobYneybwq3PHeb9iemA1LuLlCRGRKtidm4873\n93cITdNG+GHXg+MYmhQU7OuMrx4ch+lhfvJcWnEtpn6wH1sPZfH91AzwiRN1ueqGZjz9+XF8czxf\nnnO21eCtGcMxIdhLwcqoPUmSsPFABl79NqXDUoO7w/3x8tSh3FhMRKSwuqYWPPflSXye3LY0z9ZK\nhRfvHIp7IvzZm8+IfJaUg+d+t+/sjmE+eG16CJxsrRSszPLwiROZjJSCKkx5f3+H0BTi54JvHr6O\nocnICCEQPbYfvnxgLAI82npRfJaUg1mr41DY7hhzIiLqXqlFNbjz/f0dQlOAhwN2PjAOMyJ7MTQZ\nmbvD/fHVQ2MxyLvtsKuvj+Xjzvf3I7Xdk0IyLQxO1GW+OJyDqR/sR3q7PgfzRvXG9uWj2XTViAX7\nOuOrh8bhrnanAR3JrsDk937D4azyy7ySiIi6wi9nizFtRcdfuKeH6ZfmDfTmKbTGKtDTCV8+MBZz\nRvaW586X1GLaiv3Yd7b4Mq8kY8XgRJ1Op5PwxvcpeOzTo2ho1i/5srdW451Zw/Hy1BAu+TIB9tYa\n/OeeYXj+jmCoDY1xi6obMXNVXIfTm4iIqOu07g+Ojo1HdUMLAP3SvDfuHoa3ZgznaW0mwNZKjVen\nheDd2SNga6X/tbu6oQUxsfFY99t57nsyMfw/jjpVfZMWT2w/gm+PF8hzgZ6OWDkvDIGevCtmSoQQ\nWDSuH4K8nPDA1mRU1jejSavDk9uP4lReFf42aRAbFBMRdZFmrQ4v7DqJrYey5DkfF1usWRDBAyBM\n0J2hvujf0wFLNyUiv7IBOgl46etTOFtQjZemDoW1hu+npoD/lajTFFU1YObqgx1C040DPfDF/WMY\nmkzYuAE9sevBsQjyajuafP3+81gYG4/y2iYFKyMiMk8VdU1YuD6+Q2ga3ssVOx8Yy9Bkwob6uWDn\ng2MxondbU+JPE7Mxd20cSmoaL/NKMhYMTtQpTuVVYcoH+3Esp1Keix7TF2sXRPD0GDPQx90BO+4f\ni1uHtB3osT+1FFNX7EdGuz1sRET056QW1WDqB/txIK1Unrsz1BefLBsFT2dbBSujzuDpZIuPl47q\ncGR5QkY5pry/H6fzqxSsjP4IBif60344VYi7Vx5AfqX+1DW1SuClKUPwjzuHcCmXGXG00eDDueF4\ndMIAeS6ztA53fXgAR7IrFKyMiMg8tB4CkVFaJ889eUsQ3pk1nPuDzYitlRpv3hOKv00ahNbDEHMr\n6nHXhwew90yRssXRZfG3WrpmkiRh7a/pWLo5EXVN+j4FTjYarI+OxPzRfZUtjrqESiXw6IQgrJwX\nBhvDeuzS2ibMXh2Hn1IKFa6OiMh07UjOwaINCfIhEHZWaqycF4YHxw/gUeNmSAiBZdcHYO2CCDga\nDvmoa9JiycZEfM5DmIwWgxNdE51OwsvfnMbL35xG64Ew/j3s8Pn9Y3BDkIeyxVGXu22oD7YuHQVX\ne/0yzPpmLZZuSsKnCVlXeCUREf3eml/S8fi2o2jR6d9QfVxssX35aNw21Efhyqir3TzYCzvuHwM/\nVzsAgFYn4YntR7FyXxpP3DNCDE501Zq1Ojz52VGs++28PBfepwd2PjAWQV48BMJShPfpgc/vGwP/\nHm0X+6c+P453fjjHiz0R0R+g00l49dvTeOXb0/LcIG997x8eAmE5grycsOP+MR2a5f7ruxS89PVp\n6HR8PzUmDE50VRqatbjvoyTsSM6V524b4o0tS0bC3dFGwcpICQEejthx3xgE+zjLc//94Sz+9sVx\ntGh1ClZGRGTcWm9Crv4lXZ6L6uuGT+8dDS8eAmFxvJxtsW35aIzs5ybPrd9/Ho9+egRNLXw/NRYM\nTvSHVTU0Y8G6ePxwum3j4uyoXvhgbhg3rVowT2dbfHrvKIwL7CnPfRyfjXs3J6HesPeNiIja1DW1\nYNmmxA43IW8J9sKmxVFwseNJtJbK2dYKGxdF4S9DveW5XUfzsGhDAmoaWxSsjFoxONEfUlTdgJmr\n4hCfUSbP3X9jAF6dFgK1iptWLZ2TrRXWR0di2oi241V/TCnCwvXxvNgTEbVTXtuEuWsPYe+ZYnlu\nVmQvrOBNSIL+xL3354Rh3qje8txvqSWYvToOxdXs9aQ0Bie6ouyyOtyz8mCH/gLPThqMv942iCf9\nkMxao8Kb94Ri+Q0B8lx8Rhnmrj2EyrpmBSsjIjIO+ZX1uGfVQRzOamvh8ND4QLw2PYTtO0imb+sy\nFI9PDJLnjudWYsaqg8ivrFewMuL/pXRZKQVVuOvDA8g09JRQqwT+c08oll7fX+HKyBipVAJP/2UQ\nnp00WJ47ml2B2WviUMqu6ERkwXLK6zBzVRxSi2oAAEIA/5gcjCduGcibkHQBIQQevnkAXpsegtaF\nPedLajFj1UFkl9Vd/sXUZRic6JJO5FZi1uo4FBkeDVtrVFg5Lxx3h/srXBkZu6XX98dLU4bI41P5\nVfq/S1UNClZFRKSMrFJ9aMoy/MJrpRZ4d9YIRI/tp3BlZOxmR/XGirlhsFLr01N2WT1mrY5DRkmt\nwpVZJgYnuqjjOZWYu/YQKgxLrJxsNNi0KAoTg70UroxMxfzRffHG3cPkO2XnimowY9VB5FZwmQER\nWY7zJbWYubrt2met1t+EnBzqq3BlZCpuG+qDVfPDYW1oPJ9bUY+Zqw/KTy+p+zA40QWOZldg7to4\nVNbrQ5OzrQZblo7EqP7uCldGpuaeiF54e9YI+QCRjNI6zFh5EJmlvFNGROYvtagaM1cdRH6l/mm7\njUaFNQsjcPNg3oSkqzN+kBfWLoiArZX+V/fCqkbMWn0QZwqqFa7MsjA4UQfJWeWYt/YQqhr0J6G5\n2Flh69JRGObvqnBlZKruDPXFh3PDYK1uu1N2z8qDSC3ixZ6IzNeZguoOy91trVRYHx2JG4I8FK6M\nTNX1QR6IjY6CvbX+9MWSmibMWn0QJ3IrFa7McjA4kSwpswwL1sWj2nB8dA97K2xdOpLdy+lPu2WI\nN9YsjICNYZlBUXUjZq6Kw7lChiciMj8n8yoxa/VBlNQ0AQDsrdXYEBOFse363RFdi9EB7ti0KAqO\nNhoAQHldM+asicPR7IorvJI6A4MTAQASMvShqbXnjpuDNbYuHYUhvgxN1DluCPLAxkVtd8pKa5sw\nZ+0hpBVzjTYRmY9jORWYs+YQyg17hB1tNNi8OIrL3anTRPR1w0dLRsLZVh+eqhpaMHftIRzOKle4\nMvPH4ESISy/FwvXxqG3SAgB6Olrj46WjMNjHWeHKyNyM6u+OzYuj4GAIT8XVjZizhqcDEZF5OJFb\niXlrD8l7hJ1sNfhoyUiE93FTuDIyN8N7uWLr0lHoYW8FAKhpbMGC9fE4nsNle12JwcnCxZ8vQ0xs\nAuoMocnDyQafLBuFgd5OCldG5iq8jxtiY6JgZ6UPT4VV+vDEvhREZMrOFFRj/rq2PcKu9lb4eOko\nDO/FPcLUNYb6ueCTZaPh5mANAKhuaMH89YdwOr9K4crMF4OTBTuSXYFFGxJQ36wPTZ6G0BToydBE\nXSuqnxvWR0fKpwPlVTZg1uo45JQzPBGR6UktqsHctXHy8jxnWw0+Wsw9wtT1Bno74aPFI+Fip3/y\nVFHXjHlrD3EPcRdhcLJQJ/MqsWDdIXlPU+uTpgAPR4UrI0sxOsAdaxdEygdG5FbUY/aaOOSxzxMR\nmZDM0lrMXRsnHwThaKPBJoYm6kbBvs7YvDgKToYDI1r3EKdzD3GnY3CyQKlF1Zi/Ll5eTtDD3gpb\nloxEf4Ym6mbjBvTE6gUR8lHl2WX1mLMmDgWGnidERMYsp7wOc9YcQmGV/shx/el5kVyeR91umL8r\nNl6wh/gQskq5kqMzMThZmIySWsxZcwhltfo7Y062GmxePBJBXlyeR8q4IcgDK+eHwUrd1iR3zpo4\nFFUzPBGR8SqobMCcNYeQa3hKbqNRYe3CCET05UEQpIyw3j067CEuqGrA7DVcBt+ZGJwsSG5FPeau\nPSQ343OwVmPjoiguJyDFjR/khQ/mhEGj0oen9JJaLFgXj0rDfgEiImNSVN2AOWvikGU41MZarcLq\nBREYE8A+TaSsqH5uWNeub2JuRT3mrDnElRydhMHJQhRW6S/yrXfGbK1UWBcdibDePRSujEjvliHe\neG/2CKgN4SmloBoxG+JRa9iHR0RkDMprmzBv7SGkG9ooaFQCH8wNww1BHgpXRqQ3JrAnVs0Pl5fB\nZ5XVYe7aOHm1EV07BicLUFrTiLlrDyGztN2dsfkRbMZHRucvIT74913D5HFyVgWWf5SExhatglUR\nEenVNLYgOjYeZwv1m+5VAnh39ghMDPZSuDKijm4c6IkVc9tWcqQV1yI6Nh7VDVzJ8WcwOJm56oZm\nLIyNR2qR/iLfemfset4ZIyN1V7g//jE5WB7/eq4Ej3x8BC1anYJVEZGla2zR4t7NiThqaDAqBPDW\njOGYFOKjcGVEFzch2AtvzxoOoc9OOJZTiaWbEtHQzJuR14rByYw1NGuxdFMiTuTqG6GpBPDfmcN5\nZ4yMXvTYfnh8YpA83n2yAE/vOA6dTlKwKiKyVC1aHR75+Aj2p5bKcy9OGYqpI/wUrIroyu4Y5otX\npobI47j0Mjy49TBvRl4jBicz1aLV4eGPDyMuvUyee216CCaH+ipYFdEf99D4QCwZ108ef5aUg5e/\nOQ1JYngiou4jSRKe/eIEdp8skOeevCUI80f1UbAqoj9uzsjeeOq2QfL4h9OFeOpz3oy8FgxOZkiS\nJPzti+PrLFG+AAAgAElEQVTYc6pQnnv6L4MwM7K3glURXR0hBJ69fTBmRPjLc+v3n8e7P6YqWBUR\nWZp/fZeCTxOz5fHicf3wwE2BClZEdPXuuzEA997QXx5/npyDl745xZuRV4nByQz9a3cKtiXmyONl\n1/fH8hsCFKyI6NoIIfDa9GGYFOItz/33h7OI3X9ewaqIyFJ8+HMaVv2SLo/vCvPHs5MGQ7RuGiEy\nIU/fNgizInvJ49j9GXjvJ96MvBoMTmZm1b40rNrXdpG/J9wfz/xl0GVeQWTc1CqB/84cjusGtPVH\n+edXp7DzSK6CVRGRufs4Pguv706RxxODvfD6XSFQqRiayDQJIfDKtJAONyPf+t9ZbDyQoVxRJobB\nyYxsS8jGa991vMi/Nj2Ed8bI5Nlo1Fg1Pxzhfdr6jj25/Sh+PVesYFVEZK6+PZ6PZ784Lo9H9XfD\ne7NHQKPmr01k2i52M/KFXSex62ieglWZDl4BzMT3Jwvw9I5j8nhkP17kybzYW2uwbmEEBng6AgCa\ntRKWb07CccPRwEREneFgWike/eQIWvfNh/i5YM2CCNhaqZUtjKiT2GjUWDkvHCN6u8pzT2w7ggOp\nJQpWZRr4W7UZiD9fhoc+Pixf5IN9nLFmIS/yZH5c7a2xcVEUfFxsAQC1TVrEbIhHZmmtwpURkTk4\nnV+FZZsS0WQ4qrm/hwM2xETCydZK4cqIOpeDjQax0ZEIbHczctnmJJzM483Iy2FwMnFnC6uxZGMC\nmlr0F/m+7vbYuCgKzrzIk5nydbXDpkVRcLHT/x0vqWnC/HXxKK5uVLgyIjJluRX1iI6NR3VjCwDA\n08kGmxZFwd3RRuHKiLpG681Ib2f9zciaxhZExyYgu6xO4cqMF4OTCcuvrMfC9fGoatBf5Hs62mDz\n4pHwcOJFnszbAC8nrI+OgI1GfwnLKqtDzIZ41Bh+4SEiuhoVdU1YuD4ehVX6GzBONhpsiImCfw97\nhSsj6lp+rnbYuCgKTrYaAEBxdSMWrI9HaQ1vRl4Mg5OJqqxvRvT6BORXNgAAHKzV2BATiV5uvMiT\nZQjv44b354Sh9YCrE7lVWL45SX76SkT0RzQ0a7F4YyJSi2oAANZqFVYtCEewr7PClRF1j4HeTli7\nIALWhpuR50tqsWhjIuqaeDPy9xicTFBDsxbLNiXiTGE1AECjElg5PxxD/VwUroyoe00M9sKr00Lk\n8W+pJXhi+1F2QyeiP6RFq8NDHx9GUma5PPfmjFCMCeh5mVcRmZ+R/d3xzszhaD2I+Wh2BR7Ykoxm\nLW9GtsfgZGJ0OglPbDuKQ+fL5Ll/3z0M1w3wULAqIuXMiuqNJyYGyeOvjubhte9OK1gREZkCSZLw\n/K6T+N+pQnnu+TuCMTnUV8GqiJTzlxAfvHjnEHm890wxntlxHJLEm5GtGJxMiCRJeOmbU/jmeL48\n99RtgzA9zF/BqoiU9+D4QMwf1Ucer/n1PGL3n1ewIiIydu/9lIqth7Lk8b3X98eicf0UrIhIefNH\n98WDNwXK48+ScvCfPWcUrMi4MDiZkDW/piN2f4Y8jh7TF8tv6K9cQURGQgiBf9w5BLcEe8lzL359\nCrtP5F/mVURkqbYlZOOt/52Vx9NG+OGp2wYpWBGR8XjiliDMiGi7Kf/B3rQONxksGYOTidh5JBev\nfpsijyeFeOO5O4IhWhejElk4tUrg3dkj5IZ+kgQ88skRJGWWXeGVRGRJ9p0txjNfHJfH1w3oidfv\nGgaViu+nRID+ZuSr00Jw08C2bSB///I49qYUKViVcWBwMgFx6aX4v+3H5HFUXze8NWM41LzIE3Vg\na6XGuoWR6NfTAQDQ2KLDko2JSC+uUbgyIjIGJ/Mqcf9HSdAaDpAJ9nHGh/PC5dPEiEhPo1bh/Tlh\nGOqnP11SJwEPbE3G8RzLbpDLK4WRO1dY3aGLeaCnI9YsiICtlVrhyoiMk5uDNTbERMLdwRoAUF7X\njIWxbJBLZOlyK+oRE5uA2iYtAMDXxRaxMZFwtNEoXBmRcXKw0WB9dCT8XO0AAHVNWsRssOwGuQxO\nRqyoqgHRsQlyg1sPJxtsiImEi72VwpURGbc+7g5YFx0JWyv9JS67rB6LNyawJwWRhaqsb0ZMbDyK\nDDdQnGw12LAoCl7OtgpXRmTcPJ1ssXFRJFzs9L97ltQ0Ijo2HhV1TQpXpgwGJyNV29iCRRsTkFtR\nDwCwt1YjNjqSXcyJ/qDhvVzx/uy2BrnHcirx0NbDaGFPCiKL0tiixfLNSThbqF+ya6UWWDU/HEFe\nTgpXRmQaAj2dsGZBBKzV+tiQVlyLZZuS0NCsVbiy7sfgZIRaG/KdyK0CoN/0/sGcMDa4JbpKE4K9\n8OKUofL4x5QiPL/rJHtSEFkISZLw1GfHcDC9VJ574242uCW6WlH93PDmjFB5HJ9RZpEN5xmcjIwk\nSXhh10n81O7kkpemDMVNgzwVrIrIdM0b1Qf33xggj7ceysKqX9IVrIiIust/9pzBl0fy5PH/3ToQ\nU0f4KVgRkemaHOqLZ/7Sdmz/N8fy8a/dKZd5hflhcDIyK/elY0u7s/LvvzEAc0b2VrAiItP3f7cO\nxNThvvL4X9+l4OtjeZd5BRGZuo/js/DB3jR5PDuqd4ebKER09ZZd3x8LRrc1nF/9Szo2H8xQrJ7u\nxuBkRHYeycXr7ZL7lOG+ePKWgQpWRGQehBB4/e5hGNnPTZ57fNtRJGawxxOROfr5TBH+/uUJeXzT\nQA+8NGUIex8S/UlCCLwweQgmtms4r18pVahgVd2HwclIxJ8v69CraWQ/N/z7bjbkI+osNho1Vs+P\nQICHvsdTU4sOSzcl4nxJrcKVEVFnOpVXhQe2JMu9mob6OeP9OWHQqPkrD1FnUKsE3pk1HKH++r33\nOgl4cOthnMg1/x5PvIoYgbTiGizb3LFX0+r5EbDRsFcTUWdysbfChpgo9HRs6/EUExuPslrLPFaV\nyNzkV9Zj0YaOvZrWL4yEA3s1EXUqe2sN1i6MhH+Pth5Piza0nQZtrhicFFZa04iY2ARU1DUDAHo6\nWiM2mr2aiLpKLzd7rF3Y1uMpo7QOSzclWuSxqkTmpKaxBYs2JKKgqgEA4GSjQWxMFDzZq4moS7T2\nF3W21d+YKKpuxKLYBFQ1NCtcWddhcFJQQ7MWSzclIsvQgdnWSoV1CyPRy429moi60vBernh75gi0\nbndIyizHE9ss71hVInPRotXhgS3JOJ2vb+OhUQl8OC8cA73Zq4moKwV6OmHl/HBYqfVvqGcKq3H/\nR8loNtOeiUYVnIQQ/kKI9UKIPCFEoxAiQwjxthCih9K1dTadTsLj244gOasCACAE8O6sEQjt5apw\nZUSW4bah3vj77cHy+Jvj+Xj9e8s6VpXIHEiShOd2nsS+s8Xy3KvTQzBuAHs1EXWHMQE98fpdw+Tx\nb6kl+PsXJ8yyZ6LRBCchRACAJAAxAOIB/BdAOoBHABwUQrgrWF6ne/37FHx7vEAeP3d7MG4Z4q1g\nRUSWZ/G4foge01cer9qXjo/iMpUriIiu2qpf0vFxfFsbj4fGB2JGRC8FKyKyPNPD/PHYhCB5/Gli\nNlb8nHaZV5gmowlOAFYA8ATwsCRJUyVJelqSpPHQB6iBAF5RtLpO9FFcJlbta2vAGT2mLxaN66dg\nRUSW67k7gjFhcNuxqs/vPIG9Z4ou8woiMhZfH8vDv77r2Mbj8YlBl3kFEXWVh28OxF1h/vL4je/P\nYOeRXAUr6nxGEZwMT5tuAZAB4IPfffkFALUA5gshHLq5tE6390wRnt/Z1ltiwmAvPHdH8GVeQURd\nSa0SeHf2cAxrf6zqlmScyqtSuDIiupykzDI8vu2oPI4ytPFgryYiZQgh8Nr0EIwJaFsk9tTnx1BU\n3aBgVZ3LKIITgJsMH/dIktRhN5kkSdUA9gOwBzCquwvrTCfzKvHglmS07j8P8XPBu7OHQ81eTUSK\n0h+rGgE/V/2xqrWGY1XzK837WFUiU5VRUoslGxPR1KL/laG/hwNWzw9nGw8ihVlrVPhwXjgGeDrC\n1kqFd2eNgKeT+ZxsaSzBaaDh49lLfP2c4eNln78LIZIu9g+AQZ1V6LWqa2rB4g2Jcm8JP1c7rIuO\ngL01e0sQGQNPJ1vExkTCyXCsakFVAxZtSERNY4vClRFRe+W1TYjZkIByQxsPdwdrbIiOgqu9tcKV\nEREAuNhZITYmEp8uG212+/eNJTi5GD5equVw67zJHjlnb63BM5MGwVqtgpOtBrExkWaVwInMQZCX\nE1bOC4fG8BT4dH4VHtiSjBYzPVaVyNQ0NGuxbHMizpfUAgBsNCqsWRiB3u5s40FkTPx72JvlSdFm\n9bhDkqTwi80bnjqFdXM5F5gy3A/ezrbQ6iQEebG3BJExGhvYE69OD8FfPzsGANh3thjP7zqJV6YO\n5d4JIgXpdBL++tkxJGSUA9C38Xh75nCE9Ta7jiVEZKSM5YlT6xMll0t8vXW+ohtq6VIj+7tjTCB7\nSxAZsxkRvfDQ+EB5vPVQFlb/kn6ZVxBRV3vrf2ex62iePH7mL4PwlxAfBSsiIktjLMHpjOHjpfYw\nDTB8vNQeKCKiTvX4xCBMGe4rj1/7LgXfHMtXsCIiy7UtIRvv702Vx/NG9cbS6/orWBERWSJjCU57\nDR9vEUJ0qEkI4QRgLIA6AHHdXRgRWSYhBP599zBE9XWT5x7bdgRJmWUKVkVkeX47V4K/fXFcHt80\n0AP/mDyES2eJqNsZRXCSJCkNwB4AfQE88Lsv/xOAA4DNkiTVdnNpRGTBbDRqrJofjv499S3kmlp0\nWLIxERklvBQRdYczBdW476MktBj6eAT7OOO9OWHQqI3i1xcisjDGdOW5H0ARgHeFEF8KIV4TQvwE\n4DHol+g9q2h1RGSRejhYIzYmEu4O+qOOy+uaER0bj7LaJoUrIzJvhVUNiImNR7WhJYC3sy3WR0fC\n0caszrUiIhNiNMHJ8NQpAsAGACMBPAEgAMA7AEZJklSqXHVEZMn6uDtgzcII2Gj0l8yM0jos3ZSI\nhmatwpURmaeaxhYs2pCAvMoGAICDtRrroyPh7cI2HkSkHKMJTgAgSVK2JEkxkiT5SJJkLUlSH0mS\nHpUkqVzp2ojIsoX17oF3Zg1H67aKpMxyPLHtKHSGJURE1DlatDo8sCUZJ/OqAABqlcCKeeEI9nVW\nuDIisnRGFZyIiIzZbUN98OykwfL4m+P5eH13ioIVEZkXSZLw3M4T2He2WJ57ddpQ3BDkoWBVRER6\nDE5ERFdh8bh+iB7TVx6v+iUdm+MylSuIyIys+DkNH8dny+OHxgdiZmRvBSsiImrD4EREdBWEEHju\njmBMGOwlz72w8wR+SilUsCoi07fzSC7e+P6MPJ42wg+PT7xUe0ciou7H4EREdJXUKoF3Zw/HMH8X\nAIBOAh7cehjHcioUrozINMWll+L/th+Tx6P6u+H1u4axVxMRGRUGJyKia2BvrcG6hZHw72EHAKhr\n0mLRhgRkldYpXBmRaUktqsayTYlo0uoAAAM8HbFqXgSsNfwVhYiMC69KRETXyMPJBhtiIuFiZwUA\nKKlpQnRsPMrZ44noDymqbkB0bAKqGvS9mjycbBAbEwkXeyuFKyMiuhCDExHRnxDo6YS1C9vujqeX\n1GIJezwRXVFNYwtiYhOQU14PALC3VmP9wkj497BXuDIiootjcCIi+pMi+7rh7Zkdezw98slhaNnj\nieiimrU63PdRUodeTR/MCUOIYd8gEZExYnAiIuoEk0J88Pfbg+Xx9ycL8dLXpyBJDE9E7UmShKc+\nP4Zfz5XIc69OG4qbBnkqWBUR0ZUxOBERdZLF4/phybh+8njDgQys+TVdwYqIjM9/9pzBjuRcefzo\nhAHs1UREJoHBiYioE/1t0mDcPsxHHr/6bQp2Hc1TsCIi47E5LhMf7E2Tx7Mie+GRmwcoWBER0R/H\n4ERE1IlUKoE37wlFVF83ee7JbUdxMK1UwaqIlLfnZAFe2HlCHt800AMvTx3KXk1EZDIYnIiIOpmt\nlRqrF4Qj0NMRANCk1WHZpkSczKtUuDIiZSRlluOhjw+j9byUUH8XfDA3DBo1fw0hItPBKxYRURdw\ntbfGhphIeDrZAACqG1sQHcsGuWR50oprsHhjAhpb9A1u+7jbY110JOytNQpXRkR0dRiciIi6iH8P\ne2xcFAUnW/0viMXVjViw/hBKahoVroyoexRUNmDBunhU1DUDANwdrLExJgo9HW0UroyI6OoxOBER\ndaHBPs5Yu6CtQW5GaR1iYhNQ09iicGVEXauirgnz1x1CboW+wa2dlRrroiPRt6eDwpUREV0bBici\noi42sr873ps9AirDHvjjuZW4d3MiGlu0yhZG1EXqmlqwaEMCzhXVAAA0KoEP54VheC9XhSsjIrp2\nDE5ERN3g1iHeeGVaiDzen1qKJ7YdhU7HBrlkXpq1Oty/JRnJWRXy3JszQnHjQDa4JSLTxuBERNRN\nZkf1xhMTg+Tx18fy8eLXpyBJDE9kHnQ6CX/97Bh+PlMsz70wORhThvspWBURUedgcCIi6kYPjg/E\ngtF95PGGAxn4YG+qghURdQ5JkvDyN6fxxeFcee6h8YGIGdtPwaqIiDoPgxMRUTcSQuCFyUNwe4iP\nPPefPWex+WCGYjURdYYVP6dh/f7z8nh2VG883u4JKxGRqWNwIiLqZmqVwFszQzEmwF2ee27nSXxx\nOEfBqoiu3SfxWXjj+zPy+C9DvfHy1KEQQihYFRFR52JwIiJSgI1GjdULIhDa7pSxJ7cfw/cnCxSs\niujq7Tqah2e+OC6PxwS44+1Zw6FWMTQRkXlhcCIiUoijjQYbYyIx0MsJAKDVSXho62H8dq5E4cqI\n/pj/nSrE458eQev5JkP9nLFqfjhsNGplCyMi6gIMTkRECnK1t8bmJVHo624PAGjS6rB0UyKSMssV\nrozo8n47V4IHtiSjxXCkfqCnIzbGRMHJ1krhyoiIugaDExGRwjydbPHRkpHwcbEFANQ3axETG4+T\neZUKV0Z0cYkZZVi6KRFNWh0AoLebPbYsGQl3RxuFKyMi6joMTkRERsC/hz0+WjIS7g7WAICqhhYs\nWBePtOIahSsj6uh4TiViYhNQ36wFAPi42GLLkpHwcrZVuDIioq7F4EREZCQCPByxaXEUnGw1AIDS\n2ibMW3sI2WV1CldGpHemoBrz1x9CdWMLAKCnow22LBmJXm72CldGRNT1GJyIiIzIEF8XbIiJhJ2V\nfnN9fmUDZq+JQ25FvcKVkaU7X1KLeesOoaKuGQDgYmeFj5ZEob+Ho8KVERF1DwYnIiIjE97HDWsW\nRMBarb9E55TXY/bqOOQxPJFCcsrrMHdNHIqrGwHoT4TctCgKg7ydFa6MiKj7MDgRERmhcQN6YtX8\ncDk8ZZXVYfaaOBRUNihcGVma7LI6zFwVhzzD3z1bKxXWR0d26EFGRGQJGJyIiIzUTYM88eG8MFip\n9Y1EM0v14amwiuGJukd2WR1mrW5bKmqtUWH1/AhE9XNTuDIiou7H4EREZMRuHuyFFXPD5fB0vqQW\ns1fHoYjhibrYxUNTOK4P8lC4MiIiZTA4EREZuYnBXnh/Thg0Kn14Si+pxew1cSiqZniirpFVemFo\nWrMgAjcO9FS4MiIi5TA4ERGZgFuHeOP9OSOgNoSntOJazFlzSN6sT9RZ9KHp4AWh6QY+aSIiC8fg\nRERkIm4b6oP3ZreFp9SiGu55ok6VWVqLWasPygdB2GhUWMvQREQEgMGJiMikTArxwdszh8OQnZBa\nVIN7Vh5kk1z60zJL9fvn2oemNQsiuKeJiMiAwYmIyMRMDvXFO7NGyHuessrqMGPVQaQV1yhcGZmq\ns4XVmLHqd0+aFjI0ERG1x+BERGSCJof6YuW8cFhr9Jfx/MoGzFx1EKfyqhSujEzN0ewKzFh1EIVV\n+v1yNhoV1i2MxHUDGJqIiNpjcCIiMlETgr0QGx0Je2s1AKCkpgmzVh9Ecla5wpWRqTiQVoI5a+JQ\nUdcMAHCwViM2JhLjBvRUuDIiIuPD4EREZMLGBvbE5sVRcLLVAACqGlowb+0hHEgrUbgyMnZ7ThYg\nOjYBtU1aAEAPeyt8vGwUxgQwNBERXQyDExGRiQvv44aPl46Cm4M1AKCuSYuY2ATsTSlSuDIyVp8n\n5eC+LcloatEBALydbbHt3tEY5u+qcGVERMaLwYmIyAwM9XPBtntHwcvZBgDQ2KLD0k2J+PJwrsKV\nkbGJ3X8eT2w/Cq1OAgD0cbfH9uWjMcDLSeHKiIiMG4MTEZGZCPR0wvZ7x6CXmx0AoEUn4dFPj+CD\nvamQJEnh6khpkiTh7R/O4p9fnZLnBnk7Yfvy0ejlZq9gZUREpoHBiYjIjPR2t8f2e8cgyMtRnnvj\n+zN49ssTaNHqFKyMlNSs1eGZHcfx9g/n5LnwPj3w6bLR8HSyVbAyIiLTweBERGRmvF1ssX35GIzu\n7y7PbT2UhWWbk1Db2KJgZaSEqoZmxMQm4JOEbHnuugH6Q0Vc7K0UrIyIyLQwOBERmSEXOytsXBSF\nqcN95bmfUoowa3UciqobFKyMulN2WR3uWnEAv6W2nbI4fYQf1i6MgL21RsHKiIhMD4MTEZGZstao\n8N+Zw/HATQHy3PHcSkxfcQCpRTUKVkbd4Uh2BaatOIBz7f5bPzYhCG/OCIWNRq1gZUREponBiYjI\njAkh8H+3DsKr00KgEvq5nPJ63PXhAcSfL1O2OOoyu0/kY9bqgyipaQQAWKtV+O/MUDwyYQCEEApX\nR0RkmhiciIgswJyRvbF2YQTsrPRPGirrmzFnTRw2x2XyxD0zIkkS1vySjvu2JKOhWX8YiKu9FTYv\njsK0Ef4KV0dEZNoYnIiILMT4QV749N5R6Omob5TbopPw3Jcn8NTnx9DQrFW4OvqzGpq1ePrz43jl\n29NozcJ93e2x474xGNnuoBAiIro2DE5ERBZkmL8rdj44DkP9nOW5bYk5mLk6DvmV9QpWRn9Gdlkd\n7l55AJ8mtp2cF9m3B3bcPxb9PRwv80oiIvqjGJyIiCyMn6sdPls+BtNH+MlzR7MrMPm937jvyQT9\nfKYIk9//DSdyq+S5aSP8sHnxSLg5WCtYGRGReWFwIiKyQLZWarw5IxQvTA6G2nBqRElNE+asicOm\ngxnc92QCdDoJb/9wFjEbElBR1wwAsFILvDhlCN6aEQpbK56cR0TUmdjEgYjIQgkhEDO2HwZ5O+PB\nrckorW1Ci07C8ztP4lhOJV6cMoS9foxURV0THv30CH4+UyzPeTvb4oO5YQjv00PByoiIzBefOBER\nWbjRAe7Y9dA4hPi5yHOfJeXgjvd+w4ncSgUro4s5kVuJO977rUNoGt3fHV8/PI6hiYioCzE4ERER\n/FztsH35aEwPa9v3lF5ci2kr9mPVvjTodFy6pzStTsKqfWmYvuIAcsrbDvJYfkMANi+OQk9HGwWr\nIyIyf1yDQUREAAz7nu4Jxaj+7vjHrpOoa9KiWSvhte9SsO9sMd6cEQofFzuly7RI2WV1eGLbUcRn\ntB3e4WSjwX9mhOLWId4KVkZEZDn4xImIiGRCCMyI6IVvH74Oob1c5fkDaaW47e1f8d3xfAWrszyS\nJOGT+Czc9vYvHUJTiJ8Ldj44lqGJiKgbMTgREdEF+vZ0wGfLR+Oh8YEwHLqHyvpm3LclGX/97Chq\nGluULdACFFU3YMnGRDy94zhqm/QNitUqgUduHoAd949hfyYiom7G4ERERBdlpVbhiVsG4pNlo+Hn\n2rZEb1tiDia+tQ+7TxTw2PIu8t3xfNz631/wY0qRPNffwwE77huDxyYGwUrNt28iou7GKy8REV1W\nVD83fPvIdbgz1Feey69swPKPkrBkYyKyy+oUrM685JTXYfnmJNy3JRnlht5MABA9pi++eajj8kki\nIupePByCiIiuyMXOCu/OHoGbB3vixa9OobS2CQDwY0oR9qeV4JGbg7Dkun58EnKNGpq1WLUvHSt+\nTkVji06e93GxxX/uCcXYwJ4KVkdERACDExERXYUpw/1wY5AnXv8+BVsPZQEAGpp1eH13Cr44nIOX\np4Ygqp+bwlWaDkmS8L9ThXjpm1PILqvv8LW7w/3x3B3BcLGzUqg6IiJqj8GJiIiuiou9FV6dFoK7\nwvzx7BfHkVJQDQA4W1iDGasO4q4wfzw2cQD8e9grXKlxSy+uwT+/OoV9Z4s7zA/xdcaLU4YgvA8D\nKBGRMWFwIiKiaxLepwe+fmgcNhzIwFv/O4s6w8lvnyfnYNfRXMyO6o0HbgqEl7OtwpUal+LqRqz+\nJQ0bDmSgWdt2uIarvRX+79aBmBXZG+rWowyJiMhoMDgREdE106hVWHJdf0wK8cGLX53C7pMFAIBm\nrYRNBzPxaUI2Fozug+U3BMDd0UbhapVVWNWAVfvSsTU+Ew3NbfuYhADmjuyNJyYORA8HawUrJCKi\ny2FwIiKiP83X1Q4r54fjYFop3txzBomZ5QCAxhYd1vx6HlsOZWHR2H5Yel1/uNhb1p6d3Ip6rPw5\nDZ8mZqOp3cEPgP6p3T/vHIKhfi4KVUdERH8UgxMREXWa0QHu2L58NPadLcabe87ieG4lAKCuSYv3\n96Zi48EMzIzohbmj+qBfTwdli+1i2WV1WPFzKj5LyumwJA8Ahvo546HxAzBxsBdUXJZHRGQSGJyI\niKhTCSFw40BP3BDkgT2nCvHWnrM4U6g/QKK6oQVrfzuPtb+dx7jAnpg3qjcmDPaCxkyOMW9q0eGn\nlCJsT8zGz2eLodV1DEzDe7ni4ZsDcdNATwjBwEREZEoYnIiIqEsIIXDrEG9MGOyFr4/l4e0fzuF8\nSa389d9SS/Bbagm8nG0wK7I3Zkf1hreLaR4kcbawGtsSsvHF4Vy5x1V7EX164OGbB+C6AT0ZmIiI\nTJTiwUkIYQXgfgDDAYwAEAzACsBSSZLWKlkbERH9eWqVwJThfpg8zBf7zhVjS1wmfkopQuvDmMKq\nRtolL3UAACAASURBVLzz4zm8vzcV4wJ7YsJgT4wf7AU/VztlC7+C8tomfHeiAJ8mZuNodsVFv2ds\noDseuCkQo/u7MzAREZk4xYMTAAcAbxs+LwRQAKCXcuUQEVFXUKkEbhroiZsGeiK3oh4fH8rCJwnZ\nKKlpBABodRL2nS3GvrPFeG7nSQz2cdaHqEGeCPV3VXwvUFOLDslZ5fj1XDF+PVeC47mVkKQLv8/H\nxRZ3h/vj7nB/9HE3731cRESWxBiCUx2ASQCOSJKUL4T4B4AXlC2JiIi6kp+rHZ68dSAevnkA9pwq\nwEdxmYhLL+vwPafzq3A6vwrv/ZSKno42uD6oJ4b5uSDY1wWDfJzgbNu1p/M1tmiRXlyLuPRS/Hqu\nBHHppXKvqt+zUgvcEuyNeyL8cd0AD/ZhIiIyQ4oHJ0mSmgB8p3QdRETU/aw1KtwxzBd3DPNFdlkd\nfjxdiB9TihCXXtrhJLqSmkbsSM7FjuRcea63mz2CfZwR7OuMwT7O8Ha2hau9FVztreBoo/lDS+N0\nOglVDc1IK65FWnEN0opqkFpUg7TiGmSV1UF3kSdKrVRCf9jD5FBfTBnuBzf2YCIiMmuKByf6f/bu\nOjzKK33j+PfEFQ/uHhyCFGuh7kYFKA416rbt7rbb3W13K79u3XEodaFb2bpSJMHdXUqAuNv5/TGT\nSQKFIEnemcn9ua653p4zkidXw8zcr5xHREQAmtWJYNzAVowb2IqM3AJ+3XSQ79Yn8uPGRJL+YMGF\nXUlZ7ErK8jTdLS040FAzPIRaEcHUjggmKCCArPxCsvMKyMorJDuv0LXN/+MjSMfSvE4Eg9vVY3C7\nGPq3qUvN8OrVk0pEpDrzq+BkjFl6jLs6VmkhIiJyWqJCg7ioayMu6tqIwiLLit0prNidwrp9aazb\nn8bmA+kUHOdwUH6h5VBGruf6qVNhDDSr7TqqNahdPQa3q6drlkREqjG/Ck4iIuJ/AgMMcS1qE9ei\ntmcut6CQLYkZniC16UA6SZn5pGTlkZKVf1JHkiJCAmleJ4K29aNoExPl2baOiSQsOLAyfiUREfFB\nFRKcjDE7gBYn8ZS51tpRFfGzS7PWxv3RvPtIVK+K/nkiIuKM0KBAOjeuSefGNf/w/pz8QlKz80nJ\nyic5K4+CQktEaCARIYFEBAcRHuL67/DgQMdX6xMREd9QUUectgI5J/H4fRX0c0VERI4SFhxIWHAg\nDWr4ZkNdERHxPhUSnKy151TE64iIiIiIiHijAKcLEBERERER8XYKTiIiIiIiIuXwilX1jDEPUbJk\neA/3drwxZpD7v+dba6dWfWUiIiIiIiJgrD1OW/SqKsKYn4CzjvOQWdbacafx+ofDw8PrxMbGnupL\niIiIiIiIj1m/fj3Z2dlJ1tq6p/taXhGcKpsxZjtQA9jhcClQcmRtg6NViD/R35RUNP1NSUXT35RU\nNP1NyYlqCaRZa1ud7gtVi+DkTdw9pY7Zc0rkZOlvSiqa/qakoulvSiqa/qbECVocQkREREREpBwK\nTiIiIiIiIuVQcBIRERERESmHgpOIiIiIiEg5FJxERERERETKoVX1REREREREyqEjTiIiIiIiIuVQ\ncBIRERERESmHgpOIiIiIiEg5FJxERERERETKoeAkIiIiIiJSDgUnERERERGRcig4iYiIiIiIlEPB\nSUREREREpBwKTlXEGNPUGDPdGLPPGJNrjNlhjHneGFPb6drEtxhj6hpjJhljPjHGbDHGZBtjUo0x\n840xE40x+nctp80YM8oYY923SU7XI77LGHOO+/3qd/fn3z5jzNfGmIudrk18jzHmEmPMN8aYPe7P\nv23GmA+MMf2drk38n7HWOl2D3zPGtAEWAPWBT4ENQF9gKLARGGitPexcheJLjDG3AK8B+4EfgV1A\nA+BqoCbwEXCt1T9uOUXGmGbAaiAQiAJutNZOdbYq8UXGmKeBB4A9wP+AQ0AMEAd8Z639k4PliY8x\nxjwF/Ak4DMzD9ffUFrgcCALGWGvfcq5C8XcKTlXAGPM1cD5wp7X2pVLzzwL3AG9Ya29xqj7xLcaY\ns4FI4AtrbVGp+YZAPNAMuMZa+5FDJYoPM8YY4FugFfAxcD8KTnIKjDE3Am8Cs4CbrLV5R9wfbK3N\nd6Q48Tnuz7i9wEGgm7U2sdR9Q4EfgO3W2tYOlSjVgE7pqWTuo03nAzuAV464+1EgExhtjIms4tLE\nR1lrf7DWflY6NLnnfwdedw+HVHlh4i/uBM4GxuN6fxI5acaYUOBfuI6IHxWaABSa5CS1wPW9dXHp\n0ARgrf0RSMd1NFOk0ig4Vb6h7u03f/BFNx34DYgAzqjqwsQvFX8RKXC0CvFJxphY4EngBWvtL07X\nIz7tPFxfYj8GitzXpTxojLlL16LIKdoM5AF9jTH1St9hjDkTiAa+c6IwqT6CnC6gGujg3m46xv2b\ncR2Rag98XyUViV8yxgQBY9zDr5ysRXyP++9nDq4jBH9xuBzxfX3c2xxgOdCl9J3GmF9wnVJ8sKoL\nE99krU0yxjwIPAusM8bMw3WtUxtc1zh9C9zsYIlSDSg4Vb6a7m3qMe4vnq9VBbWIf3sS15eTL621\nXztdjPicvwE9gUHW2mynixGfV9+9fQBYBwwGVuC6du4ZXDsMP0CnFctJsNY+b4zZAUwHbix11xZg\n5pGn8IlUNJ2qJ+IHjDF3AvfhWrFxtMPliI8xxvTDdZTpP9bahU7XI36h+PtFAXC5tXa+tTbDWrsa\nuArXKntn6bQ9ORnGmD8BHwIzcR1pisS1QuM2YK57FUeRSqPgVPmKjyjVPMb9xfMpVVCL+CFjzO3A\nC7j26g611iY5XJL4EPcperNxnU78iMPliP8o/kxbbq3dUfoOa20WUHxUvG9VFiW+yxgzBHgK+K+1\n9l5r7TZrbZa1dhmuML4XuM8Yo1X1pNIoOFW+je5t+2Pc3869PdY1UCLHZIy5G3gJWIMrNP3ucEni\ne6JwvT/FAjmlmt5aXCt/Akxxzz3vWJXia4o/+461UzDZvQ2vglrEP1zq3v545B3uMB6P63ttz6os\nSqoXXeNU+Yr/gZ9vjAk4ou9ONDAQyAIWOVGc+C73RbJP4rpu4Dxr7SGHSxLflAtMO8Z9vXB9CZmP\n64uwTuOTE/U9YIFOR372uRUvFrG9assSHxbq3h5ryfHi+aOWvhepKGqAWwXUAFcqmjHmEeCfwFLg\nfJ2eJ5XBGPN3XEed1ABXTpox5lNcq53da619rtT8+bhW/kwFWlprj7V4koiHMeY64D3gABBnrd1b\n6r6LgC9w7Qhqaq097EyV4u90xKlqTAYWAC8aY84B1gP9cPV42gT81cHaxMcYY8biCk2FwK/AncaY\nIx+2w1o7s4pLExEp7TZcRyyfNcZcgmtZ8lbAlbjevyYpNMlJ+BBXn6ZzgfXGmE+A33GdZnwpYICH\nFJqkMik4VQFr7VZjTG9cX3YvBC4G9uO6oP8f1trk4z1f5Ait3NtA4O5jPOZnXKsOiYg4wlq7xxgT\nh2up+8uBM4E04DPgCWttvJP1iW+x1hYZYy7GFciH41oQIgJIAr4EXrTWfuNgiVIN6FQ9ERERERGR\ncmhVPRERERERkXIoOImIiIiIiJRDwUlERERERKQcCk4iIiIiIiLlUHASEREREREph4KTiIiIiIhI\nORScREREREREyqHgJCIiIiIiUg4FJxERERERkXIoOImIiIiIiJRDwUlERERERKQcCk4iIiIiIiLl\nUHASEREREREph4KTiIiIiIhIORScREREREREyqHgJCIiIiIiUg4FJxERERERkXIoOImIiIiIiJRD\nwUlERERERKQcCk4iIiIiIiLlUHASEREREREph4KTiIiIiIhIORScREREREREyqHgJCIiIiIiUg4F\nJxERERERkXIoOImIiIiIiJRDwUlERERERKQcCk4iIlItGWN+MsZYY8w4p2sRERHvp+AkIiKVwhgT\nYYy51RjzmTFmlzEmyxiTaYzZboz50BgzyhgT7nSdIiIiJ0LBSUREKpwx5jJgK/AqcCnQDCgCCoGW\nwDBgDrDFGHO2Q2XuAjYCqQ79fBER8SEKTiIiUqHcp77NAxriCiajgXrW2ihrbQ2gFnAN8BPQGDjT\niTqttWOstR2ttZ848fNFRMS3GGut0zWIiIifMMZ0BxYDocCXwDXW2uzjPP56oKm19j9VVKKIiMgp\n0REnERGpSI/jCk17gZHHC00A1tr3gGdLzxljQo0x9xpjFhtjUo0x2caYjcaYZ40xDY/1WsaY7saY\n2caYHcaYXGNMujFmmzHmK2PM3caYiCMe/4eLQxhjhrjnd7jHA40xnxtjDrlrWWmMud0YY473uxlj\nLjPGfGqM+d0Yk2eMSXRf73XB8Z4nIiLeKcjpAkRExD8YY5oAl7iHL1prT+jaIVvq1AdjTAzwNdDT\nPZUL5AHt3bdxxpiLrbWLjvjZF+M6PTC41POKgFbu2wXAV8CGk/ydxgFTce1oTAPCgG7AS0Bb4O4/\neE4wMAO4odR0GhCD63qvS40xT1trHzyZWkRExFk64iQiIhVlCFB8FOa/p/gas3GFpmTgOiDSfV1U\nH2A1UBuYZ4ypd8TzXsYVmj4HOlhrw6y1NYGauK6hmgLknGQtMcAbwGtAI2ttLffPf8l9/53GmM5/\n8LyncYWmLe7fIcpdSw1gMpAO/MkYM+Ik6xEREQcpOImISEWJdW9zcS0KcVKMMYOBC93DEdbaD6y1\nhQDW2iXAebgCVQPgzlLPq4/rqBLAJGvtpuL7rLVp1tpfrbU3WWt3nGRJEcBsa+0d1toD7tdLsdbe\niSvEGVyrA5b+HdoBdwEHgbPdv0Om+7np1trXgJvcD//rSdYjIiIOUnASEZGKUte9TbantvLQNe7t\nEmvt10fe6Q4vr7uH15W6KwPXaXkAjU7h5x7PE8eY/9S97XLE/Bhcgeo9a+3uYzz3Q1zhsrMxpqLr\nFRGRSqLgJCIi3qKXe/vjcR7zg3vb3hgTCWCtzQJ+ds9/bYx52BjTwxgTeJr1JFlrtx3jvr3ube0j\n5ge4t2Pdi0IcdQP2UHItVrPTrFFERKqIgpOIiFSUw+5t7fJWnDuGGPd273Ees8e9NUDp65wmAeuB\n+sBjwHIgxRjzhTFmlDHmVBZDSj/OfcXXSwUfMV98BCka1ymFx7oVf/5GICIiPkHBSUREKsp69zYU\n6HAarxN2sk9wHxnqBlwFvOmuJQq4GJgDLDbGRJ1GTSeq+HP1HmutOYHbT1VQk4iIVAAFJxERqSg/\nA8XXNl1+Cs8/6N42P85jmrq3FjhU+g5rbYG1dp619mZrbSdcR38ewHV0qBfw6CnUdLIOuLfH+x1E\nRMQHKTiJiEiFsNbuAb50D+8wxtQ4kecZY4o/i5a5t2cd51S/s93bTcWr1R2nnt+ttc8Azxe/7onU\nc5oWurcXHvdRIiLicxScRESkIj2Ma8W4psDbxpjjnnZnjBkO3OMefujedgau+IPHNgBucQ/fLzUf\nXM41VdnubWi51Z++2biOhsUaY24+3gONMUcuLCEiIl5MwUlERCqMtXYFcBuu8HAJsNy9OEOd4scY\nY2oaY642xvwIvINrIQWstb8CX7kfNt0Yc03xynjGmDjgG1yr2B0AXij1YzsDa4wxdxtj2heHKHeg\nGgbc637cUUucVzRr7TrgOffwVWPME8aY4tMLMcbUMMZcbIx5B/igsusREZGKcyqrDImIiByTtXaa\nMeYw8AbQEdfiDBhjMnAFquhSD99JyRLj4OqD9A3QA1ewyDHG5Jd6TjJwlbX2MGV1whVYngNyjTGZ\nQC1KdhAuAR6vkF+wfH8CwoFbgYeAh4wxabh+9xq4VgQE+KmK6hERkQqgI04iIlLhrLXzgNa4jj59\niWsZ8SD3bQeu0/JGAh2stb+Uet5BoD9wP66wkw+EAJtxXavU2Vq7kLLW42qe+zruZchxBZRUYD5w\nBzDQWptWCb/qUay1hdbaycAg4C1c4TAU12qBu4D/ArdT0vBXRER8gDm15u4iIiIiIiLVh444iYiI\niIiIlEPBSUREREREpBwKTiIiIiIiIuVQcBIRERERESmHgpOIiIiIiEg5FJxERERERETKoeAkIiIi\nIiJSDgUnERERERGRcig4iYiIiIiIlCPI6QKqgjFmO1AD2OFwKSIiIiIiUnVaAmnW2lan+0LVIjgB\nNcLDw+vExsbWcboQERERERGpGuvXryc7O7tCXqu6BKcdsbGxdZYuXep0HSIiIiIiUkXi4uJYtmzZ\njop4LV3jJCIiIiIiUg6vCE7GmGuMMS8ZY341xqQZY6wx5i2n6xIREREREQHvOVXvYaA7kAHsATo6\nW46IiIiIiEgJrzjiBNwDtMe18t2tDtciIiIiIiJShlcccbLW/lj838YYJ0sRERERERE5ilcEp+ri\n2W838fbinUSHBRMVGkR0WPHNNa4RFkTNiBDaxETSsWENGtQIVZAUEZFqxVrLwfRcthzMYNvBTHYc\nyiQtJ5/s/CKy8wrJLSgkO6+Q7HzXzVqoFRFMnYgQakWEUCcymNqRIdSOcN1ax0TSul4kQYHecpKN\niPgqvwpOxphjrTfuFddMJWXmcigjj0MZeSf0+BphQXRoGO26NYimfYNoOjepSVSoX/1vExGRaion\nv5CEHUms2JXCtkOZbHWHpYzcggr9OaFBAXRsVIPOjYtvNenYMJqw4MAK/Tki4t/0DbwKpeec3AdB\nWk4BCTuSSdiR7JkLCjD0aVmHIR1iGNKhPu0bROmolIiI+ITCIsvafanM33KI+ZsPsWRnMnkFRZX+\nc3MLili5O4WVu1M8c4EBhg4NohnaMYZzYxvQvWktAgL0eSoix2astU7XUIYxZgjwIzDXWjuqgl5z\naa9evXo53QA3J7+QtJx80nMK3Lf8Mtu0nAIOpuey6UA6m35PJ/0E9rg1rhnGWR3qM6RDDAPb1tPR\nKBER8Sqp2fl8tWY/P286yIKth0nJyi/3OdFhQbSOiaJNTCRtYqKoFxVCWHAgYcGBhAcHEh7i2oYF\nu06/S8nKJykzj+SsPJKz8knOzCMpM4+DGbls/D2d/ak55f7MelGhnBtbn3NjGzCwbT3CQ3Q0SsQf\nuBvgLrPWxp3ua+lbdhUqftOvH13+Y6217E/NYaM7RG08kM66fWls+D29zOP2pebwTvwu3onfRUhg\nAOd3bsCIvs3p37qu9pyJiIgjCossv205xAdL9/D12t+Pe1SpTUwkA9rUo2OjaNrERNE6JpKYqIq9\nxvdwRi5r96W5b6ms25fG9sOZlN53fCgjl3cTdvNuwm7CggMY1DaGK3o05oLODQkJ0vVRIqLg5LWM\nMTSuFU7jWuEM7VDfM5+YlsNPmw7y08ZEft18qMzpf3mFRXy+aj+fr9pPi7oRXN+nGdfENaV+dJgT\nv4KIiFQz2w9l8tHSPXy0bM8xj/LUiwplUNu6DGoXw8C2dWlUM7zS66obFcqZ7WM4s32MZy4jt4AF\nWw7x7boD/LAhkcOZJdcf5+QX8d36A3y3/gD1okIZ0bcZI/o2p3Gtyq9VRLyXTtXzYfmFRSzflcJP\nGxP5YUPiUUejwHVN1LmxDRjRrzmD29bTUSgREalQhUWWL1fvZ/bCHWWuyS2tc+MaXNmjCWe2j/HK\na3MLiywrdifz7bpEvlt/gC2JGUc9JsDAubENGN2/BQPb6PNUxFdU5Kl6Ck5+ZP3+NN6N38XHy/f+\n4UIUretFcsc5bbm8exMC9YYvIiKnIb+wiE9X7OPVH7ew7VDmUffXiQzhih6NuTauGZ0a13CgwlO3\n/VAmn67YyzvxuziQlnvU/a3rRTLqjBaM6Ntc10KJeDm/C07GmCuBK93DhsAFwDbgV/fcIWvt/afx\n+tUiOBXLzivky9X7eTdh1x/u/WtdL5I7z2nHZd0bK0CJiMhJyS0o5KOle3nt5y3sTsouc19ggGFo\nhxiuiWvG2R3r+/y1QfmFRXy//gBzFu3kty2Hj7o/JjqUO85uy/A+zX3+dxXxV/4YnP4OPHqch+y0\n1rY8jdevVsGptM0H0nk3YTfvL9l91FGoNjGuAHVpNwUoERE5vpz8Qt6N38Ubv2w76vql6LAgxg9o\nyaj+Lfz2utotiRm8tWgnHy3dc9Sqt01qhXPXue24umcTNdoV8TJ+F5wqW3UOTsVSs/OZPn870+dv\nP+oNv239KFeA6tpI52yLiEgZRUWWj5bt4emvN3Iwvexpa7Ujgpk4qBWj+7ekZniwQxVWray8Aj5a\nuoeXf9xy1Gl8rWMiufe89lzcRZ+nIt5CwekkKTiVSM3KZ9pv25nxBwEqrkVt/nlFZzo3rulQdSIi\n4k1W7E7h0f+uLdM4Flwr4918ZmtG9mtOZDXtH5iTX8hbi3byyo9bSD6iN1Vsoxr85eKODG4Xc4xn\ni0hVUXA6SQpOR0vJymPa/O3M+G0HGaUCVICBMf1bcu/57akRVj32HoqISFkH03P5v6838P6SPWXm\nG9QIZfKQtlzfpxlhwVoUAVzLmk+fv50pv2w7aofk5d0b8/ClsX57+qKIL1BwOkkKTseWkpXH6z9v\nY9r8beQXlvwt1IsK5a+XdOTKHk28btlYERGpHPmFRcxeuJPnv91UJgSEBAZw05mtmTy0DREh1fMI\nU3mKP09nLthOTn5Jw9/osCAevLAjI/s21+l7Ig5QcDpJCk7l23owg0c/Xcv8LYfKzPdrVYfHruxC\n+wbRDlUmIiJVYfG2wzw8bw2bj+hhdG5sAx65NJYWdSMdqsy3JKbl8K8v1/Ppin1l5ns2r8W/r+pK\nbCPfWppdxNcpOJ0kBacTY63li9X7eezzdWUueA0KMEwa3Jp7zmtHaJBOzRAR8Sc5+YU8/dVGpv+2\nvcx863qR/O2yTgzpUN+hynzbr5sP8si8New4nOWZCwwwTBzUirvPbacjdyJVRMHpJCk4nZyM3AJe\n/H4z0+dvp6Co5O8jtlENnr++Bx0a6uiTiIg/WLUnhXveW8HWgyUNbCNDArnznHaMH9hKvYlOU05+\nIa/+uIXXft5a5nT4JrXCefa67vRrXdfB6kSqh4oMTnpHlKNEhQbxl4tj+fKuwfRtVcczv35/Gpe9\nPJ9p87dTVOT/gVtExF/lFxbx7LebuOrVBWVC01ntY/j+viHcfFYbhaYKEBYcyL3nd+B/dw2mX6nP\n070p2Qyfsoj/+3oD+YVFx3kFEfEmOuIkx1VUZJm9cAdP/G8DuQUlb+4D29blmWu706hmuHPFiYjI\nSdt0IJ1731/Bmr1pnrmIkEAevqQTI/o204JAlcRay0fL9vL4F+tIKbV8efdmtXhxeA9dQyZSSXTE\nSapMQIBh3MBWfH7HIDqVuqD1ty2HueC5X/hs5b7jPFtERLxFUZFl6q/buPSl+WVCU9+WdfjqrjMZ\n2a+5QlMlMsZwTVxTvrrrTAa0KTlFb+XuFC5+4Vc+XLqH6rAzW8SXKTjJCWnXIJp5tw3k1iFtKP5c\nTcsp4I53lnP3u8vL9IISERHvkpqVz01zlvD4F+vJc589EBIUwF8vjuWdm86ged0IhyusPhrWDOOt\nif146KKOBLmXJ8/MK+T+D1ZyxzvLSc3OL+cVRMQpCk5ywkKCAnjwwo68d1N/mtQqOUVv3op9XPHy\nfLYcsYStiIg4b+2+VC57eT7frU/0zHVpUoPP7xjEjWe2JlC9hapcQIDhlrPa8MnkgbSuV3KK3uer\n9nPxC7+yZEeSg9WJyLEoOMlJ69uqDl/dPZhhvZp65rYezOTKV37jqzW/O1iZiIiU9v6S3Vz96gJ2\nJZUsiX3j4FZ8Mnmg+vN5ga5Na/L5nYMY3qeZZ25vSjbD31zEW4t2OliZiPwRBSc5JdFhwfznuu48\nd313woJdf0YZuQXc8tZSnv5qA4VadU9ExDE5+YU89NEq/vThKs/CPlGhQbx2Qy/+ekknggP18e8t\nIkKCeHJYN167oRc1w4MBKCiyPDxvDX/+eBW5BYUOVygixfTOKaflqp5N+ejWATSrU3Lq3qs/bWXc\njHiSM/McrExEpHranZTFNa8v4N2E3Z659g2i+PT2gVzUtZGDlcnxXNS1EV/cOYjOjUsWYnonfjcj\n3lzEgbQcBysTkWIKTnLaOjeuyWe3D+Ks9jGeuV83H3Kv3JTqYGUiItXLz5sOHrVq3hU9GjPvtoG0\niYlysDI5EU1rR/DhLQO4skdjz9yyXSlc9tJ8lu5MdrAyEQEFJ6kgtSJCmD6uD3ee3dYztzclm2Gv\nLeDjZXscrExEpHqYs2gn42fEe1ZlCw40PHZFZ56/vgcRIUEOVycnKjwkkOeu78HDl8RSvG5HYnou\nw99cyLvxu5wtTqSaU3CSChMYYLj3/A5MGdOb6FDXh3RuQRH3vr+S577dpP4UIiKVoLDI8tjn63hk\n3hqKLy9tVDOM927uz+j+LdWbyQcZY5g0uDWzJ/SjVoTruqf8QstDH6/m4XmryS8sKucVRKQyKDhJ\nhTuvUwM+vX0g7eqXnBbywvebue+DlZ7+ISIicvoycwu4ec5Sps3f7pnr1rQmn94+kF7NaztYmVSE\nQe3q8dntg4gt1YD+rUW7mDRrifonijhAwUkqReuYKD6ePIDB7ep55j5etpex0+PV3E9EpAIcSMvh\nujcW8t36A565Czo34L2b+lM/OszByqQiNasTwUe39uey7iXXPf286SDXv7GQRC0aIVKlFJyk0kSH\nBTN9XB+u713Sn2LhtsNc89oC9iRnHeeZIiJyPOv2pXHlK7+xdl/JIhA3ndma126IIzwk0MHKpDJE\nhATx4vAe3HlOO8/c2n1pXPXqArYkpjtYmUj1ouAklSo4MIAnh3Xl/vPbe+Y2J2Zw1asLWLUnxcHK\nRER8048bErn29QXsT3UdbQgMMPz7qq785eJYAgJ0PZO/MsZw73ntefLqrgS6/z+7FmFaSPz2JIer\nE6keFJyk0hljuP3sdjx/fQ9C3E0XD6bncv0bi/hu3YFyni0iIsU+WLKbibMSyMxzNUWNDg1icKwI\nXwAAIABJREFU5vg+jOzX3OHKpKoM79ucqWN6Ex7sOrKYmp3PqGmL+WLVfocrE/F/Ck5SZa7s2YTZ\nE/t6OqNn5xdy05wlvJeg5VVFRMoz9ddtPPDhKs/KeU1qhfPR5AEMbhdz/CeK3xnasT7v3XwG9aJC\nAMgrKOL2d5Yx9ddtDlcm4t8UnKRKndG6Lh/dOoCmtcMBKLLw4Eer9WYvInIM1lr+881GHv9ivWcu\ntlENPrltAO0bRDtYmTipW9NafDJ5IK1jIgGwFh7/Yj3//nK92n+IVBIFJ6lybetH8cnkgXRuXLK8\n6uNfrFevJxGRIxQVWf726Vpe+mGLZ65Py9q8e9MZWjlPXCvu3TKAuBYlS8+/+cs2Hp63hqIifZ6K\nVDQFJ3FETHQob994Br1Lvdm/8P1mHvtce8pERADyC4u45/0VzFm00zM3pEMMsyf085zyLFI7MoS5\nk/pxXqcGnrm5i3dx/wcrKVCjXJEKpeAkjqkZHsycif04s33J+fnTf9vOgx+tolB7ykSkGsvOK+Tm\nOUv5dMU+z9xl3Rvz5ujeWm5cjhIWHMirN/Tiih4lvZ4+Xr6X299eTm5BoYOVifgXBSdxVHhIIFPG\nxHFRl4aeufeX7OHOd5aTV6A9ZSJS/aTl5DN2ejw/bEj0zN3Qr7lrZdIgfWzLHwsODODZ63owom9J\n78Sv1v7OTbOXkp2n8CRSEfQOLI4LDQrkpRE9uSauqWfui9X7uXH2Er3Zi0i1kpqVz6ipi4nfUdKX\n5/ahbXn8yi6e3j0ix1Lc02vioFaeuZ83HWTcjHgycgscrEzEPyg4iVcICgzg6WHdGD+wpWeu+M0+\nK09v9iLi/1KzXP14Vu1J9cz99eJY7r+gA8YoNMmJMcbw8CWx3HlOO8/c4u1JjJq6mNSsfAcrE/F9\nCk7iNQICDH+7tNNRb/bjZyQoPImIX0vJyuOGaYtYvbckNP3rqi7ceGZrB6sSX2WM4d7z2vPnizp6\n5lbsTmH4lEUkZeY5WJmIb1NwEq/yR2/2i7cnMWGmwpOI+KeUrDxumLqYNXvTPHNPXN2VG/q1cLAq\n8Qc3n9WGx67o7Bmv35/GDVMXk5Kl8CRyKhScxCvdfFabMuFp0bYkJs7UNU8i4l+SM/MYOWUxa/eV\nhKYnr+7KiL7NHaxK/Mno/i155truFJ/tWRyedNqeyMlTcBKvdfNZbXioVHhauO0wE2YmKDyJiF9I\nysxj5NTFrNvvCk3GwNPDujFcoUkq2DVxTfm/a0rC09p9aYyatpjUbIUnkZOh4CRe7Zaz2vDghWXD\n08RZCk8i4tuSMvMYOWUR60uFpqeGdeO6Ps3KeabIqbkmrilPXd3NM169N5Ux0xaTlqPwJHKiFJzE\n6906pA1/urCDZ7xg62EmzVZ4EhHflOwOTRt+TwdKjjRd11uhSSrXdX2a8cTVXT3jlXtSGTs9nnSF\nJ5ETouAkPmHykLY8cEFJePpty2FunL2EnHyFJxHxHWk5+YydEV8mND1zTXeuVWiSKjKib3Mev7KL\nZ7x8VwrjZiSoz5PICVBwEp9x29Cy4Wn+lkNMnruMvIIiB6sSETkxWXkFTJyZ4OnTVByahpVq/i1S\nFUad0YJ/llptb+nOZMbPiCdT4UnkuBScxKfcNrQt95/f3jP+YUMi97y/gsIi62BVIiLHl5NfyM1z\nlpKwI9kz9/iVXRSaxDFj+rfk75d18owTdiTrTA6Rcig4ic+5/ex23Da0jWf8xar9/PnjVRQpPImI\nF8ovLOL2t5fx6+ZDnrmHL4lVnyZx3LiBrXjk0pLwtGDrYW5/ezn5hTqTQ+SPKDiJT7r//A6MG9DS\nM35/yR7++fk6rFV4EhHvUVhkuee9FXy3PtEzd+957Zk0uLWDVYmUmDioVZnT4L9bf4AHPlipnZEi\nf0DBSXySMYa/XdqJa0qd5jJzwQ6e/XaTg1WJiJQoKrI89NEqPl+13zN3y1ltuOPstg5WJXK024a2\n5ZazSs7kmLdiH498ukY7I0WOoOAkPisgwPDUsG5c0rWRZ+6lH7bw+s9bHaxKRASstfzjs7V8sHSP\nZ25s/xY8eGEHTHEXUhEv8uCFHbihX0nz5bmLd/H01xsdrEjE+yg4iU8LDDA8d30PhnaI8cw9+b8N\nzFm008GqRKS6+883m5i1sOR96Nq4pjx6WWeFJvFaxhgeu6ILV/Ro7Jl77aetvPrTFgerEvEuCk7i\n80KCAnhtVBz9WtXxzD0ybw2fLN9znGeJiFSO6fO38/KPJV82L+3WiCeHdSMgQKFJvFtAgOGZa7tz\nbmwDz9zTX21kzsIdjtUk4k0UnMQvhAUHMm1cH7o3q+WZe+CDVfy4IfE4zxIRqVifLHctVFNsaIcY\n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\nrkJggg==\n", "text/plain": [ "" ] }, "metadata": { "image/png": { "height": 279, "width": 423 } }, "output_type": "display_data" } ], "source": [ "plt.subplot(2, 1, 1)\n", "plt.plot(x, y_sin)\n", "plt.title('Sine')\n", "plt.subplot(2, 1, 2)\n", "plt.plot(x, y_cos)\n", "plt.title('Cosine')\n", "plt.tight_layout()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "Check out Nicolas P. Rougier's [Matplotlib tutorial](http://www.labri.fr/perso/nrougier/teaching/matplotlib/matplotlib.html)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# What's next\n", "\n", "* Install Python on your own computer (remember to install version 3.x)\n", " * I recommend you to use [Anaconda](https://www.continuum.io/downloads)\n", "* Retrive this notebook from the class GitHub repository: http://github.com/lmarti/machine-learning.\n", " * If you are not familiar with the Git version control system you can use [GitHub desktop](https://desktop.github.com/).\n", "* Try running this notebook." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "
\n", "
\n", "
 
\n", "
\n", "
\n", " \n", "
\n", "
\n", "
 
\n", "
\n", "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Further reading\n", "\n", "* [Official Python 3 Docs are here](http://docs.python.org/3/).\n", "* [IPython tutorial](http://ipython.org/ipython-doc/dev/interactive/tutorial.html).\n", "* [Learn Python The Hard Way](http://learnpythonthehardway.org/book/)\n", "* [Dive Into Python](http://www.diveintopython.net/), in particular if you're interested in Python 3.\n", "* [Invent With Python](http://inventwithpython.com/), probably best for kids.\n", "* [Python Functional Programming HOWTO](http://docs.python.org/2/howto/functional.html)\n", "* [The Structure and Interpretation of Computer Programs](http://mitpress.mit.edu/sicp/full-text/book/book.html), written in Scheme, a Lisp dialect, but one of the best books on computer programming ever written.\n", "* [Generator Tricks for Systems Programmers](http://www.dabeaz.com/generators/) Beazley's slides on just what generators can do for you.\n", "* [Python Module of the Week](http://pymotw.com/2/contents.html) is a series going through in-depth analysis of the Python standard library in a very easy to understand way." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# (other) interesting IPython notebooks\n", "\n", "* Rob Johansson's [excellent notebooks](http://jrjohansson.github.io/), including [Scientific Computing with Python](https://github.com/jrjohansson/scientific-python-lectures) and [Computational Quantum Physics with QuTiP](https://github.com/jrjohansson/qutip-lectures) lectures;\n", "* [XKCD style graphs in matplotlib](http://nbviewer.ipython.org/url/jakevdp.github.com/downloads/notebooks/XKCD_plots.ipynb);\n", "* [A collection of Notebooks for using IPython effectively](https://github.com/ipython/ipython/tree/master/examples/notebooks#a-collection-of-notebooks-for-using-ipython-effectively)\n", "* [A gallery of interesting IPython Notebooks](https://github.com/ipython/ipython/wiki/A-gallery-of-interesting-IPython-Notebooks)\n", "* [Cross-disciplinary computational analysis IPython Notebooks From Hadoop World 2012](https://github.com/invisibleroads/crosscompute-tutorials)\n", "* [Quantites](http://nbviewer.ipython.org/urls/raw.github.com/tbekolay/pyconca2012/master/QuantitiesTutorial.ipynb) Units in Python.\n", " - [Another units module is here](http://www.southampton.ac.uk/~fangohr/blog/)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "# Acknowledgments\n", "\n", "* Part of this material has been adapted from the `CS231n` Python tutorial by Justin Johnson (http://cs231n.github.io/python-numpy-tutorial/).\n", "\n", "
\n", "
\n", "
\n", "
\n", "
\n", " \"Creative\n", "
\n", "
\n", " This work is licensed under a [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-nc-sa/4.0/).\n", "
\n", "
\n", "
\n", "
" ] }, { "cell_type": "code", "execution_count": 138, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "application/json": { "Software versions": [ { "module": "Python", "version": "3.6.1 64bit [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)]" }, { "module": "IPython", "version": "6.0.0" }, { "module": "OS", "version": "Darwin 16.5.0 x86_64 i386 64bit" }, { "module": "scipy", "version": "0.19.0" }, { "module": "numpy", "version": "1.12.1" }, { "module": "matplotlib", "version": "2.0.0" } ] }, "text/html": [ "
SoftwareVersion
Python3.6.1 64bit [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)]
IPython6.0.0
OSDarwin 16.5.0 x86_64 i386 64bit
scipy0.19.0
numpy1.12.1
matplotlib2.0.0
Thu Apr 27 23:03:44 2017 -03
" ], "text/latex": [ "\\begin{tabular}{|l|l|}\\hline\n", "{\\bf Software} & {\\bf Version} \\\\ \\hline\\hline\n", "Python & 3.6.1 64bit [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] \\\\ \\hline\n", "IPython & 6.0.0 \\\\ \\hline\n", "OS & Darwin 16.5.0 x86\\_64 i386 64bit \\\\ \\hline\n", "scipy & 0.19.0 \\\\ \\hline\n", "numpy & 1.12.1 \\\\ \\hline\n", "matplotlib & 2.0.0 \\\\ \\hline\n", "\\hline \\multicolumn{2}{|l|}{Thu Apr 27 23:03:44 2017 -03} \\\\ \\hline\n", "\\end{tabular}\n" ], "text/plain": [ "Software versions\n", "Python 3.6.1 64bit [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)]\n", "IPython 6.0.0\n", "OS Darwin 16.5.0 x86_64 i386 64bit\n", "scipy 0.19.0\n", "numpy 1.12.1\n", "matplotlib 2.0.0\n", "Thu Apr 27 23:03:44 2017 -03" ] }, "execution_count": 138, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%load_ext version_information\n", "%version_information scipy, numpy, matplotlib" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# this code is here for cosmetic reasons\n", "from IPython.core.display import HTML\n", "from urllib.request import urlopen\n", "HTML(urlopen('https://raw.githubusercontent.com/lmarti/jupyter_custom/master/custom.include').read().decode('utf-8'))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "--- " ] } ], "metadata": { "anaconda-cloud": {}, "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.2" } }, "nbformat": 4, "nbformat_minor": 1 }