{ "metadata": { "name": "CR\u00dcCIAL P\u0178THON Week 4 - Numpy Broadcasting" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": "#CR\u00dcCIAL P\u0178THON Week 4: Numpy Broadcasting" }, { "cell_type": "code", "collapsed": false, "input": "from IPython.core.display import Image \nImage(url='http://labrosa.ee.columbia.edu/crucialpython/logo.png', width=600) ", "language": "python", "metadata": {}, "outputs": [ { "html": "", "metadata": {}, "output_type": "pyout", "prompt_number": 1, "text": "" } ], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": "# Crucial imports\nimport numpy as np\nimport matplotlib.pyplot as plt", "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": "# Let's say we have a (near) periodic signal\nx = np.sin(np.arange(128))\nplt.plot(x)", "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 3, "text": "[]" }, { "metadata": {}, "output_type": "display_data", "png": "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\n/OIXYwCA0n+rElDYRrHjx49b7JFeHD16FAcOHMCqVavQ3d2N5t+fctXc3Izu7m7LvYuOP/uzP8NX\nvvIV5H1vxslK/zs7OzF9+nR89rOfxfXXX48//uM/xoULFzLR/6lTp+ILX/gCrrrqKsyePRuTJ0/G\n6tWrM9F3f0T198SJE2iVb2xCNp7nb3/727jtttsAZKf/O3bsQGtrK6699toxP6f03yoApG2jmE70\n9fXhYx/7GL7+9a9jotwa+fvI5XKpvbf//M//xIwZM7BixYrI8t00939kZAT79+/H5z//eezfvx9N\nTU3YvHnzmM+ktf9HjhzB1772NRw9ehQnTpxAX18fvvvd7475TFr7HhXl+pvme3niiSdQW1uL+++/\nP/Izaev/xYsXsWnTJmzcuPHSz6KeY6B8/60CQEtLC7q6ui79u6urawyCpTWGh4fxsY99DJ/+9Kdx\n1113ARArIblr+uTJk5hh68jDMvHqq69i586daGtrw3333YdXXnkFn/70pzPT/9bWVrS2tuKGG24A\nANx7773Yv38/Zs6cmfr+/+///i8++MEPYtq0aaiursY999yDvXv3ZqLv/oiaK8Hn+dixY2iRb3BK\nWXznO9/Brl278E//9E+XfpaF/h85cgRHjx7F8uXL0dbWhmPHjuF973sfuru7Sf23CgD+jWJDQ0N4\n4YUXsG7dOptdKhue5+HBBx/EkiVL8Kd/+qeXfr5u3Tps27YNALBt27ZLwJC22LRpE7q6utDZ2Ynn\nn38eN998M/7xH/8xM/2fOXMm5syZg0OHDgEA9uzZg6VLl+LOO+9Mff8XLVqE1157Df39/fA8D3v2\n7MGSJUsy0Xd/RM2VdevW4fnnn8fQ0BA6Oztx+PBhvJ/61nqDsXv3bnzlK1/Bjh07UO97a1EW+r9s\n2TJ0d3ejs7MTnZ2daG1txf79+9Hc3Ezrf7x2hX7s2rXLW7hwoTdv3jxv06ZNtrtTNv77v//by+Vy\n3vLly73rrrvOu+6667wf/OAH3unTp71bbrnFW7Bggbd69WrvzJkztrtaNjo6Oi5VAWWp/z//+c+9\nlStXetdee6139913e729vZnp/5YtW7wlS5Z411xzjfeZz3zGGxoaSnXf169f782aNcurqanxWltb\nvW9/+9sl+/vEE0948+bN866++mpv9+7dFnsuItj/b33rW978+fO9q6666tLz+9BDD136fFr7X1tb\ne+n790dbW9slE9jz9PvvNoK5cOHCxTgN6xvBXLhw4cKFnXAA4MKFCxfjNBwAuHDhwsU4DQcALly4\ncDFOwwGACxcuXIzTcADgwoULF+M0HAC4cOHCxTgNBwAuXLhwMU7j/wNNKBNvjPHYZQAAAABJRU5E\nrkJggg==\n", "text": "" } ], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": "To analyze time-varying content, we want to process individual overlapping frames.\n\nWe can use the stride_tricks from last week to get overlapped windows on a linear vector \n\n(from http://nbviewer.ipython.org/github/craffel/crucialpython/blob/master/week3/stride_tricks.ipynb )" }, { "cell_type": "code", "collapsed": false, "input": "# Build a \"framed\" version of x as successive, overlapped sequences\n# of frame_length points\nfrom numpy.lib import stride_tricks\nframe_length = 16\nhop_length = 4\nnum_frames = 1 + (len(x) - frame_length) / hop_length\nrow_stride = x.itemsize * hop_length\ncol_stride = x.itemsize\nx_framed = stride_tricks.as_strided(x, \n shape=(num_frames, frame_length), \n strides=(row_stride, col_stride))\nplt.imshow(x_framed, interpolation='nearest', cmap='gray')", "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 4, "text": "" }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": "" } ], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": "# If we take the FFT of each row, we can see the short-time fourier transform\nplt.imshow(np.abs(np.fft.rfft(x_framed)), interpolation='nearest')", "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 5, "text": "" }, { "metadata": {}, "output_type": "display_data", "png": "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\nrkJggg==\n", "text": "" } ], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": "# Although there's a steady sinusoidal component, we see interference between the \n# window frame and the signal phase. We need a tapered window applied to each frame.\nwindow = np.hanning(frame_length)\nplt.plot(window)", "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 6, "text": "[]" }, { "metadata": {}, "output_type": "display_data", "png": "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\nAABJRU5ErkJggg==\n", "text": "" } ], "prompt_number": 6 }, { "cell_type": "code", "collapsed": false, "input": "# But what's the best way to multiply each frame of x_framed by window?\n# Linear algebra way is to multiply by a diagonal matrix\ndiag_window = np.diag(window)\nplt.imshow(diag_window, interpolation='nearest', cmap='gray')", "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 7, "text": "" }, { "metadata": {}, "output_type": "display_data", "png": "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\nrkJggg==\n", "text": "" } ], "prompt_number": 7 }, { "cell_type": "code", "collapsed": false, "input": "# Now apply it to each frame using matrix multiplication\nx_framed_windowed = np.dot(x_framed, diag_window)\nplt.imshow(x_framed_windowed, interpolation='nearest', cmap='gray')", "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 8, "text": "" }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": "" } ], "prompt_number": 8 }, { "cell_type": "code", "collapsed": false, "input": "# Matlab way is to construct a matrix of repeating rows of the same size\nwindow_repeated = np.tile(window, (num_frames,1))\nplt.imshow(window_repeated, interpolation='nearest', cmap='gray')\n# then pointwise multiplication applies it to each row\nx_framed_windowed = x_framed * window_repeated", "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": "" } ], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": "# Numpy broadcasting implicitly (and efficiently) repeats singleton or missing dimensions\n# to make matrices the same size, so tiling is unneeded\nplt.imshow(x_framed*window, interpolation='nearest', cmap='gray')", "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 10, "text": "" }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": "" } ], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": "# Compare the timings:\n%timeit np.dot(x_framed, np.diag(window))\n%timeit x_framed*np.tile(window, (num_frames,1))\n%timeit x_framed*window\n# The big win is not having to allocate the second num_frames x frame_length array", "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": "100000 loops, best of 3: 10.7 \u00b5s per loop\n100000 loops, best of 3: 15 \u00b5s per loop" }, { "output_type": "stream", "stream": "stdout", "text": "\n100000 loops, best of 3: 4.13 \u00b5s per loop" }, { "output_type": "stream", "stream": "stdout", "text": "\n" } ], "prompt_number": 11 }, { "cell_type": "code", "collapsed": false, "input": "# What about if we had our data in columns?\nx_framed_T = x_framed.T\nplt.imshow(x_framed_T * window, interpolation='nearest', cmap='gray')", "language": "python", "metadata": {}, "outputs": [ { "ename": "ValueError", "evalue": "operands could not be broadcast together with shapes (16,29) (16) ", "output_type": "pyerr", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m# What about if we had our data in columns?\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mx_framed_T\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mx_framed\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mT\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mimshow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx_framed_T\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mwindow\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minterpolation\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'nearest'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcmap\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'gray'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mValueError\u001b[0m: operands could not be broadcast together with shapes (16,29) (16) " ] } ], "prompt_number": 12 }, { "cell_type": "code", "collapsed": false, "input": "# Broadcast works by starting at the last dimensions (the fastest-changing ones in 'C' ordering) \n# and promoting either one if it's one. \n# So we just have to make our window be frame_length x 1\n# We can do this with slicing and np.newaxis:\nplt.imshow(x_framed_T * window[:,np.newaxis], interpolation='nearest', cmap='gray')\n# Now broadcasting works again", "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 13, "text": "" }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": "" } ], "prompt_number": 13 }, { "cell_type": "code", "collapsed": false, "input": "# Broadcasting works across multiple dimensions. \n# It goes through each dimension from the last, looking for a match \n# or promoting singletons\na = np.random.rand( 3, 4, 5 )\nb = np.random.rand( 3, 5 )\nc = a*b", "language": "python", "metadata": {}, "outputs": [ { "ename": "ValueError", "evalue": "operands could not be broadcast together with shapes (3,4,5) (3,5) ", "output_type": "pyerr", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0ma\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrand\u001b[0m\u001b[0;34m(\u001b[0m \u001b[0;36m3\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m4\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m5\u001b[0m \u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrand\u001b[0m\u001b[0;34m(\u001b[0m \u001b[0;36m3\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m5\u001b[0m \u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0mc\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[0m\n\u001b[0m", "\u001b[0;31mValueError\u001b[0m: operands could not be broadcast together with shapes (3,4,5) (3,5) " ] } ], "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": "# That didn't work because there was no singleton dimension to promote\n# so we can introduce one, with reshape for instance:\nb2 = np.reshape(b, (3, 1, 5))\nc1 = a*b2\n# or using slicing\nc2 = a * b[:, np.newaxis, :]\nprint np.allclose(c1, c2)", "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": "True\n" } ], "prompt_number": 15 }, { "cell_type": "markdown", "metadata": {}, "source": "For the full description of how broadcasting works, see the SciPy documentation:\nhttp://docs.scipy.org/doc/numpy/user/basics.broadcasting.html" }, { "cell_type": "code", "collapsed": false, "input": "# Remember why we wanted the windowing, to remove artefacts from the STFT?\nplt.subplot(121)\nplt.imshow(np.abs(np.fft.rfft(x_framed)), interpolation='nearest')\nplt.subplot(122)\nplt.imshow(np.abs(np.fft.rfft(x_framed * window)), interpolation='nearest')\n# Windowing drastically reduces framing-related artefacts \n# (at the cost of a little frequency resolution)", "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 16, "text": "" }, { "metadata": {}, "output_type": "display_data", "png": "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\nRU5ErkJggg==\n", "text": "" } ], "prompt_number": 16 }, { "cell_type": "code", "collapsed": false, "input": "", "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }