Last active
November 24, 2022 09:14
-
-
Save rpmuller/5920182 to your computer and use it in GitHub Desktop.
Crash Course in Python for Scientists
This file has been truncated, but you can view the full file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"metadata": { | |
"name": "", | |
"signature": "sha256:a04c38d9604adb7eb9ca89860dfa1ef72db66037cc2c07c391ef8e67a31f9254" | |
}, | |
"nbformat": 3, | |
"nbformat_minor": 0, | |
"worksheets": [ | |
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# A Crash Course in Python for Scientists\n", | |
"[Rick Muller](http://www.cs.sandia.gov/~rmuller/), Sandia National Laboratories\n", | |
"\n", | |
"version 0.6\n", | |
"\n", | |
"This work is licensed under a [Creative Commons Attribution-ShareAlike 3.0 Unported License](http://creativecommons.org/licenses/by-sa/3.0/deed.en_US)." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Why Python?\n", | |
"Python is the programming language of choice for many scientists to a large degree because it offers a great deal of power to analyze and model scientific data with relatively little overhead in terms of learning, installation or development time. It is a language you can pick up in a weekend, and use for the rest of one's life.\n", | |
"\n", | |
"The [Python Tutorial](http://docs.python.org/2/tutorial/) is a great place to start getting a feel for the language. To complement this material, I taught a [Python Short Course](http://www.wag.caltech.edu/home/rpm/python_course/) years ago to a group of computational chemists during a time that I was worried the field was moving too much in the direction of using canned software rather than developing one's own methods. I wanted to focus on what working scientists needed to be more productive: parsing output of other programs, building simple models, experimenting with object oriented programming, extending the language with C, and simple GUIs. \n", | |
"\n", | |
"I'm trying to do something very similar here, to cut to the chase and focus on what scientists need. In the last year or so, the [IPython Project](http://ipython.org) has put together a notebook interface that I have found incredibly valuable. A large number of people have released very good IPython Notebooks that I have taken a huge amount of pleasure reading through. Some ones that I particularly like include:\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", | |
"\n", | |
"I find IPython notebooks an easy way both to get important work done in my everyday job, as well as to communicate what I've done, how I've done it, and why it matters to my coworkers. I find myself endlessly sweeping the [IPython subreddit](http://ipython.reddit.com) hoping someone will post a new notebook. In the interest of putting more notebooks out into the wild for other people to use and enjoy, I thought I would try to recreate some of what I was trying to get across in the original Python Short Course, updated by 15 years of Python, Numpy, Scipy, Matplotlib, and IPython development, as well as my own experience in using Python almost every day of this time." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## What You Need to Install\n", | |
"\n", | |
"There are two branches of current releases in Python: the older-syntax Python 2, and the newer-syntax Python 3. This schizophrenia is largely intentional: when it became clear that some non-backwards-compatible changes to the language were necessary, the Python dev-team decided to go through a five-year (or so) transition, during which the new language features would be introduced and the old language was still actively maintained, to make such a transition as easy as possible. We're now (2013) past the halfway point, and, IMHO, at the first time when I'm considering making the change to Python 3.\n", | |
"\n", | |
"Nonetheless, I'm going to write these notes with Python 2 in mind, since this is the version of the language that I use in my day-to-day job, and am most comfortable with. If these notes are important and are valuable to people, I'll be happy to rewrite the notes using Python 3.\n", | |
"\n", | |
"With this in mind, these notes assume you have a Python distribution that includes:\n", | |
"\n", | |
"* [Python](http://www.python.org) version 2.7;\n", | |
"* [Numpy](http://www.numpy.org), the core numerical extensions for linear algebra and multidimensional arrays;\n", | |
"* [Scipy](http://www.scipy.org), additional libraries for scientific programming;\n", | |
"* [Matplotlib](http://matplotlib.sf.net), excellent plotting and graphing libraries;\n", | |
"* [IPython](http://ipython.org), with the additional libraries required for the notebook interface.\n", | |
"\n", | |
"A good, easy to install option that supports Mac, Windows, and Linux, and that has all of these packages (and much more) is the [Entought Python Distribution](https://www.enthought.com/products/epd), also known as EPD, which appears to be changing its name to Enthought Canopy. Enthought is a commercial company that supports a lot of very good work in scientific Python development and application. You can either purchase a license to use EPD, or there is also a [free version](https://www.enthought.com/products/epd/free/) that you can download and install.\n", | |
"\n", | |
"Here are some other alternatives, should you not want to use EPD:\n", | |
"\n", | |
"**Linux** Most distributions have an installation manager. Redhat has yum, Ubuntu has apt-get. To my knowledge, all of these packages should be available through those installers.\n", | |
"\n", | |
"**Mac** I use [Macports](http://www.macports.org/), which has up-to-date versions of all of these packages.\n", | |
"\n", | |
"**Windows** The [PythonXY](https://code.google.com/p/pythonxy/) package has everything you need: install the package, then go to Start > PythonXY > Command Prompts > IPython notebook server.\n", | |
"\n", | |
"**Cloud** This notebook is currently not running on the [IPython notebook viewer](http://nbviewer.ipython.org/), but will be shortly, which will allow the notebook to be viewed but not interactively. I'm keeping an eye on [Wakari](http://www.wakari.io), from [Continuum Analytics](http://continuum.io/), which is a cloud-based IPython notebook. Wakari appears to support free accounts as well. Continuum is a company started by some of the core Enthought Numpy/Scipy people focusing on big data. \n", | |
"\n", | |
"Continuum also supports a bundled, multiplatform Python package called [Anaconda](https://store.continuum.io/) that I'll also keep an eye on." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# I. Python Overview\n", | |
"This is a quick introduction to Python. There are lots of other places to learn the language more thoroughly. I have collected a list of useful links, including ones to other learning resources, at the end of this notebook. If you want a little more depth, [Python Tutorial](http://docs.python.org/2/tutorial/) is a great place to start, as is Zed Shaw's [Learn Python the Hard Way](http://learnpythonthehardway.org/book/).\n", | |
"\n", | |
"The lessons that follow make use of the IPython notebooks. There's a good introduction to notebooks [in the IPython notebook documentation](http://ipython.org/notebook.html) that even has a [nice video](http://www.youtube.com/watch?v=H6dLGQw9yFQ#!) on how to use the notebooks. You should probably also flip through the [IPython tutorial](http://ipython.org/ipython-doc/dev/interactive/tutorial.html) in your copious free time.\n", | |
"\n", | |
"Briefly, notebooks have code cells (that are generally followed by result cells) and text cells. The text cells are the stuff that you're reading now. The code cells start with \"In []:\" with some number generally in the brackets. If you put your cursor in the code cell and hit Shift-Enter, the code will run in the Python interpreter and the result will print out in the output cell. You can then change things around and see whether you understand what's going on. If you need to know more, see the [IPython notebook documentation](http://ipython.org/notebook.html) or the [IPython tutorial](http://ipython.org/ipython-doc/dev/interactive/tutorial.html)." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Using Python as a Calculator" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Many of the things I used to use a calculator for, I now use Python for:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"2+2" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 1, | |
"text": [ | |
"4" | |
] | |
} | |
], | |
"prompt_number": 1 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"(50-5*6)/4" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 2, | |
"text": [ | |
"5" | |
] | |
} | |
], | |
"prompt_number": 2 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"(If you're typing this into an IPython notebook, or otherwise using notebook file, you hit shift-Enter to evaluate a cell.)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"There are some gotchas compared to using a normal calculator." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"7/3" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 3, | |
"text": [ | |
"2" | |
] | |
} | |
], | |
"prompt_number": 3 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Python integer division, like C or Fortran integer division, truncates the remainder and returns an integer. At least it does in version 2. In version 3, Python returns a floating point number. You can get a sneak preview of this feature in Python 2 by importing the module from the future features:\n", | |
"\n", | |
" from __future__ import division" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Alternatively, you can convert one of the integers to a floating point number, in which case the division function returns another floating point number." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"7/3." | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 4, | |
"text": [ | |
"2.3333333333333335" | |
] | |
} | |
], | |
"prompt_number": 4 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"7/float(3)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 5, | |
"text": [ | |
"2.3333333333333335" | |
] | |
} | |
], | |
"prompt_number": 5 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"In the last few lines, we have sped by a lot of things that we should stop for a moment and explore a little more fully. We've seen, however briefly, two different data types: **integers**, also known as *whole numbers* to the non-programming world, and **floating point numbers**, also known (incorrectly) as *decimal numbers* to the rest of the world.\n", | |
"\n", | |
"We've also seen the first instance of an **import** statement. Python has a huge number of libraries included with the distribution. To keep things simple, most of these variables and functions are not accessible from a normal Python interactive session. Instead, you have to import the name. For example, there is a **math** module containing many useful functions. To access, say, the square root function, you can either first\n", | |
"\n", | |
" from math import sqrt\n", | |
"\n", | |
"and then" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"sqrt(81)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 6, | |
"text": [ | |
"9.0" | |
] | |
} | |
], | |
"prompt_number": 6 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"or you can simply import the math library itself" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"import math\n", | |
"math.sqrt(81)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 7, | |
"text": [ | |
"9.0" | |
] | |
} | |
], | |
"prompt_number": 7 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"You can define variables using the equals (=) sign:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"width = 20\n", | |
"length = 30\n", | |
"area = length*width\n", | |
"area" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 8, | |
"text": [ | |
"600" | |
] | |
} | |
], | |
"prompt_number": 8 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"If you try to access a variable that you haven't yet defined, you get an error:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"volume" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"ename": "NameError", | |
"evalue": "name 'volume' is not defined", | |
"output_type": "pyerr", | |
"traceback": [ | |
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", | |
"\u001b[0;32m<ipython-input-9-0c7fc58f9268>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mvolume\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", | |
"\u001b[0;31mNameError\u001b[0m: name 'volume' is not defined" | |
] | |
} | |
], | |
"prompt_number": 9 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"and you need to define it:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"depth = 10\n", | |
"volume = area*depth\n", | |
"volume" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"You can name a variable *almost* anything you want. It needs to start with an alphabetical character or \"\\_\", can contain alphanumeric charcters plus underscores (\"\\_\"). Certain words, however, are reserved for the language:\n", | |
"\n", | |
" and, as, assert, break, class, continue, def, del, elif, else, except, \n", | |
" exec, finally, for, from, global, if, import, in, is, lambda, not, or,\n", | |
" pass, print, raise, return, try, while, with, yield\n", | |
"\n", | |
"Trying to define a variable using one of these will result in a syntax error:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"return = 0" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"ename": "SyntaxError", | |
"evalue": "invalid syntax (<ipython-input-10-2b99136d4ec6>, line 1)", | |
"output_type": "pyerr", | |
"traceback": [ | |
"\u001b[0;36m File \u001b[0;32m\"<ipython-input-10-2b99136d4ec6>\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m return = 0\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" | |
] | |
} | |
], | |
"prompt_number": 10 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"The [Python Tutorial](http://docs.python.org/2/tutorial/introduction.html#using-python-as-a-calculator) has more on using Python as an interactive shell. The [IPython tutorial](http://ipython.org/ipython-doc/dev/interactive/tutorial.html) makes a nice complement to this, since IPython has a much more sophisticated iteractive shell." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Strings\n", | |
"Strings are lists of printable characters, and can be defined using either single quotes" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"'Hello, World!'" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 11, | |
"text": [ | |
"'Hello, World!'" | |
] | |
} | |
], | |
"prompt_number": 11 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"or double quotes" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"\"Hello, World!\"" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 12, | |
"text": [ | |
"'Hello, World!'" | |
] | |
} | |
], | |
"prompt_number": 12 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"But not both at the same time, unless you want one of the symbols to be part of the string." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"\"He's a Rebel\"" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 13, | |
"text": [ | |
"\"He's a Rebel\"" | |
] | |
} | |
], | |
"prompt_number": 13 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"'She asked, \"How are you today?\"'" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 14, | |
"text": [ | |
"'She asked, \"How are you today?\"'" | |
] | |
} | |
], | |
"prompt_number": 14 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Just like the other two data objects we're familiar with (ints and floats), you can assign a string to a variable" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"greeting = \"Hello, World!\"" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 15 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"The **print** statement is often used for printing character strings:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"print greeting" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"Hello, World!\n" | |
] | |
} | |
], | |
"prompt_number": 16 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"But it can also print data types other than strings:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"print \"The area is \",area" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"The area is 600\n" | |
] | |
} | |
], | |
"prompt_number": 17 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"In the above snipped, the number 600 (stored in the variable \"area\") is converted into a string before being printed out." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"You can use the + operator to concatenate strings together:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"statement = \"Hello,\" + \"World!\"\n", | |
"print statement" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"Hello,World!\n" | |
] | |
} | |
], | |
"prompt_number": 18 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Don't forget the space between the strings, if you want one there. " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"statement = \"Hello, \" + \"World!\"\n", | |
"print statement" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"Hello, World!\n" | |
] | |
} | |
], | |
"prompt_number": 19 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"You can use + to concatenate multiple strings in a single statement:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"print \"This \" + \"is \" + \"a \" + \"longer \" + \"statement.\"" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"This is a longer statement.\n" | |
] | |
} | |
], | |
"prompt_number": 20 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"If you have a lot of words to concatenate together, there are other, more efficient ways to do this. But this is fine for linking a few strings together." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Lists\n", | |
"Very often in a programming language, one wants to keep a group of similar items together. Python does this using a data type called **lists**." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"days_of_the_week = [\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 21 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"You can access members of the list using the **index** of that item:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"days_of_the_week[2]" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 22, | |
"text": [ | |
"'Tuesday'" | |
] | |
} | |
], | |
"prompt_number": 22 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Python lists, like C, but unlike Fortran, use 0 as the index of the first element of a list. Thus, in this example, the 0 element is \"Sunday\", 1 is \"Monday\", and so on. If you need to access the *n*th element from the end of the list, you can use a negative index. For example, the -1 element of a list is the last element:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"days_of_the_week[-1]" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 23, | |
"text": [ | |
"'Saturday'" | |
] | |
} | |
], | |
"prompt_number": 23 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"You can add additional items to the list using the .append() command:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"languages = [\"Fortran\",\"C\",\"C++\"]\n", | |
"languages.append(\"Python\")\n", | |
"print languages" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"['Fortran', 'C', 'C++', 'Python']\n" | |
] | |
} | |
], | |
"prompt_number": 24 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"The **range()** command is a convenient way to make sequential lists of numbers:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"range(10)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 25, | |
"text": [ | |
"[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]" | |
] | |
} | |
], | |
"prompt_number": 25 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Note that range(n) starts at 0 and gives the sequential list of integers less than n. If you want to start at a different number, use range(start,stop)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"range(2,8)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 26, | |
"text": [ | |
"[2, 3, 4, 5, 6, 7]" | |
] | |
} | |
], | |
"prompt_number": 26 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"The lists created above with range have a *step* of 1 between elements. You can also give a fixed step size via a third command:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"evens = range(0,20,2)\n", | |
"evens" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 27, | |
"text": [ | |
"[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]" | |
] | |
} | |
], | |
"prompt_number": 27 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"evens[3]" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 28, | |
"text": [ | |
"6" | |
] | |
} | |
], | |
"prompt_number": 28 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Lists do not have to hold the same data type. For example," | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"[\"Today\",7,99.3,\"\"]" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 29, | |
"text": [ | |
"['Today', 7, 99.3, '']" | |
] | |
} | |
], | |
"prompt_number": 29 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"However, it's good (but not essential) to use lists for similar objects that are somehow logically connected. If you want to group different data types together into a composite data object, it's best to use **tuples**, which we will learn about below.\n", | |
"\n", | |
"You can find out how long a list is using the **len()** command:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"help(len)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"Help on built-in function len in module __builtin__:\n", | |
"\n", | |
"len(...)\n", | |
" len(object) -> integer\n", | |
" \n", | |
" Return the number of items of a sequence or collection.\n", | |
"\n" | |
] | |
} | |
], | |
"prompt_number": 30 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"len(evens)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 31, | |
"text": [ | |
"10" | |
] | |
} | |
], | |
"prompt_number": 31 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Iteration, Indentation, and Blocks\n", | |
"One of the most useful things you can do with lists is to *iterate* through them, i.e. to go through each element one at a time. To do this in Python, we use the **for** statement:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"for day in days_of_the_week:\n", | |
" print day" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"Sunday\n", | |
"Monday\n", | |
"Tuesday\n", | |
"Wednesday\n", | |
"Thursday\n", | |
"Friday\n", | |
"Saturday\n" | |
] | |
} | |
], | |
"prompt_number": 32 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"This code snippet goes through each element of the list called **days_of_the_week** and assigns it to the variable **day**. It then executes everything in the indented block (in this case only one line of code, the print statement) using those variable assignments. When the program has gone through every element of the list, it exists the block.\n", | |
"\n", | |
"(Almost) every programming language defines blocks of code in some way. In Fortran, one uses END statements (ENDDO, ENDIF, etc.) to define code blocks. In C, C++, and Perl, one uses curly braces {} to define these blocks.\n", | |
"\n", | |
"Python uses a colon (\":\"), followed by indentation level to define code blocks. Everything at a higher level of indentation is taken to be in the same block. In the above example the block was only a single line, but we could have had longer blocks as well:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"for day in days_of_the_week:\n", | |
" statement = \"Today is \" + day\n", | |
" print statement" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"Today is Sunday\n", | |
"Today is Monday\n", | |
"Today is Tuesday\n", | |
"Today is Wednesday\n", | |
"Today is Thursday\n", | |
"Today is Friday\n", | |
"Today is Saturday\n" | |
] | |
} | |
], | |
"prompt_number": 33 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"The **range()** command is particularly useful with the **for** statement to execute loops of a specified length:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"for i in range(20):\n", | |
" print \"The square of \",i,\" is \",i*i" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"The square of 0 is 0\n", | |
"The square of 1 is 1\n", | |
"The square of 2 is 4\n", | |
"The square of 3 is 9\n", | |
"The square of 4 is 16\n", | |
"The square of 5 is 25\n", | |
"The square of 6 is 36\n", | |
"The square of 7 is 49\n", | |
"The square of 8 is 64\n", | |
"The square of 9 is 81\n", | |
"The square of 10 is 100\n", | |
"The square of 11 is 121\n", | |
"The square of 12 is 144\n", | |
"The square of 13 is 169\n", | |
"The square of 14 is 196\n", | |
"The square of 15 is 225\n", | |
"The square of 16 is 256\n", | |
"The square of 17 is 289\n", | |
"The square of 18 is 324\n", | |
"The square of 19 is 361\n" | |
] | |
} | |
], | |
"prompt_number": 34 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Slicing\n", | |
"Lists and strings have something in common that you might not suspect: they can both be treated as sequences. You already know that you can iterate through the elements of a list. You can also iterate through the letters in a string:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"for letter in \"Sunday\":\n", | |
" print letter" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"S\n", | |
"u\n", | |
"n\n", | |
"d\n", | |
"a\n", | |
"y\n" | |
] | |
} | |
], | |
"prompt_number": 35 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"This is only occasionally useful. Slightly more useful is the *slicing* operation, which you can also use on any sequence. We already know that we can use *indexing* to get the first element of a list:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"days_of_the_week[0]" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 36, | |
"text": [ | |
"'Sunday'" | |
] | |
} | |
], | |
"prompt_number": 36 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"If we want the list containing the first two elements of a list, we can do this via" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"days_of_the_week[0:2]" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 37, | |
"text": [ | |
"['Sunday', 'Monday']" | |
] | |
} | |
], | |
"prompt_number": 37 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"or simply" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"days_of_the_week[:2]" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 38, | |
"text": [ | |
"['Sunday', 'Monday']" | |
] | |
} | |
], | |
"prompt_number": 38 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"If we want the last items of the list, we can do this with negative slicing:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"days_of_the_week[-2:]" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 39, | |
"text": [ | |
"['Friday', 'Saturday']" | |
] | |
} | |
], | |
"prompt_number": 39 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"which is somewhat logically consistent with negative indices accessing the last elements of the list.\n", | |
"\n", | |
"You can do:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"workdays = days_of_the_week[1:6]\n", | |
"print workdays" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']\n" | |
] | |
} | |
], | |
"prompt_number": 40 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Since strings are sequences, you can also do this to them:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"day = \"Sunday\"\n", | |
"abbreviation = day[:3]\n", | |
"print abbreviation" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"Sun\n" | |
] | |
} | |
], | |
"prompt_number": 41 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"If we really want to get fancy, we can pass a third element into the slice, which specifies a step length (just like a third argument to the **range()** function specifies the step):" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"numbers = range(0,40)\n", | |
"evens = numbers[2::2]\n", | |
"evens" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 42, | |
"text": [ | |
"[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38]" | |
] | |
} | |
], | |
"prompt_number": 42 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Note that in this example I was even able to omit the second argument, so that the slice started at 2, went to the end of the list, and took every second element, to generate the list of even numbers less that 40." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Booleans and Truth Testing\n", | |
"We have now learned a few data types. We have integers and floating point numbers, strings, and lists to contain them. We have also learned about lists, a container that can hold any data type. We have learned to print things out, and to iterate over items in lists. We will now learn about **boolean** variables that can be either True or False.\n", | |
"\n", | |
"We invariably need some concept of *conditions* in programming to control branching behavior, to allow a program to react differently to different situations. If it's Monday, I'll go to work, but if it's Sunday, I'll sleep in. To do this in Python, we use a combination of **boolean** variables, which evaluate to either True or False, and **if** statements, that control branching based on boolean values." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"For example:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"if day == \"Sunday\":\n", | |
" print \"Sleep in\"\n", | |
"else:\n", | |
" print \"Go to work\"" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"Sleep in\n" | |
] | |
} | |
], | |
"prompt_number": 43 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"(Quick quiz: why did the snippet print \"Go to work\" here? What is the variable \"day\" set to?)\n", | |
"\n", | |
"Let's take the snippet apart to see what happened. First, note the statement" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"day == \"Sunday\"" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 44, | |
"text": [ | |
"True" | |
] | |
} | |
], | |
"prompt_number": 44 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"If we evaluate it by itself, as we just did, we see that it returns a boolean value, False. The \"==\" operator performs *equality testing*. If the two items are equal, it returns True, otherwise it returns False. In this case, it is comparing two variables, the string \"Sunday\", and whatever is stored in the variable \"day\", which, in this case, is the other string \"Saturday\". Since the two strings are not equal to each other, the truth test has the false value." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"The if statement that contains the truth test is followed by a code block (a colon followed by an indented block of code). If the boolean is true, it executes the code in that block. Since it is false in the above example, we don't see that code executed.\n", | |
"\n", | |
"The first block of code is followed by an **else** statement, which is executed if nothing else in the above if statement is true. Since the value was false, this code is executed, which is why we see \"Go to work\".\n", | |
"\n", | |
"You can compare any data types in Python:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"1 == 2" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 45, | |
"text": [ | |
"False" | |
] | |
} | |
], | |
"prompt_number": 45 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"50 == 2*25" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 46, | |
"text": [ | |
"True" | |
] | |
} | |
], | |
"prompt_number": 46 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"3 < 3.14159" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 47, | |
"text": [ | |
"True" | |
] | |
} | |
], | |
"prompt_number": 47 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"1 == 1.0" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 48, | |
"text": [ | |
"True" | |
] | |
} | |
], | |
"prompt_number": 48 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"1 != 0" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 49, | |
"text": [ | |
"True" | |
] | |
} | |
], | |
"prompt_number": 49 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"1 <= 2" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 50, | |
"text": [ | |
"True" | |
] | |
} | |
], | |
"prompt_number": 50 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"1 >= 1" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 51, | |
"text": [ | |
"True" | |
] | |
} | |
], | |
"prompt_number": 51 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We see a few other boolean operators here, all of which which should be self-explanatory. Less than, equality, non-equality, and so on.\n", | |
"\n", | |
"Particularly interesting is the 1 == 1.0 test, which is true, since even though the two objects are different data types (integer and floating point number), they have the same *value*. There is another boolean operator **is**, that tests whether two objects are the same object:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"1 is 1.0" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 52, | |
"text": [ | |
"False" | |
] | |
} | |
], | |
"prompt_number": 52 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We can do boolean tests on lists as well:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"[1,2,3] == [1,2,4]" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 53, | |
"text": [ | |
"False" | |
] | |
} | |
], | |
"prompt_number": 53 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"[1,2,3] < [1,2,4]" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 54, | |
"text": [ | |
"True" | |
] | |
} | |
], | |
"prompt_number": 54 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Finally, note that you can also string multiple comparisons together, which can result in very intuitive tests:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"hours = 5\n", | |
"0 < hours < 24" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 55, | |
"text": [ | |
"True" | |
] | |
} | |
], | |
"prompt_number": 55 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"If statements can have **elif** parts (\"else if\"), in addition to if/else parts. For example:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"if day == \"Sunday\":\n", | |
" print \"Sleep in\"\n", | |
"elif day == \"Saturday\":\n", | |
" print \"Do chores\"\n", | |
"else:\n", | |
" print \"Go to work\"" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"Sleep in\n" | |
] | |
} | |
], | |
"prompt_number": 56 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Of course we can combine if statements with for loops, to make a snippet that is almost interesting:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"for day in days_of_the_week:\n", | |
" statement = \"Today is \" + day\n", | |
" print statement\n", | |
" if day == \"Sunday\":\n", | |
" print \" Sleep in\"\n", | |
" elif day == \"Saturday\":\n", | |
" print \" Do chores\"\n", | |
" else:\n", | |
" print \" Go to work\"" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"Today is Sunday\n", | |
" Sleep in\n", | |
"Today is Monday\n", | |
" Go to work\n", | |
"Today is Tuesday\n", | |
" Go to work\n", | |
"Today is Wednesday\n", | |
" Go to work\n", | |
"Today is Thursday\n", | |
" Go to work\n", | |
"Today is Friday\n", | |
" Go to work\n", | |
"Today is Saturday\n", | |
" Do chores\n" | |
] | |
} | |
], | |
"prompt_number": 57 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"This is something of an advanced topic, but ordinary data types have boolean values associated with them, and, indeed, in early versions of Python there was not a separate boolean object. Essentially, anything that was a 0 value (the integer or floating point 0, an empty string \"\", or an empty list []) was False, and everything else was true. You can see the boolean value of any data object using the **bool()** function." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"bool(1)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 58, | |
"text": [ | |
"True" | |
] | |
} | |
], | |
"prompt_number": 58 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"bool(0)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 59, | |
"text": [ | |
"False" | |
] | |
} | |
], | |
"prompt_number": 59 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"bool([\"This \",\" is \",\" a \",\" list\"])" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 60, | |
"text": [ | |
"True" | |
] | |
} | |
], | |
"prompt_number": 60 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Code Example: The Fibonacci Sequence\n", | |
"The [Fibonacci sequence](http://en.wikipedia.org/wiki/Fibonacci_number) is a sequence in math that starts with 0 and 1, and then each successive entry is the sum of the previous two. Thus, the sequence goes 0,1,1,2,3,5,8,13,21,34,55,89,...\n", | |
"\n", | |
"A very common exercise in programming books is to compute the Fibonacci sequence up to some number **n**. First I'll show the code, then I'll discuss what it is doing." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"n = 10\n", | |
"sequence = [0,1]\n", | |
"for i in range(2,n): # This is going to be a problem if we ever set n <= 2!\n", | |
" sequence.append(sequence[i-1]+sequence[i-2])\n", | |
"print sequence" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]\n" | |
] | |
} | |
], | |
"prompt_number": 61 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Let's go through this line by line. First, we define the variable **n**, and set it to the integer 20. **n** is the length of the sequence we're going to form, and should probably have a better variable name. We then create a variable called **sequence**, and initialize it to the list with the integers 0 and 1 in it, the first two elements of the Fibonacci sequence. We have to create these elements \"by hand\", since the iterative part of the sequence requires two previous elements.\n", | |
"\n", | |
"We then have a for loop over the list of integers from 2 (the next element of the list) to **n** (the length of the sequence). After the colon, we see a hash tag \"#\", and then a **comment** that if we had set **n** to some number less than 2 we would have a problem. Comments in Python start with #, and are good ways to make notes to yourself or to a user of your code explaining why you did what you did. Better than the comment here would be to test to make sure the value of **n** is valid, and to complain if it isn't; we'll try this later.\n", | |
"\n", | |
"In the body of the loop, we append to the list an integer equal to the sum of the two previous elements of the list.\n", | |
"\n", | |
"After exiting the loop (ending the indentation) we then print out the whole list. That's it!" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Functions\n", | |
"We might want to use the Fibonacci snippet with different sequence lengths. We could cut an paste the code into another cell, changing the value of **n**, but it's easier and more useful to make a function out of the code. We do this with the **def** statement in Python:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def fibonacci(sequence_length):\n", | |
" \"Return the Fibonacci sequence of length *sequence_length*\"\n", | |
" sequence = [0,1]\n", | |
" if sequence_length < 1:\n", | |
" print \"Fibonacci sequence only defined for length 1 or greater\"\n", | |
" return\n", | |
" if 0 < sequence_length < 3:\n", | |
" return sequence[:sequence_length]\n", | |
" for i in range(2,sequence_length): \n", | |
" sequence.append(sequence[i-1]+sequence[i-2])\n", | |
" return sequence" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 62 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We can now call **fibonacci()** for different sequence_lengths:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"fibonacci(2)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 63, | |
"text": [ | |
"[0, 1]" | |
] | |
} | |
], | |
"prompt_number": 63 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"fibonacci(12)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 64, | |
"text": [ | |
"[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]" | |
] | |
} | |
], | |
"prompt_number": 64 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We've introduced a several new features here. First, note that the function itself is defined as a code block (a colon followed by an indented block). This is the standard way that Python delimits things. Next, note that the first line of the function is a single string. This is called a **docstring**, and is a special kind of comment that is often available to people using the function through the python command line:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"help(fibonacci)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"Help on function fibonacci in module __main__:\n", | |
"\n", | |
"fibonacci(sequence_length)\n", | |
" Return the Fibonacci sequence of length *sequence_length*\n", | |
"\n" | |
] | |
} | |
], | |
"prompt_number": 65 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"If you define a docstring for all of your functions, it makes it easier for other people to use them, since they can get help on the arguments and return values of the function.\n", | |
"\n", | |
"Next, note that rather than putting a comment in about what input values lead to errors, we have some testing of these values, followed by a warning if the value is invalid, and some conditional code to handle special cases." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Recursion and Factorials\n", | |
"Functions can also call themselves, something that is often called *recursion*. We're going to experiment with recursion by computing the factorial function. The factorial is defined for a positive integer **n** as\n", | |
" \n", | |
"$$ n! = n(n-1)(n-2)\\cdots 1 $$\n", | |
"\n", | |
"First, note that we don't need to write a function at all, since this is a function built into the standard math library. Let's use the help function to find out about it:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"from math import factorial\n", | |
"help(factorial)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"Help on built-in function factorial in module math:\n", | |
"\n", | |
"factorial(...)\n", | |
" factorial(x) -> Integral\n", | |
" \n", | |
" Find x!. Raise a ValueError if x is negative or non-integral.\n", | |
"\n" | |
] | |
} | |
], | |
"prompt_number": 66 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"This is clearly what we want." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"factorial(20)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 67, | |
"text": [ | |
"2432902008176640000" | |
] | |
} | |
], | |
"prompt_number": 67 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"However, if we did want to write a function ourselves, we could do recursively by noting that\n", | |
"\n", | |
"$$ n! = n(n-1)!$$\n", | |
"\n", | |
"The program then looks something like:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def fact(n):\n", | |
" if n <= 0:\n", | |
" return 1\n", | |
" return n*fact(n-1)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 68 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"fact(20)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 69, | |
"text": [ | |
"2432902008176640000" | |
] | |
} | |
], | |
"prompt_number": 69 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Recursion can be very elegant, and can lead to very simple programs." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Two More Data Structures: Tuples and Dictionaries\n", | |
"Before we end the Python overview, I wanted to touch on two more data structures that are very useful (and thus very common) in Python programs.\n", | |
"\n", | |
"A **tuple** is a sequence object like a list or a string. It's constructed by grouping a sequence of objects together with commas, either without brackets, or with parentheses:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"t = (1,2,'hi',9.0)\n", | |
"t" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 70, | |
"text": [ | |
"(1, 2, 'hi', 9.0)" | |
] | |
} | |
], | |
"prompt_number": 70 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Tuples are like lists, in that you can access the elements using indices:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"t[1]" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 71, | |
"text": [ | |
"2" | |
] | |
} | |
], | |
"prompt_number": 71 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"However, tuples are *immutable*, you can't append to them or change the elements of them:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"t.append(7)" | |
], | |
"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<ipython-input-72-50c7062b1d5f>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m7\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": 72 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"t[1]=77" | |
], | |
"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<ipython-input-73-03cc8ba9c07d>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mt\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m77\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": 73 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Tuples are useful anytime you want to group different pieces of data together in an object, but don't want to create a full-fledged class (see below) for them. For example, let's say you want the Cartesian coordinates of some objects in your program. Tuples are a good way to do this:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"('Bob',0.0,21.0)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 74, | |
"text": [ | |
"('Bob', 0.0, 21.0)" | |
] | |
} | |
], | |
"prompt_number": 74 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Again, it's not a necessary distinction, but one way to distinguish tuples and lists is that tuples are a collection of different things, here a name, and x and y coordinates, whereas a list is a collection of similar things, like if we wanted a list of those coordinates:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"positions = [\n", | |
" ('Bob',0.0,21.0),\n", | |
" ('Cat',2.5,13.1),\n", | |
" ('Dog',33.0,1.2)\n", | |
" ]" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 75 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Tuples can be used when functions return more than one value. Say we wanted to compute the smallest x- and y-coordinates of the above list of objects. We could write:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def minmax(objects):\n", | |
" minx = 1e20 # These are set to really big numbers\n", | |
" miny = 1e20\n", | |
" for obj in objects:\n", | |
" name,x,y = obj\n", | |
" if x < minx: \n", | |
" minx = x\n", | |
" if y < miny:\n", | |
" miny = y\n", | |
" return minx,miny\n", | |
"\n", | |
"x,y = minmax(positions)\n", | |
"print x,y" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"0.0 1.2\n" | |
] | |
} | |
], | |
"prompt_number": 76 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Here we did two things with tuples you haven't seen before. First, we unpacked an object into a set of named variables using *tuple assignment*:\n", | |
"\n", | |
" >>> name,x,y = obj\n", | |
"\n", | |
"We also returned multiple values (minx,miny), which were then assigned to two other variables (x,y), again by tuple assignment. This makes what would have been complicated code in C++ rather simple.\n", | |
"\n", | |
"Tuple assignment is also a convenient way to swap variables:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"x,y = 1,2\n", | |
"y,x = x,y\n", | |
"x,y" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 77, | |
"text": [ | |
"(2, 1)" | |
] | |
} | |
], | |
"prompt_number": 77 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"**Dictionaries** are an object called \"mappings\" or \"associative arrays\" in other languages. Whereas a list associates an integer index with a set of objects:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"mylist = [1,2,9,21]" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 78 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"The index in a dictionary is called the *key*, and the corresponding dictionary entry is the *value*. A dictionary can use (almost) anything as the key. Whereas lists are formed with square brackets [], dictionaries use curly brackets {}:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"ages = {\"Rick\": 46, \"Bob\": 86, \"Fred\": 21}\n", | |
"print \"Rick's age is \",ages[\"Rick\"]" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"Rick's age is 46\n" | |
] | |
} | |
], | |
"prompt_number": 79 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"There's also a convenient way to create dictionaries without having to quote the keys." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"dict(Rick=46,Bob=86,Fred=20)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 80, | |
"text": [ | |
"{'Bob': 86, 'Fred': 20, 'Rick': 46}" | |
] | |
} | |
], | |
"prompt_number": 80 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"The **len()** command works on both tuples and dictionaries:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"len(t)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 81, | |
"text": [ | |
"4" | |
] | |
} | |
], | |
"prompt_number": 81 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"len(ages)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 82, | |
"text": [ | |
"3" | |
] | |
} | |
], | |
"prompt_number": 82 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Plotting with Matplotlib\n", | |
"We can generally understand trends in data by using a plotting program to chart it. Python has a wonderful plotting library called [Matplotlib](http://matplotlib.sf.net). The IPython notebook interface we are using for these notes has that functionality built in.\n", | |
"\n", | |
"As an example, we have looked at two different functions, the Fibonacci function, and the factorial function, both of which grow faster than polynomially. Which one grows the fastest? Let's plot them. First, let's generate the Fibonacci sequence of length 20:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"fibs = fibonacci(10)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 83 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Next lets generate the factorials." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"facts = []\n", | |
"for i in range(10):\n", | |
" facts.append(factorial(i))" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 84 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Now we use the Matplotlib function **plot** to compare the two." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"figsize(8,6)\n", | |
"plot(facts,label=\"factorial\")\n", | |
"plot(fibs,label=\"Fibonacci\")\n", | |
"xlabel(\"n\")\n", | |
"legend()" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 85, | |
"text": [ | |
"<matplotlib.legend.Legend at 0x10d1b4890>" | |
] | |
}, | |
{ | |
"metadata": {}, | |
"output_type": "display_data", | |
"png": "iVBORw0KGgoAAAANSUhEUgAAAfgAAAF/CAYAAAClndsfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xm0XVWZ9/vvkz5AuhMghJBGJSiRJuAFlJLBURRCH71v\nmRRUAVW59SoRAa3yCtQVwkDfIQpFoRYZ9SpKI8kF5SoCEQHxMESBAJJGAiaICWlIICckECRFQp77\nx16Jm5Bmn3Y3+X7G2OOsPddca8+Vk+S351xzrRWZiSRJaiw9qt0ASZLU+Qx4SZIakAEvSVIDMuAl\nSWpABrwkSQ3IgJckqQFVFPAR0TMino6Iu4v3TRHxQEQsjIj7I2JwWd1LI2JRRDwXESeWlX8oIuYX\n664vK+8bEbcX5Y9FxOiydecWn7EwIs7pnEOWJKnxVdqDvwhYAGy5aP4S4IHMPAj4VfGeiBgHTALG\nAROAGyIiim2mA1MycywwNiImFOVTgNai/Drg6mJfTcDlwNHF64ryLxKSJGnHdhnwEXEAcArwfWBL\nWJ8B3Fws3wxMLJbPBGZm5sbMXAw8DxwTEcOBAZk5u6h3S9k25fu6EzihWD4JuD8z12bmWuABSl8a\nJEnSLlTSg78O+DKwuaxsWGauKpZXAcOK5f2BZWX1lgEjtlO+vCin+LkUIDM3AesiYuhO9iVJknZh\npwEfEacBL2fm0/y19/4OWbrXrfe7lSSphvTaxfpjgTMi4hSgHzAwIm4FVkXEfpm5shh+f7movxwY\nWbb9AZR63suL5W3Lt2wzClgREb2AQZnZGhHLgeaybUYCD23bwIjwy4UkabeTmdvteG+x0x58Zl6W\nmSMz8z3AZOChzPwH4OfAuUW1c4GfFcs/ByZHRJ+IeA8wFpidmSuB1yLimGLS3T8Ad5Vts2Vf/4PS\npD2A+4ETI2JwRAwBPgn8cgftrPvXFVdcUfU2eAweR629GuEYGuU4GuEYGuk4KrGrHvy7srT4+Q3g\njoiYAiwGPlME7YKIuIPSjPtNwNT8a0umAjcB/YFZmXlfUX4jcGtELAJaKX2RIDPXRMRVwBNFvSuz\nNNlOkiTtQsUBn5kPAw8Xy2uAT+yg3v8C/td2yp8CDt1O+X9TfEHYzrofAj+stI2SJKnEO9nViObm\n5mo3ocMa4RjA46gljXAM0BjH0QjHAI1zHJWISsfya1VEZL0fgyRJbRER5C4m2bX1HLwkaTfx1xuR\nqpra24k14CVJO+QIaXV15EuW5+AlSWpABrwkSQ3IgJckqQEZ8JKkuvPHP/6R8ePHM3DgQL773e9W\nrR3nn38+X/va1yqq29zczI033tjFLforJ9lJkurON7/5TU444QTmzJnT7n2cd955jBw5kquuuqrd\n+5g+fXrFdSOiW69MsAcvSao7S5YsYdy4cVVtw+bNm3ddqYoMeElSXfn4xz9OS0sLF1xwAQMGDODb\n3/42RxxxBIMGDWLUqFFceeWV76j/yCOPcOyxxzJkyBBGjRrFzTffzPe+9z1mzJjBN7/5TQYMGMCZ\nZ54JwLPPPktzczNDhgzhkEMO4e677966n/POO4/zzz+fU045hb322otf//rXnHfeeXz1q18F4NVX\nX+W0005j3333pampidNPP53ly5d33x/MNgx4SVJdeeihhzjuuOP4z//8T15//XUOP/xwfvSjH7Fu\n3Truvfdepk+fzl13lR5YumTJEk455RQuuugiVq9ezZw5cxg/fjz//M//zNlnn81XvvIVXn/9de66\n6y42btzI6aefzoQJE3jllVf4zne+w9lnn83ChQu3fvbMmTP56le/yvr16/noRz/6jmH3zGTKlCm8\n+OKLvPjii/Tv358LLrigKn9GYMBLkurUlpvwHH/88Xzwgx8E4NBDD2Xy5Mk8/PDDAMyYMYNPfvKT\nTJo0iZ49e9LU1MThhx/+rn0APPbYY7zxxhtccskl9OrVi4997GOcdtppzJw5c2udiRMn8pGPfASA\nvn37vmMfTU1NfOpTn6Jfv37stddeXHbZZVvbUQ0GvCSpXSI659X+zy9t/Pjjj/Oxj32Mfffdl8GD\nB/Nf//VftLa2ArB06VLe+973VrS/FStWMHLkyHeUjR49mhUrVmz9vG3Xl/vLX/7CZz/7WcaMGcOg\nQYM4/vjjWbduXdXuBmjAS5LaJbNzXh111llnMXHiRJYtW8batWv53Oc+tzVUR40axZ/+9Kftbrft\njPb999+fpUuXviOQlyxZwogRI3b6+Vv2c+2117Jw4UJmz57NunXrePjhh8lMA16SpPZYv349Q4YM\noU+fPsyePZsZM2ZsXXfWWWfx4IMP8uMf/5hNmzbR2trK3LlzARg2bBgvvPDC1rof/vCH2WOPPfjm\nN7/Jxo0baWlp4Z577mHy5MnA9u/LXx7g69evp3///gwaNIg1a9a8a7LfjvbRVQx4SVJdu+GGG7j8\n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\n", | |
"text": [ | |
"<matplotlib.figure.Figure at 0x10d1047d0>" | |
] | |
} | |
], | |
"prompt_number": 85 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"The factorial function grows much faster. In fact, you can't even see the Fibonacci sequence. It's not entirely surprising: a function where we multiply by n each iteration is bound to grow faster than one where we add (roughly) n each iteration.\n", | |
"\n", | |
"Let's plot these on a semilog plot so we can see them both a little more clearly:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"semilogy(facts,label=\"factorial\")\n", | |
"semilogy(fibs,label=\"Fibonacci\")\n", | |
"xlabel(\"n\")\n", | |
"legend()" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 86, | |
"text": [ | |
"<matplotlib.legend.Legend at 0x10d2bee90>" | |
] | |
}, | |
{ | |
"metadata": {}, | |
"output_type": "display_data", | |
"png": "iVBORw0KGgoAAAANSUhEUgAAAeYAAAGBCAYAAACzYhItAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xd4VGXexvHvkwDSSyjSEiIqKEWaCISwRAWlKYpKRCwg\ni2UX14ZrBcLa1sJacOV1UVBXwSAWmlgQBmlSpEkHXUgo0omEFpI87x8njAEFJskk58zk/lwXl5mT\nmTO/QeDO0421FhEREfGGCLcLEBERkd8omEVERDxEwSwiIuIhCmYREREPUTCLiIh4iIJZRETEQxTM\nIiIiHqJgFhER8ZASwb6hMcYAzwAVgCXW2veD/R4iIiLhqjBazNcBdYAMYGsh3F9ERCRsBRTMxpgx\nxpidxpgfT7nexRizzhiz0RjzaM7lBsA8a+1g4N4g1ysiIhLWAm0xjwW65L5gjIkE3si53gjoY4y5\nGKeVfCDnadlBqlNERKRYCCiYrbVzgP2nXL4M2GSt3WytPQ58BPQEPgWuNsa8DviCWKuIiEjYK8jk\nrzpAaq7HW4E21tojwJ/P9mJjjI61EhGRYsVaa872nIJM/ipwsFprQ/7XsGHDXK9BnyF8Pkc4fAZ9\nDm/9CofPEC6fI1AFCeZtQHSux9FoFraIiEiBFCSYlwAXGmNijTGlgERgcl5ukJSUhM/nK0AJIiIi\n3ubz+UhKSgr4+YEulxoPzAcaGGNSjTH9rbWZwCDgK2ANkGytXZuXYpOSkkhISMjLSzwn1OuH8PgM\nEB6fIxw+A+hzeEk4fAYI7c+RkJCQp2A2een3DiZjjB02bBgJCQkh/RsuIiJyJj6fD5/Px/Dhw7EB\nTP5yNZjdem8RkXDm7IwsbvqjfDPGBBTMQd8rW0RE3KeGj3sK+oORTpcSERHxEFeDWbOyRUQk3OV1\nVrbGmEVEwkzOWKbbZRRbp/v9D3SMWV3ZIiJSZNavX0/z5s2pWLEib7zxhmt13HvvvTzzzDMBPTch\nIYF33nmnkCv6jauTv06sY9ZyKRGR4uHFF1/kyiuvZPny5fm+R79+/YiOjubpp5/O9z1GjRoV8HON\nMQWa0HViuVSgXB9jViiLiBQfW7ZsoVGjRq7WkJ1dtCcS53WDEXVli4hIkbjiiivw+XwMGjSIChUq\n8Prrr9OiRQsqVapETEwMw4cPP+n5c+fOJS4ujipVqhATE8N7773H6NGjGTduHC+++CIVKlSgZ8+e\nAKxdu5aEhASqVKlCkyZNmDJliv8+/fr1495776Vbt26UL1+eWbNm0a9fP4YMGQLA/v376dGjBzVq\n1CAqKoprrrmGbdu2Fd1vzCkUzCIiUiRmzpxJhw4d+Pe//83Bgwdp1qwZH3zwAWlpaUybNo1Ro0Yx\nadIkwGlZd+vWjfvvv589e/awfPlymjdvzsCBA+nbty+PPvooBw8eZNKkSRw/fpxrrrmGLl26sHv3\nbkaOHEnfvn3ZsGGD/73Hjx/PkCFDSE9PJz4+/qTuaWstAwYMICUlhZSUFMqUKcOgQYNc+T0CBbOI\niBSxEzOWO3bsSOPGjQFo2rQpN998M7NnzwZg3LhxdO7cmcTERCIjI4mKiqJZs2a/uwfA999/z6FD\nh3jssccoUaIEl19+OT169GD8+PH+51x33XW0a9cOgHPOOeeke0RFRXH99ddTunRpypcvzxNPPOGv\nww2ujzFrHbOISNEyJji/8v/+zosXLlzI5ZdfTo0aNahcuTJvvfUWe/fuBSA1NZX69esHdL/t27cT\nHR190rV69eqxfft2//ud+v3cDh8+zN13301sbCyVKlWiY8eOpKWlBW3JWaGcLlVYNPlLRKToWRuc\nXwV1yy23cN1117F161YOHDjAPffc4w/DmJgYfvrppz983akzpGvXrk1qaupJQbplyxbq1Klzxvc/\ncZ8RI0awYcMGFi1aRFpaGrNnz8ZaG7Rg1uQvEREJCenp6VSpUoVSpUqxaNEixo0b5//eLbfcwowZ\nM/j444/JzMxk7969rFixAoBzzz2Xn3/+2f/ctm3bUrZsWV588UWOHz+Oz+dj6tSp3HzzzcAf7xue\nO3jT09MpU6YMlSpVYt++fb+bhHa6exQWBbOIiLjizTffZOjQoVSsWJGnn36axMRE//diYmL44osv\nGDFiBFWrVqVFixasXLkSgAEDBrBmzRqqVKlCr169KFmyJFOmTGH69OlUr16dQYMG8d///pcGDRoA\nf7wOOfe1Bx54gCNHjlCtWjXi4uLo2rXrHz6/qGhLThGRMKMtOd0V0ltyavKXiIiEOx1iISJSzKnF\n7K6QbjGLiIgUB5MnB/5cBbOIiEghmjUL/vznwJ+vYBYRESkkS5ZAYiIkJwf+GgWziIhIIVizBnr0\ngLffhssvD/x1CmYREZEg27wZrr4aXnoJrr02b6/VcikREZEg69wZ/v53uO02LZcSESn2QmW5lLWW\nihUr8uOPPxIbG0u/fv2Ijo7m6aefdru0s7r33nupU6cOTz311O++Z4xh+HDL0KG/vx7IcqkSQatS\nRETkDGJjY9m1axeRkZGAE1QbN26kZs2a/sdFufVlQYwaNeqM3x8yJP/31hiziIgUCWMMU6dO5eDB\ngxw8eJBff/3VH8onhEJLPxAF+flCwSwiIq6JiIg46aSoPXv2cNVVV1GxYkUSEhJISUnxf2/+/Pm0\nbt2aypUrc9lll7FgwQL/9xISEhg6dCjx8fFUrFiRq6++2n+2M8BNN91ErVq1qFy5Mh07dmTNmjX+\n7x05coSHH36Y2NhYKleuTIcOHTh69CgAc+fOJS4ujipVqhATE8P7778PQL9+/RhSkGbxmX5PCuWu\nIiIif+BMLWJrLR9++CFDhw5lz549NG/enL59+wKwb98+unfvzgMPPMC+fft46KGH6N69O/v37/e/\nfvz48bz77rvs2rWLjIwMXn75Zf/3unfvzqZNm9i9ezctW7b03xdg8ODBLFu2jAULFrBv3z5eeukl\nIiIi2LJlC926deP+++9nz549LF++nGbNmgGF2+2uYBYRkSJhreW6666jSpUqVKlSheuvv/53z+nR\nowfx8fGUKlWKZ599lgULFrB161amTZtGw4YN6du3LxEREdx8881cdNFFTM7Z69IYQ//+/bngggso\nXbo0vXv3Zvny5f779uvXj3LlylGyZEmGDRvGihUrOHjwINnZ2YwdO5bXXnuNWrVqERERQdu2bSlV\nqhTjxo2jc+fOJCYmEhkZSVRUlD+YT3yewqDJXyIixYwZHpyWnh2Wt2AyxjBp0iSuuOIK/7WIiIiT\nvl+3bl3/43LlyhEVFcX27dvZsWMHMTExJ92vXr16bN++3f8493h1mTJlSE9PByArK4snn3ySiRMn\nsnv3bv977tmzhyNHjnD06FHOP//839W7detW6tevn6fPGAwKZhGRYiavgVpUrLWkpqb6H6enp7Nv\n3z7q1KlD7dq12bJly0nP37JlC127dj3rfceNG8fkyZP59ttvqVevHgcOHCAqKgprLdWqVaN06dJs\n2rSJSy655KTXRUdHs2jRouB8uDxQV7aIiHjGF198wbx588jIyGDIkCG0a9eOOnXq0LVrVzZs2MD4\n8ePJzMwkOTmZdevW0aNHD/9rT9e1nJ6ezjnnnENUVBSHDh3iiSee8H8vIiKCO++8k4ceeogdO3aQ\n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\n", | |
"text": [ | |
"<matplotlib.figure.Figure at 0x10d11c2d0>" | |
] | |
} | |
], | |
"prompt_number": 86 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"There are many more things you can do with Matplotlib. We'll be looking at some of them in the sections to come. In the meantime, if you want an idea of the different things you can do, look at the Matplotlib [Gallery](http://matplotlib.org/gallery.html). Rob Johansson's IPython notebook [Introduction to Matplotlib](http://nbviewer.ipython.org/urls/raw.github.com/jrjohansson/scientific-python-lectures/master/Lecture-4-Matplotlib.ipynb) is also particularly good." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Conclusion of the Python Overview\n", | |
"There is, of course, much more to the language than I've covered here. I've tried to keep this brief enough so that you can jump in and start using Python to simplify your life and work. My own experience in learning new things is that the information doesn't \"stick\" unless you try and use it for something in real life.\n", | |
"\n", | |
"You will no doubt need to learn more as you go. I've listed several other good references, including the [Python Tutorial](http://docs.python.org/2/tutorial/) and [Learn Python the Hard Way](http://learnpythonthehardway.org/book/). Additionally, now is a good time to start familiarizing yourself with the [Python Documentation](http://docs.python.org/2.7/), and, in particular, the [Python Language Reference](http://docs.python.org/2.7/reference/index.html).\n", | |
"\n", | |
"Tim Peters, one of the earliest and most prolific Python contributors, wrote the \"Zen of Python\", which can be accessed via the \"import this\" command:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"import this" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"The Zen of Python, by Tim Peters\n", | |
"\n", | |
"Beautiful is better than ugly.\n", | |
"Explicit is better than implicit.\n", | |
"Simple is better than complex.\n", | |
"Complex is better than complicated.\n", | |
"Flat is better than nested.\n", | |
"Sparse is better than dense.\n", | |
"Readability counts.\n", | |
"Special cases aren't special enough to break the rules.\n", | |
"Although practicality beats purity.\n", | |
"Errors should never pass silently.\n", | |
"Unless explicitly silenced.\n", | |
"In the face of ambiguity, refuse the temptation to guess.\n", | |
"There should be one-- and preferably only one --obvious way to do it.\n", | |
"Although that way may not be obvious at first unless you're Dutch.\n", | |
"Now is better than never.\n", | |
"Although never is often better than *right* now.\n", | |
"If the implementation is hard to explain, it's a bad idea.\n", | |
"If the implementation is easy to explain, it may be a good idea.\n", | |
"Namespaces are one honking great idea -- let's do more of those!\n" | |
] | |
} | |
], | |
"prompt_number": 87 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"No matter how experienced a programmer you are, these are words to meditate on." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# II. Numpy and Scipy\n", | |
"\n", | |
"[Numpy](http://numpy.org) contains core routines for doing fast vector, matrix, and linear algebra-type operations in Python. [Scipy](http://scipy) contains additional routines for optimization, special functions, and so on. Both contain modules written in C and Fortran so that they're as fast as possible. Together, they give Python roughly the same capability that the [Matlab](http://www.mathworks.com/products/matlab/) program offers. (In fact, if you're an experienced Matlab user, there a [guide to Numpy for Matlab users](http://www.scipy.org/NumPy_for_Matlab_Users) just for you.)\n", | |
"\n", | |
"## Making vectors and matrices\n", | |
"Fundamental to both Numpy and Scipy is the ability to work with vectors and matrices. You can create vectors from lists using the **array** command:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"array([1,2,3,4,5,6])" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 88, | |
"text": [ | |
"array([1, 2, 3, 4, 5, 6])" | |
] | |
} | |
], | |
"prompt_number": 88 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"You can pass in a second argument to **array** that gives the numeric type. There are a number of types [listed here](http://docs.scipy.org/doc/numpy/user/basics.types.html) that your matrix can be. Some of these are aliased to single character codes. The most common ones are 'd' (double precision floating point number), 'D' (double precision complex number), and 'i' (int32). Thus," | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"array([1,2,3,4,5,6],'d')" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 89, | |
"text": [ | |
"array([ 1., 2., 3., 4., 5., 6.])" | |
] | |
} | |
], | |
"prompt_number": 89 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"array([1,2,3,4,5,6],'D')" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 90, | |
"text": [ | |
"array([ 1.+0.j, 2.+0.j, 3.+0.j, 4.+0.j, 5.+0.j, 6.+0.j])" | |
] | |
} | |
], | |
"prompt_number": 90 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"array([1,2,3,4,5,6],'i')" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 91, | |
"text": [ | |
"array([1, 2, 3, 4, 5, 6], dtype=int32)" | |
] | |
} | |
], | |
"prompt_number": 91 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"To build matrices, you can either use the array command with lists of lists:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"array([[0,1],[1,0]],'d')" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 92, | |
"text": [ | |
"array([[ 0., 1.],\n", | |
" [ 1., 0.]])" | |
] | |
} | |
], | |
"prompt_number": 92 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"You can also form empty (zero) matrices of arbitrary shape (including vectors, which Numpy treats as vectors with one row), using the **zeros** command:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"zeros((3,3),'d')" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 93, | |
"text": [ | |
"array([[ 0., 0., 0.],\n", | |
" [ 0., 0., 0.],\n", | |
" [ 0., 0., 0.]])" | |
] | |
} | |
], | |
"prompt_number": 93 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"The first argument is a tuple containing the shape of the matrix, and the second is the data type argument, which follows the same conventions as in the array command. Thus, you can make row vectors:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"zeros(3,'d')" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 94, | |
"text": [ | |
"array([ 0., 0., 0.])" | |
] | |
} | |
], | |
"prompt_number": 94 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"zeros((1,3),'d')" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 95, | |
"text": [ | |
"array([[ 0., 0., 0.]])" | |
] | |
} | |
], | |
"prompt_number": 95 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"or column vectors:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"zeros((3,1),'d')" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 96, | |
"text": [ | |
"array([[ 0.],\n", | |
" [ 0.],\n", | |
" [ 0.]])" | |
] | |
} | |
], | |
"prompt_number": 96 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"There's also an **identity** command that behaves as you'd expect:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"identity(4,'d')" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 97, | |
"text": [ | |
"array([[ 1., 0., 0., 0.],\n", | |
" [ 0., 1., 0., 0.],\n", | |
" [ 0., 0., 1., 0.],\n", | |
" [ 0., 0., 0., 1.]])" | |
] | |
} | |
], | |
"prompt_number": 97 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"as well as a **ones** command." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Linspace, matrix functions, and plotting\n", | |
"The **linspace** command makes a linear array of points from a starting to an ending value." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"linspace(0,1)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 98, | |
"text": [ | |
"array([ 0. , 0.02040816, 0.04081633, 0.06122449, 0.08163265,\n", | |
" 0.10204082, 0.12244898, 0.14285714, 0.16326531, 0.18367347,\n", | |
" 0.20408163, 0.2244898 , 0.24489796, 0.26530612, 0.28571429,\n", | |
" 0.30612245, 0.32653061, 0.34693878, 0.36734694, 0.3877551 ,\n", | |
" 0.40816327, 0.42857143, 0.44897959, 0.46938776, 0.48979592,\n", | |
" 0.51020408, 0.53061224, 0.55102041, 0.57142857, 0.59183673,\n", | |
" 0.6122449 , 0.63265306, 0.65306122, 0.67346939, 0.69387755,\n", | |
" 0.71428571, 0.73469388, 0.75510204, 0.7755102 , 0.79591837,\n", | |
" 0.81632653, 0.83673469, 0.85714286, 0.87755102, 0.89795918,\n", | |
" 0.91836735, 0.93877551, 0.95918367, 0.97959184, 1. ])" | |
] | |
} | |
], | |
"prompt_number": 98 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"If you provide a third argument, it takes that as the number of points in the space. If you don't provide the argument, it gives a length 50 linear space." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"linspace(0,1,11)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 99, | |
"text": [ | |
"array([ 0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ])" | |
] | |
} | |
], | |
"prompt_number": 99 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"**linspace** is an easy way to make coordinates for plotting. Functions in the numpy library (all of which are imported into IPython notebook) can act on an entire vector (or even a matrix) of points at once. Thus," | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"x = linspace(0,2*pi)\n", | |
"sin(x)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 100, | |
"text": [ | |
"array([ 0.00000000e+00, 1.27877162e-01, 2.53654584e-01,\n", | |
" 3.75267005e-01, 4.90717552e-01, 5.98110530e-01,\n", | |
" 6.95682551e-01, 7.81831482e-01, 8.55142763e-01,\n", | |
" 9.14412623e-01, 9.58667853e-01, 9.87181783e-01,\n", | |
" 9.99486216e-01, 9.95379113e-01, 9.74927912e-01,\n", | |
" 9.38468422e-01, 8.86599306e-01, 8.20172255e-01,\n", | |
" 7.40277997e-01, 6.48228395e-01, 5.45534901e-01,\n", | |
" 4.33883739e-01, 3.15108218e-01, 1.91158629e-01,\n", | |
" 6.40702200e-02, -6.40702200e-02, -1.91158629e-01,\n", | |
" -3.15108218e-01, -4.33883739e-01, -5.45534901e-01,\n", | |
" -6.48228395e-01, -7.40277997e-01, -8.20172255e-01,\n", | |
" -8.86599306e-01, -9.38468422e-01, -9.74927912e-01,\n", | |
" -9.95379113e-01, -9.99486216e-01, -9.87181783e-01,\n", | |
" -9.58667853e-01, -9.14412623e-01, -8.55142763e-01,\n", | |
" -7.81831482e-01, -6.95682551e-01, -5.98110530e-01,\n", | |
" -4.90717552e-01, -3.75267005e-01, -2.53654584e-01,\n", | |
" -1.27877162e-01, -2.44929360e-16])" | |
] | |
} | |
], | |
"prompt_number": 100 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"In conjunction with **matplotlib**, this is a nice way to plot things:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"plot(x,sin(x))" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 101, | |
"text": [ | |
"[<matplotlib.lines.Line2D at 0x10d49f510>]" | |
] | |
}, | |
{ | |
"metadata": {}, | |
"output_type": "display_data", | |
"png": "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\nQmCC\n", | |
"text": [ | |
"<matplotlib.figure.Figure at 0x10d41fbd0>" | |
] | |
} | |
], | |
"prompt_number": 101 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Matrix operations\n", | |
"Matrix objects act sensibly when multiplied by scalars:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"0.125*identity(3,'d')" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 102, | |
"text": [ | |
"array([[ 0.125, 0. , 0. ],\n", | |
" [ 0. , 0.125, 0. ],\n", | |
" [ 0. , 0. , 0.125]])" | |
] | |
} | |
], | |
"prompt_number": 102 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"as well as when you add two matrices together. (However, the matrices have to be the same shape.)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"identity(2,'d') + array([[1,1],[1,2]])" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 103, | |
"text": [ | |
"array([[ 2., 1.],\n", | |
" [ 1., 3.]])" | |
] | |
} | |
], | |
"prompt_number": 103 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Something that confuses Matlab users is that the times (*) operator give element-wise multiplication rather than matrix multiplication:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"identity(2)*ones((2,2))" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 104, | |
"text": [ | |
"array([[ 1., 0.],\n", | |
" [ 0., 1.]])" | |
] | |
} | |
], | |
"prompt_number": 104 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"To get matrix multiplication, you need the **dot** command:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"dot(identity(2),ones((2,2)))" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 105, | |
"text": [ | |
"array([[ 1., 1.],\n", | |
" [ 1., 1.]])" | |
] | |
} | |
], | |
"prompt_number": 105 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"**dot** can also do dot products (duh!):" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"v = array([3,4],'d')\n", | |
"sqrt(dot(v,v))" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 106, | |
"text": [ | |
"5.0" | |
] | |
} | |
], | |
"prompt_number": 106 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"as well as matrix-vector products." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"There are **determinant**, **inverse**, and **transpose** functions that act as you would suppose. Transpose can be abbreviated with \".T\" at the end of a matrix object:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"m = array([[1,2],[3,4]])\n", | |
"m.T" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 107, | |
"text": [ | |
"array([[1, 3],\n", | |
" [2, 4]])" | |
] | |
} | |
], | |
"prompt_number": 107 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"There's also a **diag()** function that takes a list or a vector and puts it along the diagonal of a square matrix. " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"diag([1,2,3,4,5])" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 108, | |
"text": [ | |
"array([[1, 0, 0, 0, 0],\n", | |
" [0, 2, 0, 0, 0],\n", | |
" [0, 0, 3, 0, 0],\n", | |
" [0, 0, 0, 4, 0],\n", | |
" [0, 0, 0, 0, 5]])" | |
] | |
} | |
], | |
"prompt_number": 108 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We'll find this useful later on." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Matrix Solvers\n", | |
"You can solve systems of linear equations using the **solve** command:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"A = array([[1,1,1],[0,2,5],[2,5,-1]])\n", | |
"b = array([6,-4,27])\n", | |
"solve(A,b)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 109, | |
"text": [ | |
"array([ 5., 3., -2.])" | |
] | |
} | |
], | |
"prompt_number": 109 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"There are a number of routines to compute eigenvalues and eigenvectors\n", | |
"\n", | |
"* **eigvals** returns the eigenvalues of a matrix\n", | |
"* **eigvalsh** returns the eigenvalues of a Hermitian matrix\n", | |
"* **eig** returns the eigenvalues and eigenvectors of a matrix\n", | |
"* **eigh** returns the eigenvalues and eigenvectors of a Hermitian matrix." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"A = array([[13,-4],[-4,7]],'d')\n", | |
"eigvalsh(A)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 110, | |
"text": [ | |
"array([ 5., 15.])" | |
] | |
} | |
], | |
"prompt_number": 110 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"eigh(A)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 111, | |
"text": [ | |
"(array([ 5., 15.]), array([[-0.4472136 , -0.89442719],\n", | |
" [-0.89442719, 0.4472136 ]]))" | |
] | |
} | |
], | |
"prompt_number": 111 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Example: Finite Differences\n", | |
"Now that we have these tools in our toolbox, we can start to do some cool stuff with it. Many of the equations we want to solve in Physics involve differential equations. We want to be able to compute the derivative of functions:\n", | |
"\n", | |
"$$ y' = \\frac{y(x+h)-y(x)}{h} $$\n", | |
"\n", | |
"by *discretizing* the function $y(x)$ on an evenly spaced set of points $x_0, x_1, \\dots, x_n$, yielding $y_0, y_1, \\dots, y_n$. Using the discretization, we can approximate the derivative by\n", | |
"\n", | |
"$$ y_i' \\approx \\frac{y_{i+1}-y_{i-1}}{x_{i+1}-x_{i-1}} $$\n", | |
"\n", | |
"We can write a derivative function in Python via" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def nderiv(y,x):\n", | |
" \"Finite difference derivative of the function f\"\n", | |
" n = len(y)\n", | |
" d = zeros(n,'d') # assume double\n", | |
" # Use centered differences for the interior points, one-sided differences for the ends\n", | |
" for i in range(1,n-1):\n", | |
" d[i] = (y[i+1]-y[i-1])/(x[i+1]-x[i-1])\n", | |
" d[0] = (y[1]-y[0])/(x[1]-x[0])\n", | |
" d[n-1] = (y[n-1]-y[n-2])/(x[n-1]-x[n-2])\n", | |
" return d" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 208 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Let's see whether this works for our sin example from above:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"x = linspace(0,2*pi)\n", | |
"dsin = nderiv(sin(x),x)\n", | |
"plot(x,dsin,label='numerical')\n", | |
"plot(x,cos(x),label='analytical')\n", | |
"title(\"Comparison of numerical and analytical derivatives of sin(x)\")\n", | |
"legend()" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 209, | |
"text": [ | |
"<matplotlib.legend.Legend at 0x110b39c10>" | |
] | |
}, | |
{ | |
"metadata": {}, | |
"output_type": "display_data", | |
"png": "iVBORw0KGgoAAAANSUhEUgAAAekAAAF6CAYAAAA9PKB6AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XWYVGXjxvHvs7vsLrG0dJeEiGCioliIICCC0iEloYii\nIN0lKgoiId0IvgiChKDri4X40oIBCEgI0rWw7O75/TEDvxW365m4P9fFxc6cmHvOxD3nzDMzxnEc\nRERExPME2A4gIiIicVNJi4iIeCiVtIiIiIdSSYuIiHgolbSIiIiHUkmLiIh4KJW0HzHGtDDGrLWd\n4zpjTGZjzGfGmLPGmMW28ySHMaaYMeaCMcakcj3hxpj2aZUrgcspYYyJMcZk6GPeGFPTGPNnKpa/\nYIwpkcoMs4wxw5I4b6q2U3o+xowxk4wx/dNj3SlhjOlijDlujDlvjMmVjOU+N8a0Ssb8LxpjxiVh\nvhBjzB5jTN6krtsbqKRTwBjT3Bjzk/sJ5Kj7TveA7VyJcRxnvuM4T9rOEUtjIB+Q23GcJrbDJIfj\nOIccxwlzUv9FA477n9+L6wWLexsfSOWqM2wbp9VjzBjT1hiz8aZ1d3EcZ3hq150WjDGZgHeAxxzH\nye44zpmkLus4Th3HceYm8XKCgX7AW0lY71VgBvBmUrN4A5V0MhljXgPGAcNxFUxRYCJQ32auxBhj\nAm1niENx4DfHcWJsB0kOY0yQ7Qw+Kj2LNFVHPJJ0AZ75GEsvBYBQYE86X04DYI/jOMeSOP9CoI37\nRYRvcBxH/5L4D8gBXAAaJTBPCPAecMT9bxwQ7J5WEzgMvAEcB47iuhPWAX4FTgF9Yq1rMLAUWASc\nB/4H3B5r+pvAXve0n4FnYk1rC3wLvAucBIa5z9vonm7c2Y4D54AdQKVY13MOcAI4gOuVrIm13m+A\nscBpYD9QO4HtUQEIB84Au4B67vOHAFeBSPc2fSGOZQcDHwOz3ddxF3BnrOkxQKlYp2cBw1K4rU2s\n7XkSWAzkck8r4b6sdsBB9/Up7j4vwD1PbmCm+zY/DSxzn58LWOnelqeBz4DCsS73K6BdPNvuHuB7\n97Y7CkwAMt10/V8EfnPP80GsaQHA28DfwD6gW+y8cVxWYveleG9z4AVgt3vZfUCnWNNqAn+6/34D\nWHrT5Y7H9XgZDkQBEe77w/ibb2MgM669twPAWWAjEOKetgQ45j7/a6BirMuYef1+Ecf1TnA74Xos\nTHdv/8O4HkcBsbZLQo+xScDYmy5vOdAjoW2O6zET4d4eF4DTcdy/9wB1Y603yH0d7nCfvg/4zn2/\n2AY8fNPtuc99ufuB5sl5LgPKARfd2+kCsD6OZUOBee7tcgb4EbjFPS0caJ/E+9YMoG+s003c84S5\nTz/lvt3zxJrnN+Ch9OgAG/+sB/Cmf0Bt4BrxPNG55xnqfnDkdf/7FhjqnlbTvXx/IBDo4H5gzQOy\nAhWBy0Bx9/yDcZXYs+75e7rvoIHu6Y2BAu6/n3c/cPK7T7d1X1Y3XE9EofzzCeRJ4Ccgu/v0rbHW\nNQdY5s5UHFeptYu13kigPa5i6wwciWdbZML1JPQmrieRR9xPDOXc0wcBcxLYloNxPVnVdl/WSOD7\nWNNvLumZqdjWr7hvt0Lu3JOBBe5pJdyXNQtXUYTEOu/6E/YqXK/ic7ivaw33+bmBhu7tnw3Xi45l\nsTInVNLVcBV1gPt22A28ctP1XwFkx3VE5wTwpHtaZ1xP5IVxvVD4Cogm/pJO7L4U722O64VPSfff\nDwGXgKqxbofrJV3Qvd4c7tNBuF5AVY1vW/DPkp4IfOleTwCuIgqOlTGr+7YbB2y96X4RX0knuJ1w\nPQ4muW/3W4BNuF+EkPhjrAZwKNZl5cJ1nyuQhG3e5vp64rl/DwDmxZpWF/jZ/XdhXOVY2336cffp\nPO5tdA4o656Wn1gvaJLxXPaPF6lxLPsirvtmqPs+U5X/L9YbtzOJ37d+5KadIlyP4Znu63MEqHPT\n9OXAy6l9vveUf9YDeNM/oAVwLJF59vLPV4K1gD/cf9d0P0iv75WGue/od8ea/yegvvvvwcB3saYZ\nXK/oH4znsrfGWrYtcPCm6bGfQB7FVb73xn6g4Sq0q0D5WOd1Ar6KtY7fY03L4r4O+eLIU+Pm7QUs\nAAbFun5zE9iWg4F1sU5XBC7HOh1XScfek07Ott4DPBprWkH3k0cA/1/IJWJNv35egHveaNzlk8j9\n4w7ce0bu0/GWdBzL9gD+c9P1vz/W6cVAL/ffX/LPPdonSOBJNQn3pSTd5u7py4DusW6HP2NN+xzo\n4P77adzFEmtbtL9pXTFAKfd2vgxUTkL2nO7lrpdCQiUd73bCVWBXgNBY05sBXybxMWZwHXm5/oKt\nI3HsdSawzeMq6ev37zK4XvCGuk/PB/q7/+7NTS9+gTVAa/dtdwbXC//MiWzHhJ7LSiR0f8J1dOXb\nuG4v/l3S8d63cO0V17pp+Rzu7boDmBTH+ucBA5JyP/eGf3pPOnlOAXkTGflZCNcd6LpD7vNurMNx\n35Nw7SWCa2+CWOdli3X68PU/3MsdxlUKGGNaG2O2GmPOGGPOALfhenV5Xbyjah3H+RL4ANfeyXFj\nzBRjTBiuV8yZ4rgOhWOd/ivWei67/4yd+bpCcWQ4eNO6EhN721wGQpMx8jY527o4sCzWttyN63Bj\n/ljzx7c9i+Iq3nM3TzDGZHFv2wPGmHO4DsXmSMqocGNMOWPMSmPMMfeyI/jn7Quxbgtc2+f69Sl4\nU95DiVxWYveleG9zY8xTxpgfjDGn3MvWiSPndbOBlu6/W+I6ahObQ9zy4tor2xdH9gBjzGhjzF73\ndvoj1jKJSWg7Fcf1WDgWa7tMxrVHfV1CjzEH11tVzdxnNcdVptdzJ7bN4+U4zl5cLyzrG2OyAPVw\nvQC+nvu56+t1r/sBXHvtl3EdMu4MHHXfv26N52ISey5LyFxgLbDIGHPEGDMmgbEcCT2fnMF1pIhY\n85zD9Tbgbbje/rhZmHs5n6CSTp7vce1lNkxgnqO4XmVeV8x9XkoVvf6Hu5yK4HpwFQem4jrUlttx\nnFy43rON/eQf3xOea6LjTHAc5y5ce6jlcL1n+DeuQ3g3X4fD/1pB4o4CRW8qpOLJWFeC+XGVUpZY\npwsmYZn4HMK115Ar1r8szj8HrMS37j+B3MaYHHFM64lr297jOE4O4GFct1FSBjJNwvVioYx72X4k\n/TF7DNftdl2x+GZM4n0pvmVDgE9wjb7N51728wSWXQ7cboy5Ddch2vmxpiV0253EtVdbJo5pLXAN\n3HzMvZ1KXo+XWH4S3k5/4nq854l1n8jhOE7lJGYG11sgjd3b+B5c2yop2zwp9+OFuF4ANAB2O46z\n333+IVxHqGLfl8Mcx3kLwHGcdY7j1MI1+OsX4KN41p/i5zLHcaIcxxnqOE4l4H5cR01aJ2XZm+zA\n9fi5wRhzB6499QW4xmncrAKwPQWX5ZFU0sngfgU3EJhojGng3kvK5N6TGOOebSHQ3xiT1/15vYG4\nXlWm1J3GmIbuV6E9cD1R/YDrvSUH15NXgDHmBVyvLJPEGHOXMeZe9yjIy+71RjuukdYfAyOMMdnc\nTyav4jqElFw/uNfdy72dauJ6sC5KasxEpm8DWhhjAo0xtXG9H5pSk4GRxphiAMaYW4wxSRqx7y7y\n1cCHxpic7utawz05G6499nPGmNy43oe/WXzXMxuugTmXjTHlgS6JRIld/h8D3Y0xhd2fYU3oYymp\nuS8Fu/+dBGKMMU/hOiwaJ8dxruDaC1oAbHIcJ/YLtuNA6XiWi8E1iOhdY0xB921e3f0RnWy4yvS0\nMSYrrrELsSV0P4p3O7lv13Xuywxz77GXNsYk+X7mOM42XNtmGrDGcZzz7kmJbfPjQJGbRinffD0W\n4Rpb0pl/vtiZB9QzxtRyb6dQ4/q8emFjTD73c1dWXC/GL+F6qyYuKX4uc19eZfeI9wvuy4rvchLy\nOa4XttfXe31AWh9cAzkLG2O6xJpeGNc4kB9ScFkeSSWdTI7jvAu8hmtA0glcr1q74nofDlyjVH/C\n9Qpwh/vv2J9tvPkVckKvmB1cex5NcI18bAE86zhOtOM4u3Ed6vke1+Gi23CNkoy9bFyXdf287Lhe\nyZ/GNVr2JK4RlgAv43rw7sc1gnY+rvfDElrvv8M7zjVch+GewrWH/gHQynGc3xJYV3x547qsV9zr\nP4PrUOKyBOaNN6fb+7gGuqwzxpzHtV3vSWTZ2Oe1wvVE9AuuJ9hX3Oe/h2vQ0Ulcg3BWJyPX67iu\n13lct9Wim+ZN6Pb9CNfhxu247oOfxHc5qbgv4TjOBaA7rrI7jWvPbnki12+2+zJufsJ/H9de52lj\nzHtxRH0d2AlsxvXW0yhcxTUH12HZI7j2Rr/n39spvm2c2HZqjetFyG739VuCaw80vvXGdd4CXGNA\nFtyYKfFtvgHXiO+/jDEn4lq34zh/4bpPVcc1HuH6+Ydx7V335f+fo3ri2lYBuF50H8G1DWsQ/4u/\n5D6XxVYA17Y6h2vbhRN3wSf2GF8JlDfGFHSfHoVrHMAUx3Eicb1lMtwYc/3FXXNglvu5xydcH1ST\n8hUYMwPXYasTNx0Gij3PeFxP1JeBto7jbE3VhfoJY8wgXIc6k/ztPCKezn20Yg+ukcwXbecRz2aM\n6YhrBPqricwXguvoWg3HcU5mSLgMkBZ70jNxfUQmTsaYOriKpiyuUcKT0uAy/UW6fwGDSEZyj6t4\nDViogpakcBzno8QK2j3fVcdxKvhSQYPrc4qp4jjORpPwd+vWx3V4C8dxNrnfs8vvOM7xBJYRl8QO\nB4t4Dff7oMdxjb6O94W9iPy/jPh6w8L882MKh3GNUFZJJ8JxnCG2M4ikFcdxLhH3R/VEJB4ZNXDs\n5sO22jsUERFJREbsSR8h1md9ce1FH7l5JmOMiltERPyK4zgJjj3KiD3pFbg/xG6MuQ84G9/70evX\nO4x7L4omXX6j/DPLCH1iOCHNm5HljUrkGVqSyZumExkVaf1r2tL636BBg6xn0PXX9df11/X3pOse\nHRPN4p1LKTKiMpl7lya0dWMy1RpEmfof07DTz4wZG8nq1Q6HDjnExNi/Lin5lxSp3pM2xizE9WHz\nvMb14+6DcH2VHo7rs2yfG2PqGGP24vrs7Qvxreuxx+CxxwKBskBZHOcZjh2DHTtg+Nz/8sqfQ+i3\ndgQjn+zPC3e2JFOg7/wamYiIQIwTw9Kfl9FzxRD+/iuYskdG8n6Lutx5p6FoUQjws2/3SIvR3c2S\nMM9LKVm3MVCokOtf7doPsWXLBl5+52tevl7WtV1lHRSgn/cVEfFmMU4Mn/z8KT0/G8KJY5koe2Qk\nc16qyyOP+PcnUb3qNUm1avDt/If5vvOXlPtlOi99NIeCI8ozbfNsomKibMdLsZo1a9qOYJWuf03b\nEazS9a9pO4I1NWvWdO0571pGydHVaDV1BNl/Gs7qhpvZ+cnTfl/QkAbfOJZWjDFOcrNs2QIvvxPO\nT9kGUaRkBBu7fUqhsKT+SIuIiNh07so5Hp/cjB1/HKPs4SFMeKmeXxWzMQYnkYFjXl3S123e7FB7\nxCgiq0zii/bLuK/YXWmcTkTEO5jEfwVVLIir3/ympAFOn4ZHunzKnrIdmVRvAu3vbZqG6UREvIP7\nid92DIklvtvEr0oaICoKWr+xg6VBDWh/bwsmNhpKgPGqt91FRFJFJe15VNI3eWfyCfpsbcTdt+Vl\n7YtzyRasbyIUEf+gkvY8Kuk4bAiPpN7kLuS67Se+7baCErmKp9m6RUQ8lUra86SmpH32WPBjNYPZ\nNXIazpYXqDjuPsL3f2s7koiIeJhRo0bRsWPHVK3jwIEDBAQEEBMTk0ap/p/P7klfd+EC1Oq6hv8V\nb8XXHddQvfidaX4ZIiKeQnvSGe/AgQOUKlWKqKgoAuL4SjTtSScgLAy+mVWbO49O5bGP6rP/9AHb\nkURExANER0fbjpAony9pgMBA+HJiQwrs683d7z/F6YjTtiOJiPiVEiVK8M4771ClShVy5sxJ06ZN\nuXr1KrNmzaJGjRr/mDcgIID9+/cD0LZtW7p27UqdOnUICwvjwQcf5Pjx4/To0YPcuXNToUIFtm3b\ndmPZo0eP0qhRI/Lly0epUqWYMGHCjWmDBw+mcePGtGrVihw5cjBr1iwGDx5Mq1atbszzzTffcP/9\n95MrVy6KFSvG7NmzAVi1ahVVq1YlR44cFCtWjCFDhqTn5vr/bZEhl+IBMmeGzR90x/m1Dve8+wxX\noq7YjiQi4jeMMSxZsoS1a9fyxx9/sGPHDmbNmpWkL19ZsmQJI0aM4OTJk4SEhFC9enXuuusuTp06\nRePGjXnttdcAiImJoV69elStWpWjR4+yYcMG3nvvPdatW3djXStWrOC5557j3LlztGjR4h+Xf/Dg\nQerUqcMrr7zCyZMn2bZtG3fccQcA2bJlY968eZw7d45Vq1YxadIkli9fnsZb6d/8pqQB8uSBzSPH\ncuTX/Dz+QRtinLR/k19EROLWvXt3ChQoQK5cuahXr94/9oDjY4zh2WefpWrVqoSEhNCwYUMyZ85M\ny5YtMcbw/PPPs3XrVgA2b97MyZMn6d+/P0FBQZQsWZIOHTqwaNGiG+u7//77qV+/PgChoaH/eK94\nwYIFPPHEEzRp0oTAwEBy585NlSpVAHj44YepVKkSAJUrV6Zp06Z8/fXXabZt4uNXJQ1QulQA67vN\nZdOeI7Sa09t2HBGRDGVM2vxLiQIFCtz4O0uWLFy8eDFJy+XLl+/G36Ghof84nTlz5hvrOXjwIEeP\nHiVXrlw3/o0aNYoTJ07cmL9IkSLxXs6ff/5JqVKl4py2adMmHnnkEfLly0fOnDmZMmUKp06dSlL+\n1PC7kgZ44N5Q5tRZzuKtnzFw5Qe244iIZBjHSZt/aSVr1qxcvnz5xum//vorxesqWrQoJUuW5MyZ\nMzf+nT9/npUrVwKuvfKEDq8XK1aMffv2xTmtefPmPPPMMxw+fJizZ8/SuXPndPnI1c38sqQBmjXI\nw9Byqxm5cSSzN6X/+woiIvL/rh9mrlKlCj///DPbt2/nypUrDB48OM75kuKee+4hLCyMt956i4iI\nCKKjo9m1axc//fRTktbVvHlz1q9fz5IlS4iKiuLUqVNs374dgIsXL5IrVy6Cg4P58ccfWbBgQYb8\nmInfljRA364laRO8gg7LO/D13k2244iI+I3re7Vly5Zl4MCBPP7449x6663UqFHjH+V3895vXHvD\n108HBgaycuVKtm3bRqlSpbjlllvo1KkT58+fT3DZ6+cVK1aMzz//nHfeeYc8efJQtWpVduzYAcCH\nH37IwIEDyZ49O8OGDaNJkyZxZkhrPv9lJolxHHi8yyq+zduR/b22UCh7gcQXEhHxUPoyE8+j7+5O\npchIKNm+HznLb2NX35X6PVYR8Voqac+jbxxLpeBgWNdvEL8e/YtBn02xHUdERARQSd9QqXwwAyvN\nY+QP/dl17DfbcURERHS4OzbHgSodP+Bk4TkcHPgtmQIzWc0jIpJcOtzteXS4O40YA+tGdOXUkVx0\nmjfCdhwREfFzKumbFMgfwNQ6M5mzZxIbftHHskRExB6VdBzaPFuIx65MpOHcllyMTNrX1omIiKQ1\nvScdj0uXoGDXNtxTLZT1r2jEt4h4B70n7Xn0nnQ6yJoVPu00nq8OrWPWd5/ZjiMiInEIDw+naNGi\nKV4+LCyMAwcOpCpD27ZtGTBgQKrWER+VdAIefSAHbbLP5sVVnfjrwonEFxAREY9Vs2ZNpk+f/o/z\nLly4QIkSJVK13sR+uCM1VNKJmNrvIfIcbs3j4zvoEJKIiBdLz2+TTK9+UEknIigIvug7lF/++oMJ\nXy61HUdExGuNHj2aMmXKkD17dipVqsSnn34KwKxZs3jwwQd54403yJ07N6VKlWLNmjU3lps5cyYV\nK1Yke/bslC5dmqlTp8a5/rFjx9K4ceN/nNe9e3d69OhB//792bhxIy+99BJhYWF0794dgICAAPbv\n3w9AREQEPXv2pESJEuTMmZMaNWpw9epVAJ577jkKFixIzpw5efjhh9m9e3eab5+4qKSToNKtIXQo\n9AG9N/TkUuQl23FERLxSmTJl+Oabbzh//jyDBg2iZcuWN34/+scff6R8+fKcOnWKXr160b59+xvL\n5c+fn1WrVnH+/HlmzpzJq6++ytatW/+1/pYtW7JmzRrOnTsHQFRUFIsXL6ZNmzYMHz6cGjVqMHHi\nRC5cuMD48eP/tfzrr7/O1q1b+f777zl9+jRjx469sfddt25d9u7dy99//021atVo0aJFemyif1FJ\nJ9H4ng+T6a/7aT9rjO0oIiJeqXHjxhQo4Pqlweeff56yZcvy448/AlC8eHHat2+PMYbWrVtz7Ngx\nTpxwjQWqU6cOJUuWBOChhx6iVq1abNy48V/rL1iwIA899BBLliwBYM2aNeTNm5eqVavemCe+w9Ix\nMTHMnDmT999/n4IFCxIQEMB9991HcHAw4BocljVrVjJlysSgQYPYvn07Fy5cSKMtE7+gdL8EHxEc\nDBMbjKXtpjsY9FdbKhQoZTuSiEiymSFp876sMyj578HOmTOHcePG3RhNffHiRU6ePElgYOCN8gbI\nkiXLjen58uVj9erVDBkyhN9//52YmBguX77M7bffHudltGnThkmTJtGhQwfmzZtH69at/zE9vvel\nT548yZUrVyhduvS/psXExNC3b1+WLl3K33//TUBAwI1lwsLCkr0dkkMlnQytGhRl5Oev0WhqT3YP\nXGY7johIsqWkXNPCwYMH6dSpE19++SXVq1fHGEPVqlUTHXB19epVGjVqxLx582jQoAGBgYE0bNgw\n3uUaNGhAly5d2LVrF6tWreLtt9++MS2hgWN58+YlNDSUvXv3/usFwPz581mxYgUbNmygePHinD17\nlty5c2fIYGId7k6m/7zek1/P7mD+D+tsRxER8RqXLl3CGEPevHlvHFretWsXkPDI6MjISCIjI8mb\nNy8BAQGsXr2adevif/4NDQ2lcePGNG/enHvvvZciRYrcmJY/f3727dsX53IBAQG0a9eO1157jWPH\njhEdHc33339PZGQkFy9eJCQkhNy5c3Pp0iX69u37j2XTs6xV0slUoWwojbONo8uK7kRGR9qOIyLi\nFSpWrEjPnj2pXr06BQoUYNeuXTz44IM3PmN8817u9dNhYWGMHz+e559/nty5c7Nw4UIaNGgQ57zX\ntWnThl27dtGqVat/nP/KK6+wdOlScufOTY8ePf6V8e2336Zy5crcfffd5MmThz59+uA4Dq1bt6Z4\n8eIULlyY22677caRgNiXn14f79LXgqbApUsOeXvU4YWHHufDVj1txxERuUFfCwqHDh2iQoUKHD9+\nnGzZstmOo68FzWhZsxpGP/weU/eM4s8zx2zHERERt5iYGN59912aNWvmEQWdWtqTTiHHgeIde1Gw\n9Ak29ZllO46ICODfe9KXLl0if/78lCxZkjVr1lC4cGHbkYDU7UmrpFNh07bz3D+/Ap+1XkqdytVt\nxxER8euS9lQ63G3JvXdk53EzmjaLXibGibEdR0REfIxKOpUW9WnJudPBDFw2w3YUERHxMSrpVMqV\ny9Cnyge89VN/Tl06YzuOiIj4EL0nnQZiYiB/p/ZUvz0/K7qPtB1HRPyY3pP2PBo45gEWfn6Ilt/c\nwaFev1A4Zz7bcUTET6XnbyZLyqmkPUCRTi9T8dZg1vV8x3YUEZEEdZ39PnO/+ZIzk5YTpF9xsEKj\n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\nAAAASUVORK5CYII=\n", | |
"text": [ | |
"<matplotlib.figure.Figure at 0x11096e8d0>" | |
] | |
} | |
], | |
"prompt_number": 209 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Pretty close!" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## One-Dimensional Harmonic Oscillator using Finite Difference\n", | |
"Now that we've convinced ourselves that finite differences aren't a terrible approximation, let's see if we can use this to solve the one-dimensional harmonic oscillator.\n", | |
"\n", | |
"We want to solve the time-independent Schrodinger equation\n", | |
"\n", | |
"$$ -\\frac{\\hbar^2}{2m}\\frac{\\partial^2\\psi(x)}{\\partial x^2} + V(x)\\psi(x) = E\\psi(x)$$\n", | |
"\n", | |
"for $\\psi(x)$ when $V(x)=\\frac{1}{2}m\\omega^2x^2$ is the harmonic oscillator potential. We're going to use the standard trick to transform the differential equation into a matrix equation by multiplying both sides by $\\psi^*(x)$ and integrating over $x$. This yields\n", | |
"\n", | |
"$$ -\\frac{\\hbar}{2m}\\int\\psi(x)\\frac{\\partial^2}{\\partial x^2}\\psi(x)dx + \\int\\psi(x)V(x)\\psi(x)dx = E$$\n", | |
"\n", | |
"We will again use the finite difference approximation. The finite difference formula for the second derivative is\n", | |
"\n", | |
"$$ y'' = \\frac{y_{i+1}-2y_i+y_{i-1}}{x_{i+1}-x_{i-1}} $$\n", | |
"\n", | |
"We can think of the first term in the Schrodinger equation as the overlap of the wave function $\\psi(x)$ with the second derivative of the wave function $\\frac{\\partial^2}{\\partial x^2}\\psi(x)$. Given the above expression for the second derivative, we can see if we take the overlap of the states $y_1,\\dots,y_n$ with the second derivative, we will only have three points where the overlap is nonzero, at $y_{i-1}$, $y_i$, and $y_{i+1}$. In matrix form, this leads to the tridiagonal Laplacian matrix, which has -2's along the diagonals, and 1's along the diagonals above and below the main diagonal.\n", | |
"\n", | |
"The second term turns leads to a diagonal matrix with $V(x_i)$ on the diagonal elements. Putting all of these pieces together, we get:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def Laplacian(x):\n", | |
" h = x[1]-x[0] # assume uniformly spaced points\n", | |
" n = len(x)\n", | |
" M = -2*identity(n,'d')\n", | |
" for i in range(1,n):\n", | |
" M[i,i-1] = M[i-1,i] = 1\n", | |
" return M/h**2" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 114 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"x = linspace(-3,3)\n", | |
"m = 1.0\n", | |
"ohm = 1.0\n", | |
"T = (-0.5/m)*Laplacian(x)\n", | |
"V = 0.5*(ohm**2)*(x**2)\n", | |
"H = T + diag(V)\n", | |
"E,U = eigh(H)\n", | |
"h = x[1]-x[0]\n", | |
"\n", | |
"# Plot the Harmonic potential\n", | |
"plot(x,V,color='k')\n", | |
"\n", | |
"for i in range(4):\n", | |
" # For each of the first few solutions, plot the energy level:\n", | |
" axhline(y=E[i],color='k',ls=\":\")\n", | |
" # as well as the eigenfunction, displaced by the energy level so they don't\n", | |
" # all pile up on each other:\n", | |
" plot(x,-U[:,i]/sqrt(h)+E[i])\n", | |
"title(\"Eigenfunctions of the Quantum Harmonic Oscillator\")\n", | |
"xlabel(\"Displacement (bohr)\")\n", | |
"ylabel(\"Energy (hartree)\")" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 115, | |
"text": [ | |
"<matplotlib.text.Text at 0x10d7b9650>" | |
] | |
}, | |
{ | |
"metadata": {}, | |
"output_type": "display_data", | |
"png": "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\n", | |
"text": [ | |
"<matplotlib.figure.Figure at 0x10d75ded0>" | |
] | |
} | |
], | |
"prompt_number": 115 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We've made a couple of hacks here to get the orbitals the way we want them. First, I inserted a -1 factor before the wave functions, to fix the phase of the lowest state. The phase (sign) of a quantum wave function doesn't hold any information, only the square of the wave function does, so this doesn't really change anything. \n", | |
"\n", | |
"But the eigenfunctions as we generate them aren't properly normalized. The reason is that finite difference isn't a real basis in the quantum mechanical sense. It's a basis of Dirac \u03b4 functions at each point; we interpret the space betwen the points as being \"filled\" by the wave function, but the finite difference basis only has the solution being at the points themselves. We can fix this by dividing the eigenfunctions of our finite difference Hamiltonian by the square root of the spacing, and this gives properly normalized functions." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Special Functions\n", | |
"The solutions to the Harmonic Oscillator are supposed to be Hermite polynomials. The Wikipedia page has the HO states given by\n", | |
"\n", | |
"$$\\psi_n(x) = \\frac{1}{\\sqrt{2^n n!}}\n", | |
"\\left(\\frac{m\\omega}{\\pi\\hbar}\\right)^{1/4}\n", | |
"\\exp\\left(-\\frac{m\\omega x^2}{2\\hbar}\\right)\n", | |
"H_n\\left(\\sqrt{\\frac{m\\omega}{\\hbar}}x\\right)$$\n", | |
"\n", | |
"Let's see whether they look like those. There are some special functions in the Numpy library, and some more in Scipy. Hermite Polynomials are in Numpy:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"from numpy.polynomial.hermite import Hermite\n", | |
"def ho_evec(x,n,m,ohm):\n", | |
" vec = [0]*9\n", | |
" vec[n] = 1\n", | |
" Hn = Hermite(vec)\n", | |
" return (1/sqrt(2**n*factorial(n)))*pow(m*ohm/pi,0.25)*exp(-0.5*m*ohm*x**2)*Hn(x*sqrt(m*ohm))" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 116 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Let's compare the first function to our solution." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"plot(x,ho_evec(x,0,1,1),label=\"Analytic\")\n", | |
"plot(x,-U[:,0]/sqrt(h),label=\"Numeric\")\n", | |
"xlabel('x (bohr)')\n", | |
"ylabel(r'$\\psi(x)$')\n", | |
"title(\"Comparison of numeric and analytic solutions to the Harmonic Oscillator\")\n", | |
"legend()" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 117, | |
"text": [ | |
"<matplotlib.legend.Legend at 0x10da6b950>" | |
] | |
}, | |
{ | |
"metadata": {}, | |
"output_type": "display_data", | |
"png": "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\nTkSuQmCC\n", | |
"text": [ | |
"<matplotlib.figure.Figure at 0x10d653550>" | |
] | |
} | |
], | |
"prompt_number": 117 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"The agreement is almost exact." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We can use the **subplot** command to put multiple comparisons in different panes on a single plot:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"phase_correction = [-1,1,1,-1,-1,1]\n", | |
"for i in range(6):\n", | |
" subplot(2,3,i+1)\n", | |
" plot(x,ho_evec(x,i,1,1),label=\"Analytic\")\n", | |
" plot(x,phase_correction[i]*U[:,i]/sqrt(h),label=\"Numeric\")" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "display_data", | |
"png": "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\n5e7WdelY6p2IEEqt7vlYHZsIQbXkFzpOS88UNJabC+ssd6ayKmKVRWu/pqSt4GBlDhkhVvx2xlm3\nDkZq1/ORi7i8R/WjFLQW0HxyHatnDwBVjVsybuGFkhfQG/R4eMB3v6uc8+sKmB6HaC3r1yulAsfG\nXEdJF7QW4NWVbdZD2KZNoG92jQhvUyVtS9CYka3Lt3K06ahFe4ILkaoqCA1VXhWd5u1Jw+S+dHJI\nMnU9dQyPDdt5pMoWk0dfolKsxAy7Z5HnInxlJG8drbf72IyYBi8ayc2dPNbWEjRL2gGU9+dwSar1\nStrXF6LEevaXuIaSLmovItwrnqwVi/HxsX9/K5asINI/ciLS9nOfA50ODjrZwGkfaKfjXAepYecd\nE2wRQUEQHa0cs+eMwhAzUdBWSE9FlllKeu1a6K7I4tRp51vSxmCd5mYYHlYCL20h0j+SIJ8gKjoc\nH3jkSHJyFGOgZ6iHc6PnWOq/1Kz7jA+Y3h7exAXFOSRfXtel42xjkkWu4+W+KRwscdy+9PSgsdFR\nKCmZuTLafKyK1Cxpu9LfD/3+1gWNmbJ5+Qby2lxDSee35hM8tNrurm5Tbsm4ZcLl7eWl7Es/+KBz\ni0ocbzrOxuiNuAnb/yw2blTcs0ZL2hkVkkw5VluA39lsli2bv62fH8QvyuZ4netY0sb9aBtCBSbY\nHL2ZY03HbBfkwuTkKA9bRle3uTEWWVlKgQ4pIXVJKmVnyuw8UsWSbipMtEhJZ0WlUNTsOCVd2Vk5\nxRtRUgKxseA/e1bbrMQFxdE33Gd2QKnNq5EQYpcQolwIUSWEeHCGzz8rhCgQQhQKIY4IIVQ6ANE5\nvPlhC+7ew6SEx9ok58r1aXTpG6w6X1RtCloLGGmcOzVHbT6T/hleLnt5Ih1m924YGoL//MdxY5jO\n0aajbIpS50nFGDwW7heOm3Cj9WyrKnKtpbC9gI2x2Wa337EyE11fqVMr4w2ODtLQ20ByaLIqQWNG\nNkVv4miTdfWfF8p6Z7Skzd2PNrJkiaJ4GhqUMpY13TV2HKVCVWc1p0sTLToad2NyCl2ikp4e+43L\niJSSqs4qkkKSJq5Z6+oGJRU1KyLLbJe3TUpaCOEO/BHYBaQBu4UQ032FNcB2KWUW8GPgMRYwr+Xk\nEu22zqboX4ALtnogula4ROWxgrYCmvPM269Ui9igWFYsWcF+3X5Aqcv78MNKtLezONZ0jM0x6jyp\n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\nI4HpQohrgDZAeyHEJ1LKOy3JbCzTdvRoCAyEb7724M6Bd7I4fTFzg+Y286c1z9Gj2i1e4lwij0ZY\nn2Xpajw9PLkmcgobB31HSsr9Db6s9flh31omTHafULfeWbZ6EhAA7S9EsbugZUUtzGRkQPigg3h1\ndH6LyvpE+EfQMTqHjIxwxtsQtNlVkEnpgb/TywAF8RITExFCWExYdOZcJ6Xk5PGTFJwtoKuf5R9Z\nZWValnT9W4MyC/XJ7Dbj4+XDgK4DaHNNKl9+mcC992rn09Nh1y5YtQoeT9qhi5MGU8i7MJPQ9qHc\nfz/06qXN991qdcvMKsqiq3cPMlLbcf0y5+tk01wnpbTpAF4FnjQ9fgp4uZnxY4Bvm3hdNsXKlVIO\nHizlvpP7ZZfXusiKqoomx1vDxx9Lee0tx6T/y/6yqrrKbnnO5PNdn8vI56fKxx5relxurpSe942S\n3+9d4xrFnIDJFmy2TWuP5mzOVUy5ukb6/dNfFpwtaPF7H39cypn//Fz+YdkfnKBZ09y36j55y9y3\n5d13t/y95yvPy9b/8JZDhp93vGI20pjdOXuum/jJRLkqe1Wjeq1aJWVCQsPzty6/VS7eudieP9lu\nZv8wW975/ktyxAgpKyu1c7NmSfnSS9rj+EXxMulgki66/fm7P8u5KXMvPn/wQSmfe67umIW/LpSh\nj8yS8+a5WDkT1sx19uxJW5PA0+A3ga0XmzoVzp+H3B29iQyI5IecH2wVdZHEROgyIpEJERNo5dHK\nbnnOZHKvyRz13MCKb8uabF351apSCNrJ2J6jXaecwi4GxggCqrVbRlpKRgbQJUuXFVV0l2gqOmTZ\nFO7ee2ovnURPYqO9mx+sP06d64aHNB3y/vJLuPnmhufTC9J1y+w2E98jnpO+m2ndWot2Xn89fPcd\nPPCAVrI0oyBDt5X04G6D2XJ0y8Xns2fDe+9R5y6ZHzJSOZM9lPvv10FBK7HZSUsrEnjqjd8gpZze\nUJKVinrAk09qpULvir2Lj3Z+ZKsoQMuATkyE4k4/MTHCoJsRtfD38WdoyGDKg9Y1OilWVcEbX29g\nQMdhLikPqXAMAwdCq+Loi9moLSEjA860dm0/YTNRgVEUyiz27MGqXInaZBZm4nsu2hD70c3h7Lmu\nqeSx8+dh9Wr4wx/qnj9Vdoq83/JcnjVdn5HdR7LlaArr10uys+HGG2HhQq2VZk5xDgG+Afj7+Oui\n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\n", | |
"text": [ | |
"<matplotlib.figure.Figure at 0x10da8e150>" | |
] | |
} | |
], | |
"prompt_number": 118 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Other than phase errors (which I've corrected with a little hack: can you find it?), the agreement is pretty good, although it gets worse the higher in energy we get, in part because we used only 50 points.\n", | |
"\n", | |
"The Scipy module has many more special functions:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"from scipy.special import airy,jn,eval_chebyt,eval_legendre\n", | |
"subplot(2,2,1)\n", | |
"x = linspace(-1,1)\n", | |
"Ai,Aip,Bi,Bip = airy(x)\n", | |
"plot(x,Ai)\n", | |
"plot(x,Aip)\n", | |
"plot(x,Bi)\n", | |
"plot(x,Bip)\n", | |
"title(\"Airy functions\")\n", | |
"\n", | |
"subplot(2,2,2)\n", | |
"x = linspace(0,10)\n", | |
"for i in range(4):\n", | |
" plot(x,jn(i,x))\n", | |
"title(\"Bessel functions\")\n", | |
"\n", | |
"subplot(2,2,3)\n", | |
"x = linspace(-1,1)\n", | |
"for i in range(6):\n", | |
" plot(x,eval_chebyt(i,x))\n", | |
"title(\"Chebyshev polynomials of the first kind\")\n", | |
"\n", | |
"subplot(2,2,4)\n", | |
"x = linspace(-1,1)\n", | |
"for i in range(6):\n", | |
" plot(x,eval_legendre(i,x))\n", | |
"title(\"Legendre polynomials\")" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 119, | |
"text": [ | |
"<matplotlib.text.Text at 0x10e809c50>" | |
] | |
}, | |
{ | |
"metadata": {}, | |
"output_type": "display_data", | |
"png": "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\nwgAAAABJRU5ErkJggg==\n", | |
"text": [ | |
"<matplotlib.figure.Figure at 0x10e02b510>" | |
] | |
} | |
], | |
"prompt_number": 119 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"As well as Jacobi, Laguerre, Hermite polynomials, Hypergeometric functions, and many others. There's a full listing at the [Scipy Special Functions Page](http://docs.scipy.org/doc/scipy/reference/special.html)." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Least squares fitting\n", | |
"Very often we deal with some data that we want to fit to some sort of expected behavior. Say we have the following:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"raw_data = \"\"\"\\\n", | |
"3.1905781584582433,0.028208609537968457\n", | |
"4.346895074946466,0.007160804747670053\n", | |
"5.374732334047101,0.0046962988461934805\n", | |
"8.201284796573875,0.0004614473299618756\n", | |
"10.899357601713055,0.00005038370219939726\n", | |
"16.295503211991434,4.377451812785309e-7\n", | |
"21.82012847965739,3.0799922117601088e-9\n", | |
"32.48394004282656,1.524776208284536e-13\n", | |
"43.53319057815846,5.5012073588707224e-18\"\"\"" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 120 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"There's a section below on parsing CSV data. We'll steal the parser from that. For an explanation, skip ahead to that section. Otherwise, just assume that this is a way to parse that text into a numpy array that we can plot and do other analyses with." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"data = []\n", | |
"for line in raw_data.splitlines():\n", | |
" words = line.split(',')\n", | |
" data.append(map(float,words))\n", | |
"data = array(data)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 121 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"title(\"Raw Data\")\n", | |
"xlabel(\"Distance\")\n", | |
"plot(data[:,0],data[:,1],'bo')" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 122, | |
"text": [ | |
"[<matplotlib.lines.Line2D at 0x10e70dc90>]" | |
] | |
}, | |
{ | |
"metadata": {}, | |
"output_type": "display_data", | |
"png": "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\nlySpUYa4JEmNMsQlSWqUIS5JUqMMcUmSGmWIS5LUKENckqRGGeKSJDXKEJckqVGGuCRJjTLEJUlq\nlCEuSVKjDHFJkhpliEuS1ChDXJKkRhnikiQ1yhCXJKlRhrgkSY0yxCVJapQhLklSowxxSZIaZYhL\nktQoQ1ySpEYZ4pIkNcoQlySpUYa4JEmNWjjTDdDRsXnzNjZu3MLevQtZtGgf69efw3nnvXKmmyVJ\nOoIM8Tlo8+ZtbNhwGzt3XnmgbOfOKwAMckmaQ1xOn4M2btxyUIAD7Nx5JZs2bZ2hFkmSjoaBIZ5k\nVZL7ktyf5LIJ6mzs9t+TZMWgY5Mcn2Rrkq8m2ZJkyZHpjgD27h1/gWXPngXHuCWSpKNp0hBPsgC4\nBlgFnAGsSXL6mDqrgVOr6jTgYuDaKRx7ObC1ql4IfKLbnpNGRkaO+TkXLdo3bvnixfsP+Tkn68fm\nzds499zfZmhomHPP/W02b952yOc5mmZiLI4G+zF7zIU+wNzox1zow6EYNBM/C9hRVbuq6gngRuCC\nMXXOB24AqKo7gCVJThhw7IFjuu+vPeyezFIz8R9r/fpzWL78ioPKli9/K+vWnX3IzzlRP0Zff9+y\n5Q+4/fZhtmz5AzZsuG1WBvl0xmI2/2FyuP+nZkvf5sIv3aPZh2M5To7FkTETP1uDLmw7CXigb/tB\n4GVTqHMS8KOTHLu0qnZ3j3cDS6fRZg0wevHapk2/w549C1i8eD/r1q06Khe1Tfz6++80exHdXL4w\ncC73bS5xnNozU2M2aCZeU3yeTLHOU56vqmoa59EUnXfeK7n11t9nZGSYW2/9/aP2n2guvv4+ly8M\nnMt9m0scp/bM1Jill6ET7ExWAsNVtarbfgvwg6q6qq/OnwEjVXVjt30f8CrgBRMd29UZqqpHkpwI\nfLKqfmKc8xvukqR5paqmMjEGBi+nfw44LckpwNeB1wNrxtS5CVgL3NiF/mNVtTvJNyc59ibgjcBV\n3fePHW5HJEmabyYN8aral2QtcBuwALi+qrYnuaTbf11V3ZJkdZIdwPeAiyY7tnvqtwMfTvImYBfw\nuqPQN0mS5rRJl9MlSdLsNSvv2DaVG8y0IMmuJF9IcleSO2e6PVOR5M+T7E5yb19ZczfnmaAfw0ke\n7MbjriSrZrKNgyRZluSTSb6U5ItJ1nflTY3HJP1obTwWJ7kjyd1dP4a78mbGY5I+NDUWo5Is6Np7\n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\n", | |
"text": [ | |
"<matplotlib.figure.Figure at 0x10da8ea10>" | |
] | |
} | |
], | |
"prompt_number": 122 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Since we expect the data to have an exponential decay, we can plot it using a semi-log plot." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"title(\"Raw Data\")\n", | |
"xlabel(\"Distance\")\n", | |
"semilogy(data[:,0],data[:,1],'bo')" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 123, | |
"text": [ | |
"[<matplotlib.lines.Line2D at 0x10dfc6fd0>]" | |
] | |
}, | |
{ | |
"metadata": {}, | |
"output_type": "display_data", | |
"png": "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\nZYpY5XCIAAAAAElFTkSuQmCC\n", | |
"text": [ | |
"<matplotlib.figure.Figure at 0x10df872d0>" | |
] | |
} | |
], | |
"prompt_number": 123 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"For a pure exponential decay like this, we can fit the log of the data to a straight line. The above plot suggests this is a good approximation. Given a function\n", | |
"$$ y = Ae^{-ax} $$\n", | |
"$$ \\log(y) = \\log(A) - ax$$\n", | |
"Thus, if we fit the log of the data versus x, we should get a straight line with slope $a$, and an intercept that gives the constant $A$.\n", | |
"\n", | |
"There's a numpy function called **polyfit** that will fit data to a polynomial form. We'll use this to fit to a straight line (a polynomial of order 1)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"params = polyfit(data[:,0],log(data[:,1]),1)\n", | |
"a = params[0]\n", | |
"A = exp(params[1])" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 124 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Let's see whether this curve fits the data." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"x = linspace(1,45)\n", | |
"title(\"Raw Data\")\n", | |
"xlabel(\"Distance\")\n", | |
"semilogy(data[:,0],data[:,1],'bo')\n", | |
"semilogy(x,A*exp(a*x),'b-')" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 125, | |
"text": [ | |
"[<matplotlib.lines.Line2D at 0x10dcdffd0>]" | |
] | |
}, | |
{ | |
"metadata": {}, | |
"output_type": "display_data", | |
"png": "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\n", | |
"text": [ | |
"<matplotlib.figure.Figure at 0x10d786390>" | |
] | |
} | |
], | |
"prompt_number": 125 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"If we have more complicated functions, we may not be able to get away with fitting to a simple polynomial. Consider the following data:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"gauss_data = \"\"\"\\\n", | |
"-0.9902286902286903,1.4065274110372852e-19\n", | |
"-0.7566104566104566,2.2504438576596563e-18\n", | |
"-0.5117810117810118,1.9459459459459454\n", | |
"-0.31887271887271884,10.621621621621626\n", | |
"-0.250997150997151,15.891891891891893\n", | |
"-0.1463309463309464,23.756756756756754\n", | |
"-0.07267267267267263,28.135135135135133\n", | |
"-0.04426734426734419,29.02702702702703\n", | |
"-0.0015939015939017698,29.675675675675677\n", | |
"0.04689304689304685,29.10810810810811\n", | |
"0.0840994840994842,27.324324324324326\n", | |
"0.1700546700546699,22.216216216216214\n", | |
"0.370878570878571,7.540540540540545\n", | |
"0.5338338338338338,1.621621621621618\n", | |
"0.722014322014322,0.08108108108108068\n", | |
"0.9926849926849926,-0.08108108108108646\"\"\"\n", | |
"\n", | |
"data = []\n", | |
"for line in gauss_data.splitlines():\n", | |
" words = line.split(',')\n", | |
" data.append(map(float,words))\n", | |
"data = array(data)\n", | |
"\n", | |
"plot(data[:,0],data[:,1],'bo')" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 126, | |
"text": [ | |
"[<matplotlib.lines.Line2D at 0x10ddecc90>]" | |
] | |
}, | |
{ | |
"metadata": {}, | |
"output_type": "display_data", | |
"png": "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\nH3ussNp57LcMAAAAAElFTkSuQmCC\n", | |
"text": [ | |
"<matplotlib.figure.Figure at 0x10decb490>" | |
] | |
} | |
], | |
"prompt_number": 126 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"This data looks more Gaussian than exponential. If we wanted to, we could use **polyfit** for this as well, but let's use the **curve_fit** function from Scipy, which can fit to arbitrary functions. You can learn more using help(curve_fit).\n", | |
"\n", | |
"First define a general Gaussian function to fit to." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def gauss(x,A,a): return A*exp(a*x**2)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 127 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Now fit to it using **curve_fit**:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"from scipy.optimize import curve_fit\n", | |
"\n", | |
"params,conv = curve_fit(gauss,data[:,0],data[:,1])\n", | |
"x = linspace(-1,1)\n", | |
"plot(data[:,0],data[:,1],'bo')\n", | |
"A,a = params\n", | |
"plot(x,gauss(x,A,a),'b-')" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 128, | |
"text": [ | |
"[<matplotlib.lines.Line2D at 0x10f86a110>]" | |
] | |
}, | |
{ | |
"metadata": {}, | |
"output_type": "display_data", | |
"png": "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\n", | |
"text": [ | |
"<matplotlib.figure.Figure at 0x10ddc29d0>" | |
] | |
} | |
], | |
"prompt_number": 128 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"The **curve_fit** routine we just used is built on top of a very good general **minimization** capability in Scipy. You can learn more [at the scipy documentation pages](http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html)." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Monte Carlo, random numbers, and computing $\\pi$\n", | |
"Many methods in scientific computing rely on Monte Carlo integration, where a sequence of (pseudo) random numbers are used to approximate the integral of a function. Python has good random number generators in the standard library. The **random()** function gives pseudorandom numbers uniformly distributed between 0 and 1:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"from random import random\n", | |
"rands = []\n", | |
"for i in range(100):\n", | |
" rands.append(random())\n", | |
"plot(rands)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 129, | |
"text": [ | |
"[<matplotlib.lines.Line2D at 0x10f9bf210>]" | |
] | |
}, | |
{ | |
"metadata": {}, | |
"output_type": "display_data", | |
"png": "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\n", | |
"text": [ | |
"<matplotlib.figure.Figure at 0x10de4a650>" | |
] | |
} | |
], | |
"prompt_number": 129 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"**random()** uses the [Mersenne Twister](http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html) algorithm, which is a highly regarded pseudorandom number generator. There are also functions to generate random integers, to randomly shuffle a list, and functions to pick random numbers from a particular distribution, like the normal distribution:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"from random import gauss\n", | |
"grands = []\n", | |
"for i in range(100):\n", | |
" grands.append(gauss(0,1))\n", | |
"plot(grands)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 130, | |
"text": [ | |
"[<matplotlib.lines.Line2D at 0x10fb08910>]" | |
] | |
}, | |
{ | |
"metadata": {}, | |
"output_type": "display_data", | |
"png": "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\n7ZOytOy5AAAAAElFTkSuQmCC\n", | |
"text": [ | |
"<matplotlib.figure.Figure at 0x10f9cb2d0>" | |
] | |
} | |
], | |
"prompt_number": 130 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"It is generally more efficient to generate a list of random numbers all at once, particularly if you're drawing from a non-uniform distribution. Numpy has functions to generate vectors and matrices of particular types of random distributions." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"plot(rand(100))" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 131, | |
"text": [ | |
"[<matplotlib.lines.Line2D at 0x10fc69a50>]" | |
] | |
}, | |
{ | |
"metadata": {}, | |
"output_type": "display_data", | |
"png": "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\ngg==\n", | |
"text": [ | |
"<matplotlib.figure.Figure at 0x10f9d7990>" | |
] | |
} | |
], | |
"prompt_number": 131 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"One of the first programs I ever wrote was a program to compute $\\pi$ by taking random numbers as x and y coordinates, and counting how many of them were in the unit circle. For example:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"npts = 5000\n", | |
"xs = 2*rand(npts)-1\n", | |
"ys = 2*rand(npts)-1\n", | |
"r = xs**2+ys**2\n", | |
"ninside = (r<1).sum()\n", | |
"figsize(6,6) # make the figure square\n", | |
"title(\"Approximation to pi = %f\" % (4*ninside/float(npts)))\n", | |
"plot(xs[r<1],ys[r<1],'b.')\n", | |
"plot(xs[r>1],ys[r>1],'r.')\n", | |
"figsize(8,6) # change the figsize back to 4x3 for the rest of the notebook" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "display_data", | |
"png": "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\nQmCC\n", | |
"text": [ | |
"<matplotlib.figure.Figure at 0x10fc95b90>" | |
] | |
} | |
], | |
"prompt_number": 132 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"The idea behind the program is that the ratio of the area of the unit circle to the square that inscribes it is $\\pi/4$, so by counting the fraction of the random points in the square that are inside the circle, we get increasingly good estimates to $\\pi$. \n", | |
"\n", | |
"The above code uses some higher level Numpy tricks to compute the radius of each point in a single line, to count how many radii are below one in a single line, and to filter the x,y points based on their radii. To be honest, I rarely write code like this: I find some of these Numpy tricks a little too cute to remember them, and I'm more likely to use a list comprehension (see below) to filter the points I want, since I can remember that.\n", | |
"\n", | |
"As methods of computing $\\pi$ go, this is among the worst. A much better method is to use Leibniz's expansion of arctan(1):\n", | |
"\n", | |
"$$\\frac{\\pi}{4} = \\sum_k \\frac{(-1)^k}{2*k+1}$$" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"n = 100\n", | |
"total = 0\n", | |
"for k in range(n):\n", | |
" total += pow(-1,k)/(2*k+1.0)\n", | |
"print 4*total" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"3.13159290356\n" | |
] | |
} | |
], | |
"prompt_number": 133 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"If you're interested a great method, check out [Ramanujan's method](http://en.wikipedia.org/wiki/Approximations_of_%CF%80). This converges so fast you really need arbitrary precision math to display enough decimal places. You can do this with the Python **decimal** module, if you're interested." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Numerical Integration\n", | |
"Integration can be hard, and sometimes it's easier to work out a definite integral using an approximation. For example, suppose we wanted to figure out the integral:\n", | |
"\n", | |
"$$\\int_0^\\infty\\exp(-x)dx=1$$" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"from numpy import sqrt\n", | |
"def f(x): return exp(-x)\n", | |
"x = linspace(0,10)\n", | |
"plot(x,exp(-x))" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 134, | |
"text": [ | |
"[<matplotlib.lines.Line2D at 0x10ff00490>]" | |
] | |
}, | |
{ | |
"metadata": {}, | |
"output_type": "display_data", | |
"png": "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\n", | |
"text": [ | |
"<matplotlib.figure.Figure at 0x10fb5e950>" | |
] | |
} | |
], | |
"prompt_number": 134 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Scipy has a numerical integration routine **quad** (since sometimes numerical integration is called *quadrature*), that we can use for this:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"from scipy.integrate import quad\n", | |
"quad(f,0,inf)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 135, | |
"text": [ | |
"(1.0000000000000002, 5.842606742906004e-11)" | |
] | |
} | |
], | |
"prompt_number": 135 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"There are also 2d and 3d numerical integrators in Scipy. [See the docs](http://docs.scipy.org/doc/scipy/reference/integrate.html) for more information." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Fast Fourier Transform and Signal Processing\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Very often we want to use FFT techniques to help obtain the signal from noisy data. Scipy has several different options for this." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"from scipy.fftpack import fft,fftfreq\n", | |
"\n", | |
"npts = 4000\n", | |
"nplot = npts/10\n", | |
"t = linspace(0,120,npts)\n", | |
"def acc(t): return 10*sin(2*pi*2.0*t) + 5*sin(2*pi*8.0*t) + 2*rand(npts)\n", | |
"\n", | |
"signal = acc(t)\n", | |
"\n", | |
"FFT = abs(fft(signal))\n", | |
"freqs = fftfreq(npts, t[1]-t[0])\n", | |
"\n", | |
"subplot(211)\n", | |
"plot(t[:nplot], signal[:nplot])\n", | |
"subplot(212)\n", | |
"plot(freqs,20*log10(FFT),',')\n", | |
"show()" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "display_data", | |
"png": "iVBORw0KGgoAAAANSUhEUgAAAekAAAFwCAYAAACcp4McAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsfXl8XUeV5leWrF3W5t2Wt8SOneBsJCwdFsGEJGwhNMPW\ndBOaNNNbgGYYIA3NYLOkYQZoYNjXTncPO+kQhiVbxxCgkxDiJHbsxI7j3ZZky1qfdqnmj6PDrXf9\n3r23qo6sJ6u+388/yVpKdetWne9855yqUlprBAQEBAQEBJQe5s10BwICAgICAgIKI5B0QEBAQEBA\niSKQdEBAQEBAQIkikHRAQEBAQECJIpB0QEBAQEBAiSKQdEBAQEBAQInCi6SVUq1KqXuVUo8rpXYq\npd4x9fVmpdRdSqk9Sqk7lVKNMt0NCAgICAiYO1A++6SVUksBLNVaP6KUqgPwewDXAfhzACe11v9L\nKfU+AE1a65tEehwQEBAQEDBH4KWktdbtWutHpj4fALAbwAoA1wK4ZerHbgERd0BAQEBAQIAFxHLS\nSqk1AC4B8ACAJVrrjqlvdQBYIvV3AgICAgIC5gpESHoq1P0jAO/UWveb39MUTw9njwYEBAQEBFii\n3LcBpdR8EEH/q9b6tqkvdyillmqt25VSywB0Fvi9QNwBAQEBAXMOWmuV9Wd9q7sVgG8A2KW1/ozx\nrdsBXD/1+fUAbov/LgBorcO/DP8+9KEPzXgfZsO/ME5hrMI4hXEq9X+28FXSVwD4UwCPKaW2T33t\n7wF8HMD3lVI3ADgA4HWefycgICAgIGDOwYuktda/RnE1fqVP2wEBAQEBAXMd4cSxWYC2traZ7sKs\nQBin7AhjlQ1hnLIhjNP0weswE68/rJSeqb8dEBAQEBAwE1BKQZ+pwrGAgICAgICA6UMg6YCAgICA\ngBJFIOmAgICAgIASRSDpgICAgICAEkUg6YCAgICAgBJFIOmAgICAgIASRSDpgICAgICAEkUg6YCA\ngICAgBJFIOmAgICAgIASRSDpgICAgICAEkUg6YCAAGgNnDw5070IcEVnJ9DXN9O9CJgOeJO0Uuqb\nSqkOpdQO42tblFJHlFLbp/5d4/t3AuYWHnoImJyc6V7MHTz6KPCyl810LwJc8eEPA9/61kz3Yvpw\n991Af/9M92JmIKGkvwUgTsIawKe11pdM/fuFwN8JmEN4zWuAJ5+c6V7MHXR1AadOzXQvAlzR03N2\n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\nAABJRU5ErkJggg==\n", | |
"text": [ | |
"<matplotlib.figure.Figure at 0x10ff642d0>" | |
] | |
} | |
], | |
"prompt_number": 136 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"There are additional signal processing routines in Scipy that you can [read about here](http://docs.scipy.org/doc/scipy/reference/tutorial/signal.html)." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# III. Intermediate Python\n", | |
"\n", | |
"## Output Parsing\n", | |
"As more and more of our day-to-day work is being done on and through computers, we increasingly have output that one program writes, often in a text file, that we need to analyze in one way or another, and potentially feed that output into another file.\n", | |
"\n", | |
"Suppose we have the following output:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"myoutput = \"\"\"\\\n", | |
"@ Step Energy Delta E Gmax Grms Xrms Xmax Walltime\n", | |
"@ ---- ---------------- -------- -------- -------- -------- -------- --------\n", | |
"@ 0 -6095.12544083 0.0D+00 0.03686 0.00936 0.00000 0.00000 1391.5\n", | |
"@ 1 -6095.25762870 -1.3D-01 0.00732 0.00168 0.32456 0.84140 10468.0\n", | |
"@ 2 -6095.26325979 -5.6D-03 0.00233 0.00056 0.06294 0.14009 11963.5\n", | |
"@ 3 -6095.26428124 -1.0D-03 0.00109 0.00024 0.03245 0.10269 13331.9\n", | |
"@ 4 -6095.26463203 -3.5D-04 0.00057 0.00013 0.02737 0.09112 14710.8\n", | |
"@ 5 -6095.26477615 -1.4D-04 0.00043 0.00009 0.02259 0.08615 20211.1\n", | |
"@ 6 -6095.26482624 -5.0D-05 0.00015 0.00002 0.00831 0.03147 21726.1\n", | |
"@ 7 -6095.26483584 -9.6D-06 0.00021 0.00004 0.01473 0.05265 24890.5\n", | |
"@ 8 -6095.26484405 -8.2D-06 0.00005 0.00001 0.00555 0.01929 26448.7\n", | |
"@ 9 -6095.26484599 -1.9D-06 0.00003 0.00001 0.00164 0.00564 27258.1\n", | |
"@ 10 -6095.26484676 -7.7D-07 0.00003 0.00001 0.00161 0.00553 28155.3\n", | |
"@ 11 -6095.26484693 -1.8D-07 0.00002 0.00000 0.00054 0.00151 28981.7\n", | |
"@ 11 -6095.26484693 -1.8D-07 0.00002 0.00000 0.00054 0.00151 28981.7\"\"\"" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 137 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"This output actually came from a geometry optimization of a Silicon cluster using the [NWChem](http://www.nwchem-sw.org/index.php/Main_Page) quantum chemistry suite. At every step the program computes the energy of the molecular geometry, and then changes the geometry to minimize the computed forces, until the energy converges. I obtained this output via the unix command\n", | |
"\n", | |
" % grep @ nwchem.out\n", | |
"\n", | |
"since NWChem is nice enough to precede the lines that you need to monitor job progress with the '@' symbol.\n", | |
"\n", | |
"We could do the entire analysis in Python; I'll show how to do this later on, but first let's focus on turning this code into a usable Python object that we can plot.\n", | |
"\n", | |
"First, note that the data is entered into a multi-line string. When Python sees three quote marks \"\"\" or ''' it treats everything following as part of a single string, including newlines, tabs, and anything else, until it sees the same three quote marks (\"\"\" has to be followed by another \"\"\", and ''' has to be followed by another ''') again. This is a convenient way to quickly dump data into Python, and it also reinforces the important idea that you don't have to open a file and deal with it one line at a time. You can read everything in, and deal with it as one big chunk.\n", | |
"\n", | |
"The first thing we'll do, though, is to split the big string into a list of strings, since each line corresponds to a separate piece of data. We will use the **splitlines()** function on the big myout string to break it into a new element every time it sees a newline (\\n) character:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"lines = myoutput.splitlines()\n", | |
"lines" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 138, | |
"text": [ | |
"['@ Step Energy Delta E Gmax Grms Xrms Xmax Walltime',\n", | |
" '@ ---- ---------------- -------- -------- -------- -------- -------- --------',\n", | |
" '@ 0 -6095.12544083 0.0D+00 0.03686 0.00936 0.00000 0.00000 1391.5',\n", | |
" '@ 1 -6095.25762870 -1.3D-01 0.00732 0.00168 0.32456 0.84140 10468.0',\n", | |
" '@ 2 -6095.26325979 -5.6D-03 0.00233 0.00056 0.06294 0.14009 11963.5',\n", | |
" '@ 3 -6095.26428124 -1.0D-03 0.00109 0.00024 0.03245 0.10269 13331.9',\n", | |
" '@ 4 -6095.26463203 -3.5D-04 0.00057 0.00013 0.02737 0.09112 14710.8',\n", | |
" '@ 5 -6095.26477615 -1.4D-04 0.00043 0.00009 0.02259 0.08615 20211.1',\n", | |
" '@ 6 -6095.26482624 -5.0D-05 0.00015 0.00002 0.00831 0.03147 21726.1',\n", | |
" '@ 7 -6095.26483584 -9.6D-06 0.00021 0.00004 0.01473 0.05265 24890.5',\n", | |
" '@ 8 -6095.26484405 -8.2D-06 0.00005 0.00001 0.00555 0.01929 26448.7',\n", | |
" '@ 9 -6095.26484599 -1.9D-06 0.00003 0.00001 0.00164 0.00564 27258.1',\n", | |
" '@ 10 -6095.26484676 -7.7D-07 0.00003 0.00001 0.00161 0.00553 28155.3',\n", | |
" '@ 11 -6095.26484693 -1.8D-07 0.00002 0.00000 0.00054 0.00151 28981.7',\n", | |
" '@ 11 -6095.26484693 -1.8D-07 0.00002 0.00000 0.00054 0.00151 28981.7']" | |
] | |
} | |
], | |
"prompt_number": 138 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Splitting is a big concept in text processing. We used **splitlines()** here, and we will use the more general **split()** function below to split each line into whitespace-delimited words.\n", | |
"\n", | |
"We now want to do three things:\n", | |
"\n", | |
"* Skip over the lines that don't carry any information\n", | |
"* Break apart each line that does carry information and grab the pieces we want\n", | |
"* Turn the resulting data into something that we can plot.\n", | |
"\n", | |
"For this data, we really only want the Energy column, the Gmax column (which contains the maximum gradient at each step), and perhaps the Walltime column. \n", | |
"\n", | |
"Since the data is now in a list of lines, we can iterate over it:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"for line in lines[2:]:\n", | |
" # do something with each line\n", | |
" words = line.split()" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 139 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Let's examine what we just did: first, we used a **for** loop to iterate over each line. However, we skipped the first two (the lines[2:] only takes the lines starting from index 2), since lines[0] contained the title information, and lines[1] contained underscores.\n", | |
"\n", | |
"We then split each line into chunks (which we're calling \"words\", even though in most cases they're numbers) using the string **split()** command. Here's what split does:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"import string\n", | |
"help(string.split)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"Help on function split in module string:\n", | |
"\n", | |
"split(s, sep=None, maxsplit=-1)\n", | |
" split(s [,sep [,maxsplit]]) -> list of strings\n", | |
" \n", | |
" Return a list of the words in the string s, using sep as the\n", | |
" delimiter string. If maxsplit is given, splits at no more than\n", | |
" maxsplit places (resulting in at most maxsplit+1 words). If sep\n", | |
" is not specified or is None, any whitespace string is a separator.\n", | |
" \n", | |
" (split and splitfields are synonymous)\n", | |
"\n" | |
] | |
} | |
], | |
"prompt_number": 140 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Here we're implicitly passing in the first argument (s, in the doctext) by calling a method .split() on a string object. In this instance, we're not passing in a sep character, which means that the function splits on whitespace. Let's see what that does to one of our lines:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"lines[2].split()" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 141, | |
"text": [ | |
"['@',\n", | |
" '0',\n", | |
" '-6095.12544083',\n", | |
" '0.0D+00',\n", | |
" '0.03686',\n", | |
" '0.00936',\n", | |
" '0.00000',\n", | |
" '0.00000',\n", | |
" '1391.5']" | |
] | |
} | |
], | |
"prompt_number": 141 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"This is almost exactly what we want. We just have to now pick the fields we want:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"for line in lines[2:]:\n", | |
" # do something with each line\n", | |
" words = line.split()\n", | |
" energy = words[2]\n", | |
" gmax = words[4]\n", | |
" time = words[8]\n", | |
" print energy,gmax,time" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"-6095.12544083 0.03686 1391.5\n", | |
"-6095.25762870 0.00732 10468.0\n", | |
"-6095.26325979 0.00233 11963.5\n", | |
"-6095.26428124 0.00109 13331.9\n", | |
"-6095.26463203 0.00057 14710.8\n", | |
"-6095.26477615 0.00043 20211.1\n", | |
"-6095.26482624 0.00015 21726.1\n", | |
"-6095.26483584 0.00021 24890.5\n", | |
"-6095.26484405 0.00005 26448.7\n", | |
"-6095.26484599 0.00003 27258.1\n", | |
"-6095.26484676 0.00003 28155.3\n", | |
"-6095.26484693 0.00002 28981.7\n", | |
"-6095.26484693 0.00002 28981.7\n" | |
] | |
} | |
], | |
"prompt_number": 142 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"This is fine for printing things out, but if we want to do something with the data, either make a calculation with it or pass it into a plotting, we need to convert the strings into regular floating point numbers. We can use the **float()** command for this. We also need to save it in some form. I'll do this as follows:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"data = []\n", | |
"for line in lines[2:]:\n", | |
" # do something with each line\n", | |
" words = line.split()\n", | |
" energy = float(words[2])\n", | |
" gmax = float(words[4])\n", | |
" time = float(words[8])\n", | |
" data.append((energy,gmax,time))\n", | |
"data = array(data)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 143 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We now have our data in a numpy array, so we can choose columns to print:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"plot(data[:,0])\n", | |
"xlabel('step')\n", | |
"ylabel('Energy (hartrees)')\n", | |
"title('Convergence of NWChem geometry optimization for Si cluster')" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 144, | |
"text": [ | |
"<matplotlib.text.Text at 0x110335650>" | |
] | |
}, | |
{ | |
"metadata": {}, | |
"output_type": "display_data", | |
"png": "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\n", | |
"text": [ | |
"<matplotlib.figure.Figure at 0x10fb5e850>" | |
] | |
} | |
], | |
"prompt_number": 144 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"I would write the code a little more succinctly if I were doing this for myself, but this is essentially a snippet I use repeatedly. \n", | |
"\n", | |
"Suppose our data was in CSV (comma separated values) format, a format that originally came from Microsoft Excel, and is increasingly used as a data interchange format in big data applications. How would we parse that?" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"csv = \"\"\"\\\n", | |
"-6095.12544083, 0.03686, 1391.5\n", | |
"-6095.25762870, 0.00732, 10468.0\n", | |
"-6095.26325979, 0.00233, 11963.5\n", | |
"-6095.26428124, 0.00109, 13331.9\n", | |
"-6095.26463203, 0.00057, 14710.8\n", | |
"-6095.26477615, 0.00043, 20211.1\n", | |
"-6095.26482624, 0.00015, 21726.1\n", | |
"-6095.26483584, 0.00021, 24890.5\n", | |
"-6095.26484405, 0.00005, 26448.7\n", | |
"-6095.26484599, 0.00003, 27258.1\n", | |
"-6095.26484676, 0.00003, 28155.3\n", | |
"-6095.26484693, 0.00002, 28981.7\n", | |
"-6095.26484693, 0.00002, 28981.7\"\"\"" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 145 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We can do much the same as before:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"data = []\n", | |
"for line in csv.splitlines():\n", | |
" words = line.split(',')\n", | |
" data.append(map(float,words))\n", | |
"data = array(data)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 146 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"There are two significant changes over what we did earlier. First, I'm passing the comma character ',' into the split function, so that it breaks to a new word every time it sees a comma. Next, to simplify things a big, I'm using the **map()** command to repeatedly apply a single function (**float()**) to a list, and to return the output as a list." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"help(map)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"Help on built-in function map in module __builtin__:\n", | |
"\n", | |
"map(...)\n", | |
" map(function, sequence[, sequence, ...]) -> list\n", | |
" \n", | |
" Return a list of the results of applying the function to the items of\n", | |
" the argument sequence(s). If more than one sequence is given, the\n", | |
" function is called with an argument list consisting of the corresponding\n", | |
" item of each sequence, substituting None for missing values when not all\n", | |
" sequences have the same length. If the function is None, return a list of\n", | |
" the items of the sequence (or a list of tuples if more than one sequence).\n", | |
"\n" | |
] | |
} | |
], | |
"prompt_number": 147 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Despite the differences, the resulting plot should be the same:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"plot(data[:,0])\n", | |
"xlabel('step')\n", | |
"ylabel('Energy (hartrees)')\n", | |
"title('Convergence of NWChem geometry optimization for Si cluster')" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 148, | |
"text": [ | |
"<matplotlib.text.Text at 0x10fcc7d50>" | |
] | |
}, | |
{ | |
"metadata": {}, | |
"output_type": "display_data", | |
"png": "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\n", | |
"text": [ | |
"<matplotlib.figure.Figure at 0x10ff34790>" | |
] | |
} | |
], | |
"prompt_number": 148 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Hartrees (what most quantum chemistry programs use by default) are really stupid units. We really want this in kcal/mol or eV or something we use. So let's quickly replot this in terms of eV above the minimum energy, which will give us a much more useful plot:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"energies = data[:,0]\n", | |
"minE = min(energies)\n", | |
"energies_eV = 27.211*(energies-minE)\n", | |
"plot(energies_eV)\n", | |
"xlabel('step')\n", | |
"ylabel('Energy (eV)')\n", | |
"title('Convergence of NWChem geometry optimization for Si cluster')" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 149, | |
"text": [ | |
"<matplotlib.text.Text at 0x110222350>" | |
] | |
}, | |
{ | |
"metadata": {}, | |
"output_type": "display_data", | |
"png": "iVBORw0KGgoAAAANSUhEUgAAAfMAAAGJCAYAAACettrsAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XuYXXV56PHvmxsEAoRwieRCRgVREAVtgULV8VIf5CjW\n1h7BegGvtUWtttViPSWtPVYfT+sdpF4QtXJRKaLGKhUGuVRA7gIqWJAkQAiEQEiAEPKeP9aasLLZ\nM7NnMnv2Xnt/P8+zn1l7Xd+1Zu/9rt9v/X5rRWYiSZLqa1qnA5AkSdvGZC5JUs2ZzCVJqjmTuSRJ\nNWcylySp5kzmkiTVnMlcXS0i5kfETyPiwYj4RKfjAYiIpRHx9U7HoYmJiL0jYl1ExASXXxcRA90U\n0xjrPiIibinXf/Rkr79hWxPaj4g4LiIubldc/cBkvg0i4vUR8fPyw3tnRCyLiCM6HVePeQdwT2bu\nnJl/0zgxIr4aEZsj4ncr4/aJiM3l8LERcVPDMuePMO6Dlfej/W+9OcMouu1kJyJuj4iXDL/PzDsy\nc6ec4E02ymVv76aYxvCPwGfK9Z+3rSuLiEUR8Z2IWB0RayPihoh4M7R9P1qJbXNEPK0T2+40k/kE\nRcT7gU8C/wTsCSwGPg+09cx3PCJiRqdjmARLgJvHmGcNxf+hmZ8Cz4yI3WDLMXkusH1E7F4Zdxhw\nUfl+pP/tq8p1TnrpqZ9EaQo3mXTf/2wqY9obuGnMuZqIiOlNRn8d+G253nnAG4FVE45u8k20xqXe\nv5eZ6WucL2AXYB3wx6PMsx3wKWBl+fokMKucNgisAN5P8SW4EziunHYocBcQlXW9BriuHJ4G/C1w\nK3AvcBawazltANgMvIXiyzZUzv8vwGrgf4ATynmmVfbly2UMK4CPVKYdB1wCfIIiYf4PcGQlrnnA\naeX+rQH+ozLtlcC1wP3ApcCBoxyrw4ErgbXAFcDvleO/CmwEHi2P90uaLHtauX93AS8sx+0DbK7M\ncyvwR+XwIcAF5XLVceuB6S3+b08qj/vpwIPAL4DnV6YvAL4D3FMes3dXpi0FvkXxg/ggcD2wL3Bi\n+Vm4A/iDUbb9POCactmzyzg+0spxB55VfibuL2N+VWXaV4GTgWXl/l8CzKf4DK+hOKE6aKx9BI4s\n/18by/VcU44fojg5uhTYAPw18POGfXs/cO4I+70AOA+4D7gFeFvDMf02cGZ5XK4CnlNO+zrweLnN\ndeV2B9j6OzBE8bm/tJznPGA34N+BByg+k0sq29sMPK2MaV3ltYHycwc8neJzdi/Fd+8bwC7jiGms\n/T2bET5/DcftN5VtPQjMbPFYfr3c97c0Wee64ePbZNpW+9Fk+mLgnPJzcy/w2cpvzcUjraP8H721\n8v2+iOL3YjVwRjn+p+VyD5Ux/kkL34nbgQ9QfA8fHinuOrw6HkAdXxQ/WI+N9o+nqNq6DNi9fF0K\n/GM5bbBcfilFAnkFRTIZ/rLfCryssq5vAR8oh99brndB+cX8AvDNctrwl+CrwGxge+DPgBvL+ecC\n/1V+uYd/NP4DOKWcfw/gcuAd5bTjKH6U30pxtvtnwMpKXD8AzqBIgDOAF5TjD6ZITL9bLvcm4DbK\nk5mG4zSv/JL9KcWJxzEUyWP4BOW04eM2wnE+jeKH+N2VH4PGZP4V4FPl8F8D/wC8rWHcf43jf7u0\n/OIfWe7fR4H/LqdNo0gmHy6PyVMpflBf3rDsH5T/+9MpkuGJ5fu3Af8zwnZnUZykvbuc9zUUifMf\nxzjuM8vXrRQngjOAF1P8uD+jXParFD+MB1OciP6kjOsN5bo+AlzQ4j6eBHytIfYhih/OZ5XLz6JI\nJs+szHMN8JoR9v2nwOfK5Z5LkQxeXDmmG4E/Ko/LX5WxTy+n30blRJDmyfzX5X7sTPF9+RXwksr/\n6CuV5TcDT2sS4zeAfy+Hnw68tDzuu1Mkn09W5h0rprH2t+nnb4Rj17itVo7l0eX77Zus73yKk73X\nAXs3TNtqPxqmTQeuozj5nk3xOTu88lszWjK/kPLEguI358TKd+Lwkf43jPKdKKffDlwNLAS2m4z8\n0KlXxwOo44si8dw1xjy3snUp9uXAbeXwIMWZcvXDugo4pBz+CPDlcngnijPNxeX7mxq+mHuVX75p\nlS/BQGX6BcDbK+9fOvxFoSh5PVL9wgLH8sSP9nHALZVpO5TL7llu93HKE5CGfT+FhgQM/JKy5Nww\n/o3AzxrGXQa8uRw+jUrJs8nyp1GcOA0nuiN5cjJ/M3B1Ofzd8hjs1zDu/4zjf7sU+HHl/f7AhnL4\nUOC3DfOfSJkMymV/VJn2KopSRFT+35uBnZts94XAioZxF/NEMh/xuAMvaNwv4JvASeXwV4FTK9NO\nAG6svD8QuH8c+/j1hukXAksbxp0M/FM5fADFSdzMJvu9GNgE7FgZ91HgtMr2LqtMC4qapiPK92Ml\nzgspk0P5/v8BP6i8fyVlDUP5/knJHPggRe1S04QA/OHw522smFrc36afvxG2vWVbLa57aIzP/1zg\nnylqBDZRnIT9TrNj27Dc71GcODSbdhytJ/PTgVOBhU3W05jMR/pODBc8bqOsFa37y2vmE3MfsHtE\njHb8FlAkl2F3lOO2rCMzN1febwDmlMNnAH8UEbMoShtXZebyctoA8B8RcX9E3E+R3DdRJOZhyyvD\nezW8X1EZXkJRcrirsr4vUJTQh909PJCZG8rBORQ/Cmsy84Em+74E+KvhdZbrXVTG0mgBxbGp+i1b\nH6sxZeZGipOgj/DkBmoXA8+JiLkUiei/M/NXwF7luCMoSivQ2v8Wtr5GuIHiGvw0in1f0LDvJ1Kc\nAA27pzL8MHBvlr8s5Xt44rNQtYDikkZV9X872nFf0DAvbH2csyGuR5rEORxTK/vYTOP2TwdeXw6/\nETgrMx9rstwCis/a+sq4OyhKU8O2fK7LY7mC8X2Gqv/Pxn1/hOb/DwAi4hXAe4A/zMxHy3HzI+LM\niFgREQ9QVFvv1mIsrezvSJ+/yVj3CkaRmWsz88TMfDbF7861wLktbHsxxUng5jHnHN0HKE7YroiI\nX0TE8aPMO9J3ovrZaPxc1pLJfGL+m6J68zWjzHMnReIdtnc5bkyZeRPFD+0rKH7svlmZfAdFiX/X\nymuHzLyruorK8F0UX6Jh1eHl5X7sVlnXLpl5YAthLgfmRcQuTabdAfzfhhjnZOZZTeZdSfGFq1rC\nk5PWaIYbvHyVotTwx9WJmfk/FMf+HcAdlZOS/wbeSfFD/bPKuLH+t40nC1XLKWpgqvu+c2a+soVl\nx3IXW//oQvG5Gjbacb8TWNzQ8Gy8x3nYWPs40o/1VvuemZcDGyPihRQ1QiO1gL+T4rNWTah7s3XS\n2fK5LpPaIp74vo33mLc8f0TsR/G5+5PMrB7Lj1LUXD07M3ehOFmp/t6Oto1W9neiWll3y/ufmfdR\nVJsviIhdx5h9ObD3CI3qqoZPNHaojHtKZZurMvMdmbmQ4vt78igt2Fv5LdqW72TXMJlPQFka/Xvg\n8xHx6ojYISJmRsQrIuLj5WxnAB+OiN3LVtN/z8g/Vs18E/hLiurRb1XGfwH4aETsDRARe4zRd/Rs\n4L0RsaAshX6Q8sNbngD8GPjXiNgpIqZFxNPLH9exjsFdwA8pvkhzy/0fXu6LwJ9FxCFlw+UdI+J/\nNfyADFsGPKPsQjYjIl4HPBP4fjl9rJapW6Zn5iaK67UfbDLfxRQNrH5aGXdJOe7K4RJVi//b0WK6\nAlgXER+IiNkRMT0inh0Rv9Pi/ozmMuDxiDihPFavprgWOGy04/4zihLcB8r9GaSoPj5zAnGNtY+r\ngIEmLdabbeNrFNdvN2bmZc02VtZKXQb8c0RsFxHPoWjk+Y3KbM+PiNeULZL/kqI0PXyCtoriGvZo\nYoThkReI2JniEs3fNYl9DkVSejAiFgKN3SpHjKnF/Z2QyVh3RHw8Ig4oP4M7Ae+iuBx3/xiLXk5x\nQvqx8nu1fUQc3iTG1RQnmW8sP1tvoXKsIuJPImJR+XYtxe/Z8Alk43Edz29RrZnMJygz/5UiEXyY\nokruDuDPKRqUQdFy9+cUrSSvL4er3afGOhs8g+Ja508yc01l/KcpWqL+OCIepChJHjLKer9IkbCv\np2i09APg8UpV15sorjffRHHN8ls8cRacTdZXff9GisZiv6T4Er0HIDOvAt5O8SO9hqLF7Jua7WS5\nb6+kaLR0L0VjtFdW9rlZDI3xVKefQVH6aFzmIorLB5dUxl1cjqsm+Fb+tyMel8x8vNyfgygaYa0G\n/o2iYdWoy47yfjiuxyguu7yVJxoNfp+izcSox71c9lUUtT2ry3nemJm/HiGubdnH4ZPP+yLi52Ps\n19cprpePlUyOpajpupOiNfTfZ+YFlfV+l6JB1hqK4/JHZZxQXN/9cFnN+v4RYmlp3xuGnwc8A/hk\nFPcjWFd+J6FoZPk8ihbh36No+V9dx1gxjbW/LX1mRjDedTeaTfFduJ+i4eNitu6SO9LndzPFZ3Af\niu/UcuB/j7Ddt1OcAN1L0Sbg0sq03wF+FhHrKP7v78kn+v0vBU4vj+trR/lO9ERpvGq40U37NlBU\nqfycouHOq5pM/wzFD8wGioYI17Q1oD5XXt87JTMHOh2Ltl1EXA6cnJmndzqWiYiI2RQnggdn5m8m\nuI6TgH0y842TGpxUI1NRMn8vRanvSWcNEXEUxZdwX4rrmadMQTx9pazKOqqsEltIUQ19Tqfj0sRE\nxAsj4inl//PNwLOB/+x0XNvgXcAVE03kpW67IYw05dqazMvrGkcBX6L5F+5oihatw41h5kbE/Cbz\naeKCouppDUV/yhsprgmrnvbjiRtgvA94bWZ20923WhYRt1P0mf+rbVxVK1XDUk9r9+3rPklx3WPn\nEaYv5MndphbRXbcGrLXMfJitr6mrxjLzixTtIGpvsi71ZOY/TMZ6pDprW8k8Il5J8YCMaxi9Gqxx\nmmfYkiSNQztL5ocDR5fXxbcHdo6Ir2VmtVXzSrbu97yIJv1eI8IEL0nqK5nZcnuQtpXMM/NDmbk4\nM59Kcb/tCxoSORRdrN4EEBGHAWtHuv432m3sfBWvk046qeMx1OXlsfI4eaw8Tt38Gq+pfORbcdPk\niHcCZOapmbmsbGl9K8UNFka7LZ8kSWpiSpJ5Zl5E+azozDy1YdoJUxGDJEm9yjvA9ZDBwcFOh1Ab\nHqvWeJxa57FqjcepPdp+B7jJEBFZhzglSZoMEUF2QwM4SZI0NUzmkiTVnMlckqSaM5lLklRzJnNJ\nkmrOZC5JUs2ZzCVJqjmTuSRJNWcylySp5kzmkiTVnMlckqSaM5lLklRzJnNJkmrOZC5JUs2ZzCVJ\nqrnaJPMNGzodgSRJ3ak2yfy3v+10BJIkdafaJPPbb+90BJIkdafaJHNL5pIkNVebZG7JXJKk5mqT\nzC2ZS5LUXG2SuSVzSZKaM5lLklRztUnma9bAI490OgpJkrpPbZL5okVwxx2djkKSpO5Tm2Q+MGBV\nuyRJzdQqmduiXZKkJ6tNMl+yxJK5JEnN1CaZW80uSVJztUnmS5ZYzS5JUjO1SeaWzCVJaq6tyTwi\nto+IyyPi2oj4RUQsbTLPYEQ8EBHXlK8PN1vXwoWwejVs3NjOiCVJqp8Z7Vx5Zj4SES/OzA0RMQO4\nJCJ+mJmXN8x6UWYePdq6ZsyAvfaC5cvh6U9vX8ySJNVN26vZM3NDOTgLmAlsbjJbtLIuq9olSXqy\ntifziJgWEdcCq4AfZ+aVDbMkcHhEXBcRyyJi/5HWZV9zSZKebCpK5psz8yBgEXBoRBzQMMvVwOLM\nfC7wWeDckdZlX3NJkp6srdfMqzLzgYi4EDgSuLEyfl1l+IcRcXJEzMvMNdXlly5dyrXXFsn8JS8Z\nZHBwcGoClySpzYaGhhgaGprw8pGZkxdN48ojdgc2ZebaiJgN/Aj4WGYuq8wzH7gnMzMiDgHOzsyB\nhvVkZnLBBfAP/wAXXdS2kCVJ6riIIDNbak8G7S+Z7wWcHhHTKar0z8rMZRHxToDMPBV4LfCuiNgE\nbACOGWllNoCTJOnJ2loynyzDJfONG2GnnWD9+qKrmiRJvWi8JfPa3AEOYNYs2HNPWLGi05FIktQ9\napXMwap2SZIa1TKZ29dckqQn1C6Z29dckqSt1S6ZW80uSdLWapnMrWaXJOkJtUvmVrNLkrS1WvUz\nB3j0Udh5Z9iwAaZP73BgkiS1QU/3MwfYbjvYbTe4885ORyJJUneoXTIHG8FJklRV22RuIzhJkgq1\nTOY2gpMk6Qm1TOZWs0uS9ITaJnOr2SVJKtQymVvNLknSE2rXzxzg4Ydh112LvubTank6IknSyHq+\nnznA7Nmwyy5w992djkSSpM6rZTIHG8FJkjSs1sncRnCSJNU4mdsITpKkQm2TudXskiQVap3MrWaX\nJKnGydxqdkmSCrXsZw7w0EOwxx5FX/NouSeeJEndry/6mQPMmQM77gj33NPpSCRJ6qzaJnOwEZwk\nSWAylySp9mqdzJcssUW7JEm1TuaWzCVJ6oFkbslcktTvap3M7WsuSVKN+5kDPPAALFhQ9Dm3r7kk\nqVf0TT9zKJ5pvt12cN99nY5EkqTOaVsyj4jtI+LyiLg2In4REUtHmO8zEXFLRFwXEQePdztWtUuS\n+l3bknlmPgK8ODMPAg4CjoyIQ6vzRMRRwD6ZuS/wDuCU8W7HFu2SpH7X1mr2zNxQDs4CZgKbG2Y5\nGji9nPdyYG5EzB/PNuxrLknqd21N5hExLSKuBVYBP87MKxtmWQgsr7xfASwazzYsmUuS+l27S+ab\ny2r2RcChEXFAk9kaW+uNq3m9fc0lSf1uxlRsJDMfiIgLgSOBGyuTVgKLK+8XleOeZOnSpVuGBwcH\nGRwcBGwAJ0mqv6GhIYaGhia8fNv6mUfE7sCmzFwbEbOBHwEfy8xllXmOAk7IzKMi4jDgU5l5WJN1\nNe1nDnD//UVCf+AB+5pLknrDePuZt7NkvhdwekRMp6jOPyszl0XEOwEy89Ty/VERcSuwHjh+vBuZ\nO7dI4mvXwq67Tmr8kiTVQq3vADfsOc+B00+Hg8fdS12SpO7TV3eAG2aLdklSP+uJZG5fc0lSP+uJ\nZG7JXJLUz0zmkiTVXE8kc6vZJUn9rCeSuSVzSVI/64lkvttu8NhjxY1jJEnqNz2RzCOsapck9a+e\nSOZgVbskqX/1VDK3ZC5J6kc9k8x9epokqV/1TDK3ml2S1K96JpnbAE6S1K96JplbMpck9aueSeZ7\n7gkbNsBDD3U6EkmSplbPJPMI2Htvq9olSf2nZ5I5WNUuSepPPZfMLZlLkvpNTyVz+5pLkvpRTyVz\nq9klSf2op5K5fc0lSf2op5K5JXNJUj+KzOx0DGOKiGwlzs2bYYcdYM2a4q8kSXUUEWRmtDp/T5XM\np02DxYvhjjs6HYkkSVOnp5I5WNUuSeo/PZnMbQQnSeonPZfM7WsuSeo3PZfMrWaXJPWbnkvm9jWX\nJPWbnkvmlswlSf2mp/qZAzz+eNHH/IEHYPvt2xyYJElt0Nf9zAGmT4eFC2H58k5HIknS1Oi5ZA5W\ntUuS+ktbk3lELI6ICyPixoj4RUS8p8k8gxHxQERcU74+vK3bta+5JKmfzGjz+h8D3peZ10bEHOCq\niDg/M29umO+izDx6sjZqX3NJUj9pa8k8M+/OzGvL4YeAm4EFTWZt+SJ/K6xmlyT1kym7Zh4RA8DB\nwOUNkxI4PCKui4hlEbH/tm7LanZJUj9pdzU7AGUV+7eB95Yl9KqrgcWZuSEiXgGcCzxjW7ZnNbsk\nqZ+0PZlHxEzgO8A3MvPcxumZua4y/MOIODki5mXmmup8S5cu3TI8ODjI4ODgiNtctAhWrYKNG2HW\nrG3fB0mS2mloaIihoaEJL9/Wm8ZERACnA/dl5vtGmGc+cE9mZkQcApydmQMN87R805hhS5bAhRfC\n0542sdglSeqU8d40pt0l8yOANwDXR8Q15bgPAXsDZOapwGuBd0XEJmADcMxkbHi4EZzJXJLU69qa\nzDPzEsZoZJeZnwc+P9nbtkW7JKlf9OQd4MCnp0mS+kfPJnNL5pKkftHTydySuSSpH/RsMrevuSSp\nX/Tc88yHbdwIc+bAhg0wY0pujSNJ0uTo++eZD5s1C/bcE1au7HQkkiS1V88mc7ARnCSpP5jMJUmq\nuZ5O5vY1lyT1g5aTeUTsGBHT2xnMZLNkLknqByMm84iYHhGvj4gfRMQ9wK+AuyPi5oj4RETsM3Vh\nTox9zSVJ/WC0kvkFwD7AicBembkoM/cAfh+4HPh4RLxxCmKcMPuaS5L6wYj9zCNiZmY+NurCLcwz\nGSbSzxzgkUdgl12KvubTa3WBQJLUzyazn/l3I+INETFnpBmmIpFvi+23h3nz4K67Oh2JJEntM1oy\n/zfglcBtEXF2RLwmImZNUVyTxkZwkqReN2Iyz8xzM/MYYAA4B3gzsDwiTouIl09RfNvMZC5J6nVj\ndk3LzPWZeWZm/iHwcuBg4Idtj2yS2NdcktTrxkzmEfGUiHhPRFwGnAv8J/C8tkc2SSyZS5J63Wj9\nzN8RERcAVwP7An8NPC0z/zYzr5uqALeVyVyS1OtGezjo7wH/DFyQmY9PUTyTzmp2SVKvG/N55hEx\nDfhT4KmZ+Y8RsTfwlMy8YioCLGOYUD9zKPqYz5tX/J3W03eilyT1inY8z/xkilL668v3D5XjamGH\nHYobx6xa1elIJElqj1aS+aGZ+efAwwCZuQaY2daoJpm3dZUk9bJWkvnG6tPSImIPYHP7Qpp8NoKT\nJPWyVpL5Z4H/APaMiI8Cl1I0jKsNG8FJknrZaK3ZAcjMb0TEVcBLy1Gvzsyb2xvW5BoYgBtu6HQU\nkiS1x4jJPCLmZOZDAGXyflICj4idMnNdG+ObFAMD8L3vdToKSZLaY6ynpv1LRLwwInYcHhkRT4+I\nt0bEj4Ej2x/itrOaXZLUy0Z7nnkAR1F0STsCmAdsAn4F/AD4UmbePSVBbkM/c4B162D+fFi/HqLl\nXnuSJHXGePuZj3nTmG6wrckcYPfd4aabYM89JykoSZLapB03jekJ9jWXJPWqvknm9jWXJPWqvknm\nNoKTJPWqVp5n/q8RccBEVh4RiyPiwoi4MSJ+ERHvGWG+z0TELRFxXUQcPJFtjcWSuSSpV7VSMr8Z\n+LeIuCIi/iwidhnH+h8D3peZBwCHAX8REc+qzhARRwH7ZOa+wDuAU8ax/paZzCVJvWrMZJ6ZX8zM\nI4A3AQPADRHxzYh4cQvL3p2Z15bDD1GcGCxomO1o4PRynsuBuRExf1x70QKr2SVJvaqla+blg1ae\nCTwLWA1cB7w/Is5qdUMRMQAcDFzeMGkhsLzyfgWwqNX1tmq4NXsNeuJJkjQuY96bPSI+CbwKuAD4\nv5l5RTnp4xHxq1Y2EhFzgG8D7x2+RWzjLA3vn5Ryly5dumV4cHCQwcHBVja9xdy5MHMm3Hdf0edc\nkqRuMTQ0xNDQ0ISXH/OmMRFxPHB2Zq5vMm1uZq4dY/mZwPeBH2bmp5pM/wIwlJlnlu9/CbwoM1dV\n5tnmm8YAHHQQfPnL8Pznb/OqJElqm3bcNOZ6YL+IeF7l9fSImNFCIg/gy8BNzRJ56TyK6/FExGHA\n2moin0w2gpMk9aIxq9mBzwPPp0jqAAcCNwK7RMS7MvNHoyx7BPAG4PqIuKYc9yFgb4DMPDUzl0XE\nURFxK7AeOH4C+9GSgQEbwUmSek8ryfxO4K2ZeSNAROwPfAT4AHAOMGIyz8xLaK3F/AktRbuNliyB\n226bii1JkjR1Wqlm3284kQNk5k3AMzPzNzRpqNbNrGaXJPWiVkrmN0bEKcCZFK3O/zdwU0RsR3FT\nmNqwr7kkqRe10pp9NvAXFNe/AS4FTgYeAXbMzHVtjZDJa82+Zg089amwdq3PNZckda9JfZ55RMwA\nzs/MMe/21k6TlcwzYZdditL5rrtOQmCSJLXBpHZNy8xNwOaImLvNkXWBCKvaJUm9p5Vr5usp7sd+\nfjkMkJnZ9Alo3W64EdxBB3U6EkmSJkcryfyc8jVczx3UrBV7lX3NJUm9ZsxknplfjYgdgL0z85dT\nEFNbDT9wRZKkXjFmP/OIOBq4BvjP8v3BEXFeuwNrF/uaS5J6TSs3jVkKHArcD5CZ1wBPa2NMbWUD\nOElSr2klmT/W5IEqm9sRzFSwZC5J6jWtJPMbI+JPgRkRsW9EfBa4rM1xtc3uu8Ojj8KDD3Y6EkmS\nJkcryfzdwAHAo8AZwIPAX7YzqHayr7kkqde00pp9PcVjSz/U/nCmxnBV+4EHdjoSSZK23ZjJPCL2\nA/4aGKjMn5n5kjbG1VZeN5ck9ZJWbhrzLeAU4EvA4+W42t40BqxmlyT1llaS+WOZeUrbI5lCAwNw\n5ZWdjkKSpMnRSgO470XEX0TEXhExb/jV9sjayJK5JKmXtPI889tpUq2emU9tU0zNYpiUR6AOu/vu\novHb6tWTtkpJkibNpD7PvFtMdjLPhB12gHvvhR13nLTVSpI0KSbteeYR8YHK8J80TPvoxMLrDhGw\n995WtUuSesNo18yPrQw39jF/RRtimVJ2T5Mk9YpWGsD1JJO5JKlX9G0yt0W7JKlXjNbP/DkRsa4c\nnl0ZBpjdxpimxMAAfPe7nY5CkqRtN2Iyz8zpUxnIVBsYsGQuSeoNfV3N7jVzSVIv6Mt+5gCbN8Ps\n2bB2bfFXkqRuMWn9zHvdtGmweDHccUenI5Ekadv0bTIHu6dJknqDyfz2TkchSdK26etkbl9zSVIv\naGsyj4ivRMSqiLhhhOmDEfFARFxTvj7czngaWTKXJPWC0W4aMxlOAz4LfG2UeS7KzKPbHEdTJnNJ\nUi9oa8k8My8G7h9jtpab3k82q9klSb2g09fMEzg8Iq6LiGURsf9UbnzBAli9Gh59dCq3KknS5Op0\nMr8aWJyZz6Wojj93Kjc+YwYsXAjLl0/lViVJmlztvmY+qsxcVxn+YUScHBHzMnNN47xLly7dMjw4\nOMjg4OCkxDB83XyffSZldZIkjdvQ0BBDQ0MTXr7tt3ONiAHge5l5YJNp84F7MjMj4hDg7MwcaDLf\npN/Oddiit0jnAAAPKklEQVTxx8MRR8Db3taW1UuSNG7jvZ1rW0vmEXEG8CJg94hYDpwEzATIzFOB\n1wLviohNwAbgmHbG04yN4CRJddfWZJ6Zx44x/fPA59sZw1gGBuAnP+lkBJIkbZtON4DrOPuaS5Lq\nru+TudXskqS669vnmQ977DHYcUdYvx5mzmzLJiRJGhefZz5OM2fCXnvBihWdjkSSpInp+2QORVW7\n180lSXVlMsdGcJKkejOZYyM4SVK9mcyxZC5JqjeTOSZzSVK9mcyxml2SVG99388ciueZ77QTbNhQ\nPBZVkqROsp/5BGy3Hey5J6xc2elIJEkaP5N5yap2SVJdmcxLNoKTJNWVybxkyVySVFcm85Ilc0lS\nXZnMSyZzSVJdmcxLVrNLkurKfualhx+GuXOLvubTp7d1U5Ikjcp+5hM0ezbMmwd33dXpSCRJGh+T\neYVV7ZKkOjKZV9gITpJURybzCkvmkqQ6MplXWDKXJNWRybzCZC5JqiOTeYXV7JKkOrKfecX69bDb\nbkVf82me5kiSOsR+5ttgxx1h551h1apORyJJUutM5g2sapck1Y3JvIGN4CRJdWMyb2AylyTVjcm8\ngdXskqS6MZk3sGQuSaqbtibziPhKRKyKiBtGmeczEXFLRFwXEQe3M55WWDKXJNVNu0vmpwFHjjQx\nIo4C9snMfYF3AKe0OZ4xLVlSlMxr0P1ekiSgzck8My8G7h9llqOB08t5LwfmRsT8dsY0lp13Lp5t\nvnp1J6OQJKl1nb5mvhBYXnm/AljUoVi2sKpdklQnnU7mAI23q+t4BbeN4CRJdTKjw9tfCSyuvF9U\njnuSpUuXbhkeHBxkcHCwbUGZzCVJU2loaIihoaEJL9/2B61ExADwvcw8sMm0o4ATMvOoiDgM+FRm\nHtZkvil50MqwT38abrkFPve5KdukJElbjPdBK20tmUfEGcCLgN0jYjlwEjATIDNPzcxlEXFURNwK\nrAeOb2c8rRoYgPPP73QUkiS1pq3JPDOPbWGeE9oZw0TYAE6SVCfd0ACu6wxfM7evuSSpDkzmTcyd\nC9Onw5o1nY5EkqSxmcxHYFW7JKkuTOYjsHuaJKkuTOYjMJlLkurCZD4Cq9klSXVhMh+BJXNJUl2Y\nzEcw/ChUSZK6ncl8BAMDVrNLkurBZD6CefPg8cdh7dpORyJJ0uhM5iOIsBGcJKkeTOajsBGcJKkO\nTOajMJlLkurAZD4Kq9klSXVgMh+FJXNJUh2YzEdhMpck1YHJfBRWs0uS6sBkPoo99oCHH4Z16zod\niSRJIzOZj8K+5pKkOjCZj8Hr5pKkbmcyH4PJXJLU7UzmY7CaXZLU7UzmY7BkLknqdibzMZjMJUnd\nzmQ+BqvZJUndzmQ+hvnz4cEHYf36TkciSVJzJvMxTJsGe+9t6VyS1L1M5i0YGDCZS5K6l8m8BTaC\nkyR1M5N5C2wEJ0nqZibzFlgylyR1M5N5C0zmkqRuZjJvgdXskqRu1vZkHhFHRsQvI+KWiPhgk+mD\nEfFARFxTvj7c7pjGa6+9YM2a4tnmkiR1mxntXHlETAc+B7wMWAlcGRHnZebNDbNelJlHtzOWbTF9\nOixeDHfcAfvt1+loJEnaWrtL5ocAt2bm7Zn5GHAm8Oom80Wb49hmVrVLkrpVu5P5QmB55f2KclxV\nAodHxHURsSwi9m9zTBNiIzhJUrdqazU7RaIey9XA4szcEBGvAM4FntHesMbPkrkkqVu1O5mvBBZX\n3i+mKJ1vkZnrKsM/jIiTI2JeZq6pzrd06dItw4ODgwwODrYj3hENDMCPfjSlm5Qk9YmhoSGGhoYm\nvHxktlJ4nuDKI2YAvwJeCtwJXAEcW20AFxHzgXsyMyPiEODszBxoWE+2M85W/PSncOKJcOmlHQ1D\nktQHIoLMbLk9WVtL5pm5KSJOAH4ETAe+nJk3R8Q7y+mnAq8F3hURm4ANwDHtjGmirGaXJHWrtpbM\nJ0s3lMw3bYIddoB162C77ToaiiSpx423ZO4d4Fo0YwYsXAjLl489ryRJU8lkPg5WtUuSupHJfBzs\nay5J6kYm83FYssRkLknqPibzcRgYsJpdktR9TObjYDW7JKkbmczHwQZwkqRuZD/zcdi4EebMgfXr\nYebMTkcjSepV9jNvo1mz4ClPgRUrxp5XkqSpYjIfJ6vaJUndxmQ+TjaCkyR1G5P5ONnXXJLUbUzm\n42Rfc0lStzGZj5PV7JKkbmMyHycbwEmSuo39zMfp0Udhp51gw4bisaiSJE02+5m32XbbwR57wJ13\ndjoSSZIKJvMJsKpdktRNTOYTYCM4SVI3MZlPgMlcktRNTOYT4I1jJEndxGQ+AYcdBt/5Drz85fCV\nr8D993c6IklSPzOZT8Bzn1u0Zn/72+EHPyiq3Y8+Gs44Ax56qNPRSZL6jf3MJ8GDD8K558KZZ8Kl\nl8KRR8KxxxZ/t9++09FJkupmvP3MTeaT7N574ZxzisR+7bVFif2YY+ClL4WZMzsdnSSpDkzmXeTO\nO+Fb3yoS+29+A3/8x0Vif8ELYJoXOCRJIzCZd6nbboOzzioS++rV8LrXFYn9d38XouV/lySpH5jM\na+Dmm4vEfsYZsGlTkdSPOQae/WwTuyTJZF4rmcV19TPPLF5z5jyR2Pfdt9PRSZI6xWReU5s3w89+\nViT1s8+GRYuKpP6618HixZ2OTpI0lUzmPeDxx2FoqEjs55wD++9fJPbXvhbmz+90dJKkdjOZ95iN\nG+H884vr69//PhxySJHYX/Ma2HXXTkcnSWoHk3kP27ABli0rSuznnw8velFxc5pXvaq43i5J6g1d\nlcwj4kjgU8B04EuZ+fEm83wGeAWwATguM69pMo/JvMGDD8J3v1sk9ksuKe429+pXw4IFMHfuE6+d\nd7ZPuyTVTdck84iYDvwKeBmwErgSODYzb67McxRwQmYeFRGHAp/OzMOarMtkPor77iuurX/960NM\nmzbI2rVsea1bBzvttHWCH8+rV08GhoaGGBwc7HQYXc/j1DqPVWs8Tq0ZbzKf0cZYDgFuzczbASLi\nTODVwM2VeY4GTgfIzMsjYm5EzM/MVW2Mq+fstlvx0JeVK4dYunRwq2mPP16U4qsJvvF1220jT3vo\nod48GfAHpTUep9Z5rFrjcWqPdibzhcDyyvsVwKEtzLMIMJlPkunTi4ZyE20sNxknAzNmwKxZxb3p\nu+Xv3XfDDTcUJxrTpxd/h1+jvR9tWoQ3/ZHUGe1M5q3Wizf+/Fmf3kW29WRg8+aiRf5jj43/byvz\nPPTQxNa9cmXxhLvNm594Pf74yO9bmZa5daIf74nC8MlA9QVjj2vnPLffDhddNPL/d6yTl9GmT3Ra\nty57yy1w5ZWjLz/VuvHk8te/hquu6nQUvaed18wPA5Zm5pHl+xOBzdVGcBHxBWAoM88s3/8SeFFj\nNXtEmOAlSX2lW66Z/xzYNyIGgDuB1wHHNsxzHnACcGaZ/Nc2u14+nh2SJKnftC2ZZ+amiDgB+BFF\n17QvZ+bNEfHOcvqpmbksIo6KiFuB9cDx7YpHkqReVYubxkiSpJF1YaehrUXEkRHxy4i4JSI+2Ol4\nulFELI6ICyPixoj4RUS8p9MxdbOImB4R10TE9zodSzcru4p+OyJujoibykthahAR7yu/dzdExDcj\nYrtOx9QtIuIrEbEqIm6ojJsXEedHxK8j4scRMbeTMXaDEY7TJ8rv3nURcU5E7DLaOro6mZc3nvkc\ncCSwP3BsRDyrs1F1pceA92XmAcBhwF94nEb1XuAm7Dkxlk8DyzLzWcBz2PoeEQIiYiHwbuD5mXkg\nxSXFYzobVVc5jeL3u+pvgfMz8xnAT8r3/a7ZcfoxcEBmPhf4NXDiaCvo6mRO5cYzmfkYMHzjGVVk\n5t2ZeW05/BDFj+6CzkbVnSJiEXAU8CWe3C1SpbIU8ILM/AoUbWAy84EOh9WtZgA7RMQMYAeKO14K\nyMyLgfsbRm+5WVj59w+nNKgu1Ow4Zeb5mbm5fHs5xT1YRtTtybzZTWUWdiiWWih7DxxM8c/Xk30S\n+Btg81gz9rmnAqsj4rSIuDoivhgRO3Q6qG6TmSuBfwHuoOi1szYz/6uzUXW96l0+VwE+2HlsbwGW\njTZDtydzq0HHISLmAN8G3luW0FUREa8E7ikf5mOpfHQzgOcBJ2fm8yh6m1gd2iAidqUoaQ5Q1IbN\niYg/7WhQNVI+dMPf+VFExN8BGzPzm6PN1+3JfCWwuPJ+MUXpXA0iYibwHeAbmXlup+PpUocDR0fE\nbcAZwEsi4msdjqlbrQBWZObwPc2+TZHctbWXAbdl5n2ZuQk4h+JzppGtioinAETEXsA9HY6na0XE\ncRSXBcc8Qez2ZL7lxjMRMYvixjPndTimrhMRAXwZuCkzP9XpeLpVZn4oMxdn5lMpGildkJlv6nRc\n3Sgz7waWR8QzylEvA27sYEjd6rfAYRExu/wevoyicaVGdh7w5nL4zYCFjybKR4j/DfDqzHxkrPm7\nOpmXZ7rDN565CTir+ghVbXEE8AbgxWWXq2vKD4JGZ/Xe6N4N/HtEXEfRmv2jHY6n62TmFRS1FlcD\n15ej/61zEXWXiDgDuAzYLyKWR8TxwMeAP4iIXwMvKd/3tSbH6S3AZ4E5wPnlb/rJo67Dm8ZIklRv\nXV0ylyRJYzOZS5JUcyZzSZJqzmQuSVLNmcwlSao5k7kkSTVnMpcEQET8ZUTM7nQcksbPfuaSAChv\nc/s7mXlfp2ORND6WzKU+FBE7RsQPIuLaiLghIv6e4kEhF0bET8p5Xh4Rl0XEVRFxdkTsWI6/PSI+\nHhHXR8TlEfH0Tu6LJJO51K+OBFZm5kGZeSDwKYpHeA5m5ksjYnfg74CXZubzgauA95fLJsWjPp8D\nfK5cVlIHmcyl/nQ9xf2xPxYRv5+ZDzZMPwzYH7gsIq4B3gTsXZl+Rvn3TOD32h6tpFHN6HQAkqZe\nZt4SEQcD/wv4p4i4oMls52fm61tZ3eRGJ2m8LJlLfah8jvQjmfnvwP8DDgYeBHYuZ7kcOGL4enh5\njX3fyipeV/l72dRELWkklsyl/nQg8ImI2AxsBN4FHA78Z0SsLK+bHwecERHblcv8HXBLObxr+WjU\nR4BjpzZ0SY3smiZpXMoubM/PzDWdjkVSwWp2SeNlCUDqMpbMJUmqOUvmkiTVnMlckqSaM5lLklRz\nJnNJkmrOZC5JUs2ZzCVJqrn/D7hLiufyJyO3AAAAAElFTkSuQmCC\n", | |
"text": [ | |
"<matplotlib.figure.Figure at 0x11033f950>" | |
] | |
} | |
], | |
"prompt_number": 149 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"This gives us the output in a form that we can think about: 4 eV is a fairly substantial energy change (chemical bonds are roughly this magnitude of energy), and most of the energy decrease was obtained in the first geometry iteration." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We mentioned earlier that we don't have to rely on **grep** to pull out the relevant lines for us. The **string** module has a lot of useful functions we can use for this. Among them is the **startswith** function. For example:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"lines = \"\"\"\\\n", | |
" ----------------------------------------\n", | |
" | WALL | 0.45 | 443.61 |\n", | |
" ----------------------------------------\n", | |
"\n", | |
"@ Step Energy Delta E Gmax Grms Xrms Xmax Walltime\n", | |
"@ ---- ---------------- -------- -------- -------- -------- -------- --------\n", | |
"@ 0 -6095.12544083 0.0D+00 0.03686 0.00936 0.00000 0.00000 1391.5\n", | |
" ok ok\n", | |
"\n", | |
"\n", | |
"\n", | |
" Z-matrix (autoz)\n", | |
" --------\n", | |
"\"\"\".splitlines()\n", | |
"\n", | |
"for line in lines:\n", | |
" if line.startswith('@'):\n", | |
" print line\n", | |
" " | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"@ Step Energy Delta E Gmax Grms Xrms Xmax Walltime\n", | |
"@ ---- ---------------- -------- -------- -------- -------- -------- --------\n", | |
"@ 0 -6095.12544083 0.0D+00 0.03686 0.00936 0.00000 0.00000 1391.5\n" | |
] | |
} | |
], | |
"prompt_number": 150 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"and we've successfully grabbed all of the lines that begin with the @ symbol." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"The real value in a language like Python is that it makes it easy to take additional steps to analyze data in this fashion, which means you are thinking more about your data, and are more likely to see important patterns." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## More Sophisticated String Formatting and Processing\n", | |
"Strings are a big deal in most modern languages, and hopefully the previous sections helped underscore how versatile Python's string processing techniques are. We will continue this topic in this chapter.\n", | |
"\n", | |
"We can print out lines in Python using the print command. " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"print \"I have 3 errands to run\"" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"I have 3 errands to run\n" | |
] | |
} | |
], | |
"prompt_number": 151 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"In IPython we don't even need the print command, since it will display the last expression not assigned to a variable." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"\"I have 3 errands to run\"" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 152, | |
"text": [ | |
"'I have 3 errands to run'" | |
] | |
} | |
], | |
"prompt_number": 152 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"**print** even converts some arguments to strings for us:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"a,b,c = 1,2,3\n", | |
"print \"The variables are \",1,2,3" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"The variables are 1 2 3\n" | |
] | |
} | |
], | |
"prompt_number": 153 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"As versatile as this is, you typically need more freedom over the data you print out. For example, what if we want to print a bunch of data to exactly 4 decimal places? We can do this using formatted strings.\n", | |
"\n", | |
"Formatted strings share a syntax with the C **printf** statement. We make a string that has some funny *format characters* in it, and then pass a bunch of variables into the string that fill out those characters in different ways.\n", | |
"\n", | |
"For example," | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"print \"Pi as a decimal = %d\" % pi\n", | |
"print \"Pi as a float = %f\" % pi\n", | |
"print \"Pi with 4 decimal places = %.4f\" % pi\n", | |
"print \"Pi with overall fixed length of 10 spaces, with 6 decimal places = %10.6f\" % pi\n", | |
"print \"Pi as in exponential format = %e\" % pi" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"Pi as a decimal = 3\n", | |
"Pi as a float = 3.141593\n", | |
"Pi with 4 decimal places = 3.1416\n", | |
"Pi with overall fixed length of 10 spaces, with 6 decimal places = 3.141593\n", | |
"Pi as in exponential format = 3.141593e+00\n" | |
] | |
} | |
], | |
"prompt_number": 154 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We use a percent sign in two different ways here. First, the format character itself starts with a percent sign. %d or %i are for integers, %f is for floats, %e is for numbers in exponential formats. All of the numbers can take number immediately after the percent that specifies the total spaces used to print the number. Formats with a decimal can take an additional number after a dot . to specify the number of decimal places to print.\n", | |
"\n", | |
"The other use of the percent sign is after the string, to pipe a set of variables in. You can pass in multiple variables (if your formatting string supports it) by putting a tuple after the percent. Thus," | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"print \"The variables specified earlier are %d, %d, and %d\" % (a,b,c)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"The variables specified earlier are 1, 2, and 3\n" | |
] | |
} | |
], | |
"prompt_number": 155 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"This is a simple formatting structure that will satisfy most of your string formatting needs. More information on different format symbols is available in the [string formatting part of the standard docs](http://docs.python.org/release/2.5.2/lib/typesseq-strings.html).\n", | |
"\n", | |
"It's worth noting that more complicated string formatting methods are in development, but I prefer this system due to its simplicity and its similarity to C formatting strings.\n", | |
"\n", | |
"Recall we discussed multiline strings. We can put format characters in these as well, and fill them with the percent sign as before." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"form_letter = \"\"\"\\\n", | |
"\n", | |
" %s\n", | |
"\n", | |
"Dear %s,\n", | |
"\n", | |
"We regret to inform you that your product did not\n", | |
"ship today due to %s.\n", | |
"\n", | |
"We hope to remedy this as soon as possible.\n", | |
"\n", | |
" From,\n", | |
" Your Supplier\n", | |
"\"\"\"\n", | |
"\n", | |
"print form_letter % (\"July 1, 2013\",\"Valued Customer Bob\",\"alien attack\")" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"\n", | |
" July 1, 2013\n", | |
"\n", | |
"Dear Valued Customer Bob,\n", | |
"\n", | |
"We regret to inform you that your product did not\n", | |
"ship today due to alien attack.\n", | |
"\n", | |
"We hope to remedy this as soon as possible.\n", | |
"\n", | |
" From,\n", | |
" Your Supplier\n", | |
"\n" | |
] | |
} | |
], | |
"prompt_number": 156 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"The problem with a long block of text like this is that it's often hard to keep track of what all of the variables are supposed to stand for. There's an alternate format where you can pass a dictionary into the formatted string, and give a little bit more information to the formatted string itself. This method looks like:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"form_letter = \"\"\"\\\n", | |
"\n", | |
" %(date)s\n", | |
"\n", | |
"Dear %(customer)s,\n", | |
"\n", | |
"We regret to inform you that your product did not\n", | |
"ship today due to %(lame_excuse)s.\n", | |
"\n", | |
"We hope to remedy this as soon as possible.\n", | |
"\n", | |
" From,\n", | |
" Your Supplier\n", | |
"\"\"\"\n", | |
"\n", | |
"print form_letter % {\"date\" : \"July 1, 2013\",\"customer\":\"Valued Customer Bob\",\"lame_excuse\":\"alien attack\"}" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"\n", | |
" July 1, 2013\n", | |
"\n", | |
"Dear Valued Customer Bob,\n", | |
"\n", | |
"We regret to inform you that your product did not\n", | |
"ship today due to alien attack.\n", | |
"\n", | |
"We hope to remedy this as soon as possible.\n", | |
"\n", | |
" From,\n", | |
" Your Supplier\n", | |
"\n" | |
] | |
} | |
], | |
"prompt_number": 157 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"By providing a little bit more information, you're less likely to make mistakes, like referring to your customer as \"alien attack\".\n", | |
"\n", | |
"As a scientist, you're less likely to be sending bulk mailings to a bunch of customers. But these are great methods for generating and submitting lots of similar runs, say scanning a bunch of different structures to find the optimal configuration for something.\n", | |
"\n", | |
"For example, you can use the following template for NWChem input files:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"nwchem_format = \"\"\"\n", | |
"start %(jobname)s\n", | |
"\n", | |
"title \"%(thetitle)s\"\n", | |
"charge %(charge)d\n", | |
"\n", | |
"geometry units angstroms print xyz autosym\n", | |
"%(geometry)s\n", | |
"end\n", | |
"\n", | |
"basis\n", | |
" * library 6-31G**\n", | |
"end\n", | |
"\n", | |
"dft\n", | |
" xc %(dft_functional)s\n", | |
" mult %(multiplicity)d\n", | |
"end\n", | |
"\n", | |
"task dft %(jobtype)s\n", | |
"\"\"\"" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 158 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"If you want to submit a sequence of runs to a computer somewhere, it's pretty easy to put together a little script, maybe even with some more string formatting in it:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"oxygen_xy_coords = [(0,0),(0,0.1),(0.1,0),(0.1,0.1)]\n", | |
"charge = 0\n", | |
"multiplicity = 1\n", | |
"dft_functional = \"b3lyp\"\n", | |
"jobtype = \"optimize\"\n", | |
"\n", | |
"geometry_template = \"\"\"\\\n", | |
" O %f %f 0.0\n", | |
" H 0.0 1.0 0.0\n", | |
" H 1.0 0.0 0.0\"\"\"\n", | |
"\n", | |
"for i,xy in enumerate(oxygen_xy_coords):\n", | |
" thetitle = \"Water run #%d\" % i\n", | |
" jobname = \"h2o-%d\" % i\n", | |
" geometry = geometry_template % xy\n", | |
" print \"---------\"\n", | |
" print nwchem_format % dict(thetitle=thetitle,charge=charge,jobname=jobname,jobtype=jobtype,\n", | |
" geometry=geometry,dft_functional=dft_functional,multiplicity=multiplicity)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"---------\n", | |
"\n", | |
"start h2o-0\n", | |
"\n", | |
"title \"Water run #0\"\n", | |
"charge 0\n", | |
"\n", | |
"geometry units angstroms print xyz autosym\n", | |
" O 0.000000 0.000000 0.0\n", | |
" H 0.0 1.0 0.0\n", | |
" H 1.0 0.0 0.0\n", | |
"end\n", | |
"\n", | |
"basis\n", | |
" * library 6-31G**\n", | |
"end\n", | |
"\n", | |
"dft\n", | |
" xc b3lyp\n", | |
" mult 1\n", | |
"end\n", | |
"\n", | |
"task dft optimize\n", | |
"\n", | |
"---------\n", | |
"\n", | |
"start h2o-1\n", | |
"\n", | |
"title \"Water run #1\"\n", | |
"charge 0\n", | |
"\n", | |
"geometry units angstroms print xyz autosym\n", | |
" O 0.000000 0.100000 0.0\n", | |
" H 0.0 1.0 0.0\n", | |
" H 1.0 0.0 0.0\n", | |
"end\n", | |
"\n", | |
"basis\n", | |
" * library 6-31G**\n", | |
"end\n", | |
"\n", | |
"dft\n", | |
" xc b3lyp\n", | |
" mult 1\n", | |
"end\n", | |
"\n", | |
"task dft optimize\n", | |
"\n", | |
"---------\n", | |
"\n", | |
"start h2o-2\n", | |
"\n", | |
"title \"Water run #2\"\n", | |
"charge 0\n", | |
"\n", | |
"geometry units angstroms print xyz autosym\n", | |
" O 0.100000 0.000000 0.0\n", | |
" H 0.0 1.0 0.0\n", | |
" H 1.0 0.0 0.0\n", | |
"end\n", | |
"\n", | |
"basis\n", | |
" * library 6-31G**\n", | |
"end\n", | |
"\n", | |
"dft\n", | |
" xc b3lyp\n", | |
" mult 1\n", | |
"end\n", | |
"\n", | |
"task dft optimize\n", | |
"\n", | |
"---------\n", | |
"\n", | |
"start h2o-3\n", | |
"\n", | |
"title \"Water run #3\"\n", | |
"charge 0\n", | |
"\n", | |
"geometry units angstroms print xyz autosym\n", | |
" O 0.100000 0.100000 0.0\n", | |
" H 0.0 1.0 0.0\n", | |
" H 1.0 0.0 0.0\n", | |
"end\n", | |
"\n", | |
"basis\n", | |
" * library 6-31G**\n", | |
"end\n", | |
"\n", | |
"dft\n", | |
" xc b3lyp\n", | |
" mult 1\n", | |
"end\n", | |
"\n", | |
"task dft optimize\n", | |
"\n" | |
] | |
} | |
], | |
"prompt_number": 159 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"This is a very bad geometry for a water molecule, and it would be silly to run so many geometry optimizations of structures that are guaranteed to converge to the same single geometry, but you get the idea of how you can run vast numbers of simulations with a technique like this.\n", | |
"\n", | |
"We used the **enumerate** function to loop over both the indices and the items of a sequence, which is valuable when you want a clean way of getting both. **enumerate** is roughly equivalent to:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def my_enumerate(seq):\n", | |
" l = []\n", | |
" for i in range(len(seq)):\n", | |
" l.append((i,seq[i]))\n", | |
" return l\n", | |
"my_enumerate(oxygen_xy_coords)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 160, | |
"text": [ | |
"[(0, (0, 0)), (1, (0, 0.1)), (2, (0.1, 0)), (3, (0.1, 0.1))]" | |
] | |
} | |
], | |
"prompt_number": 160 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Although enumerate uses **generators** (see below) so that it doesn't have to create a big list, which makes it faster for really long sequenes." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Optional arguments\n", | |
"You will recall that the **linspace** function can take either two arguments (for the starting and ending points):" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"linspace(0,1)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 161, | |
"text": [ | |
"array([ 0. , 0.02040816, 0.04081633, 0.06122449, 0.08163265,\n", | |
" 0.10204082, 0.12244898, 0.14285714, 0.16326531, 0.18367347,\n", | |
" 0.20408163, 0.2244898 , 0.24489796, 0.26530612, 0.28571429,\n", | |
" 0.30612245, 0.32653061, 0.34693878, 0.36734694, 0.3877551 ,\n", | |
" 0.40816327, 0.42857143, 0.44897959, 0.46938776, 0.48979592,\n", | |
" 0.51020408, 0.53061224, 0.55102041, 0.57142857, 0.59183673,\n", | |
" 0.6122449 , 0.63265306, 0.65306122, 0.67346939, 0.69387755,\n", | |
" 0.71428571, 0.73469388, 0.75510204, 0.7755102 , 0.79591837,\n", | |
" 0.81632653, 0.83673469, 0.85714286, 0.87755102, 0.89795918,\n", | |
" 0.91836735, 0.93877551, 0.95918367, 0.97959184, 1. ])" | |
] | |
} | |
], | |
"prompt_number": 161 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"or it can take three arguments, for the starting point, the ending point, and the number of points:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"linspace(0,1,5)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 162, | |
"text": [ | |
"array([ 0. , 0.25, 0.5 , 0.75, 1. ])" | |
] | |
} | |
], | |
"prompt_number": 162 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"You can also pass in keywords to exclude the endpoint:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"linspace(0,1,5,endpoint=False)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 163, | |
"text": [ | |
"array([ 0. , 0.2, 0.4, 0.6, 0.8])" | |
] | |
} | |
], | |
"prompt_number": 163 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Right now, we only know how to specify functions that have a fixed number of arguments. We'll learn how to do the more general cases here.\n", | |
"\n", | |
"If we're defining a simple version of linspace, we would start with:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def my_linspace(start,end):\n", | |
" npoints = 50\n", | |
" v = []\n", | |
" d = (end-start)/float(npoints-1)\n", | |
" for i in range(npoints):\n", | |
" v.append(start + i*d)\n", | |
" return v\n", | |
"my_linspace(0,1)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 164, | |
"text": [ | |
"[0.0,\n", | |
" 0.02040816326530612,\n", | |
" 0.04081632653061224,\n", | |
" 0.061224489795918366,\n", | |
" 0.08163265306122448,\n", | |
" 0.1020408163265306,\n", | |
" 0.12244897959183673,\n", | |
" 0.14285714285714285,\n", | |
" 0.16326530612244897,\n", | |
" 0.18367346938775508,\n", | |
" 0.2040816326530612,\n", | |
" 0.22448979591836732,\n", | |
" 0.24489795918367346,\n", | |
" 0.26530612244897955,\n", | |
" 0.2857142857142857,\n", | |
" 0.3061224489795918,\n", | |
" 0.32653061224489793,\n", | |
" 0.3469387755102041,\n", | |
" 0.36734693877551017,\n", | |
" 0.3877551020408163,\n", | |
" 0.4081632653061224,\n", | |
" 0.42857142857142855,\n", | |
" 0.44897959183673464,\n", | |
" 0.4693877551020408,\n", | |
" 0.4897959183673469,\n", | |
" 0.5102040816326531,\n", | |
" 0.5306122448979591,\n", | |
" 0.5510204081632653,\n", | |
" 0.5714285714285714,\n", | |
" 0.5918367346938775,\n", | |
" 0.6122448979591836,\n", | |
" 0.6326530612244897,\n", | |
" 0.6530612244897959,\n", | |
" 0.673469387755102,\n", | |
" 0.6938775510204082,\n", | |
" 0.7142857142857142,\n", | |
" 0.7346938775510203,\n", | |
" 0.7551020408163265,\n", | |
" 0.7755102040816326,\n", | |
" 0.7959183673469387,\n", | |
" 0.8163265306122448,\n", | |
" 0.836734693877551,\n", | |
" 0.8571428571428571,\n", | |
" 0.8775510204081632,\n", | |
" 0.8979591836734693,\n", | |
" 0.9183673469387754,\n", | |
" 0.9387755102040816,\n", | |
" 0.9591836734693877,\n", | |
" 0.9795918367346939,\n", | |
" 0.9999999999999999]" | |
] | |
} | |
], | |
"prompt_number": 164 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We can add an optional argument by specifying a default value in the argument list:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def my_linspace(start,end,npoints = 50):\n", | |
" v = []\n", | |
" d = (end-start)/float(npoints-1)\n", | |
" for i in range(npoints):\n", | |
" v.append(start + i*d)\n", | |
" return v" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 165 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"This gives exactly the same result if we don't specify anything:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"my_linspace(0,1)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 166, | |
"text": [ | |
"[0.0,\n", | |
" 0.02040816326530612,\n", | |
" 0.04081632653061224,\n", | |
" 0.061224489795918366,\n", | |
" 0.08163265306122448,\n", | |
" 0.1020408163265306,\n", | |
" 0.12244897959183673,\n", | |
" 0.14285714285714285,\n", | |
" 0.16326530612244897,\n", | |
" 0.18367346938775508,\n", | |
" 0.2040816326530612,\n", | |
" 0.22448979591836732,\n", | |
" 0.24489795918367346,\n", | |
" 0.26530612244897955,\n", | |
" 0.2857142857142857,\n", | |
" 0.3061224489795918,\n", | |
" 0.32653061224489793,\n", | |
" 0.3469387755102041,\n", | |
" 0.36734693877551017,\n", | |
" 0.3877551020408163,\n", | |
" 0.4081632653061224,\n", | |
" 0.42857142857142855,\n", | |
" 0.44897959183673464,\n", | |
" 0.4693877551020408,\n", | |
" 0.4897959183673469,\n", | |
" 0.5102040816326531,\n", | |
" 0.5306122448979591,\n", | |
" 0.5510204081632653,\n", | |
" 0.5714285714285714,\n", | |
" 0.5918367346938775,\n", | |
" 0.6122448979591836,\n", | |
" 0.6326530612244897,\n", | |
" 0.6530612244897959,\n", | |
" 0.673469387755102,\n", | |
" 0.6938775510204082,\n", | |
" 0.7142857142857142,\n", | |
" 0.7346938775510203,\n", | |
" 0.7551020408163265,\n", | |
" 0.7755102040816326,\n", | |
" 0.7959183673469387,\n", | |
" 0.8163265306122448,\n", | |
" 0.836734693877551,\n", | |
" 0.8571428571428571,\n", | |
" 0.8775510204081632,\n", | |
" 0.8979591836734693,\n", | |
" 0.9183673469387754,\n", | |
" 0.9387755102040816,\n", | |
" 0.9591836734693877,\n", | |
" 0.9795918367346939,\n", | |
" 0.9999999999999999]" | |
] | |
} | |
], | |
"prompt_number": 166 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"But also let's us override the default value with a third argument:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"my_linspace(0,1,5)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 167, | |
"text": [ | |
"[0.0, 0.25, 0.5, 0.75, 1.0]" | |
] | |
} | |
], | |
"prompt_number": 167 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We can add arbitrary keyword arguments to the function definition by putting a keyword argument \\*\\*kwargs handle in:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def my_linspace(start,end,npoints=50,**kwargs):\n", | |
" endpoint = kwargs.get('endpoint',True)\n", | |
" v = []\n", | |
" if endpoint:\n", | |
" d = (end-start)/float(npoints-1)\n", | |
" else:\n", | |
" d = (end-start)/float(npoints)\n", | |
" for i in range(npoints):\n", | |
" v.append(start + i*d)\n", | |
" return v\n", | |
"my_linspace(0,1,5,endpoint=False)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 168, | |
"text": [ | |
"[0.0, 0.2, 0.4, 0.6000000000000001, 0.8]" | |
] | |
} | |
], | |
"prompt_number": 168 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"What the keyword argument construction does is to take any additional keyword arguments (i.e. arguments specified by name, like \"endpoint=False\"), and stick them into a dictionary called \"kwargs\" (you can call it anything you like, but it has to be preceded by two stars). You can then grab items out of the dictionary using the **get** command, which also lets you specify a default value. I realize it takes a little getting used to, but it is a common construction in Python code, and you should be able to recognize it.\n", | |
"\n", | |
"There's an analogous \\*args that dumps any additional arguments into a list called \"args\". Think about the **range** function: it can take one (the endpoint), two (starting and ending points), or three (starting, ending, and step) arguments. How would we define this?" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def my_range(*args):\n", | |
" start = 0\n", | |
" step = 1\n", | |
" if len(args) == 1:\n", | |
" end = args[0]\n", | |
" elif len(args) == 2:\n", | |
" start,end = args\n", | |
" elif len(args) == 3:\n", | |
" start,end,step = args\n", | |
" else:\n", | |
" raise Exception(\"Unable to parse arguments\")\n", | |
" v = []\n", | |
" value = start\n", | |
" while True:\n", | |
" v.append(value)\n", | |
" value += step\n", | |
" if value > end: break\n", | |
" return v" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 169 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Note that we have defined a few new things you haven't seen before: a **break** statement, that allows us to exit a for loop if some conditions are met, and an exception statement, that causes the interpreter to exit with an error message. For example:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"my_range()" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"ename": "Exception", | |
"evalue": "Unable to parse arguments", | |
"output_type": "pyerr", | |
"traceback": [ | |
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mException\u001b[0m Traceback (most recent call last)", | |
"\u001b[0;32m<ipython-input-170-0e8004dab150>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mmy_range\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", | |
"\u001b[0;32m<ipython-input-169-c34e09da2551>\u001b[0m in \u001b[0;36mmy_range\u001b[0;34m(*args)\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0mstart\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mend\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mstep\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 10\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 11\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mException\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Unable to parse arguments\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 12\u001b[0m \u001b[0mv\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[0mvalue\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mstart\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", | |
"\u001b[0;31mException\u001b[0m: Unable to parse arguments" | |
] | |
} | |
], | |
"prompt_number": 170 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## List Comprehensions and Generators\n", | |
"List comprehensions are a streamlined way to make lists. They look something like a list definition, with some logic thrown in. For example:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"evens1 = [2*i for i in range(10)]\n", | |
"print evens1" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"You can also put some boolean testing into the construct:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"odds = [i for i in range(20) if i%2==1]\n", | |
"odds" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Here i%2 is the remainder when i is divided by 2, so that i%2==1 is true if the number is odd. Even though this is a relative new addition to the language, it is now fairly common since it's so convenient." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"**iterators** are a way of making virtual sequence objects. Consider if we had the nested loop structure:\n", | |
"\n", | |
" for i in range(1000000):\n", | |
" for j in range(1000000):\n", | |
"\n", | |
"Inside the main loop, we make a list of 1,000,000 integers, just to loop over them one at a time. We don't need any of the additional things that a lists gives us, like slicing or random access, we just need to go through the numbers one at a time. And we're making 1,000,000 of them. \n", | |
"\n", | |
"**iterators** are a way around this. For example, the **xrange** function is the iterator version of range. This simply makes a counter that is looped through in sequence, so that the analogous loop structure would look like:\n", | |
"\n", | |
" for i in xrange(1000000):\n", | |
" for j in xrange(1000000):\n", | |
"\n", | |
"Even though we've only added two characters, we've dramatically sped up the code, because we're not making 1,000,000 big lists.\n", | |
"\n", | |
"We can define our own iterators using the **yield** statement:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def evens_below(n):\n", | |
" for i in xrange(n):\n", | |
" if i%2 == 0:\n", | |
" yield i\n", | |
" return\n", | |
"\n", | |
"for i in evens_below(9):\n", | |
" print i" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"0\n", | |
"2\n", | |
"4\n", | |
"6\n", | |
"8\n" | |
] | |
} | |
], | |
"prompt_number": 171 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We can always turn an iterator into a list using the **list** command:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"list(evens_below(9))" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 172, | |
"text": [ | |
"[0, 2, 4, 6, 8]" | |
] | |
} | |
], | |
"prompt_number": 172 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"There's a special syntax called a **generator expression** that looks a lot like a list comprehension:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"evens_gen = (i for i in xrange(9) if i%2==0)\n", | |
"for i in evens_gen:\n", | |
" print i" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"0\n", | |
"2\n", | |
"4\n", | |
"6\n", | |
"8\n" | |
] | |
} | |
], | |
"prompt_number": 173 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Factory Functions\n", | |
"A factory function is a function that returns a function. They have the fancy name *lexical closure*, which makes you sound really intelligent in front of your CS friends. But, despite the arcane names, factory functions can play a very practical role.\n", | |
"\n", | |
"Suppose you want the Gaussian function centered at 0.5, with height 99 and width 1.0. You could write a general function." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def gauss(x,A,a,x0):\n", | |
" return A*exp(-a*(x-x0)**2)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 174 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"But what if you need a function with only one argument, like f(x) rather than f(x,y,z,...)? You can do this with Factory Functions:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def gauss_maker(A,a,x0):\n", | |
" def f(x):\n", | |
" return A*exp(-a*(x-x0)**2)\n", | |
" return f" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 175 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"x = linspace(0,1)\n", | |
"g = gauss_maker(99.0,1.0,0.5)\n", | |
"plot(x,g(x))" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 176, | |
"text": [ | |
"[<matplotlib.lines.Line2D at 0x110726990>]" | |
] | |
}, | |
{ | |
"metadata": {}, | |
"output_type": "display_data", | |
"png": "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\nkqlmTT/PaOjQ0EkSl7OddMeO/hCNG24InURERJLts88gLw8WLYKyZUOnUSddLAsXwrvvQs+eoZOI\niEgq1KswBxLJAAAOZklEQVQHxx0HI0aETpKYnOyke/b0s/7uvDNoDBERSaHp0/3E4K++gt12C5sl\n3k4654r0d9/B4Yf7brpKlWAxREQkDU46CS68EC66KGwOFekY3XijP/EqW6bni4jIjr39tt8LY948\nKBHwAq+uScdgxQoYNQquvz50EhERSYeTToJy5fwZDZkop4r0o49C+/ZQo0boJCIikg5mcOut/uCN\nCCwsKracGe5euxZq1fK7jB16aNpfXkREAikshMMO8+umTzopTAYNd+/CiBHQsqUKtIhIrilRAm65\nBe69N3SS4suJTnrDBn8I+CuvQKNGaX1pERGJgM114OWX/fHE6aZOeieeecafiqICLSKSm0qX9jtM\nDhgQOknxZH0nXVAA9evDsGFw4olpe1kREYmYtWuhdm14/33fuKWTOukdePVVqFgRWrUKnUREREIq\nVw6uuQbuuy90kthldSftHDRuDP36+aVXIiKS21au9NemZ870p2Wlizrp7Xj7bVi3Ds48M3QSERGJ\ngkqV4NJLYeDA0Elik9WddFT2bBURkejYfIbDF1/A3nun5zXVSW/j3//2/wd07hw6iYiIRMm++8I5\n5/gJxVGXtZ30BRdAkybap1tERP5owQI44QRYtAjKlk3966mT3sqiRf56dI8eoZOIiEgU1a0Lxx4L\no0eHTrJzWdlJ9+oF5ctn3qJ1ERFJnylT/Jylzz+HkiVT+1rqpIssX+53GOvdO3QSERGJsubNoWpV\nv2V0VGVdkR42DM4+G6pXD51ERESi7qab4P77o3uMZVYNd69bBwceCPn5UK9eSl5CRESySEGBP8by\n8cf9RLJU0XA3fgJA06Yq0CIiEpuSJf3BGw88EDrJ9mVNJ11Q4M+KfvJJaNEi6U8vIiJZav16qFXL\nrwqqXz81r5HznfSrr8Kf/uQnAoiIiMRq9939wRsPPhg6yR9lRSftnF/v1revnzQmIiJSHCtW+IM3\n5s6F/fZL/vPndCc9ebI/2UQHaYiISDwqV/ZnPTz0UOgkv5cVnfQZZ/gC3bNnUp9WRERyyOLFcPTR\n8J//QMWKyX3unO2k58+HGTP8X0AiIiLxOuAAaNPGL8eKiozvpC+5BOrUgX79kvaUIiKSo2bNgtNP\n92dAlC6dvOeNt5PO6CL97bfQoAF8+aW/niAiIpKoU0/1xxxffHHynjMnh7sfegi6dVOBFhGR5Lnp\nJr+5SWFh6CQJFGkzu87M5pnZXDMbY2ZlzKyymU0ysy/MbKKZ7ZXMsFv79VcYORKuuy5VryAiIrno\n5JP9UPdbb4VOEmeRNrP9gF5AI+dcA6AkcAHQF5jknDsEeKfo3ynx+OPQurXfq1tERCRZzLZ006El\nMtxdCihrZqWAssB3wJnA5iO0RwPtE4u3fRs2wJAh/k0UERFJtg4d4OuvYfr0sDniKtLOuW+BgcAS\nfHFe5ZybBFRzzi0rutsyoFpSUm7jxRf9Pt0NG6bi2UVEJNeVKgXXXguDB4fNEe9wdyV813wgsC9Q\n3sy6bn2foincSZ867hwMHAjXX5/sZxYREdmie3eYOBGWLAmXoVScjzsZWOSc+xnAzF4GmgE/mNk+\nzrkfzKw68OP2Hty/f///fZyXl0deXl7ML/z++/7c6LZt40wuIiISgwoV/DKshx8u/uEb+fn55Ofn\nJ5whrnXSZtYEGAU0BtYDTwLTgQOAn51z95lZX2Av51zfbR6b0Drpdu38TVuAiohIqm3eKnTRIl+0\n45X2zUzMrD/QEdgEfAJcBuwJvADUBL4GOjjnVm3zuLiL9OefQ8uW/mL+HnvE9RQiIiLFcsEF0LRp\nYkt+c2LHsSuugGrV4M47kxxKRERkB6ZP97O9v/zSTyiLR9bvOLZ8OTz/PFx1VegkIiKSS5o0gRo1\n4OWX0//aGVOkhw+Hc8/1nbSIiEg63XCDX1mU5sHnzBjuXr8eatWCt9+G+vVTFExERGQHCgr8/hyj\nR0Pz5sV/fFYPd48ZA0cdpQItIiJhlCwJffrAoEHpfd3Id9LO+eMoBw+GU05JYTAREZGdWLsWDjgA\npk2DOnWK99is7aQnToQSJfypJCIiIqGUKwc9evhjktMl8p1069bQqVNyD98WERGJx3ffweGHw1df\nQaVKsT8uKzvpefNg7lxfpEVERELbd1844wx/XHI6RLqTvvRSP+7/l7+kOJSIiEiMZs3yhfo//4HS\npWN7TNZ10j/8AK+84ncZExERiYqjjvLLsV54IfWvFdkiPXSoH+auUiV0EhERkd+7/nq/HCvVg9GR\nHO7+7Tc48ED48EM45JD05BIREYlVYaHfu2P4cIjltOWsGu5+6ilo1kwFWkREoqlECX8q1sCBqX2d\nyHXShYVQrx488YQ/llJERCSK1q3zo74ffOCvUe9M1nTS48f7BePHHx86iYiIyI7tsQdcfjk8/HDq\nXiNynfSpp0K3bv4mIiISZd9/769N72pzk6zopOfP9xuYdOgQOomIiMiuVa/u10yPGJGa549UJ92z\npz9Y+7bb0hpJREQkbv/+N5x9tt/cpFSp7d8n4zvp5cvhxRf9+L6IiEimaNTITyB75ZXkP3dkivQT\nT/i/RKpWDZ1ERESkePr0gSFDkv+8kRju3rgRatWCf/4TjjwyrXFEREQSVlDgz5p48UVo3PiPX8/o\n4e6xY/3GJSrQIiKSiUqWhF69kn/WdPBO2jlo2hT69YMzz0xrFBERkaRZtQpq1/arlPbd9/dfy9hO\neupUWLECTj89dBIREZH47bUXdOkCw4Yl7zmDd9IdO0Lz5tC7d1pjiIiIJN3Chb6mLV7sdyTbLCM7\n6W++gUmT4OKLQ6YQERFJjoMP9pdwn3kmOc8XtEgPHQoXXQQVKoRMISIikjybl2MlY6A6WJFeuxZG\njvSz4URERLLFiSeCGbzzTuLPFaxIP/00tGjhZ8KJiIhkC7PkbW4SZOJYQYGjfn147DE44YS0vryI\niEjKbT5revJkvw9IRk0cmzgRdt8dWrYM8eoiIiKptcce0KMHPPJIYs8TpJNu3drRqZOfNCYiIpKN\nvvsODj/cn45VqVJ8nXSQIl2tmmPxYihTJq0vLSIiklZdu0LDhnDjjfEV6R2cfJlaV1yhAi0iItmv\nTx8477z4Hx+kk/7+e8c++6T1ZUVERIJo0QKmTMmg4e50v6aIiEgoS5bAAQeoSIuIiERSRi3BEhER\nkV1TkRYREYkoFWkREZGIUpEWERGJKBVpERGRiFKRFhERiSgVaRERkYhSkRYREYkoFWkREZGIUpEW\nERGJKBVpERGRiFKRFhERiSgVaRERkYhSkRYREYkoFWkREZGIUpEWERGJKBVpERGRiFKRFhERiSgV\naRERkYhSkRYREYkoFWkREZGIKhXPg8zsUOC5rT5VG7gdqARcBvxU9PlbnXPjE0ooIiKSo+LqpJ1z\nnzvnGjrnGgKNgN+AlwEHDNr8NRXocPLz80NHyHp6j1NP73F66H2OrmQMd58MfOmc+wawopsEph+6\n1NN7nHp6j9ND73N0JaNIXwA8W/SxA3qZ2WwzG2lmeyXh+UVERHJSQkXazEoD7YAXiz41HKgFHAV8\nDwxMKJ2IiEgOM+dc/A82Owu40jnXZjtfOxB4wznXYJvPx/+CIiIiGco5V+zLwXHN7t5KJ7YMdWNm\n1Z1z3xf982xg7rYPiCekiIhILoq7kzazcsBioJZzbnXR557CD3U7YBFwuXNuWZKyioiI5JSEhrtF\nREQkdVK245iZtTGzBWa20Mxu2cF9Hi76+mwza5iqLNlsV++zmXUpen/nmNkUMzsiRM5MFsv3ctH9\nGpvZJjM7J535skGMvy/yzGymmc0zs/w0R8x4MfyuqGhmb5jZrKL3+OIAMTOamY0ys2Vm9odLvVvd\np3h1zzmX9BtQEvgSOBDYDZgF1NvmPqcB44o+bgpMTUWWbL7F+D43AyoWfdxG73Py3+Ot7vcu8CZw\nbujcmXSL8ft4L2A+sH/Rv/cOnTuTbjG+x38GBmx+f4GfgVKhs2fSDTgeaAjM3cHXi133UtVJN8Fv\ncPK1c24jfgvRs7a5z5nAaADn3DRgLzOrlqI82WqX77Nz7iPn3C9F/5wG7J/mjJkulu9lgF7AWLZs\niSuxi+U97gy85JxbCuCcW57mjJkulve4EKhQ9HEF4Gfn3KY0Zsx4zrnJwMqd3KXYdS9VRXo/4Jut\n/r206HO7uo8KSPHE8j5vrTswLqWJss8u32Mz2w//C2940ac00aN4Yvk+PhiobGbvmdkMM+uWtnTZ\nIZb3+FHgMDP7DpgNXJumbLmk2HUv0SVYOxLrL6ltl2Ppl1vxxPx+mVkr4FKgeeriZKVY3uMhQF/n\nnDMzbY1bfLG8x7sBRwMnAWWBj8xsqnNuYUqTZY9Y3uM2wCfOuVZmVgeYZGZHuqLVO5I0xap7qSrS\n3wI1tvp3DfxfDDu7z/5Fn5PYxfI+UzRZ7AmgjXNuZ0Mx8kexvMeNgOd8fWZvoK2ZbXTOvZ6eiBkv\nlvf4G2C5c24dsM7MPgCOBFSkYxPLe3wxMADAOfeVmS0CDgVmpCNgjih23UvVcPcM4GAzO7Bo69CO\nwLa/sF4HLgQws2OBVU5rqotrl++zmdXEn1DW1Tn3ZYCMmW6X77FzrrZzrpZzrhb+uvSVKtDFEsvv\ni9eAFmZW0szK4ifdfJrmnJkslvd4Cf7AJIqukx4K/CetKbNfseteSjpp59wmM7sGmICfVTjSOfeZ\nmV1e9PX/c86NM7PTzOxLYC1wSSqyZLNY3me2nPM9vKjT2+icaxIqc6aJ8T2WBMT4+2KBmY0H5uAn\nOD3hnFORjlGM38d/BZ40szn4IdmbnXMrgoXOQGb2LHACsLeZfQPcgb9UE3fd02YmIiIiEZWyzUxE\nREQkMSrSIiIiEaUiLSIiElEq0iIiIhGlIi0iIhJRKtIiIiIRpSItIiISUSrSIiIiEfX/qnWaS3/K\n7YEAAAAASUVORK5CYII=\n", | |
"text": [ | |
"<matplotlib.figure.Figure at 0x1102221d0>" | |
] | |
} | |
], | |
"prompt_number": 176 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Everything in Python is an object, including functions. This means that functions can be returned by other functions. (They can also be passed into other functions, which is also useful, but a topic for another discussion.) In the **gauss_maker** example, the *g* function that is output \"remembers\" the A, a, x0 values it was constructed with, since they're all stored in the local memory space (this is what the *lexical closure* really refers to) of that function.\n", | |
"\n", | |
"Factories are one of the more important of the [Software Design Patterns](http://en.wikipedia.org/wiki/Software_design_pattern), which are a set of guidelines to follow to make high-quality, portable, readable, stable software. It's beyond the scope of the current work to go more into either factories or design patterns, but I thought I would mention them for people interested in software design." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Serialization: Save it for later\n", | |
"*Serialization* refers to the process of outputting data (and occasionally functions) to a database or a regular file, for the purpose of using it later on. In the very early days of programming languages, this was normally done in regular text files. Python is excellent at text processing, and you probably already know enough to get started with this.\n", | |
"\n", | |
"When accessing large amounts of data became important, people developed database software based around the Structured Query Language (SQL) standard. I'm not going to cover SQL here, but, if you're interested, I recommend using the [sqlite3](http://docs.python.org/2/library/sqlite3.html) module in the Python standard library.\n", | |
"\n", | |
"As data interchange became important, the eXtensible Markup Language (XML) has emerged. XML makes data formats that are easy to write parsers for, greatly simplifying the ambiguity that sometimes arises in the process. Again, I'm not going to cover XML here, but if you're interested in learning more, look into [Element Trees](http://docs.python.org/2/library/xml.etree.elementtree.html), now part of the Python standard library.\n", | |
"\n", | |
"Python has a very general serialization format called **pickle** that can turn any Python object, even a function or a class, into a representation that can be written to a file and read in later. But, again, I'm not going to talk about this, since I rarely use it myself. Again, [the standard library documentation for pickle](http://docs.python.org/2/library/pickle.html#module-cPickle) is the place to go.\n", | |
"\n", | |
"What I am going to talk about is a relatively recent format call [JavaScript Object Notation](http://json.org/) (JSON) that has become very popular over the past few years. [There's a module in the standard library](http://docs.python.org/2/library/json.html) for encoding and decoding JSON formats. The reason I like JSON so much is that it looks almost like Python, so that, unlike the other options, you can look at your data and edit it, use it in another program, etc.\n", | |
"\n", | |
"Here's a little example:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"# Data in a json format:\n", | |
"json_data = \"\"\"\\\n", | |
"{\n", | |
" \"a\": [1,2,3],\n", | |
" \"b\": [4,5,6],\n", | |
" \"greeting\" : \"Hello\"\n", | |
"}\"\"\"\n", | |
"import json\n", | |
"json.loads(json_data)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 177, | |
"text": [ | |
"{u'a': [1, 2, 3], u'b': [4, 5, 6], u'greeting': u'Hello'}" | |
] | |
} | |
], | |
"prompt_number": 177 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Ignore the little u's before the strings, these just mean the strings are in UNICODE. Your data sits in something that looks like a Python dictionary, and in a single line of code, you can load it into a Python dictionary for use later.\n", | |
"\n", | |
"In the same way, you can, with a single line of code, put a bunch of variables into a dictionary, and then output to a file using json:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"json.dumps({\"a\":[1,2,3],\"b\":[9,10,11],\"greeting\":\"Hola\"})" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 178, | |
"text": [ | |
"'{\"a\": [1, 2, 3], \"b\": [9, 10, 11], \"greeting\": \"Hola\"}'" | |
] | |
} | |
], | |
"prompt_number": 178 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Functional programming\n", | |
"Functional programming is a very broad subject. The idea is to have a series of functions, each of which generates a new data structure from an input, without changing the input structure at all. By not modifying the input structure (something that is called not having *side effects*), many guarantees can be made about how independent the processes are, which can help parallelization and guarantees of program accuracy. There is a [Python Functional Programming HOWTO](http://docs.python.org/2/howto/functional.html) in the standard docs that goes into more details on functional programming. I just wanted to touch on a few of the most important ideas here.\n", | |
"\n", | |
"There is an **operator** module that has function versions of most of the Python operators. For example:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"from operator import add, mul\n", | |
"add(1,2)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 179, | |
"text": [ | |
"3" | |
] | |
} | |
], | |
"prompt_number": 179 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"mul(3,4)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 180, | |
"text": [ | |
"12" | |
] | |
} | |
], | |
"prompt_number": 180 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"These are useful building blocks for functional programming." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"The **lambda** operator allows us to build *anonymous functions*, which are simply functions that aren't defined by a normal **def** statement with a name. For example, a function that doubles the input is:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def doubler(x): return 2*x\n", | |
"doubler(17)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 181, | |
"text": [ | |
"34" | |
] | |
} | |
], | |
"prompt_number": 181 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We could also write this as:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"lambda x: 2*x" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 182, | |
"text": [ | |
"<function __main__.<lambda>>" | |
] | |
} | |
], | |
"prompt_number": 182 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"And assign it to a function separately:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"another_doubler = lambda x: 2*x\n", | |
"another_doubler(19)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 183, | |
"text": [ | |
"38" | |
] | |
} | |
], | |
"prompt_number": 183 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"**lambda** is particularly convenient (as we'll see below) in passing simple functions as arguments to other functions." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"**map** is a way to repeatedly apply a function to a list:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"map(float,'1 2 3 4 5'.split())" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 184, | |
"text": [ | |
"[1.0, 2.0, 3.0, 4.0, 5.0]" | |
] | |
} | |
], | |
"prompt_number": 184 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"**reduce** is a way to repeatedly apply a function to the first two items of the list. There already is a **sum** function in Python that is a reduction:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"sum([1,2,3,4,5])" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 185, | |
"text": [ | |
"15" | |
] | |
} | |
], | |
"prompt_number": 185 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We can use **reduce** to define an analogous **prod** function:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def prod(l): return reduce(mul,l)\n", | |
"prod([1,2,3,4,5])" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 186, | |
"text": [ | |
"120" | |
] | |
} | |
], | |
"prompt_number": 186 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Object Oriented Programming" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We've seen a lot of examples of **objects** in Python. We create a string object with quote marks:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"mystring = \"Hi there\"" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 187 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"and we have a bunch of methods we can use on the object:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"mystring.split()" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 188, | |
"text": [ | |
"['Hi', 'there']" | |
] | |
} | |
], | |
"prompt_number": 188 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"mystring.startswith('Hi')" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 189, | |
"text": [ | |
"True" | |
] | |
} | |
], | |
"prompt_number": 189 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"len(mystring)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 190, | |
"text": [ | |
"8" | |
] | |
} | |
], | |
"prompt_number": 190 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Object oriented programming simply gives you the tools to define objects and methods for yourself. It's useful anytime you want to keep some data (like the characters in the string) tightly coupled to the functions that act on the data (length, split, startswith, etc.).\n", | |
"\n", | |
"As an example, we're going to bundle the functions we did to make the 1d harmonic oscillator eigenfunctions with arbitrary potentials, so we can pass in a function defining that potential, some additional specifications, and get out something that can plot the orbitals, as well as do other things with them, if desired." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"class Schrod1d:\n", | |
" \"\"\"\\\n", | |
" Schrod1d: Solver for the one-dimensional Schrodinger equation.\n", | |
" \"\"\"\n", | |
" def __init__(self,V,start=0,end=1,npts=50,**kwargs):\n", | |
" m = kwargs.get('m',1.0)\n", | |
" self.x = linspace(start,end,npts)\n", | |
" self.Vx = V(self.x)\n", | |
" self.H = (-0.5/m)*self.laplacian() + diag(self.Vx)\n", | |
" return\n", | |
" \n", | |
" def plot(self,*args,**kwargs):\n", | |
" titlestring = kwargs.get('titlestring',\"Eigenfunctions of the 1d Potential\")\n", | |
" xstring = kwargs.get('xstring',\"Displacement (bohr)\")\n", | |
" ystring = kwargs.get('ystring',\"Energy (hartree)\")\n", | |
" if not args:\n", | |
" args = [3]\n", | |
" x = self.x\n", | |
" E,U = eigh(self.H)\n", | |
" h = x[1]-x[0]\n", | |
"\n", | |
" # Plot the Potential\n", | |
" plot(x,self.Vx,color='k')\n", | |
"\n", | |
" for i in range(*args):\n", | |
" # For each of the first few solutions, plot the energy level:\n", | |
" axhline(y=E[i],color='k',ls=\":\")\n", | |
" # as well as the eigenfunction, displaced by the energy level so they don't\n", | |
" # all pile up on each other:\n", | |
" plot(x,U[:,i]/sqrt(h)+E[i])\n", | |
" title(titlestring)\n", | |
" xlabel(xstring)\n", | |
" ylabel(ystring) \n", | |
" return\n", | |
" \n", | |
" def laplacian(self):\n", | |
" x = self.x\n", | |
" h = x[1]-x[0] # assume uniformly spaced points\n", | |
" n = len(x)\n", | |
" M = -2*identity(n,'d')\n", | |
" for i in range(1,n):\n", | |
" M[i,i-1] = M[i-1,i] = 1\n", | |
" return M/h**2" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 191 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"The **__init__()** function specifies what operations go on when the object is created. The **self** argument is the object itself, and we don't pass it in. The only required argument is the function that defines the QM potential. We can also specify additional arguments that define the numerical grid that we're going to use for the calculation.\n", | |
"\n", | |
"For example, to do an infinite square well potential, we have a function that is 0 everywhere. We don't have to specify the barriers, since we'll only define the potential in the well, which means that it can't be defined anywhere else." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"square_well = Schrod1d(lambda x: 0*x,m=10)\n", | |
"square_well.plot(4,titlestring=\"Square Well Potential\")" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "display_data", | |
"png": "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\nYII=\n", | |
"text": [ | |
"<matplotlib.figure.Figure at 0x1106d0bd0>" | |
] | |
} | |
], | |
"prompt_number": 192 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We can similarly redefine the Harmonic Oscillator potential." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"ho = Schrod1d(lambda x: x**2,start=-3,end=3)\n", | |
"ho.plot(6,titlestring=\"Harmonic Oscillator\")" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "display_data", | |
"png": "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\ndrys1np2774Vk6mI7OznfKb5SK//nsLCBxDCj/79l7bfXlLpOhMmTOD666/nhhtuOKH19OjE3ZFz\n7Ndvqal5j7q6FYSHDyY+/v+Ijr6c4cPPYcmSJYwfr6p/ASyWGoqLH6a+/jP69p3rlQnGlxkMmygo\nuA+Hw0x29gK02rM8HRJ2eytFRTOorf2EnJwXiY292NMh+RQpJbW1H1BYOJ3IyJPJzHzKa8dqb2nZ\nRlHRg7S2bqdv3zkkJFyjft/dYNOmTVx55ZUUFBSccIfoXpO4O3I4zDQ0fEVNzfvU139GS0sya9bY\nmTv3R4KC4rooUu/ncFipqHiBPXvmkJBwPRkZjxIQoEaX6wpSSmpq3qeoaDqRkSPJynrqiP0xupJe\n/z25uTcRFTWW7OznVCn7BNjtbZSXP8fevfNJTLyOPn0eITAw2tNhAc7L+YqLH6Wh4QvS0x8kJeUO\nn6va92WXXnopEydO5O677z7hdfXKxN2R3W6itnYlr79+M6NHC7TaUa67sPyJoKB4N0bq3Rob15Cf\nfy/BwclkZz9HePhAT4fUK9jtJsrKnqW09FmSkm6hT5+Hu+VkSUo79fVfUF7+PK2t28nJWUJs7CVd\nvt3ewmKpoaRkJrW1H9Gnz8MkJ9/hseugrdZ69ux5gqqqV0lJuZO0tGnqhLybbd26lYsvvpjCwkJC\nQkJOeH29PnHv88orr/DRR+/wxht3U1v7IfX1XxAZeUqHJN7z7iYmpUSvX0tZ2bO0tu4gK+tZYmP/\nqNr6PcBsrnQ1T3xO376zSUq6tUtubmG1NlBZuZSKihcIDIwhJWUycXGT8Pc/8YOJcrDW1h0UFk7D\nZCokK2s+MTGXdtvvy243Ula2iNLSp4mPv5I+fR4lODipW7at7O/yyy9n3Lhx3HvvvW5Zn0rcLhaL\nhZycHN555x1OP/107HYTDQ1fUlu7jIaGz4mIGE5s7J+JibnomAd78TZ2u4mamncoK1uElDZSU+8h\nIeH6Xnl3K2/T3PwLBQVTMRp3ER19PtHR56PTTTzhJpzm5l8pL3+eurqPiIm5hJSUu9FoRrkpauVo\n6uu/pLBwGoGBOuLjryEm5iJCQtLdvh2brYXGxtXU1S2nvn4VWu14MjPnEhaW4/ZtKZ3z22+/ceGF\nF1JYWEhoqHuOsSpxd/Dyyy/z8ccf8+WXX+73ut3e1uHH8DmBgTHExFxETMzFaDSn+8yoWG1tZVRU\n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\nKV4/fpwMi4XJERE8GBoqHc/cSJ7VyrsnTv |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment