{ "metadata": { "name": "", "signature": "sha256:bc4a99444b29b0a9011b789a8f97e97eeb721612f17ad722be7dd4bcf5dfc38c" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Some revision and some hints for the exercises" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Compatibility with Python 3, as always\n", "from __future__ import print_function # print('me') instead of print 'me'\n", "from __future__ import division # 1/2 == 0.5, not 0" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Tuples" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Tuples are lists that you cannot modify.\n", "\n", "Put another way, tuples are *immutable* lists." ] }, { "cell_type": "code", "collapsed": false, "input": [ "my_list = ['list values', False, 10, 10.1] # Lists use square brackets\n", "my_tuple = ('some values', True, 1, 0.1) # Tuples use parentheses" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "my_list[0] = 'different value'\n", "my_list" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 3, "text": [ "['different value', False, 10, 10.1]" ] } ], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "my_tuple[0] = 'another value'" ], "language": "python", "metadata": {}, "outputs": [ { "ename": "TypeError", "evalue": "'tuple' object does not support item assignment", "output_type": "pyerr", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\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_tuple\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'another value'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mTypeError\u001b[0m: 'tuple' object does not support item assignment" ] } ], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "my_list.append('value at end')\n", "my_list" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 5, "text": [ "['different value', False, 10, 10.1, 'value at end']" ] } ], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [ "my_tuple.append('something')" ], "language": "python", "metadata": {}, "outputs": [ { "ename": "AttributeError", "evalue": "'tuple' object has no attribute 'append'", "output_type": "pyerr", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mAttributeError\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_tuple\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'something'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mAttributeError\u001b[0m: 'tuple' object has no attribute 'append'" ] } ], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "A little detail: a literal value for a tuple with a single value.\n", "\n", "You might think this:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "small_tuple = (1)\n", "small_tuple" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 7, "text": [ "1" ] } ], "prompt_number": 7 }, { "cell_type": "code", "collapsed": false, "input": [ "type(small_tuple)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 8, "text": [ "int" ] } ], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Python assumes that (1) is an expression - 1 - inside parentheses - like this:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "a_number = (1 + 2 + 3)\n", "a_number" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 9, "text": [ "6" ] } ], "prompt_number": 9 }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you want a single element tuple, you need to add a comma to tell Python that is what you meant:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "a_tuple = (1,)\n", "a_tuple" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 10, "text": [ "(1,)" ] } ], "prompt_number": 10 }, { "cell_type": "markdown", "metadata": {}, "source": [ "There is no such ambiguity for lists (square brackets don't enclose expressions):" ] }, { "cell_type": "code", "collapsed": false, "input": [ "a_list = [1]\n", "a_list" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 11, "text": [ "[1]" ] } ], "prompt_number": 11 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## List comprehensions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "List comprehensions are a nice short-cut for simple `for` loops in Python.\n", "\n", "The list comprehension is a single expression that returns a list, element by element." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's say you wanted to create a list of values for squared numbers. You might do it like this:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "squared_numbers = []\n", "for i in range(10): # numbers 0 through 9\n", " squared_numbers.append(i ** 2)\n", "squared_numbers" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 12, "text": [ "[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]" ] } ], "prompt_number": 12 }, { "cell_type": "markdown", "metadata": {}, "source": [ "It turns out this kind of thing is a very common pattern in Python. That is, create an empty list, then use a for loop to fill in values for the list.\n", "\n", "List comprehensions are a short cut for that pattern." ] }, { "cell_type": "code", "collapsed": false, "input": [ "squared_numbers = [i ** 2 for i in range(10)]\n", "squared_numbers" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 13, "text": [ "[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]" ] } ], "prompt_number": 13 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The list comprehesion is an *expression*, starting and ending with square brackets. The first thing inside the square brackets is the expression that will become the element of the list - in this case `i ** 2` - followed by a `for` clause - in this case `for in in range(10)` - that will feed the first expression with values to use.\n", "\n", "See [the Python docs on list comprehensions](https://docs.python.org/2/tutorial/datastructures.html#list-comprehensions) for a little more detail." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "List comprehensions can be a little hard to read at first. If you find them confusing, as most of us do at first, then unpack them into the equivalent `for` loop. Over time, as you get used to them, they can be easier to read than the longer `for` loop equivalent.\n", "\n", "We'll practice list comprehensions more over the next few classes." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Packages and namespaces" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We have already seen examples of *importing* a package." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import numpy as np" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 14 }, { "cell_type": "markdown", "metadata": {}, "source": [ "This Python code *imports* the *module* called `numpy` and gives it the new name `np`.\n", "\n", "What `type()` of thing is `np` now?" ] }, { "cell_type": "code", "collapsed": false, "input": [ "type(np)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 15, "text": [ "module" ] } ], "prompt_number": 15 }, { "cell_type": "markdown", "metadata": {}, "source": [ "A module contains stuff with *names*. For example, numpy contains a *function* named `sqrt`:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "np.sqrt?" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 16 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Because a module contains stuff with names, it is a *namespace*." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Numpy is also a *package* because it is a set of modules that get installed together. For example, after you have installed numpy, you not only have the `numpy` module, but other submodules such as `numpy.linalg`, for linear algebra on numpy arrays:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import numpy.linalg as npl\n", "type(npl)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 17, "text": [ "module" ] } ], "prompt_number": 17 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Try tab completing on ``npl.`` (`npl` followed by a period - `.`) to see what is in there." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Numpy is the module that contains the basic routines for creating and working with 1D and 2D and 3D - and in fact ND arrays in Python. Almost every scientific computing package in Python uses numpy." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will be using two other packages for the exercises - `matplotlib` and `nibabel`. Both of these packages depend heavily on numpy for working with arrays." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Matplotlib is the standard Python package for doing high-quality plots. The original author wrote matplotlib to be similar to MATLAB (hence the name)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The best module for standard use is `matplotlib.pyplot` and we will import it like this:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import matplotlib.pyplot as plt" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 18 }, { "cell_type": "code", "collapsed": false, "input": [ "type(plt)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 19, "text": [ "module" ] } ], "prompt_number": 19 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Because we are using matplotlib in the IPython notebook, we also run an IPython command to make Matplotlib plots appear inside the notebook rather than putting up the plots as separate windows:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%matplotlib inline" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 20 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Lastly, we will be using the `nibabel` package for loading neuroimaging format images:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import nibabel as nib" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 21 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Getting help" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you don't know how to do a particular task in Python / Numpy / Matplotlib, then try these steps:\n", "\n", "* In IPython, do tab completion in the module, and have a look around. For example, if you are looking for a routine to do rounding on arrays, then type `np.ro` followed by and you will see `np.round` as one of the suggestions;\n", "* In IPython, get the help for particular functions or classes with the question mark at the end of the function or class name - e.g. ``np.round?`` followed by in the notebook.\n", "* In numpy or scipy (we'll come across scipy later), you can find stuff using `lookfor`. For example, let's say you hadn't guessed that `np.sqrt` was the square root function in numpy, you could try `np.lookfor('square root')`.\n", "* Do a web search : http://lmgtfy.com/?q=numpy+square+root\n", "\n", "Don't forget to ask your instructor - we live to help you acquire Python expertise." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Arrays as images, images as arrays" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The main point of this class is to show that you can consider arrays as images, and images as arrays." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's make an array of numbers between 0 through 99:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "an_array = np.array([[ 0, 0, 0, 0, 0, 0, 0, 0],\n", " [ 0, 0, 0, 9, 99, 99, 94, 0],\n", " [ 0, 0, 0, 25, 99, 99, 79, 0],\n", " [ 0, 0, 0, 0, 0, 0, 0, 0],\n", " [ 0, 0, 0, 56, 99, 99, 49, 0],\n", " [ 0, 0, 0, 73, 99, 99, 31, 0],\n", " [ 0, 0, 0, 91, 99, 99, 13, 0],\n", " [ 0, 0, 9, 99, 99, 94, 0, 0],\n", " [ 0, 0, 27, 99, 99, 77, 0, 0],\n", " [ 0, 0, 45, 99, 99, 59, 0, 0],\n", " [ 0, 0, 63, 99, 99, 42, 0, 0],\n", " [ 0, 0, 80, 99, 99, 24, 0, 0],\n", " [ 0, 1, 96, 99, 99, 6, 0, 0],\n", " [ 0, 16, 99, 99, 88, 0, 0, 0],\n", " [ 0, 0, 0, 0, 0, 0, 0, 0]])\n", "an_array.shape" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 22, "text": [ "(15, 8)" ] } ], "prompt_number": 22 }, { "cell_type": "markdown", "metadata": {}, "source": [ "In fact this array represents a monochrome picture of a letter." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can show arrays as images using the `plt.imshow` command. This is the default output:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "plt.imshow(an_array)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 23, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nu98tr3rVq+R7vud79ldpETl16pT8z//8z77ve/WrXy2/+7u/KyKpzo899ti+PyOEINddd53853/+\n577uu6wW6tOf/jTf+I3fyKlTp6jrmle+8pV8+MMf3tO9i3bF2qtcd9113HLLLQCcOHGCG2+8kc9/\n/vN7vv/YsWMANE1DCGHPfZePPvood999Nz/5kz+5ciNlv/d9+ctf5oEHHujWkq+qiquuumrf33vv\nvffyzGc+k+uvv35f911WoD73uc8NKnjy5Ek+97nPXc4qcObMGR566CFuv/32Pd8TY+SWW27h2muv\n5aUvfSk33XTTnu57wxvewLve9a5uK7j9ijGGl73sZdx22228733v29M9Dz/8MFdffTWvec1reN7z\nnsdP/dRPcf78+X1/9x/90R+ttCnUZQXqoHNTZ8+e5c477+Q973kPJ06c2PN91lr+/u//nkcffZS/\n+qu/4r777rvoPR/72Me45ppruPXWW1e2Tn/913/NQw89xMc//nF++7d/mwceeOCi93jvefDBB3nd\n617Hgw8+yPHjx3n729++r+9tmoaPfvSj/NAP/dC+63xZgXrGM57BI4880p0/8sgjnDx58rJ8d9u2\n/OAP/iA/+qM/yite8YqVPuOqq67iu77ru/jbv/3bi773k5/8JB/5yEf4+q//eu666y7+8i//csfY\n/IvJ0572NACuvvpqvv/7v59Pf/rTF73n5MmTnDx5khe84AUA3HnnnTz44IP7+t6Pf/zjPP/5z+fq\nq6/e133A5Q3K27aVb/iGb5CHH35Y5vP5voJyEZGHH354paA8xig/9mM/Jq9//ev3fe9///d/y//9\n3/+JiMj58+flRS96kdx77737+oz77rtPvvu7v3tf95w7d04ef/xxERE5e/asvPCFL5Q///M/39O9\nL3rRi+Qzn/mMiIj88i//srzpTW/a13f/8A//sPze7/3evu7JclmBEhG5++675YYbbpBnPvOZ8ta3\nvnXP973yla+Upz3taTKZTOTkyZPy/ve/f8/3PvDAA2KMkdOnT8stt9wit9xyi3z84x/f073/+I//\nKLfeequcPn1anvOc58g73/nOPX9vlvvuu2/frbz/+I//kNOnT8vp06fl5ptv3tff6u///u/ltttu\nk+c+97ny/d///ftq5Z09e1a+9mu/toN5v3LJ+vKO5HDKUab8SDYqR0AdyUblCKgj2agcAXUkG5Uj\noI5ko3IE1JFsVI6AOpKNyhFQR7JR+f/eSx1VUCwbGwAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 23 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The image looks rather blurry. This is because matplotlib is drawing an image with many more pixels than the array has values. For the pixels in-between array values, matplotlib is using *interpolation* to estimate a good value. We will hear a lot more about interpolation in later classes. For now, we turn off interpolation like this:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "plt.imshow(an_array, interpolation='nearest')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 24, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 24 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The image is weirdly colorful. That is because matplotlib is using the default *colormap*. A colormap is a mapping from values in the array to colors. In this case the default colormap is called `jet` and maps low numbers in the image (0 in our case) to blue, and high numbers (99 in our case) to red.\n", "\n", "We can see what the colormap is doing by asking for a color bar:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "plt.imshow(an_array, interpolation='nearest')\n", "plt.colorbar()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 25, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nSM3/AAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 25 }, { "cell_type": "markdown", "metadata": {}, "source": [ "In our case, our image would make more sense as grayscale, so we use the `gray` colormap, like this:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "plt.imshow(an_array, interpolation='nearest', cmap='gray')\n", "plt.colorbar()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 26, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n5uaSZAAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 26 }, { "cell_type": "markdown", "metadata": {}, "source": [ "A grayscale image is an array containing numbers giving the pixel intensity values - in our case between 0 and 99." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also plot lines in matplotlib. For example, we might want to plot row 8 out of this array (the 9th row):" ] }, { "cell_type": "code", "collapsed": false, "input": [ "plt.plot(an_array[8])" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 27, "text": [ "[]" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nQqjQRUQixP8DOVt8hUODEosAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 27 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The x axis is the position in the array (0 through 7) and the y axis is the value of the array row at that position.\n", "\n", "The plot shows us the 0 values at the edges of the bar of the \"i\", an the ramp up to the peak at the middle of the bar of the \"i\", in columns number 3 and 4." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A transpose in numpy uses the ``.T`` method on the array. This has the effect of flipping the rows and columns (in 2D):" ] }, { "cell_type": "code", "collapsed": false, "input": [ "an_array.T" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 28, "text": [ "array([[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n", " [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 16, 0],\n", " [ 0, 0, 0, 0, 0, 0, 0, 9, 27, 45, 63, 80, 96, 99, 0],\n", " [ 0, 9, 25, 0, 56, 73, 91, 99, 99, 99, 99, 99, 99, 99, 0],\n", " [ 0, 99, 99, 0, 99, 99, 99, 99, 99, 99, 99, 99, 99, 88, 0],\n", " [ 0, 99, 99, 0, 99, 99, 99, 94, 77, 59, 42, 24, 6, 0, 0],\n", " [ 0, 94, 79, 0, 49, 31, 13, 0, 0, 0, 0, 0, 0, 0, 0],\n", " [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])" ] } ], "prompt_number": 28 }, { "cell_type": "code", "collapsed": false, "input": [ "plt.imshow(an_array.T, interpolation='nearest', cmap='gray')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 29, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 29 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also reshape the original array to a 1D array, by stacking all the rows end to end:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "a_1d_array = np.reshape(an_array, an_array.shape[0] * an_array.shape[1])\n", "a_1d_array" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 30, "text": [ "array([ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 99, 99, 94, 0, 0,\n", " 0, 0, 25, 99, 99, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", " 0, 56, 99, 99, 49, 0, 0, 0, 0, 73, 99, 99, 31, 0, 0, 0, 0,\n", " 91, 99, 99, 13, 0, 0, 0, 9, 99, 99, 94, 0, 0, 0, 0, 27, 99,\n", " 99, 77, 0, 0, 0, 0, 45, 99, 99, 59, 0, 0, 0, 0, 63, 99, 99,\n", " 42, 0, 0, 0, 0, 80, 99, 99, 24, 0, 0, 0, 1, 96, 99, 99, 6,\n", " 0, 0, 0, 16, 99, 99, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", " 0])" ] } ], "prompt_number": 30 }, { "cell_type": "code", "collapsed": false, "input": [ "a_1d_array.shape" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 31, "text": [ "(120,)" ] } ], "prompt_number": 31 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Reshaping the array to one dimension is a common operation, so there is a separate numpy command for that, ``np.ravel``:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "np.ravel(an_array)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 32, "text": [ "array([ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 99, 99, 94, 0, 0,\n", " 0, 0, 25, 99, 99, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", " 0, 56, 99, 99, 49, 0, 0, 0, 0, 73, 99, 99, 31, 0, 0, 0, 0,\n", " 91, 99, 99, 13, 0, 0, 0, 9, 99, 99, 94, 0, 0, 0, 0, 27, 99,\n", " 99, 77, 0, 0, 0, 0, 45, 99, 99, 59, 0, 0, 0, 0, 63, 99, 99,\n", " 42, 0, 0, 0, 0, 80, 99, 99, 24, 0, 0, 0, 1, 96, 99, 99, 6,\n", " 0, 0, 0, 16, 99, 99, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", " 0])" ] } ], "prompt_number": 32 }, { "cell_type": "markdown", "metadata": {}, "source": [ "One use of the 1D version of the array, is for getting a histogram of the distribution of values in the array:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "plt.hist(a_1d_array)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 33, "text": [ "(array([ 75., 2., 3., 1., 3., 2., 1., 3., 2., 28.]),\n", " array([ 0. , 9.9, 19.8, 29.7, 39.6, 49.5, 59.4, 69.3, 79.2,\n", " 89.1, 99. ]),\n", " )" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nnFFXV5eeeeYZXb16NfULuDl29OhRd926dePX29ra3La2tly/zH+NX/3qV253d7dbXl7uDg0Nua7r\nuvF43C0vLy/wZFNjcHDQDQQCbk9Pj/vYY4+5ruvOyLVIJpPuokWLbrp9Jq7Fl19+6fp8Pnd4eNi9\ncuWK+9hjj7mHDx+eUWvR39/vLlu2bPz6rd73nTt3uqFQaPxx69atc48dO5Zy2znfU+ekpO8NDAzo\n5MmTWr16tRKJhGzbliTZtq1EIlHg6abGc889p1deeUWzZn3/qTYT16K/v1/z58/X1q1btXLlSj39\n9NO6cOHCjFyL4uJiPf/887r//vu1cOFCzZs3T47jzMi1uO5W7/u5c+cm/Kp4Jj3NedQ59fk758+f\n18aNG7Vr1y7dfffdE+6zLGtGrNPbb78tj8ejmpqaW/6PczNlLUZHR9Xb26tnnnlGvb29uuuuu246\nvDBT1uKzzz7Ta6+9poGBAZ07d07nz5/X/v37JzxmpqzFD0n3vqdbl5xHPdOTkkx25coVbdy4UU1N\nTWpsbJT03b++Q0NDkqR4PC6Px1PIEafE0aNH1dnZqUWLFmnLli3q6elRU1PTjFyLkpISlZSUaNWq\nVZKkTZs2qbe3V16vd8atxQcffKA1a9bo3nvv1ezZs7VhwwYdO3ZsRq7Fdbf6mvj/Pf3888913333\npdxWzqNeW1urTz/9VAMDAxoZGdFbb72lhoaGXL/MtOW6rrZv367Kykrt2LFj/PaGhgaFw2FJUjgc\nHo+9yXbu3KnBwUH19/ervb1djzzyiN58880ZuRZer1elpaWKxWKSpEgkoqqqKtXX18+4taioqNDx\n48d16dIlua6rSCSiysrKGbkW193qa6KhoUHt7e0aGRlRf3+/Pv30Uz300EOpN5brHwC4ruseOnTI\n9fl87uLFi92dO3fm4yWmrXfffde1LMtdvny5u2LFCnfFihXuO++843755ZduIBBwlyxZ4jqO4/7n\nP/8p9KhTKhqNuvX19a7rujN2LU6dOuXW1ta6Dz74oLt+/Xo3mUzO2LV4+eWX3crKSnfZsmXuU089\n5Y6MjMyYtXj88cfdBQsWuEVFRW5JSYn7l7/8JeX7/qc//cldvHixW15e7nZ1daXdPicfAYBB+Bul\nAGAQog4ABiHqAGAQog4ABiHqAGAQog4ABiHqAGAQog4ABvk/5tEpoX+zU74AAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 33 }, { "cell_type": "markdown", "metadata": {}, "source": [ "By default, the `plt.hist` function uses 50 bins, but you can specify how many bins you want with the `bins` keyword:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "plt.hist(a_1d_array, bins=75)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 34, "text": [ "(array([ 72., 0., 0., 0., 1., 0., 2., 0., 0., 1., 0.,\n", " 0., 1., 0., 0., 0., 0., 0., 2., 0., 1., 0.,\n", " 0., 1., 0., 0., 0., 0., 0., 0., 0., 1., 0.,\n", " 0., 1., 0., 0., 1., 0., 0., 0., 0., 1., 0.,\n", " 1., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.,\n", " 1., 0., 0., 1., 1., 1., 0., 0., 0., 0., 0.,\n", " 1., 0., 1., 0., 0., 2., 1., 0., 24.]),\n", " array([ 0. , 1.32, 2.64, 3.96, 5.28, 6.6 , 7.92, 9.24,\n", " 10.56, 11.88, 13.2 , 14.52, 15.84, 17.16, 18.48, 19.8 ,\n", " 21.12, 22.44, 23.76, 25.08, 26.4 , 27.72, 29.04, 30.36,\n", " 31.68, 33. , 34.32, 35.64, 36.96, 38.28, 39.6 , 40.92,\n", " 42.24, 43.56, 44.88, 46.2 , 47.52, 48.84, 50.16, 51.48,\n", " 52.8 , 54.12, 55.44, 56.76, 58.08, 59.4 , 60.72, 62.04,\n", " 63.36, 64.68, 66. , 67.32, 68.64, 69.96, 71.28, 72.6 ,\n", " 73.92, 75.24, 76.56, 77.88, 79.2 , 80.52, 81.84, 83.16,\n", " 84.48, 85.8 , 87.12, 88.44, 89.76, 91.08, 92.4 , 93.72,\n", " 95.04, 96.36, 97.68, 99. ]),\n", " )" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\namtrUzAYlOM4ikaj8vv9CgaDw13qkNm2bZtKS0v7d5yP1L54+umn9dBDD6mtrU3Hjx9XSUnJiOyL\njo4O7dixQ62trfroo4/U19en+vr6EdMX69at6z/A5IobrfuJEyf0xhtv6MSJE2pubtaTTz6pS5cu\npV6Am2Pvvvuuu3Tp0v7HdXV1bl1dXa4X86Px29/+1t2/f787Y8YMt6ury3Vd143FYu6MGTOGubKh\n0dnZ6fr9frelpcVdtmyZ67ruiOyLZDLpTp069ZrpI7Evvv76a9fr9bqJRMK9ePGiu2zZMnffvn0j\nqi/a29vdWbNm9T++0bpv3brVDQaD/fMtXbrUPXToUMq2c76lPrQnJd3aOjo6dPToUS1atEjxeFy2\nbUuSbNtWPB4f5uqGxjPPPKMXXnhBo0Zd/VUbiX3R3t6uSZMmad26dZo3b54ef/xxnTt3bkT2xYQJ\nE/Tss8/q3nvv1eTJkzVu3Dg5jjMi++KKG6376dOnNWXKlP75MsnTnIc6x6b/4OzZs1q5cqW2bdum\nMWPGDHhuuE/5HipvvfWWCgsLVV5efsNjbkdKX/T29qq1tVVPPvmkWltbdccdd1wzvDBS+uKzzz7T\nSy+9pI6ODp0+fVpnz57V66+/PmCekdIX15Nu3dP1S85D/Z577lFnZ2f/487OzgF/aUaCixcvauXK\nlVq7dq2qq6sl/fDXt6urS5IUi8VUWFg4nCUOiXfffVdNTU2aOnWq1qxZo5aWFq1du3ZE9sWUKVM0\nZcoULViwQJK0atUqtba2yuPxjLi++OCDD7R48WJNnDhRo0eP1ooVK3To0KER2RdX3Ogz8b95+uWX\nX+qee+5J2VbOQ33+/Pn69NNP1dHRoZ6eHr3xxhuqqqrK9WJuWa7rav369SotLdWGDRv6p1dVVSkU\nCkmSQqFQf9ibbOvWrers7FR7e7vq6+v1wAMPaPfu3SOyLzwej4qKihSNRiVJ4XBYZWVlqqysHHF9\nUVJSosOHD+vChQtyXVfhcFilpaUjsi+uuNFnoqqqSvX19erp6VF7e7s+/fRTLVy4MHVjud4B4Lqu\n+/bbb7ter9edNm2au3Xr1nws4pb1z3/+07Usy50zZ447d+5cd+7cue4777zjfv31167f73enT5/u\nOo7jdnd3D3epQyoSibiVlZWu67ojti+OHTvmzp8/373//vvd5cuXu8lkcsT2xfPPP++Wlpa6s2bN\nch999FG3p6dnxPTF6tWr3bvvvtstKChwp0yZ4v71r39Nue5/+ctf3GnTprkzZsxwm5ub07bPyUcA\nYBCuUQoABiHUAcAghDoAGIRQBwCDEOoAYBBCHQAMQqgDgEEIdQAwyP8D6ZxhGZbM1bYAAAAASUVO\nRK5CYII=\n", "text": [ "" ] } ], "prompt_number": 34 }, { "cell_type": "markdown", "metadata": {}, "source": [ "As you can imagine, it's easy to go back to the 2D shape, by splitting the 1D array back into 15 rows of 8 values each (and therefore 8 columns):" ] }, { "cell_type": "code", "collapsed": false, "input": [ "array_back = np.reshape(a_1d_array, (15, 8))\n", "array_back" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 35, "text": [ "array([[ 0, 0, 0, 0, 0, 0, 0, 0],\n", " [ 0, 0, 0, 9, 99, 99, 94, 0],\n", " [ 0, 0, 0, 25, 99, 99, 79, 0],\n", " [ 0, 0, 0, 0, 0, 0, 0, 0],\n", " [ 0, 0, 0, 56, 99, 99, 49, 0],\n", " [ 0, 0, 0, 73, 99, 99, 31, 0],\n", " [ 0, 0, 0, 91, 99, 99, 13, 0],\n", " [ 0, 0, 9, 99, 99, 94, 0, 0],\n", " [ 0, 0, 27, 99, 99, 77, 0, 0],\n", " [ 0, 0, 45, 99, 99, 59, 0, 0],\n", " [ 0, 0, 63, 99, 99, 42, 0, 0],\n", " [ 0, 0, 80, 99, 99, 24, 0, 0],\n", " [ 0, 1, 96, 99, 99, 6, 0, 0],\n", " [ 0, 16, 99, 99, 88, 0, 0, 0],\n", " [ 0, 0, 0, 0, 0, 0, 0, 0]])" ] } ], "prompt_number": 35 }, { "cell_type": "code", "collapsed": false, "input": [ "plt.imshow(array_back, interpolation='nearest', cmap='gray')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 36, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nymq1quvXr/u09vLly8rhcKikpCTN73vz5k3V3d2tlFLqzz//VPHx8T6/r1JKjY+PK6WUmpqaUunp\n6aq9vd3ntWfPnlWFhYUqJydH29BKqZiYGPXbb79pXldUVKQ+/PBDpdQ/M4+Ojmp+Da/XqyIjI9XP\nP/+sad2y7lBdXV3YsmULYmJiEBwcjPz8fNTV1fm0dr57s3wRGRkJm80GAAgJCYHZbMbw8LDP6x9+\n+GEAwOTkJLxer8/XLgcHB9HQ0IDDhw/r/pCidd3Y2Bja29tx8OBBAEBQUBBCQ0M1v29LSwvi4uIQ\nHR2tad2yBjU0NDRnQJPJhKGhoeUcAQMDA+ju7kZ6errPa2ZmZmCz2RAREYGsrCxYLBaf1h0/fhwV\nFRW6H+QfEBCAnTt3Ii0tDRcuXPBpjdPpRFhYGIqLi7Ft2zYcOXJE1y8DqK2t1fVLoZY1qJW+vud2\nu5GXl4fKykqEhIT4vC4wMBA9PT0YHBzE5cuX0dbWtuiaS5cuITw8HHa7XffudOXKFXR3d6OxsREf\nfPAB2tvbF10zPT0Nh8OBkpISOBwOrF27FuXl5Zred3JyEl988QVefPFFzTMva1BRUVFwuVyz37tc\nLphMpmV576mpKezbtw/79+9Hbm6urtcIDQ3Fc889h6tXry76Zzs6OlBfX4/Y2FgUFBSgtbUVRUVF\nmt5v06ZNAICwsDDs2bMHXV1di64xmUwwmUzYvn07ACAvLw8Oh0PT+zY2NiI1NRVhYWGa1gFY3oPy\nqakptXnzZuV0OtXExISmg3KllHI6nboOymdmZtQrr7yijh07pnntr7/+qn7//XellFIej0dlZmaq\nlpYWTa/R1tamnn/+eU1rxsfH1R9//KGUUsrtdquMjAz15Zdf+rQ2MzNT9fX1KaWUOnnypCotLdX0\n3i+99JK6ePGipjV3LGtQSinV0NCg4uPjVVxcnCorK/N5XX5+vtq0aZNas2aNMplMqqqqyue17e3t\nKiAgQFmtVmWz2ZTNZlONjY0+re3t7VV2u11ZrVaVnJyszpw54/P73tHW1qb5U95PP/2krFarslqt\nKjExUdPfVU9Pj0pLS1MpKSlqz549mj7lud1utXHjxtmYtfLb/VD078Qz5SSKQZEoBkWiGBSJYlAk\nikGRKAZFohgUifoPlTgmvZQQHKsAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 36 }, { "cell_type": "markdown", "metadata": {}, "source": [ "In numpy, basic operations like multiplication, addition, comparison, are always elementwise. For example, this multiplies every array value by 10:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "an_array * 10" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 37, "text": [ "array([[ 0, 0, 0, 0, 0, 0, 0, 0],\n", " [ 0, 0, 0, 90, 990, 990, 940, 0],\n", " [ 0, 0, 0, 250, 990, 990, 790, 0],\n", " [ 0, 0, 0, 0, 0, 0, 0, 0],\n", " [ 0, 0, 0, 560, 990, 990, 490, 0],\n", " [ 0, 0, 0, 730, 990, 990, 310, 0],\n", " [ 0, 0, 0, 910, 990, 990, 130, 0],\n", " [ 0, 0, 90, 990, 990, 940, 0, 0],\n", " [ 0, 0, 270, 990, 990, 770, 0, 0],\n", " [ 0, 0, 450, 990, 990, 590, 0, 0],\n", " [ 0, 0, 630, 990, 990, 420, 0, 0],\n", " [ 0, 0, 800, 990, 990, 240, 0, 0],\n", " [ 0, 10, 960, 990, 990, 60, 0, 0],\n", " [ 0, 160, 990, 990, 880, 0, 0, 0],\n", " [ 0, 0, 0, 0, 0, 0, 0, 0]])" ] } ], "prompt_number": 37 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Comparison is also elementwise. For example, this gives True for every value > 50, and False for every value <= 50:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "an_array > 50" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 38, "text": [ "array([[False, False, False, False, False, False, False, False],\n", " [False, False, False, False, True, True, True, False],\n", " [False, False, False, False, True, True, True, False],\n", " [False, False, False, False, False, False, False, False],\n", " [False, False, False, True, True, True, False, False],\n", " [False, False, False, True, True, True, False, False],\n", " [False, False, False, True, True, True, False, False],\n", " [False, False, False, True, True, True, False, False],\n", " [False, False, False, True, True, True, False, False],\n", " [False, False, False, True, True, True, False, False],\n", " [False, False, True, True, True, False, False, False],\n", " [False, False, True, True, True, False, False, False],\n", " [False, False, True, True, True, False, False, False],\n", " [False, False, True, True, True, False, False, False],\n", " [False, False, False, False, False, False, False, False]], dtype=bool)" ] } ], "prompt_number": 38 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Matplotlib will treat False as 0 and True as 1, so this is one way of binarizing the image at a threshold (of 50 in this case):" ] }, { "cell_type": "code", "collapsed": false, "input": [ "plt.imshow(an_array > 50, interpolation='nearest', cmap='gray')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 39, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 39 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can slice arrays as we slice strings or lists. The difference for arrays is that we can slice in any or all dimensions at the same time. For example, to get the dot of the \"i\" it looks (from the numbers at the sides of the ploat) that we want to the top 4 rows, and the last 5 columns:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "an_array[0:4, 3:]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 40, "text": [ "array([[ 0, 0, 0, 0, 0],\n", " [ 9, 99, 99, 94, 0],\n", " [25, 99, 99, 79, 0],\n", " [ 0, 0, 0, 0, 0]])" ] } ], "prompt_number": 40 }, { "cell_type": "code", "collapsed": false, "input": [ "plt.imshow(an_array[0:4, 3:], interpolation='nearest', cmap='gray')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 41, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nQmCC\n", "text": [ "" ] } ], "prompt_number": 41 } ], "metadata": {} } ] }