Skip to content

Instantly share code, notes, and snippets.

@jbwhit
Created June 9, 2013 08:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jbwhit/5742830 to your computer and use it in GitHub Desktop.
Save jbwhit/5742830 to your computer and use it in GitHub Desktop.
Part 3
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": "Extras"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"ipython notebook\n",
"================\n",
"\n",
"The Future of Science -- EXTRAS\n",
"---------------------\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A few links\n",
"-------------\n",
"\n",
"- enthought (canopy): https://www.enthought.com/products/epd/\n",
"- mayavi: http://docs.enthought.com/mayavi/mayavi/\n",
"- astro python links: http://www.astro.washington.edu/users/rowen/AstroPy.html"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Cool idea 1: \"Duck typing\"\n",
"---------------------------\n",
"\n",
"If it looks like a duck, quacks like a duck, etc... assume it's a duck.\n"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import numpy as np\n",
"import pylab as pl"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 51
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# you can, but don't have to declare the type \n",
"dave = 5 \n",
"print dave, type(dave)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"5 <type 'int'>\n"
]
}
],
"prompt_number": 16
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# dynamically updated -- good/bad\n",
"dave = 5.\n",
"print dave, type(dave)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"5.0 <type 'float'>\n"
]
}
],
"prompt_number": 17
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"dave = \"David Lagattuta\"\n",
"print dave, type(dave)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"David Lagattuta <type 'str'>\n"
]
}
],
"prompt_number": 18
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# a few string examples\n",
"print \"split example:\", dave.split()\n",
"print \"join example:\", '__'.join(dave.split())"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"split example: ['David', 'Lagattuta']\n",
"join example: David__Lagattuta\n"
]
}
],
"prompt_number": 19
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Bracket-types tell you about the \"thing\" it's storing\n",
"dave = [2.3, 4.5, 6.9]\n",
"print dave, type(dave)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[2.3, 4.5, 6.9] <type 'list'>\n"
]
}
],
"prompt_number": 20
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"dave = [2.3, 4.5, 6.9, \"hey there\", 4]\n",
"print dave, type(dave)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[2.3, 4.5, 6.9, 'hey there', 4] <type 'list'>\n"
]
}
],
"prompt_number": 21
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"dave = [2.3, 4.5, 6.9, \"hey there\", [2.1, 7.8], ]\n",
"print dave, type(dave)"
],
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Cool Idea 2: \n",
"--------------\n",
"\n",
"It largely does \"what you would hope it would do.\""
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"eight_int = 8\n",
"five_int = 5\n",
"print \"8/5 =\", eight_int / five_int # Integer division"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"8/5 = 1\n"
]
}
],
"prompt_number": 22
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"five_float = 5.0\n",
"print \"8/5.0 =\", eight_int / five_float # changes everything"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"8/5.0 = 1.6\n"
]
}
],
"prompt_number": 23
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"blank_list = [] # how to create a blank list\n",
"\n",
"#add list comprehensions\n",
"dave = [x**2 for x in xrange(5)]"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 24
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print dave, type(dave)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[0, 1, 4, 9, 16] <type 'list'>\n"
]
}
],
"prompt_number": 25
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from math import pi\n",
"\n",
"print [str(round(pi, i)) for i in xrange(2, 9)]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"['3.14', '3.142', '3.1416', '3.14159', '3.141593', '3.1415927', '3.14159265']\n"
]
}
],
"prompt_number": 26
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Unnecessarily complicated example to show off.\n",
"print [(i, str(round(pi, i)), round(pi, i)) for i in xrange(2, 9)]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[(2, '3.14', 3.14), (3, '3.142', 3.142), (4, '3.1416', 3.1416), (5, '3.14159', 3.14159), (6, '3.141593', 3.141593), (7, '3.1415927', 3.1415927), (8, '3.14159265', 3.14159265)]\n"
]
}
],
"prompt_number": 28
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Tuples and broadcasting\n",
"------------------------"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"tuple_example = ('Jonathan', 'Whitmore', 30, 'AR_building_rocks@wow.com')\n",
"print tuple_example\n",
"print type(tuple_example)\n",
"first_name, last_name, age, email = tuple_example\n",
"\n",
"print last_name, first_name\n",
"print age\n",
"print email"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"('Jonathan', 'Whitmore', 30, 'AR_building_rocks@wow.com')\n",
"<type 'tuple'>\n",
"Whitmore Jonathan\n",
"30\n",
"AR_building_rocks@wow.com\n"
]
}
],
"prompt_number": 32
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"list_comp_example = [i**2 for i in xrange(10)]\n",
"print list_comp_example"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]\n"
]
}
],
"prompt_number": 33
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print sum([i**2 for i in xrange(10)])"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"285\n"
]
}
],
"prompt_number": 34
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Generator version!\n",
"print sum(i**2 for i in xrange(10))\n",
"\n",
"# TODO numpy"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"285\n"
]
}
],
"prompt_number": 35
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Splat!\n",
"--------"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# http://stackoverflow.com/questions/3394835/args-and-kwargs\n",
"def print_everything(*args):\n",
" for count, thing in enumerate(args):\n",
" print '{0}. {1}'.format(count, thing)\n",
"print_everything('apple', 'banana', 'cabbage')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"0. apple\n",
"1. banana\n",
"2. cabbage\n"
]
}
],
"prompt_number": 36
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Similarly, **kwargs allows you to handle named arguments that you have not defined in advance:\n",
"\n",
"def table_things(title_string, **kwargs):\n",
" print title_string\n",
" print \"-\" * len(title_string)\n",
" for name, value in kwargs.items():\n",
" print '{0} = {1}'.format(name, value)\n",
" \n",
"table_things(\"Classifying stuff\", apple = 'fruit', cabbage = 'vegetable')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Classifying stuff\n",
"-----------------\n",
"cabbage = vegetable\n",
"apple = fruit\n"
]
}
],
"prompt_number": 37
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"dave = \"Hi there people! \"\n",
"print dave.startswith(\"hi \")\n",
"print dave.splitlines()\n",
"print dave.strip()\n",
"jw = dave.split()\n",
"[x for x in jw if x.startswith('p')]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"False\n",
"['Hi there people! ']\n",
"Hi there people!\n"
]
},
{
"output_type": "pyout",
"prompt_number": 38,
"text": [
"['people!']"
]
}
],
"prompt_number": 38
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# You can import modules/subpackages as whatever name you want to call them.\n",
"from scipy import ndimage as dave_sucks"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 39
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Numpy extras\n",
"--------------"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print numpy.arange(12)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[ 0 1 2 3 4 5 6 7 8 9 10 11]\n"
]
}
],
"prompt_number": 41
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print numpy.arange(12) ** 2"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[ 0 1 4 9 16 25 36 49 64 81 100 121]\n"
]
}
],
"prompt_number": 40
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print type(np.arange(12))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"<type 'numpy.ndarray'>\n"
]
}
],
"prompt_number": 42
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# python\n",
"x = range(10000)\n",
"%timeit [item + 1 for item in x]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"1000 loops, best of 3: 654 us per loop\n"
]
}
],
"prompt_number": 43
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# numpy\n",
"x = np.arange(10000)\n",
"%timeit x + 1"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"100000 loops, best of 3: 11.2 us per loop\n"
]
}
],
"prompt_number": 44
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print \"x -> \", x # notice the smart printing\n",
"print \"x[:] -> \", x[:]\n",
"print \"x[0] -> \", x[0] # first element \n",
"print \"x[0:5] -> \", x[0:5] # first 5 elements\n",
"print \"x[-1] -> \", x[-1] # last element"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"x -> [ 0 1 2 ..., 9997 9998 9999]\n",
"x[:] -> [ 0 1 2 ..., 9997 9998 9999]\n",
"x[0] -> 0\n",
"x[0:5] -> [0 1 2 3 4]\n",
"x[-1] -> 9999\n"
]
}
],
"prompt_number": 45
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# A bit more complicated slicing\n",
"print x[-5:] # last five elements\n",
"print x[-5:-2] # \n",
"print x[-5:-1] # last 4 elements (not final value)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[9995 9996 9997 9998 9999]\n",
"[9995 9996 9997]\n",
"[9995 9996 9997 9998]\n"
]
}
],
"prompt_number": 46
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# create evenly spaced arrays\n",
"print np.arange(5, 50, step=3, )\n",
"print np.linspace(5, 50, num=3, endpoint=True, )\n",
"print np.linspace(5, 50, num=3, endpoint=False, )"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[ 5 8 11 14 17 20 23 26 29 32 35 38 41 44 47]\n",
"[ 5. 27.5 50. ]\n",
"[ 5. 20. 35.]\n"
]
}
],
"prompt_number": 47
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"np.array([[x, x**2, x/2.0] for x in range(10)]) + 5"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 48,
"text": [
"array([[ 5. , 5. , 5. ],\n",
" [ 6. , 6. , 5.5],\n",
" [ 7. , 9. , 6. ],\n",
" [ 8. , 14. , 6.5],\n",
" [ 9. , 21. , 7. ],\n",
" [ 10. , 30. , 7.5],\n",
" [ 11. , 41. , 8. ],\n",
" [ 12. , 54. , 8.5],\n",
" [ 13. , 69. , 9. ],\n",
" [ 14. , 86. , 9.5]])"
]
}
],
"prompt_number": 48
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"input_data = np.random.random(50) * 2 * np.pi\n",
"response_data = np.sin(input_data)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 49
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"pl.plot(input_data, response_data)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 52,
"text": [
"[<matplotlib.lines.Line2D at 0x111f733d0>]"
]
},
{
"output_type": "display_data",
"png": "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\n5IP8aLi/cgYAAAAASUVORK5CYII=\n"
}
],
"prompt_number": 52
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"pl.scatter(input_data, response_data)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 53,
"text": [
"<matplotlib.collections.PathCollection at 0x111f9e990>"
]
},
{
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD9CAYAAACyYrxEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XtcVHXi//HXDHfwknftIoapgIJgKV7SRfNCS+pmWmFq\nppn6LbXMba2frdrFylbLLC9bW7mrpZZZXnJNtwZNRS3JzFsmXvMKKiIDMsOc3x+amysoAsMZhvfz\n8ZjHA86c4by1fPvxcz7zGYthGAYiIuK1rGYHEBER91LRi4h4ORW9iIiXU9GLiHg5Fb2IiJdT0YuI\neLkSFf2gQYOoU6cOUVFRBT5vs9moWrUqsbGxxMbG8tJLL5XkciIiUgy+JXnxI488wogRIxgwYECh\n5/zhD39gyZIlJbmMiIiUQIlG9O3bt6datWpXPUfvxxIRMZdb5+gtFgvr168nJiaG0aNHs3fvXnde\nTkREClCiqZtradGiBYcOHcLPz485c+YwatQoli1bVuC5FovFnVFERLzWtWZO3Dqir1y5MsHBwfj5\n+TF48GA2b97M+fPnCz3fMAyPf4wfP970DN6QUTmV09Mf5SVnUbi16I8fP34pyNKlS4mOjiYgIMCd\nlxQRkf9RoqmbpKQkkpOTSU9P55ZbbmHixIk4HA4Ahg4dyqeffsrMmTPx9fUlOjqaKVOmlEpoEREp\nuhIV/ccff3zV5x9//HEef/zxklzC48THx5sd4ZrKQ0ZQztKmnKWrvOQsCotR1EkeN7NYLEWebxIR\nkQuK0p3aAkFExMup6EVEvJyKXkTEy6noRUS8nIpeRMTLqehFRLycil5ExMup6EVEvJyKXkTEy6no\nRUS8nIpeRMTLqehFRLycil5ExMup6EVEvJyKXkTEy6noRUS8nIpeRMTLqehFRLycil5ExMup6EVE\nvJyKXkTEy6noRUS8nIpeRMTLqehFRLycil5ExMup6EVEvJyKXkTEy5Wo6AcNGkSdOnWIiooq9Jxn\nn32WsLAwbr/9dnbt2lWSy4mISDGUqOgfeeQR/v3vfxf6/KZNm1i7di3fffcdY8aMYcyYMSW5nIiI\nFEOJir59+/ZUq1at0Oc3btxI7969qV69OklJSezcubMklxM3S09P59ChQ7hcrut+7eHDh7n77t40\naBBNz559OXHihBsSikhxuHWOftOmTURGRl76vlatWuzdu9edl5RicLlcDB78ODfd1JAmTVoSG3sn\n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\n"
}
],
"prompt_number": 53
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"index_order = input_data.argsort()\n",
"index_order"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 54,
"text": [
"array([ 5, 10, 17, 15, 23, 11, 25, 45, 14, 33, 39, 20, 48, 2, 47, 37, 31,\n",
" 1, 40, 28, 9, 4, 35, 41, 38, 27, 42, 3, 49, 43, 34, 19, 13, 6,\n",
" 46, 18, 0, 36, 24, 29, 44, 21, 16, 7, 8, 26, 32, 12, 22, 30])"
]
}
],
"prompt_number": 54
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"pl.plot(input_data[index_order], response_data[index_order])"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 55,
"text": [
"[<matplotlib.lines.Line2D at 0x111fd5350>]"
]
},
{
"output_type": "display_data",
"png": "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\nIPf/AaX4aykOf644AAAAAElFTkSuQmCC\n"
}
],
"prompt_number": 55
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Pickles!\n",
"--------------"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# TODO: Explain this in some detail\n",
"\n"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import cPickle as pickle\n",
"test = np.arange(1e7)\n",
"\n",
"# This should take a bit\n",
"with open('myjunkfile', 'w') as filehandle:\n",
" pickle.dump(test, filehandle)\n",
"\n",
"with open('myjunkfile2','wb') as filehandle:\n",
" pickle.dump(test, filehandle, protocol=-1)\n",
"\n",
"with open('myjunkfile2', 'rb') as filehandle:\n",
" new_variable = pickle.load(test)\n",
" "
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 2
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Generators\n",
"---------------\n"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"mygenerator = (x**2 for x in range(3))\n",
"\n",
"for item in mygenerator:\n",
" print item\n",
"\n",
"for item in mygenerator:\n",
" print item\n",
" # Can't reuse w/o reloading them!"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"0\n",
"1\n",
"4\n"
]
}
],
"prompt_number": 7
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# some from: http://stackoverflow.com/questions/101268/hidden-features-of-python?lq=1# <headingcell level=3># Chaining comparison operators\n",
"x = 5\n",
"print 1 < x < 10\n",
"print 10 < x < 20\n",
"print 10 > x <= 9\n",
"print 5 == x > 4"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"True\n",
"False\n",
"True\n",
"True\n"
]
}
],
"prompt_number": 64
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"### Index slicing ###\n",
"a = np.arange(12)\n",
"a[::2]\n",
"# reverse\n",
"a[::-1]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 65,
"text": [
"array([11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0])"
]
}
],
"prompt_number": 65
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"for x in reversed(a):\n",
" print x\n",
" "
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"11\n",
"10\n",
"9\n",
"8\n",
"7\n",
"6\n",
"5\n",
"4\n",
"3\n",
"2\n",
"1\n",
"0\n"
]
}
],
"prompt_number": 66
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print a[:]\n",
"print a[0:]\n",
"print a[-1]\n",
"print a[-2]\n",
"print a[1:-2]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[ 0 1 2 3 4 5 6 7 8 9 10 11]\n",
"[ 0 1 2 3 4 5 6 7 8 9 10 11]\n",
"11\n",
"10\n",
"[1 2 3 4 5 6 7 8 9]\n"
]
}
],
"prompt_number": 13
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"in place value swapping \n",
"-------------------------"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"a = 10\n",
"b = 5\n",
"print a, b\n",
"a, b = b, a\n",
"print a, b\n"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"10 5\n",
"5 10\n"
]
}
],
"prompt_number": 14
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"x = 5\n",
"#y = 5\n",
"y = 1\n",
"x = 3 if (y == 1) else 2\n",
"print x"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"3\n"
]
}
],
"prompt_number": 15
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# VECTORIZE\n",
"def test(a,b):\n",
" if a>b:\n",
" return a\n",
" else:\n",
" return b\n",
"\n",
"print test(10,-3)\n",
"print test(-5,-3)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"10\n",
"-3\n"
]
}
],
"prompt_number": 56
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 56
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"#x = np.array(r_[-10:10:2])\n",
"x = np.arange(-10,10.1,2)\n",
"y = np.ones(x.shape)*-3.\n",
"\n",
"print test(x,y) # error"
],
"language": "python",
"metadata": {},
"outputs": [
{
"ename": "ValueError",
"evalue": "The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()",
"output_type": "pyerr",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-57-d650998eb3ec>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0my\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mones\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m3.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0;32mprint\u001b[0m \u001b[0mtest\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# error\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m<ipython-input-56-8b67af6e4ce4>\u001b[0m in \u001b[0;36mtest\u001b[0;34m(a, b)\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m# VECTORIZE\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mtest\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mb\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0;32mif\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m>\u001b[0m\u001b[0mb\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mValueError\u001b[0m: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()"
]
}
],
"prompt_number": 57
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"#long way\n",
"out = np.empty(x.shape)\n",
"for i in range(x.size):\n",
" out[i] = test(x[i],y[i])\n",
"print out\n",
"\n",
"#short way\n",
"vtest = np.vectorize(test)\n",
"print vtest(x,3)\n",
"\n",
"out = vtest(x,y)\n",
"print out"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[ -3. -3. -3. -3. -2. 0. 2. 4. 6. 8. 10.]\n",
"[ 3 3 3 3 3 3 3 4 6 8 10]\n",
"[ -3. -3. -3. -3. -2. 0. 2. 4. 6. 8. 10.]\n"
]
}
],
"prompt_number": 58
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import itertools\n",
"def coolguys(name):\n",
" if (name == 'David')|(name=='Spider Man'):\n",
" return 'cool'\n",
" else:\n",
" return 'lame'\n",
"\n",
"guys = np.array(['David','Jonathan', 'Fred','Bob','Steve','Spider Man'])\n",
"\n",
"vcool = vectorize(coolguys) #vectorize the function, for simplicity\n",
"results = vcool(guys)\n",
"\n",
"for guy, result in itertools.izip(guys, results):\n",
" print guy, \"is\", result"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"David is cool\n",
"Jonathan is lame\n",
"Fred is lame\n",
"Bob is lame\n",
"Steve is lame\n",
"Spider Man is cool\n"
]
}
],
"prompt_number": 60
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"coolness = {'name':guys, 'status':results} #turn the results into a dictionary\n",
"\n",
"# save dictionary to a pickle for later use\n",
"with open('whoiscool','w') as ff:\n",
" pickle.dump(coolness,ff)\n",
"\n",
"with open('whoiscool') as fnew: \n",
" data = pickle.load(fnew)\n",
" \n",
" \n",
"print data # Notice this is the data structure as saved!"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"{'status': array(['cool', 'lame', 'lame', 'lame', 'lame', 'cool'], \n",
" dtype='|S64'), 'name': array(['David', 'Jonathan', 'Fred', 'Bob', 'Steve', 'Spider Man'], \n",
" dtype='|S10')}\n"
]
}
],
"prompt_number": 63
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment