{ "metadata": { "name": "", "signature": "sha256:a2b1ea908157604888db3edc69f70ebb7f6f25d46bbb813b419c0879633a8962" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Sebastian Raschka \n", "last updated: 04/14/2014 \n", "\n", "[Link to this IPython Notebook on GitHub](https://github.com/rasbt/python_reference/blob/master/benchmarks/timeit_tests.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "I am really looking forward to your comments and suggestions to improve and extend this collection! Just send me a quick note \n", "via Twitter: [@rasbt](https://twitter.com/rasbt) \n", "or Email: [bluewoodtree@gmail.com](mailto:bluewoodtree@gmail.com)\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "# Python benchmarks via `timeit`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Sections\n", "- [String operations](#string_operations)\n", " - [String formatting: .format() vs. binary operator %s](#str_format_bin)\n", " - [String reversing: [::-1] vs. `''.join(reversed())`](#str_reverse)\n", " - [String concatenation: `+=` vs. `''.join()`](#string_concat)\n", " - [Assembling strings](#string_assembly) \n", " - [Testing if a string is an integer](#is_integer)\n", " - [Testing if a string is a number](#is_number)\n", "- [List operations](#list_operations)\n", " - [List reversing: [::-1] vs. reverse() vs. reversed()](#list_reverse)\n", " - [Creating lists using conditional statements](#create_cond_list)\n", "- [Dictionary operations](#dict_ops) \n", " - [Adding elements to a dictionary](#adding_dict_elements)\n", "- [Comprehensions vs. for-loops](#comprehensions)\n", "- [Copying files by searching directory trees](#find_copy)\n", "- [Returning column vectors slicing through a numpy array](#row_vectors)\n", "- [Speed of numpy functions vs Python built-ins and std. lib.](#numpy)\n", "- [Cython vs. regular (C)Python](#cython)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# String operations" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[[back to top](#sections)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## String formatting: `.format()` vs. binary operator `%s`\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[[back to top](#sections)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We expect the string `.format()` method to perform slower than %, because it is doing the formatting for each object itself, where formatting via the binary % is hard-coded for known types. But let's see how big the difference really is..." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import timeit\n", "\n", "n = 10000\n", "\n", "def test_format(n):\n", " return ['{}'.format(i) for i in range(n)]\n", "\n", "def test_binaryop(n):\n", " return ['%s' %i for i in range(n)]\n", "\n", "%timeit test_format(n)\n", "%timeit test_binaryop(n)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "100 loops, best of 3: 5.67 ms per loop\n", "100 loops, best of 3: 3.9 ms per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "funcs = ['test_format', 'test_binaryop']\n", "\n", "orders_n = [10**n for n in range(1, 6)]\n", "times_n = {f:[] for f in funcs}\n", "\n", "for n in orders_n:\n", " for f in funcs:\n", " times_n[f].append(min(timeit.Timer('%s(n)' %f, \n", " 'from __main__ import %s, n' %f)\n", " .repeat(repeat=3, number=1000)))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 55 }, { "cell_type": "code", "collapsed": false, "input": [ "%pylab inline" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 7 }, { "cell_type": "code", "collapsed": false, "input": [ "import matplotlib.pyplot as plt\n", "\n", "labels = [('test_format', '.format() method'), \n", " ('test_binaryop', 'binary operator %')] \n", "\n", "matplotlib.rcParams.update({'font.size': 12})\n", "\n", "fig = plt.figure(figsize=(10,8))\n", "for lb in labels:\n", " plt.plot(orders_n, times_n[lb[0]], alpha=0.5, label=lb[1], marker='o', lw=3)\n", "plt.xlabel('sample size n')\n", "plt.ylabel('time per computation in milliseconds [ms]')\n", "plt.xlim([1,max(orders_n) + max(orders_n) * 10])\n", "plt.legend(loc=2)\n", "plt.grid()\n", "plt.xscale('log')\n", "plt.yscale('log')\n", "plt.title('Performance of different string formatting methods')\n", "ftext = 'binary op. % is {:.2f}x faster than .format()'\\\n", " .format(times_n['test_format'][-1]\\\n", " /times_n['test_binaryop'][-1])\n", "plt.figtext(.14,.75, ftext, fontsize=11, ha='left')\n", "plt.show()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nsXfzzc3N1RdffKGhQ4e6eyg+zWbz1/nzFf985oxVLVtKPXtKYWGuf7VsZTatObBG67LXOYu44IBg\nPdjxQQ1NGkoR9/+455NZ5G0emZtF3mbVVd5GC7mFCxeqZ8+eCgkJ0fjx4ys9V1BQoBEjRigsLEzx\n8fFKT093Pvfqq69qwIABeuWVVyRJRUVFGjt2rJYtW8YZOTdr3rxc7dpJ/v4Vtxbp1Kliya3g4Ouv\nBvJLTpSc0FvfvaW9+Xud26KbRGtSj0m6JfqWuho2AABewehaqx999JH8/f21YcMGnT9/Xm+//bbz\nudGjR0uS/v73v2v37t26//779a9//UudOnWq9B5lZWUaNmyYnn76aQ0cOPC6x6JHzoysrFy9806O\nyssHKTS0YpvN9pXGjUtQUlL1p1YdDof+ffzf+jznc6ZSAQA+p17vI1fXZsyYoaNHjzoLubNnz6pZ\ns2bat2+fEhISJEmPPvqoYmNj9dJLL1V67bvvvqunnnpKt9xScXZmypQpGjVqVJVjUMiZk5WVq6++\nOqyLF/0VHFyuQYPa1aiIs5XZtC57XaWzcMEBwRqSOES3Rt9aH0MGAKBBqdeLHera1QPNzs5WYGCg\ns4iTpK5du15z/jg1NVWpqanVOs64ceMUHx8vSWratKm6devmvGfLpffmce0fJyW11fHj/9WePXs0\ndeq0Gr2+Y8+OWrVvlb7b/p0kKb5bvKKaRCnuVJwKDhRI0XL752uoj/fs2aNp02qWN49df0ze5h9f\n2tZQxuPtjy9tayjj8fbHe/bs0ZkzZ/Tjjz+qNhrEGbktW7Zo1KhROn78uHOfJUuWaOXKldq0aZNL\nx+CMnHlWq9X5Rb0Rh8Oh3Sd2a/2h9ZWmUru36q7khGSmUquhJnmj9sjbPDI3i7zNujpvjz4jFxYW\npqKiokrbCgsLFR4ebnJYqKXq/gBctF/Uuux1+j7ve+c2plJrjh9cs8jbPDI3i7zNqqu83VLI+V11\nh9jExESVlZUpJyfHOb2amZmpLl24a7+3ySvJ0+r9q3Xy3EnntqgmURrVeZRaNG7hxpEBAOB5/E0e\nzG6368KFCyorK5PdbpfNZpPdbleTJk2UkpKimTNn6ty5c9q6davWrl1b7V6460lLS6s094/69UtZ\nX7oqdcm/l1Qq4rq36q6J3SdSxLmA77ZZ5G0emZtF3mZdyttqtSotLc3l9zFayM2ZM0eNGzfW/Pnz\n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\nIR8Y8ZXlAAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 56 }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## String reversing: `[::-1]` vs. `''.join(reversed())`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[[back to top](#sections)]" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import timeit\n", "\n", "def reverse_join(my_str):\n", " return ''.join(reversed(my_str))\n", " \n", "def reverse_slizing(my_str):\n", " return my_str[::-1]\n", "\n", "test_str = 'abcdefg'\n", "\n", "# Test to show that both work\n", "a = reverse_join(test_str)\n", "b = reverse_slizing(test_str)\n", "assert(a == b and a == 'gfedcba')\n", "\n", "%timeit reverse_join(test_str)\n", "%timeit reverse_slizing(test_str)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "100000 loops, best of 3: 1.56 \u00b5s per loop\n", "1000000 loops, best of 3: 362 ns per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "funcs = ['reverse_join', 'reverse_slizing']\n", "\n", "orders_n = [10**n for n in range(1, 6)]\n", "test_strings = (test_str*n for n in orders_n)\n", "times_n = {f:[] for f in funcs}\n", "\n", "for st,n in zip(test_strings, orders_n):\n", " for f in funcs:\n", " times_n[f].append(min(timeit.Timer('%s(st)' %f, \n", " 'from __main__ import %s, st' %f)\n", " .repeat(repeat=3, number=1000)))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "%pylab inline" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "import matplotlib.pyplot as plt\n", "\n", "labels = [('reverse_join', '\"\".join(reversed(my_str))'), \n", " ('reverse_slizing', 'my_str[::-1]')] \n", "\n", "matplotlib.rcParams.update({'font.size': 12})\n", "\n", "fig = plt.figure(figsize=(10,8))\n", "for lb in labels:\n", " plt.plot(orders_n, times_n[lb[0]], alpha=0.5, label=lb[1], marker='o', lw=3)\n", "plt.xlabel('sample size n')\n", "plt.ylabel('time per computation in milliseconds [ms]')\n", "plt.xlim([1,max(orders_n) + max(orders_n) * 10])\n", "plt.legend(loc=2)\n", "plt.grid()\n", "plt.xscale('log')\n", "plt.yscale('log')\n", "plt.title('Performance of different string reversing methods')\n", "max_perf = max( [times_n['reverse_join'][i]/times_n['reverse_slizing'][i]\n", " for i in range(len(times_n['reverse_join']))] )\n", "min_perf = min( [times_n['reverse_join'][i]/times_n['reverse_slizing'][i]\n", " for i in range(len(times_n['reverse_join']))] )\n", "ftext = 'my_str[::-1] is {:.2f}x to {:.2f}x faster than \"\".join(reversed(my_str))'\\\n", " .format(min_perf, max_perf)\n", "plt.figtext(.14,.75, ftext, fontsize=11, ha='left')\n", "plt.show()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## String concatenation: `+=` vs. `''.join()`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[[back to top](#sections)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Strings in Python are immutable objects. So, each time we append a character to a string, it has to be created \u201cfrom scratch\u201d in memory. Thus, the answer to the question \u201cWhat is the most efficient way to concatenate strings?\u201d is a quite obvious, but the relative numbers of performance gains are nonetheless interesting." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import timeit\n", "\n", "def string_add(in_chars):\n", " new_str = ''\n", " for char in in_chars:\n", " new_str += char\n", " return new_str\n", "\n", "def string_join(in_chars):\n", " return ''.join(in_chars)\n", "\n", "test_chars = ['a', 'b', 'c', 'd', 'e', 'f']\n", "\n", "%timeit string_add(test_chars)\n", "%timeit string_join(test_chars)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1000000 loops, best of 3: 1.15 \u00b5s per loop\n", "1000000 loops, best of 3: 436 ns per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 70 }, { "cell_type": "code", "collapsed": false, "input": [ "funcs = ['string_add', 'string_join']\n", "\n", "orders_n = [10**n for n in range(1, 9)]\n", "times_n = {f:[] for f in funcs}\n", "\n", "for n in orders_n:\n", " for f in funcs:\n", " times_n[f].append(min(timeit.Timer('%s(test_chars)' %f, \n", " 'from __main__ import %s, test_chars' %f)\n", " .repeat(repeat=10, number=1000)))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 71 }, { "cell_type": "code", "collapsed": false, "input": [ "%pylab inline" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": [ "import matplotlib.pyplot as plt\n", "\n", "labels = [('string_add', 'new_str += char'), \n", " ('string_join', '\"\".join(chars)')] \n", "\n", "matplotlib.rcParams.update({'font.size': 12})\n", "\n", "fig = plt.figure(figsize=(10,8))\n", "for lb in labels:\n", " plt.plot(orders_n, times_n[lb[0]], alpha=0.5, label=lb[1], marker='o', lw=3)\n", "plt.xlabel('sample size n')\n", "plt.ylabel('time per computation in milliseconds [ms]')\n", "plt.xlim([1,max(orders_n) + max(orders_n) * 10])\n", "plt.legend(loc=2)\n", "plt.grid()\n", "plt.xscale('log')\n", "plt.yscale('log')\n", "plt.title('Performance of different string reversing methods')\n", "ftext = 'new_str += char is {:.2f}x faster than \"\".join(chars)'\\\n", " .format(times_n['string_add'][-1]\\\n", " /times_n['string_join'][-1])\n", "plt.figtext(.14,.75, ftext, fontsize=11, ha='left')\n", "plt.show()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAnMAAAIECAYAAAByl6h3AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XdYFNfXB/DvLB0EQRAUEEGQ3hVBUFywl6hRk1hQrFGM\nNZZYMIBGY0xsMUZjxYI9GktiBbGBXVARkGJHFCMYBUWE+/7By/xcacsufc7nefaRnXLvPbPDcpx7\nZpdjjDEQQgghhJA6SVTTAyCEEEIIIbKjZI4QQgghpA6jZI4QQgghpA6jZI4QQgghpA6jZI4QQggh\npA6jZI4QQgghpA6jZI7UeR8+fMDIkSOhp6cHkUiEs2fP1vSQ6qS9e/fC3NwcioqKGDlypNT7BQcH\no2XLlqU+L63tyMhI2NvbQ1lZGb6+vpUTRB0UGhoKJSWlmh5GrXX//n2IRCJERUXV9FCqhKmpKRYu\nXFglbYvFYowZM6ZK2ia1CyVzpFoMHz4cIpEIIpEISkpKMDU1RUBAAF6+fCl323/++Sd27tyJI0eO\nID09HW3btq2EEQtLfn4+Ro4ciYEDB+LRo0dYuXKlzG3NmDEDly5dKrftgIAAtG7dGvfu3cP+/fvl\njqEyWFhYICQkRO52FBUVsXXrVqm2HThwINLS0uTus74yMTFBeno62rRpU9NDkcsPP/wAMzOzYss5\njgPHcVXSZ1W2TWoXxZoeABEOb29v7NmzBx8+fMDVq1cxZswYPHr0CEeOHJGpvffv30NZWRlJSUkw\nMjKCh4eHXOMrak+I0tLSkJ2dje7du6Np06ZytaWhoQENDY0y22aMITk5GXPnzoWRkZHMfTHGkJ+f\nD0XFynkrq6w/fBzHobzPYy8au6qqKlRVVSul34oqKCgAAIhENfP/eml+50QiEfT19atpRITUTXRl\njlQbJSUl6Ovrw9DQEL1798bkyZNx7Ngx5ObmAgB27doFZ2dnqKmpwczMDNOmTUNOTg6/v1gsxujR\nozFv3jwYGhqiefPm8PHxwffff4/U1FSIRCK0aNECAJCXl4dZs2bB2NgYKioqsLOzw86dOyXGIxKJ\nsGrVKgwePBja2toYNmwYP+UVGRkJBwcHqKurw9fXF+np6Th9+jScnZ3RoEEDdO7cWeJqyr1799Cv\nXz8YGRlBQ0MDjo6O2L59u0R/RVMeCxYsQNOmTaGrqwt/f39kZ2dLbLd79260atUKampq0NPTQ48e\nPZCVlcWvX7VqFaytraGmpgZLS0ssWrQI+fn5ZR77ixcvwtvbG+rq6mjUqBGGDBmCjIwMAIXTfM2b\nNwdQmHCXNVX97t07BAQEQFtbG40aNcL48eP516/Ix9Osn7atoKCAM2fOQEFBAfn5+Rg2bBhEIhF/\nFSs5ORn9+/eHjo4OGjVqhK5du+L27dt82x+/Pi4uLlBVVUV4eDjy8vIQHByMFi1aQE1NDfb29li3\nbl2x13vNmjUYOnQotLS00KxZMyxevFji9UlJSUFISAh/Ffnhw4clHoe4uDh07doVOjo6aNCgAWxt\nbfnX29TUFPn5+RgxYgREIhEUFBRKHfupU6eKTbMWPY+KioKrqys0NDTQunVrXL16VWIM4eHhcHBw\ngJqaGlxcXHDu3DmIRCKEhYWVOOaPX5s9e/bA2toaKioqSEpKwps3bzB58mQYGxtDQ0MDrq6uOHDg\nAL+fl5cXxo4dW6w9GxsbfP/99/zzivwON23aFKampgCAgwcPwsXFBRoaGtDR0YG7uztiYmIAFJ9m\nLXq+d+9e9OrVCxoaGjA3N8eWLVskxnbv3j106dIFampqMDU1xR9//FHutGNkZCREIhGOHj2Ktm3b\nQl1dHW5uboiPj8fNmzfh5eUFDQ0NuLu7Iz4+XmLfa9euoUuXLtDU1IS+vj769+/Pnz+hoaH4/vvv\n8eDBA/7cmj9/Pr9vbm4uJk+eDF1dXTRp0gTffvutxO+0NO9nDx48QLdu3aCurg4TExOsWrWqWHxl\nHWdSxzFCqoG/vz/r3LmzxLKlS5cyjuPYmzdv2ObNm5mOjg7bvn07u3fvHjt79ixzdHRkQ4cO5bfv\n0KED09TUZAEBASw+Pp7dvn2bvXz5kk2fPp2ZmZmxZ8+esRcvXjDGGJs+fTrT1dVl+/btY0lJSWzR\nokVMJBKx8PBwvj2O45iuri5bvXo1S01NZUlJSWzz5s1MJBIxHx8fdvnyZXb9+nXWsmVL1q5dO+bt\n7c0uXbrEYmJimLW1Nfvqq6/4tm7dusVWr17Nbt68yVJTU9mqVauYoqIiO336tMT4tbW12bfffssS\nExPZiRMnWKNGjdi8efP4bTZt2sSUlJTYDz/8wMf422+/8XEFBQWx5s2bs7/++ovdv3+f/fPPP8zE\nxESijU89ffqUaWpqsiFDhrDbt2+z8+fPM0dHR+bt7c0YY+zt27fsypUrjOM4dvjwYfbs2TP2/v37\n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\ntvpct7br1ee6/qy/c9dOvbPiHTXrduq0UGU7yjQ8dbi6XdDN9/zxyut7PlQ9r8728Zm38/c+QnW7\nb7/9Vh+v/liRKZG+RqxsR5nSf5Gujl061toslbvr3uvlTzMVbl9+8aVOnHuixvaYvTG64uorQlaH\nQw5fU9dQDWLVNqfDWWujyOHlSkE9zOr1evXtt98qKSlJkZH22ZFnUjO3LW+b5ubOrfYD/8ftP+qu\n1LuUnJyssooynXSf1En3SZW5T3180n2yzq+dvv2k+6TKPeVhTFi7+vyCbypMzCw1nl90oWbq490U\nczsdTkVGRNZ5ceW4VHpuqSIcEXI4HHJ73HJ73Wqxt4X6X9Nf5e7yRv3z2B9VR3hOb/B+2P+DVv9r\ntZp1ayanw6nWsa3V6kArI2e+g36Y9aKLLlJpaWlACyD4eqT00CiNUva6bG3+38268KILlX5teoN+\nI3i8np9sAOvTHJ50n7T8l7JHp859WDUrKEluueu6ie2ZkLm2PWuxzlh5nB5FOCJUuKVQiT0T5ZVX\nsc5YNXM2q7a3sCkx4fGuTTByV+1xOltD1dCXqIjK9ar2tp7NVfFX+f4oz9+Qr+Q+ySrbUaZRt9Zs\narxer8o95TUaPN/H/789kG0VnoqA/49/ildelbnLVOYu821b801l415yvERHth7Rz/v9XO27tVf2\numxjmrmGmBX8yWbO4XDokksu0bZt29SrVy9LiyF4eqT0UI+UHnKdE5wB0ghHhGIiYxQTGSM1++nr\n/5SqH0ZWmsOW0S3ldXrl9rp9f/VKUrOIZpV1/j+Hzj7/cbb5kLPd9qfmSgK97dluFxcZ5/uujXZG\nKzYyVg6HQ/HR8eoQ1+Gsh+/8PaRY53VDdL+1HobpcGrvc/4P+Uru8v+/6G6r/RddbYeAazvUa+V6\nwbjPM6/XwtlCHmflCdqdDqeiIqIkSbHOWMVHx/ueSw45fP9vtX1c9ZwK5LrhWOO7lt/paPzRygas\neZQ6teykCEeEWp9orV92+2VAjVVjn6U8/Y/yHwp/0DmHzlH6wNr/KHc4Ts0wt1CLBq3D4/XUaPJq\naxoDaSRr+2Pr9MZdkpwRTknSSc/JBs3V1Pk1M/f0009rwYIFGjVqlLp06eLbFehwOJSZmRmKOuvN\npMOspqrt8HLZjrImvXvexMxVtuVtU/a6bJ30nFR0RLTSL23Yvc+NkamPt6m5mzq3x12jGXzjgzf0\n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\n97//XRdccIFycnLUs2dPffjhh2e9vlHN3KpVq3TDDTdIkm688UatXLkyzBWFRmRkpDE/5E/XoUMH\nNWvWTJIUFRV11r9qmoqIiFPf0kePHlViYmIYqwmtrKwsI9/qb+XKlUpNTdXEiRPDXUrIrFq1SrGx\nsbr55ps1bNgwHTx4MNwlhczJkye1Zs0aDRgwINylhERiYqJKS0slVb7tZ7t27cJcUWjs2rVLvXv3\nliRdcsklWr58+Vmvb1QzV1RU5DvdSUJCggoLC8NcEUKhoKBA//znP3XzzTeHu5SQ2Lhxoy6//HK9\n/PLLuuuuu8JdTkhU7ZW74447wl1KSHXq1Ek7d+7U8uXLdejQoZ/8672pOHjwoPLy8rRkyRKNGTNG\nU6dODXdJIfP5559r0KBB4S4jZJKSktShQwf17NlTDz30kO6///5wlxQSF154oXJyciRVPuZFRUVn\nvb4tm7mXX35Zl112mWJiYjR69OhqXyssLNTQoUMVFxen5ORkZWVl+b7WqlUr3/nsiouL1bp165DW\nbVWguU9nx70WVnIfPXpUI0eO1N/+9jdb7Zmzkrl3795avXq1nn32WU2fPj2UZVsWaO4FCxbYeq9c\noLmjo6MVGxsrSRo2bJg2btwY0rqtCjR3YmKi+vfvr8jISF177bXatGlTqEsPmNWf44sWLdJtt90W\nqnIbTKC5V6xYoYqKCm3dulXvv/++HnvssVCXbkmguYcMGaKYmBilp6fr+PHj6tix41nXseU0eOfO\nnTVp0iQtXbpUP/74Y7WvjRs3TjExMTp06JDWr1+vm266Sb1799aFF16oq666SrNmzVJGRoaWLl2q\nq6++OkwJAhNo7tPZcWYu0NwVFRW68847NWXKFHXr1i1M1Qcm0Mzl5eWKioqSVLn3uaysLBzlByzQ\n3Fu2bNH69eu1YMEC7dixQw8//HBI3re5oQSau7S0VHFxcZKk5cuX62c/+1k4yg9YoLn79u2rF154\nQZK0YcMGXXDBBeEoPyBWfo6Xl5dr7dq1vrfCtJNAcxcXF/texNWmTRsVFxeHo/yAWXm8Z86cKUma\nNm2a0tPTz76Q18aefvpp76hRo3yfl5aWeqOjo707duzwbRs5cqT3P/7jP3yfP/74494BAwZ4R4wY\n4S0vLw9pvQ0lkNyDBw/2durUyXvllVd6586dG9J6G0p9c8+bN8/bpk0bb1pamjctLc377rvvhrxm\nq+qbefXq1d7U1FTvwIEDvddff713z549Ia+5IQTyHK/St2/fkNQYDPXN/cknn3h/8YtfeAcMGOC9\n5557vG63O+Q1N4RAHu9XXnnFm5qa6k1LS/Pu2rUrpPU2hEAyf/rpp96HHnoopHU2tPrmLi8v9/76\n17/2pqameq+44grvqlWrQl5zQ6hv7gMHDngHDhzoTU9P986YMeMn79+We+aqeM/Yy7R9+3ZFRkYq\nJSXFt613795yuVy+z//zP/8zVOUFTSC5P/nkk1CVFzT1zZ2RkWH7E0/XN3O/fv20bNmyUJYYFIE8\nx6usWbMm2OUFTX1zDx48WIMHDw5liUERyOP9wAMP6IEHHghViQ0ukMw33nijbrzxxlCVGBT1zR0Z\nGalFixaFssSgqG/uDh06+Gbm/GHLmbkqZ87HlJaWKiEhodq2+Ph4lZSUhLKsoCN3JRNym5hZIncV\ncp/S1HKbmFkid5WGzm3rZu7MTjcuLs73AocqxcXFvlewNhXkrmRCbhMzS+SuQu5TmlpuEzNL5K7S\n0Llt3cyd2el2795dFRUVysvL823buHGjLrroolCXFlTkrmRCbhMzS+SuQu6mm9vEzBK5qzR0bls2\nc263WydOnFBFRYXcbrfKysrkdrvVokULDRs2TJMnT9bx48f1xRdfaPHixbafm6pCbnNym5hZIje5\nm35uEzNL5A56bmuvzwiPKVOmeB0OR7XLtGnTvF6v11tYWOi99dZbvS1atPB27drVm5WVFeZqGw65\nzcltYmavl9zkbvq5Tczs9ZI72LkdXq8NTzwGAAAASTY9zAoAAIBKNHMAAAA2RjMHAABgYzRzAAAA\nNkYzBwAAYGM0cwAAADZGMwcAAGBjNHMAAAA2RjMHAGcYNWqUJk2a1KD3ef/99+vZZ59t0PsEAEmK\nDHcBANDYOByOGm+MbdWrr77aoPcHAFXYMwcAteCdDgHYBc0cgEbl+eef17nnnquEhAT17NlTOTk5\nkqQ1a9boyiuvVGJiojp16qTx48ervLzcd7uIiAi9+uqr6tatmxISEjR58mTt3LlTV155pVq1aqU7\n77zTd32Xy6Vzzz1XM2bMULt27XTeeedp4cKFdda0ZMkS9enTR4mJierfv7/+9a9/1XndRx55RO3b\nt1fLli118cUXa/PmzZKqH7q9+eabFR8f77s4nU7NmzdPkrR161Zdd911atOmjXr27KlFixbVuVZa\nWpomT56sq6++WgkJCbrhhht0+PBhP/+nATQVNHMAGo1t27bplVde0dq1a3X06FF99tlnSk5OliRF\nRkbqxRdf1OHDh7Vq1SplZ2frL3/5S7Xbf/bZZ1q/fr2+/PJLPf/88xozZoyysrK0e/du/etf/1JW\nVpbvugcPHtThw4e1f/9+/e1vf9PYsWO1Y8eOGjWtX79e9957r+bMmaPCwkLdd999+tWvfqWTJ0/W\nuO7SpUu1YsUK7dixQ8XFxVq0aJFat24tqfqh28WLF6ukpEQlJSV677331LFjR6Wnp+vYsWO67rrr\nNGLECH3//fd655139MADD2jLli11/p9lZWVp7ty5OnTokE6ePKmZM2fW+/8dgL3RzAFoNJxOp8rK\nyrRp0yaVl5crKSlJ559/viTp0ksvVb9+/RQREaGuXbtq7NixWrZsWbXb/+53v1NcXJwuvPBC/fzn\nP9fgwYOVnJyshIQEDR48WOvXr692/enTpysqKkqpqam66aab9O677/q+VtV4vf7667rvvvvUt29f\nORwOjRw5Us2aNdOXX35Zo/7o6GiVlJRoy5Yt8ng86tGjhzp06OD7+pmHbrdv365Ro0bpvffeU+fO\nnbVkyRKdd955uueeexQREaE+ffpo2LBhde6dczgcGj16tFJSUhQTE6Pbb79dGzZsqMf/OICmgGYO\nQKORkpKi2bNna+rUqWrfvr3uuusuHThwQFJl4zNkyBB17NhRLVu21MSJE2scUmzfvr3v49jY2Gqf\nx8TEqLS01Pd5YmKiYmNjfZ937drVt9bpCgoK9MILLygxMdF32bt3b63XHThwoB588EGNGzdO7du3\n13333aeSkpJasxYXF+uWW27Rc889p6uuusq31urVq6uttXDhQh08eLDO/7PTm8XY2NhqGQGYgWYO\nQKNy1113acWKFSooKJDD4dATTzwhqfLUHhdeeKHy8vJUXFys5557Th6Px+/7PfPVqUVFRTp+/Ljv\n84KCAnXq1KnG7ZKSkjRx4kQVFRX5LqWlpbrjjjtqXWf8+PFau3atNm/erO3bt+uPf/xjjet4PB4N\nHz5c6enp+s1vflNtrWuuuabaWiUlJXrllVf8zgnAPDRzABqN7du3KycnR2VlZWrWrJliYmLkdDol\nSaWlpYqPj1fz5s21detWv071cfphzdpenTplyhSVl5drxYoV+vjjj3Xbbbf5rlt1/TFjxui1117T\nmjVr5PV6dezYMX388ce17gFbu3atVq9erfLycjVv3rxa/aevP3HiRB0/flyzZ8+udvshQ4Zo+/bt\nWrBggcrLy1VeXq6vvvpKW7du9SsjADPRzAFoNMrKyvTkk0+qXbt26tixo3744QfNmDFDkjRz5kwt\nXLhQCQkJGjt2rO68885qe9tqOy/cmV8//fMOHTr4XhmbkZGh//qv/1L37t1rXPcXv/iF5syZowcf\nfFCtW7dWt27dfK88PdPRo0c1duxYtW7dWsnJyWrbtq0ef/zxGvf5zjvv+A6nVr2iNSsrS3Fxcfrs\ns8/0zjvvqHPnzurYsaOefPLJWl9s4U9GAGZwePmzDoBhXC6XMjIytGfPnnCXAgCWsWcOAADAxmjm\nABiJw5EAmgoOswIAANgYe+YAAABsjGYOAADAxmjmAAAAbIxmDgAAwMZo5gAAAGzs/wDxreAXv8Yx\nVAAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 73 }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## Assembling strings\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[[back to top](#sections)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next, I wanted to compare different methods string \u201cassembly.\u201d This is different from simple string concatenation, which we have seen in the previous section, since we insert values into a string, e.g., from a variable." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import timeit\n", "\n", "def plus_operator():\n", " return 'a' + str(1) + str(2) \n", " \n", "def format_method():\n", " return 'a{}{}'.format(1,2)\n", " \n", "def binary_operator():\n", " return 'a%s%s' %(1,2)\n", "\n", "%timeit plus_operator()\n", "%timeit format_method()\n", "%timeit binary_operator()\n", "\n", "#\n", "# Python 3.4.0\n", "# MacOS X 10.9.2\n", "# 2.5 GHz Intel Core i5\n", "# 4 GB 1600 Mhz DDR3\n", "#" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1000000 loops, best of 3: 764 ns per loop\n", "1000000 loops, best of 3: 494 ns per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "10000000 loops, best of 3: 79.3 ns per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 17 }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## Testing if a string is an integer" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[[back to top](#sections)]" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import timeit\n", "\n", "def string_is_int(a_str):\n", " try:\n", " int(a_str)\n", " return True\n", " except ValueError:\n", " return False\n", "\n", "an_int = '123'\n", "no_int = '123abc'\n", "\n", "%timeit string_is_int(an_int)\n", "%timeit string_is_int(no_int)\n", "%timeit an_int.isdigit()\n", "%timeit no_int.isdigit()\n", "\n", "#\n", "# Python 3.4.0\n", "# MacOS X 10.9.2\n", "# 2.5 GHz Intel Core i5\n", "# 4 GB 1600 Mhz DDR3\n", "#" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1000000 loops, best of 3: 401 ns per loop\n", "100000 loops, best of 3: 3.04 \u00b5s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "10000000 loops, best of 3: 92.1 ns per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "10000000 loops, best of 3: 96.3 ns per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "
\n", "
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## Testing if a string is a number" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[[back to top](#sections)]" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import timeit\n", "\n", "def string_is_number(a_str):\n", " try:\n", " float(a_str)\n", " return True\n", " except ValueError:\n", " return False\n", " \n", "a_float = '1.234'\n", "no_float = '123abc'\n", "\n", "a_float.replace('.','',1).isdigit()\n", "no_float.replace('.','',1).isdigit()\n", "\n", "%timeit string_is_number(an_int)\n", "%timeit string_is_number(no_int)\n", "%timeit a_float.replace('.','',1).isdigit()\n", "%timeit no_float.replace('.','',1).isdigit()\n", "\n", "#\n", "# Python 3.4.0\n", "# MacOS X 10.9.2\n", "# 2.5 GHz Intel Core i5\n", "# 4 GB 1600 Mhz DDR3\n", "#" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1000000 loops, best of 3: 400 ns per loop\n", "1000000 loops, best of 3: 1.15 \u00b5s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "1000000 loops, best of 3: 452 ns per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "1000000 loops, best of 3: 394 ns per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "# List operations" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[[back to top](#sections)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## List reversing - `[::-1]` vs. `reverse()` vs. `reversed()`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[[back to top](#sections)]" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import timeit\n", "\n", "def reverse_func(my_list):\n", " new_list = my_list[:]\n", " new_list.reverse()\n", " return new_list\n", " \n", "def reversed_func(my_list):\n", " return list(reversed(my_list))\n", "\n", "def reverse_slizing(my_list):\n", " return my_list[::-1]\n", "\n", "%timeit reverse_func([1,2,3,4,5])\n", "%timeit reversed_func([1,2,3,4,5])\n", "%timeit reverse_slizing([1,2,3,4,5])\n", "\n", "# Python 3.4.0\n", "# MacOS X 10.9.2\n", "# 2.4 GHz Intel Core Duo\n", "# 8 GB 1067 Mhz DDR3\n", "#" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1000000 loops, best of 3: 930 ns per loop\n", "1000000 loops, best of 3: 1.89 \u00b5s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "1000000 loops, best of 3: 775 ns per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## Creating lists using conditional statements\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[[back to top](#sections)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "In this test, I attempted to figure out the fastest way to create a new list of elements that meet a certain criterion. For the sake of simplicity, the criterion was to check if an element is even or odd, and only if the element was even, it should be included in the list. For example, the resulting list for numbers in the range from 1 to 10 would be \n", "[2, 4, 6, 8, 10].\n", "\n", "Here, I tested three different approaches: \n", "1) a simple for loop with an if-statement check (`cond_loop()`) \n", "2) a list comprehension (`list_compr()`) \n", "3) the built-in filter() function (`filter_func()`) \n", "\n", "Note that the filter() function now returns a generator in Python 3, so I had to wrap it in an additional list() function call." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import timeit\n", "\n", "def cond_loop():\n", " even_nums = []\n", " for i in range(100):\n", " if i % 2 == 0:\n", " even_nums.append(i)\n", " return even_nums\n", "\n", "def list_compr():\n", " even_nums = [i for i in range(100) if i % 2 == 0]\n", " return even_nums\n", " \n", "def filter_func():\n", " even_nums = list(filter((lambda x: x % 2 != 0), range(100)))\n", " return even_nums\n", "\n", "%timeit cond_loop()\n", "%timeit list_compr()\n", "%timeit filter_func()\n", "\n", "#\n", "# Python 3.4.0\n", "# MacOS X 10.9.2\n", "# 2.5 GHz Intel Core i5\n", "# 4 GB 1600 Mhz DDR3\n", "#" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "100000 loops, best of 3: 14.4 \u00b5s per loop\n", "100000 loops, best of 3: 12 \u00b5s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "10000 loops, best of 3: 23.9 \u00b5s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 14 }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "# Dictionary operations " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[[back to top](#sections)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## Adding elements to a Dictionary\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[[back to top](#sections)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "All three functions below count how often different elements (values) occur in a list. \n", "E.g., for the list ['a', 'b', 'a', 'c'], the dictionary would look like this: \n", "`my_dict = {'a': 2, 'b': 1, 'c': 1}`" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import random\n", "import timeit\n", "from collections import defaultdict\n", "\n", "\n", "def add_element_check1(elements):\n", " d = dict()\n", " for e in elements:\n", " if e not in d:\n", " d[e] = 1\n", " else:\n", " d[e] += 1\n", " return d\n", " \n", "def add_element_check2(elements):\n", " d = dict()\n", " for e in elements:\n", " if e not in d:\n", " d[e] = 0\n", " d[e] += 1 \n", " return d\n", " \n", "def add_element_except(elements):\n", " d = dict()\n", " for e in elements:\n", " try:\n", " d[e] += 1\n", " except KeyError:\n", " d[e] = 1\n", " return d\n", " \n", "def add_element_defaultdict(elements):\n", " d = defaultdict(int)\n", " for e in elements:\n", " d[e] += 1\n", " return d\n", "\n", "def add_element_get(elements):\n", " d = dict()\n", " for e in elements:\n", " d[e] = d.get(e, 1) + 1\n", " return d\n", "\n", "\n", "random.seed(123)\n", "\n", "print('Results for 100 integers in range 1-10') \n", "rand_ints = [random.randrange(1, 10) for i in range(100)]\n", "%timeit add_element_check1(rand_ints)\n", "%timeit add_element_check2(rand_ints)\n", "%timeit add_element_except(rand_ints)\n", "%timeit add_element_defaultdict(rand_ints)\n", "%timeit add_element_get(rand_ints)\n", "\n", "print('\\nResults for 1000 integers in range 1-5') \n", "rand_ints = [random.randrange(1, 5) for i in range(1000)]\n", "%timeit add_element_check1(rand_ints)\n", "%timeit add_element_check2(rand_ints)\n", "%timeit add_element_except(rand_ints)\n", "%timeit add_element_defaultdict(rand_ints)\n", "%timeit add_element_get(rand_ints)\n", "\n", "print('\\nResults for 1000 integers in range 1-1000') \n", "rand_ints = [random.randrange(1, 1000) for i in range(1000)]\n", "%timeit add_element_check1(rand_ints)\n", "%timeit add_element_check2(rand_ints)\n", "%timeit add_element_except(rand_ints)\n", "%timeit add_element_defaultdict(rand_ints)\n", "%timeit add_element_get(rand_ints)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Results for 100 integers in range 1-10\n", "10000 loops, best of 3: 28 \u00b5s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "10000 loops, best of 3: 26.2 \u00b5s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "10000 loops, best of 3: 26.5 \u00b5s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "10000 loops, best of 3: 22.8 \u00b5s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "10000 loops, best of 3: 33.3 \u00b5s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "\n", "Results for 1000 integers in range 1-5\n", "1000 loops, best of 3: 242 \u00b5s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "1000 loops, best of 3: 239 \u00b5s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "1000 loops, best of 3: 203 \u00b5s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "10000 loops, best of 3: 184 \u00b5s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "1000 loops, best of 3: 350 \u00b5s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "\n", "Results for 1000 integers in range 1-1000\n", "1000 loops, best of 3: 262 \u00b5s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "1000 loops, best of 3: 370 \u00b5s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "1000 loops, best of 3: 502 \u00b5s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "1000 loops, best of 3: 422 \u00b5s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "1000 loops, best of 3: 373 \u00b5s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 25 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Conclusion" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We see from the results that the `try-except` variant is faster than then the `if element in my_dict` alternative if we have a low number of unique elements (here: 1000 integers in the range 1-5), which makes sense: the `except`-block is skipped if an element is already added as a key to the dictionary. However, in this case the `collections.defaultdict` has even a better performance. \n", "However, if we are having a relative large number of unique entries(here: 1000 integers in range 1-1000), the `if element in my_dict` approach outperforms the alternative approaches." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Comprehesions vs. for-loops" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[[back to top](#sections)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Comprehensions are not only shorter and prettier than ye goode olde for-loop, \n", "but they are also up to ~1.2x faster." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import timeit\n", "n = 1000\n", "\n", "#\n", "# Python 3.4.0\n", "# MacOS X 10.9.2\n", "# 2.5 GHz Intel Core i5\n", "# 4 GB 1600 Mhz DDR3\n", "#" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 19 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Set comprehensions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[[back to top](#sections)]" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def set_loop(n):\n", " a_set = set()\n", " for i in range(n):\n", " if i % 3 == 0:\n", " a_set.add(i)\n", " return a_set" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 20 }, { "cell_type": "code", "collapsed": false, "input": [ "def set_compr(n):\n", " return {i for i in range(n) if i % 3 == 0}" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 21 }, { "cell_type": "code", "collapsed": false, "input": [ "%timeit set_loop(n)\n", "%timeit set_compr(n)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "10000 loops, best of 3: 136 \u00b5s per loop\n", "10000 loops, best of 3: 113 \u00b5s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 22 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## List comprehensions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[[back to top](#sections)]" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def list_loop(n):\n", " a_list = list()\n", " for i in range(n):\n", " if i % 3 == 0:\n", " a_list.append(i)\n", " return a_list" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 23 }, { "cell_type": "code", "collapsed": false, "input": [ "def list_compr(n):\n", " return [i for i in range(n) if i % 3 == 0]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 24 }, { "cell_type": "code", "collapsed": false, "input": [ "%timeit list_loop(n)\n", "%timeit list_compr(n)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "10000 loops, best of 3: 129 \u00b5s per loop\n", "10000 loops, best of 3: 111 \u00b5s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 25 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Dictionary comprehensions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[[back to top](#sections)]" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def dict_loop(n):\n", " a_dict = dict()\n", " for i in range(n):\n", " if i % 3 == 0:\n", " a_dict[i] = i\n", " return a_dict" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 26 }, { "cell_type": "code", "collapsed": false, "input": [ "def dict_compr(n):\n", " return {i:i for i in range(n) if i % 3 == 0}" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 27 }, { "cell_type": "code", "collapsed": false, "input": [ "%timeit dict_loop(n)\n", "%timeit dict_compr(n)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "10000 loops, best of 3: 121 \u00b5s per loop\n", "10000 loops, best of 3: 127 \u00b5s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 28 }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Copying files by searching directory trees" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[[back to top](#sections)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Executing `Unix`/`Linux` shell commands:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import subprocess\n", "\n", "def subprocess_findcopy(path, search_str, dest): \n", " query = 'find %s -name \"%s\" -exec cp {} %s \\;' %(path, search_str, dest)\n", " subprocess.call(query, shell=True)\n", " return " ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 30 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using Python's `os.walk()` to search the directory tree recursively and matching patterns via `fnmatch.filter()`" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import shutil\n", "import os\n", "import fnmatch\n", "\n", "def walk_findcopy(path, search_str, dest):\n", " for path, subdirs, files in os.walk(path):\n", " for name in fnmatch.filter(files, search_str):\n", " try:\n", " shutil.copy(os.path.join(path,name), dest)\n", " except NameError:\n", " pass\n", " return" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 33 }, { "cell_type": "code", "collapsed": false, "input": [ "import timeit\n", "\n", "\n", "def findcopy_timeit(inpath, outpath, search_str):\n", " \n", " shutil.rmtree(outpath)\n", " os.mkdir(outpath)\n", " print(50*'#')\n", " print('subprocsess call')\n", " %timeit subprocess_findcopy(inpath, search_str, outpath)\n", " print(\"copied %s files\" %len(os.listdir(outpath)))\n", " shutil.rmtree(outpath)\n", " os.mkdir(outpath)\n", " print('\\nos.walk approach')\n", " %timeit walk_findcopy(inpath, search_str, outpath)\n", " print(\"copied %s files\" %len(os.listdir(outpath)))\n", " print(50*'#')\n", "\n", "print('small tree')\n", "inpath = '/Users/sebastian/Desktop/testdir_in'\n", "outpath = '/Users/sebastian/Desktop/testdir_out'\n", "search_str = '*.png'\n", "findcopy_timeit(inpath, outpath, search_str)\n", "\n", "print('larger tree')\n", "inpath = '/Users/sebastian/Dropbox'\n", "outpath = '/Users/sebastian/Desktop/testdir_out'\n", "search_str = '*.csv'\n", "findcopy_timeit(inpath, outpath, search_str)\n" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "small tree\n", "##################################################" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "subprocsess call\n", "1 loops, best of 3: 268 ms per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "copied 13 files\n", "\n", "os.walk approach\n", "100 loops, best of 3: 12.2 ms per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "copied 13 files\n", "##################################################\n", "larger tree\n", "##################################################\n", "subprocsess call\n", "1 loops, best of 3: 623 ms per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "copied 105 files\n", "\n", "os.walk approach\n", "1 loops, best of 3: 417 ms per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "copied 105 files\n", "##################################################\n" ] } ], "prompt_number": 35 }, { "cell_type": "markdown", "metadata": {}, "source": [ "I have to say that I am really positively surprised. The shell's `find` scales even better than expected!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Returning column vectors slicing through a numpy array" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[[back to top](#sections)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Given a numpy matrix, I want to iterate through it and return each column as a 1-column vector. \n", "E.g., if I want to return the 1st column from matrix A below\n", "\n", "
\n",
      "A = np.array([ [1,2,3], [4,5,6], [7,8,9] ])\n",
      ">>> A\n",
      "array([[1, 2, 3],\n",
      "       [4, 5, 6],\n",
      "       [7, 8, 9]])
\n", "\n", "I want my result to be:\n", "
\n",
      "array([[1],\n",
      "       [4],\n",
      "       [7]])
\n", "\n", "with `.shape` = `(3,1)`\n", "\n", "\n", "However, the default behavior of numpy is to return the column as a row vector:\n", "\n", "
\n",
      ">>> A[:,0]\n",
      "array([1, 4, 7])\n",
      ">>> A[:,0].shape\n",
      "(3,)\n",
      "
" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import numpy as np\n", "\n", "# 1st column, e.g., A[:,0,np.newaxis]\n", "\n", "def colvec_method1(A):\n", " for col in A.T:\n", " colvec = row[:,np.newaxis]\n", " yield colvec" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 83 }, { "cell_type": "code", "collapsed": false, "input": [ "# 1st column, e.g., A[:,0:1]\n", "\n", "def colvec_method2(A):\n", " for idx in range(A.shape[1]):\n", " colvec = A[:,idx:idx+1]\n", " yield colvec" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 82 }, { "cell_type": "code", "collapsed": false, "input": [ "# 1st column, e.g., A[:,0].reshape(-1,1)\n", "\n", "def colvec_method3(A):\n", " for idx in range(A.shape[1]):\n", " colvec = A[:,idx].reshape(-1,1)\n", " yield colvec" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 81 }, { "cell_type": "code", "collapsed": false, "input": [ "# 1st column, e.g., np.vstack(A[:,0]\n", "\n", "def colvec_method4(A):\n", " for idx in range(A.shape[1]):\n", " colvec = np.vstack(A[:,idx])\n", " yield colvec" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 79 }, { "cell_type": "code", "collapsed": false, "input": [ "# 1st column, e.g., np.row_stack(A[:,0])\n", "\n", "def colvec_method5(A):\n", " for idx in range(A.shape[1]):\n", " colvec = np.row_stack(A[:,idx])\n", " yield colvec" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 77 }, { "cell_type": "code", "collapsed": false, "input": [ "# 1st column, e.g., np.column_stack((A[:,0],))\n", "\n", "def colvec_method6(A):\n", " for idx in range(A.shape[1]):\n", " colvec = np.column_stack((A[:,idx],))\n", " yield colvec" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 74 }, { "cell_type": "code", "collapsed": false, "input": [ "# 1st column, e.g., A[:,[0]]\n", "\n", "def colvec_method7(A):\n", " for idx in range(A.shape[1]):\n", " colvec = A[:,[idx]]\n", " yield colvec" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 89 }, { "cell_type": "code", "collapsed": false, "input": [ "def test_method(method, A):\n", " for i in method(A): \n", " assert i.shape == (A.shape[0],1), \"{}, {}\".format(i.shape, A.shape[0],1)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 69 }, { "cell_type": "code", "collapsed": false, "input": [ "import timeit\n", "\n", "A = np.random.random((300, 3))\n", "\n", "for method in [\n", " colvec_method1, colvec_method2, \n", " colvec_method3, colvec_method4, \n", " colvec_method5, colvec_method6,\n", " colvec_method7]:\n", " print('\\nTest:', method.__name__)\n", " %timeit test_method(colvec_method2, A)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Test: colvec_method1\n", "100000 loops, best of 3: 16.6 \u00b5s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "\n", "Test: colvec_method2\n", "10000 loops, best of 3: 16.1 \u00b5s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "\n", "Test: colvec_method3\n", "100000 loops, best of 3: 16.2 \u00b5s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "\n", "Test: colvec_method4\n", "100000 loops, best of 3: 16.4 \u00b5s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "\n", "Test: colvec_method5\n", "100000 loops, best of 3: 16.2 \u00b5s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "\n", "Test: colvec_method6\n", "100000 loops, best of 3: 16.8 \u00b5s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "\n", "Test: colvec_method7\n", "100000 loops, best of 3: 16.3 \u00b5s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 91 }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "
\n", "
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Speed of numpy functions vs Python built-ins and std. lib." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[[back to top](#sections)]" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import numpy as np\n", "import timeit\n", "\n", "samples = list(range(1000000))\n", "\n", "%timeit(sum(samples))\n", "%timeit(np.sum(samples))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "100 loops, best of 3: 18.3 ms per loop\n", "10 loops, best of 3: 136 ms per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 6 }, { "cell_type": "code", "collapsed": false, "input": [ "%timeit(list(range(1000000)))\n", "%timeit(np.arange(1000000))\n", "\n", "# note that in Python range() is implemented as xrange()\n", "# with lazy evaluation (generator)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "10 loops, best of 3: 82.6 ms per loop\n", "100 loops, best of 3: 5.35 ms per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 11 }, { "cell_type": "code", "collapsed": false, "input": [ "import statistics\n", "\n", "%timeit(statistics.mean(samples))\n", "%timeit(np.mean(samples))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1 loops, best of 3: 1.14 s per loop\n", "10 loops, best of 3: 141 ms per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 14 }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "
\n", "
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Cython vs regular (C)Python" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[[back to top](#sections)]" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def py_lstsqr(x, y):\n", " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", "\n", " x_avg = sum(x)/len(x)\n", " y_avg = sum(y)/len(y)\n", " var_x = 0\n", " cov_xy = 0\n", " for x_i, y_i in zip(x,y):\n", " temp = (x_i - x_avg)\n", " var_x += temp**2\n", " cov_xy += temp*(y_i - y_avg)\n", " slope = cov_xy / var_x\n", " y_interc = y_avg - slope*x_avg\n", " return (slope, y_interc)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 62 }, { "cell_type": "code", "collapsed": false, "input": [ "%load_ext cythonmagic" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 58 }, { "cell_type": "code", "collapsed": false, "input": [ "%%cython\n", "\n", "def cy_lstsqr(x, y):\n", " \"\"\" Computes the least-squares solution to a linear matrix equation. \"\"\"\n", " cdef double x_avg, y_avg, temp, var_x, cov_xy, slope, y_interc, x_i, y_i\n", " x_avg = sum(x)/len(x)\n", " y_avg = sum(y)/len(y)\n", " var_x = 0\n", " cov_xy = 0\n", " for x_i, y_i in zip(x,y):\n", " temp = (x_i - x_avg)\n", " var_x += temp**2\n", " cov_xy += temp*(y_i - y_avg)\n", " slope = cov_xy / var_x\n", " y_interc = y_avg - slope*x_avg\n", " return (slope, y_interc)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 63 }, { "cell_type": "code", "collapsed": false, "input": [ "import timeit\n", "import random\n", "random.seed(12345)\n", "\n", "funcs = ['py_lstsqr', 'cy_lstsqr']\n", "\n", "orders_n = [10**n for n in range(1, 6)]\n", "times_n = {f:[] for f in funcs}\n", "\n", "for n in orders_n:\n", " x = [x_i*random.randrange(8,12)/10 for x_i in range(n)]\n", " y = [y_i*random.randrange(10,14)/10 for y_i in range(n)]\n", " for f in funcs:\n", " times_n[f].append(min(timeit.Timer('%s(x,y)' %f, \n", " 'from __main__ import %s, x, y' %f)\n", " .repeat(repeat=3, number=1000)))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 64 }, { "cell_type": "code", "collapsed": false, "input": [ "%pylab inline" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": [ "import matplotlib.pyplot as plt\n", "\n", "labels = [('py_lstsqr', 'regular Python (CPython)'), \n", " ('cy_lstsqr', 'Cython implementation')]\n", "\n", "\n", "matplotlib.rcParams.update({'font.size': 12})\n", "\n", "fig = plt.figure(figsize=(10,8))\n", "for lb in labels:\n", " plt.plot(orders_n, times_n[lb[0]], alpha=0.5, label=lb[1], marker='o', lw=3)\n", "plt.xlabel('sample size n')\n", "plt.ylabel('time per computation in milliseconds [ms]')\n", "plt.xlim([1,max(orders_n) + max(orders_n) * 10])\n", "plt.legend(loc=2)\n", "plt.grid()\n", "plt.xscale('log')\n", "plt.yscale('log')\n", "ftext = 'Cython % is {:.2f}x faster than (C)Python'\\\n", " .format(times_n['py_lstsqr'][-1]\\\n", " /times_n['cy_lstsqr'][-1])\n", "plt.figtext(.14,.75, ftext, fontsize=11, ha='left')\n", "plt.title('Performance of least square fit implementations in Cython and (C)Python')\n", "plt.show()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 67 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }