{ "metadata": { "name": "", "signature": "sha256:8838fc45659a25c7bb4a94c0c475dd830659e0f3af557dea3027c1ed9e985a43" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "[Sebastian Raschka](http://sebastianraschka.com) \n", "\n", "- [Open in IPython nbviewer](http://nbviewer.ipython.org/github/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day12_insert_into_sorted_list.ipynb?create=1) \n", "\n", "- [Link to this IPython notebook on Github](https://github.com/rasbt/One-Python-benchmark-per-day/blob/master/ipython_nbs/day12_insert_into_sorted_list.ipynb) \n", "\n", "- [Link to the GitHub Repository One-Python-benchmark-per-day](https://github.com/rasbt/One-Python-benchmark-per-day)\n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import time\n", "print('Last updated: %s' %time.strftime('%d/%m/%Y'))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Last updated: 24/06/2014\n" ] } ], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "I would be happy to hear your comments and suggestions. \n", "Please feel free to drop me a note via\n", "[twitter](https://twitter.com/rasbt), [email](mailto:bluewoodtree@gmail.com), or [google+](https://plus.google.com/+SebastianRaschka).\n", "
" ] }, { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Day 12 - One Python Benchmark per Day" ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Lightning fast insertion into sorted lists via the `bisect` module" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[[skip to results](#Results)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Python comes with a full-charged battery pack of useful Standard Library modules. The [`bisect`](https://docs.python.org/3.4/library/bisect.html) module (short for \"Array bisection algorithm\") was built for fast insertion of new values to already sorted lists. \n", "\n", "In this benchmark, we will take a look at 2 of its useful functions:\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- `bisect_left(val, a_list)`: \n", " Returns the insertion point for a value into a sorted list. E.g., \n", " " ] }, { "cell_type": "code", "collapsed": false, "input": [ "import bisect\n", "a_list = [1,2,4]\n", "bisect.bisect_left(a_list, 3)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 4, "text": [ "2" ] } ], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- `insort_left(val, a_list)`: \n", " Directly inserts a new value into a sorted list maintaining the order." ] }, { "cell_type": "code", "collapsed": false, "input": [ "a_list = [1,2,4]\n", "bisect.insort_left(a_list, 3)\n", "a_list" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 5, "text": [ "[1, 2, 3, 4]" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
" ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Approaches for inserting a value into a sorted list" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def insert_sort(a_list, val):\n", " a_list.append(val)\n", " a_list.sort()\n", " return None" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "from bisect import bisect_left\n", "\n", "def bisect_insert(a_list, val):\n", " a_list.insert(bisect_left(a_list, val), val)\n", " return None" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [ "from bisect import insort_left\n", "\n", "def bisect_insort(a_list, val):\n", " insort_left(a_list, val)\n", " return None" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
" ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "`timeit` benchmark for integer lists" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import timeit\n", "import random\n", "\n", "random.seed(123)\n", "a_list = [random.randrange(0, 1000) for i in range(50)]\n", "a_list.sort()\n", "b_list = a_list[:]\n", "c_list = a_list[:]\n", "\n", "insert_int = [] # for timeit results\n", "\n", "random.seed(123)\n", "insert_int.append(min(timeit.Timer('insert_sort(a_list, random.randrange(0, 1000))', \n", " 'from __main__ import insert_sort, a_list, random').repeat(repeat=3, number=10000)))\n", "\n", "random.seed(123)\n", "insert_int.append(min(timeit.Timer('bisect_insert(b_list, random.randrange(0, 1000))', \n", " 'from __main__ import bisect_insert, b_list, random').repeat(repeat=3, number=10000)))\n", "\n", "random.seed(123)\n", "insert_int.append(min(timeit.Timer('bisect_insort(c_list, random.randrange(0, 1000))', \n", " 'from __main__ import bisect_insort, c_list, random').repeat(repeat=3, number=10000)))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 7 }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "Checking that all implementations produced similar results" ] }, { "cell_type": "code", "collapsed": false, "input": [ "assert(a_list[:] == b_list[:] == c_list[:])\n", "print('ok')" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "ok\n" ] } ], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
" ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "`timeit` benchmark for \"string\" lists" ] }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "Random String Generator" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import string\n", "\n", "def rand_string(length):\n", " \"\"\" Generates a random string of numbers, lower- and uppercase chars. \"\"\"\n", " return ''.join(random.choice(\n", " string.ascii_lowercase + string.ascii_uppercase + string.digits) \n", " for i in range(length)\n", " )\n", "\n", "print(\"Example:\", rand_string(length=8))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Example: WEbg6EQl\n" ] } ], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "import timeit\n", "import random\n", "\n", "a_list = [rand_string(4) for i in range(50)]\n", "a_list.sort()\n", "b_list = a_list[:]\n", "c_list = a_list[:]\n", "\n", "insert_str = [] # for timeit results\n", "\n", "random.seed(123)\n", "insert_str.append(min(timeit.Timer('insert_sort(a_list, rand_string(4))', \n", " 'from __main__ import insert_sort, a_list, rand_string').repeat(repeat=3, number=10000)))\n", "\n", "random.seed(123)\n", "insert_str.append(min(timeit.Timer('bisect_insert(b_list, rand_string(4))', \n", " 'from __main__ import bisect_insert, b_list, rand_string').repeat(repeat=3, number=10000)))\n", "\n", "random.seed(123)\n", "insert_str.append(min(timeit.Timer('bisect_insort(c_list, rand_string(4))', \n", " 'from __main__ import bisect_insort, c_list, rand_string').repeat(repeat=3, number=10000)))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 10 }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "Check that all implementations produced similar results" ] }, { "cell_type": "code", "collapsed": false, "input": [ "assert(a_list[:] == b_list[:] == c_list[:])\n", "print('ok')" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "ok\n" ] } ], "prompt_number": 11 }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
" ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Preparing to plot the results" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import platform\n", "import multiprocessing\n", "\n", "def print_sysinfo():\n", " \n", " print('\\nPython version :', platform.python_version())\n", " print('compiler :', platform.python_compiler())\n", " \n", " print('\\nsystem :', platform.system())\n", " print('release :', platform.release())\n", " print('machine :', platform.machine())\n", " print('processor :', platform.processor())\n", " print('CPU count :', multiprocessing.cpu_count())\n", " print('interpreter:', platform.architecture()[0])\n", " print('\\n\\n')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 12 }, { "cell_type": "code", "collapsed": false, "input": [ "%matplotlib inline" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 13 }, { "cell_type": "code", "collapsed": false, "input": [ "import matplotlib.pyplot as plt\n", "\n", "def plot():\n", "\n", " f, (ax1, ax2) = plt.subplots(1, 2, figsize=(10,5))\n", "\n", " \n", " bar_labels = ['.insert() + .sort()', \n", " 'bisect_left() + .insert()', \n", " 'bisect_insort()'\n", " ]\n", " bar_width = 0.5\n", " bar_left = [i+1 for i in range(len(insert_int))] \n", " tick_pos = [i+(bar_width/2) for i in bar_left] \n", " plt.grid()\n", " \n", " ax1.bar(bar_left, insert_int, width=bar_width,\n", " alpha=0.5, color='b', label='integer list')\n", "\n", " \n", " plt.xlim([min(tick_pos)-bar_width, max(tick_pos)+bar_width])\n", " \n", " plt.setp(plt.gca().get_xticklabels(), rotation=45, \n", " horizontalalignment='right')\n", " \n", " plt.sca(ax1)\n", " plt.xticks(tick_pos, bar_labels)\n", "\n", " ax1.set_ylabel(\"time in milliseconds for 1000 iterations and 3 repititions\")\n", " ax1.set_xlabel(\"\")\n", " \n", " \n", " ax2.bar(bar_left, insert_str, width=bar_width,\n", " alpha=0.5, color='g', label='string list')\n", " \n", " plt.xlim([min(tick_pos)-bar_width, max(tick_pos)+bar_width])\n", " plt.grid()\n", " plt.setp(plt.gca().get_xticklabels(), rotation=45, \n", " horizontalalignment='right')\n", "\n", " plt.sca(ax2)\n", " plt.xticks(tick_pos, bar_labels)\n", "\n", " ax2.set_ylabel(\"time in milliseconds for 1000 iterations and 3 repititions\")\n", " ax2.set_xlabel(\"\")\n", " plt.ylim([0,2.2])\n", " \n", " handles, labels = ax1.get_legend_handles_labels()\n", " ax1.legend(handles, labels)\n", " handles, labels = ax2.get_legend_handles_labels()\n", " ax2.legend(handles, labels)\n", " \n", " plt.suptitle('Inserting new values into a sorted list', fontsize=18)\n", " plt.show()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 16 }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
" ] }, { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Results" ] }, { "cell_type": "code", "collapsed": false, "input": [ "plot()\n", "print_sysinfo()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nkZr8H0Yyh6Ph0RPOAAAAAElFTkSuQmCC\n", "text": [ "" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Python version : 3.4.1\n", "compiler : GCC 4.2.1 (Apple Inc. build 5577)\n", "\n", "system : Darwin\n", "release : 13.2.0\n", "machine : x86_64\n", "processor : i386\n", "CPU count : 4\n", "interpreter: 64bit\n", "\n", "\n", "\n" ] } ], "prompt_number": 17 } ], "metadata": {} } ] }