{ "metadata": { "name": "", "signature": "sha256:f0b357ccb1145b65472bae03ede5fc3ff7acfd6c618deb894ace88b5385526fd" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "code", "collapsed": false, "input": [ "%load_ext cythonmagic" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "%%cython -lcblas\n", "import numpy as np\n", "\n", "cdef extern:\n", " double ddot_( int* N, double* X, int* INCX, double* Y, int* INCY ) nogil\n", " \n", "cpdef double dot(double[:] a, double[:] b) nogil:\n", " cdef int inc = 1\n", " cdef int n = a.shape[0]\n", " \n", " return ddot_(&n, &a[0], &inc, &b[0], &inc)\n", " \n", "def main():\n", " \n", " a = np.random.rand(100)\n", " b = np.random.rand(100)\n", " s = dot(a,b)\n", " " ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stderr", "text": [ "warning: /Users/noah/.ipython/cython/_cython_magic_31fdc41cb5785073c3693183243db8bf.pyx:10:23: Use boundscheck(False) for faster access\n", "warning: /Users/noah/.ipython/cython/_cython_magic_31fdc41cb5785073c3693183243db8bf.pyx:10:36: Use boundscheck(False) for faster access\n" ] } ], "prompt_number": 37 }, { "cell_type": "code", "collapsed": false, "input": [ " a = np.random.rand(100)\n", " b = np.random.rand(100)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 38 }, { "cell_type": "code", "collapsed": false, "input": [ "%timeit dot(a,b)\n", "%timeit np.dot(a,b)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "100000 loops, best of 3: 4.03 \u00b5s per loop\n", "1000000 loops, best of 3: 1.89 \u00b5s per loop" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 40 } ], "metadata": {} } ] }