{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def factorial(n):\n", " if n == 0:\n", " return 1\n", " else:\n", " return n * factorial(n - 1)\n", "\n", "def fact_test():\n", " for x in range(10000000):\n", " i = factorial(10)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3628800\n", "1 loop, best of 3: 18 s per loop\n" ] } ], "source": [ "print(factorial(10))\n", "%timeit fact_test()" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%load_ext cython" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%%cython\n", "\n", "def c_naive_factorial(n):\n", " if n == 0:\n", " return 1\n", " else:\n", " return n * c_naive_factorial(n - 1)\n", "\n", "def c_naive_fact_test():\n", " for x in range(10000000):\n", " i = c_naive_factorial(10)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3628800\n", "1 loop, best of 3: 4.96 s per loop\n" ] } ], "source": [ "print(c_naive_factorial(10))\n", "%timeit c_naive_fact_test()" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%load_ext cython" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%%cython\n", "import cython\n", "cimport cython\n", "\n", "cdef int cfactorial(int n):\n", " if n == 0:\n", " return 1\n", " else:\n", " return n * cfactorial(n - 1)\n", " \n", "cdef void cfact_test(int n):\n", " cdef i, j\n", " for i in range(10000000):\n", " j = cfactorial(n)\n", "\n", "def fact_test(n):\n", " cfact_test(n)\n", " \n", "def factorial(n):\n", " return cfactorial(n)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3628800\n", "323 ms ± 1.48 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n", "Approximately 50x improvement\n" ] } ], "source": [ "print(factorial(10))\n", "%timeit fact_test(10)\n", "print(\"Approximately 50x improvement\")" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.1" } }, "nbformat": 4, "nbformat_minor": 2 }