{ "metadata": { "name": "", "signature": "sha256:0a849a225c4a553c9465a747c877c158325eca248f9b70d992fac5aab67aef3a" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "code", "collapsed": false, "input": [ "# - compatibility with Python 3\n", "from __future__ import print_function # print('me') instead of print 'me'\n", "from __future__ import division # 1/2 == 0.5, not 0" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "# - show figures inside the notebook\n", "%matplotlib inline" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "# - import common modules\n", "import numpy as np # the Python array package\n", "import matplotlib.pyplot as plt # the Python plotting package" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Range" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`range` is a built-in function in Python.\n", "\n", "\"built-in\" means you can use `range` without having to `import` it.\n", "\n", "In Python 2, `range` returns a list:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "range(10)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 4, "text": [ "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]" ] } ], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "type(range(10))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 5, "text": [ "list" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "In Python 3, range returns a special object that behaves rather like a list, but doesn't create the values until you need them. This is more efficient in memory.\n", "\n", "Here is `range` in Python 3:\n", "\n", "```\n", "In [1]: range(10)\n", "Out[1]: range(0, 10)\n", "\n", "In [2]: type(range(10))\n", "Out[2]: range\n", "\n", "In [3]: list(range(10))\n", "Out[3]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are three ways of calling range - with 1, 2 or 3 arguments.\n", "\n", "With just one argument, the argument value is the length of the returned list, or, equivalently, the largest value in the list, plus 1 (as when you do slicing), or, equivalently, the value `stop` such that no list element is `>= stop`:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "range(5)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 6, "text": [ "[0, 1, 2, 3, 4]" ] } ], "prompt_number": 6 }, { "cell_type": "code", "collapsed": false, "input": [ "range(2)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 7, "text": [ "[0, 1]" ] } ], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you pass 2 arguments, the first value is the first value in the returned list, and the second value is the stop value:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "range(4, 10)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 8, "text": [ "[4, 5, 6, 7, 8, 9]" ] } ], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you pass 3 arguments, the first value is the first returned value, the second is the stop value, and the third is the step size." ] }, { "cell_type": "code", "collapsed": false, "input": [ "range(4, 10, 2)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 9, "text": [ "[4, 6, 8]" ] } ], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "range(4, 11, 2)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 10, "text": [ "[4, 6, 8, 10]" ] } ], "prompt_number": 10 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## np.arange" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`arange` in numpy is very like range with two important differences:\n", "\n", "* `arange` returns an array rather than a list (in Python 2 or Python 3);\n", "* `arange` arguments can be floating point values." ] }, { "cell_type": "code", "collapsed": false, "input": [ "np.arange(4, 11, 2)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 11, "text": [ "array([ 4, 6, 8, 10])" ] } ], "prompt_number": 11 }, { "cell_type": "code", "collapsed": false, "input": [ "np.arange(4, 11, 0.5)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 12, "text": [ "array([ 4. , 4.5, 5. , 5.5, 6. , 6.5, 7. , 7.5, 8. ,\n", " 8.5, 9. , 9.5, 10. , 10.5])" ] } ], "prompt_number": 12 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Because `arange` returns arrays, you can also multiply by the step size and maybe add the start value to create equally spaced vectors:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "np.arange(10) * 0.5 + 4" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 13, "text": [ "array([ 4. , 4.5, 5. , 5.5, 6. , 6.5, 7. , 7.5, 8. , 8.5])" ] } ], "prompt_number": 13 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exponential floating point format" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We have so far seen floating point numbers in this kind of format in text files : ``314.15926``.\n", "\n", "It is common for numpy and MATLAB to write floating point numbers in exponential format, like this ``3.1415926e02``. You can read this as meaning `3.1415926 * 10**2` == `3.1415926 * 100` == `314.15926`. Both `np.loadtxt` and the `float` function will happily convert these to floating point values in memory:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "float('2.2e02')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 14, "text": [ "220.0" ] } ], "prompt_number": 14 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Legends on plots" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We have already seen that we can plot two things onto the same plot:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "x = np.arange(0, 2*np.pi, 0.1)\n", "y1 = np.sin(x)\n", "y2 = np.cos(x)\n", "plt.plot(x, y1)\n", "plt.plot(x, y2)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 15, "text": [ "[]" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 15 }, { "cell_type": "markdown", "metadata": {}, "source": [ "It can be hard to remember which plot is which (is green the sin or the cos)? `label` and `legend` are useful for that:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "plt.plot(x, y1, label='sin')\n", "plt.plot(x, y2, label='cos')\n", "plt.legend()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 16, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 16 }, { "cell_type": "code", "collapsed": false, "input": [ "from scipy.stats import gamma" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 17 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Scipy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Scipy* is a large library of scientific routines that builds on top of numpy. \n", "\n", "You can think of numpy as being a subset of MATLAB, and numpy + scipy as being as being roughly equivalent to MATLAB plus the MATLAB toolboxes." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Scipy has many sub-packages, for doing things like reading MATLAB `.mat` files (`scipy.io`) or working with sparse matrices (`scipy.sparse`). We are going to be using the functions and objects for working with statistical distributions in `scipy.stats`:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import scipy.stats" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 18 }, { "cell_type": "markdown", "metadata": {}, "source": [ "`scipy.stats` contains objects for working with many different distributions. We are going to be working with `scipy.stats.gamma`, which implements the [gamma distribution](https://en.wikipedia.org/wiki/Gamma_distribution).\n", "\n", "In particular we are interested in the [probability density function](https://en.wikipedia.org/wiki/Probability_density_function) (PDF) of the gamma distribution.\n", "\n", "Because this is a function, we need to pass it an array of values at which it will evaluate.\n", "\n", "We can also pass various parameters which change the shape, location and width of the gamma PDF. The most important is the first parameter (after the input array) known as the [shape parameter](https://en.wikipedia.org/wiki/Shape_parameter) ($k$ in the [wikipedia page on gamma distributions](https://en.wikipedia.org/wiki/Gamma_distribution))." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First we chose some x values at which to sample from the gamma PDF:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "x = np.arange(0, 25, 0.1)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 19 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next we plot the gamma PDF for shape values of 2, 4, 8, 12." ] }, { "cell_type": "code", "collapsed": false, "input": [ "plt.plot(x, gamma.pdf(x, 2), label='k=2')\n", "plt.plot(x, gamma.pdf(x, 4), label='k=4')\n", "plt.plot(x, gamma.pdf(x, 8), label='k=8')\n", "plt.plot(x, gamma.pdf(x, 12), label='k=12')\n", "plt.legend()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 20, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 20 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will see more from the statistics distributions next week." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Correlation coefficient" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "By \"correlation coefficient\", we mean the [Pearson product moment correlation coefficient](https://en.wikipedia.org/wiki/Pearson_product-moment_correlation_coefficient).\n", "\n", "Let's say I have two arrays, `x` and `y`:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "x = np.array([ 20.57, 18.33, 20.8 , 18.77, 18.46, 21.09, 19.96, 20.61,\n", " 18.73, 19.6 , 18.15, 19.7 , 20.36, 20.39, 19.67, 20.73])\n", "y = np.array([ 28.98, 30.13, 29.64, 29.87, 28.78, 33.48, 31.36, 31.04,\n", " 30.43, 31.69, 27.08, 29.25, 29.5 , 30.04, 29.74, 30.06])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 21 }, { "cell_type": "code", "collapsed": false, "input": [ "plt.plot(x, y, 'o')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 22, "text": [ "[]" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 22 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The numpy routine `np.corrcoef` gives me the correlation *matrix* between `x` and `y`:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "corr_matrix = np.corrcoef(x, y)\n", "corr_matrix" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 23, "text": [ "array([[ 1. , 0.47920906],\n", " [ 0.47920906, 1. ]])" ] } ], "prompt_number": 23 }, { "cell_type": "markdown", "metadata": {}, "source": [ "`corr_matrix[0, 0]` is the correlation of `x` with itself, `corr_matrix[1, 0]` (and `corr_matrix[0, 1]`) is the correlation of `x` with `y`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "See the [correlation exercises](more_correlation.ipynb) for more on correlation." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Be careful - `np.correlate` is something else entirely." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## dot products" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If I have two vectors $\\mathbf{a}$ with elements $a_0, a_1, ... a_{n-1}$, and $\\mathbf{b}$ with elements $b_0, b_1, ... b_{n-1}$ then the [dot product](https://en.wikipedia.org/wiki/Dot_product) is defined as:\n", "\n", "$$\n", "\\mathbf{a}\\cdot \\mathbf{b} = \\sum_{i=0}^{n-1} a_ib_i = a_0b_0 + a_1b_1 + \\cdots + a_{n-1}b_{n-1}\n", "$$\n", "\n", "In code:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "a = np.arange(5)\n", "b = np.arange(10, 15)\n", "np.dot(a, b)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 24, "text": [ "130" ] } ], "prompt_number": 24 }, { "cell_type": "code", "collapsed": false, "input": [ "# The same thing as\n", "np.sum(a * b) # Elementwise multiplication" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 25, "text": [ "130" ] } ], "prompt_number": 25 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Matrix multiplication operates by taking dot products of the rows of the first array (matrix) with the columns of the second.\n", "\n", "Let's say I have a matrix $\\mathbf{X}$, and $X_{i,:}$ is row $i$ in $\\mathbf{X}$. I have a matrix $\\mathbf{Y}$, and $Y_{:,j}$ is column $j$ in $\\mathbf{Y}$. The output matrix $\\mathbf{Z} = \\mathbf{X} \\mathbf{Y}$ has entry $Z_{i,j} = X_{i,:} \\cdot Y_{:, j}$. We will see this often over the next few weeks." ] }, { "cell_type": "code", "collapsed": false, "input": [ "X = np.array([[0, 1, 2], [3, 4, 5]])\n", "X" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 26, "text": [ "array([[0, 1, 2],\n", " [3, 4, 5]])" ] } ], "prompt_number": 26 }, { "cell_type": "code", "collapsed": false, "input": [ "Y = np.array([[7, 8], [9, 10], [11, 12]])\n", "Y" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 27, "text": [ "array([[ 7, 8],\n", " [ 9, 10],\n", " [11, 12]])" ] } ], "prompt_number": 27 }, { "cell_type": "code", "collapsed": false, "input": [ "X.dot(Y)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 28, "text": [ "array([[ 31, 34],\n", " [112, 124]])" ] } ], "prompt_number": 28 }, { "cell_type": "code", "collapsed": false, "input": [ "X[0, :].dot(Y[:, 0])" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 29, "text": [ "31" ] } ], "prompt_number": 29 }, { "cell_type": "code", "collapsed": false, "input": [ "X[1, :].dot(Y[:, 0])" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 30, "text": [ "112" ] } ], "prompt_number": 30 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Convolution and the tail values" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's say I have a neural vector with a couple of spikes:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "times = np.arange(0, 60, 0.5) # samples every 0.5 seconds\n", "neural_vector = np.zeros(times.shape)\n", "neural_vector[10] = 1 # At 5 seconds\n", "neural_vector[20] = 1 # At 10 seconds\n", "plt.plot(times, neural_vector)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 31, "text": [ "[]" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 31 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then I have my HRF function, sampled every half second, to match:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def hrf(t):\n", " \"A hemodynamic response function\"\n", " values = t ** 8.6 * np.exp(-t / 0.547)\n", " # Scale max to 1\n", " return values / np.max(values)\n", "\n", "hrf_times = np.arange(0, 20, 0.5)\n", "hrf_samples = hrf(hrf_times)\n", "plt.plot(hrf_times, hrf_samples)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 32, "text": [ "[]" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 32 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The input neural vector is length 120, and the HRF vector is length 40:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print(len(neural_vector))\n", "print(len(hrf_samples))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "120\n", "40\n" ] } ], "prompt_number": 33 }, { "cell_type": "markdown", "metadata": {}, "source": [ "For reasons that may be familiar to you now, when we convolve the neural vector with the hrf signal, we get an output that is length 120 + 40 - 1 = 159:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "hemodynamic_prediction = np.convolve(neural_vector, hrf_samples)\n", "len(hemodynamic_prediction)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 34, "text": [ "159" ] } ], "prompt_number": 34 }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is because of the HRF falling off the end of the input vector. The value at index 120 in the new vector refers to time 60, and value 121 refers to time 60.5 seconds. To retain only the values in the new hemodynamic vector that refer to times up to (not including) 60s, we can just drop the last `len(hrf_signal) - 1` values:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "hemodynamic_for_60s = hemodynamic_prediction[:len(neural_vector)]\n", "plt.plot(times, neural_vector, label='neural vector')\n", "plt.plot(times, hemodynamic_for_60s, label='hemodynamic prediction')\n", "plt.legend()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 35, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAXUAAAEACAYAAABMEua6AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl4VPXZ//H3nT0hC0kIWUgCWiIgZXcB1BqVWrBu0PoT\nrUtbqvTpo7W1Txd9fhawrV61cj1o+3tUqPtWqlIVN9RqtK0iKiBWiIACWQmELGQhkEm+vz8mM0zW\n2c5kkjP367pykTlzMt/vSeInX+9zzzlijEEppZQ9RIV7Akoppayjoa6UUjaioa6UUjaioa6UUjai\noa6UUjaioa6UUjbiNdRF5CERqRGRT/t5/jsi8omIbBORf4nIVOunqZRSyhe+rNQfBuYP8PyXwNeM\nMVOB3wCrrZiYUkop/3kNdWPMP4D6AZ5/3xjT2PXwAyDforkppZTyk9U19SXAKxa/plJKKR/FWPVC\nInIO8H3gDKteUymllH8sCfWuk6NrgPnGmD5LNSKiF5lRSqkAGGPE132DLr+ISCGwDrjKGLPby8Rs\n+7Fs2bKwz0GPT49Nj89+H/7yulIXkaeBs4FRIlIOLANiu0L6AeDXQDpwn4gAtBtjTvN7JkoppYLm\nNdSNMVd4ef4HwA8sm5FSSqmA6TtKLVJcXBzuKYSUnY/PzscGenyRRgKp2QQ0kIgZrLGUUsouRATj\nx4lSy1oalQpW1zkZpSKWFQtfDXU1pOj/zalIZdWiRmvqSillIxrqSillIxrqSillIxrqSg0zxcXF\nPPjgg+GehhqiNNSVGmZEZFA7hZYvX87VV189aOOp4GioKzWEOByOcE/Bch0dHeGeQkTRUFfKB+PG\njWPlypVMmzaNkSNHsnjxYo4ePep+/qWXXmL69Omkp6dzxhln8Omnx+/+GBUVxZdfful+/N3vfpfb\nbrsNgJKSEvLz87nrrrvIzc1lyZIlNDQ0cOGFFzJ69GgyMjK46KKLqKys9DrHqqoqkpKSqK8/fqHU\nLVu2kJWV5Q7Whx56iJNPPpmMjAzmz59PWVmZe9/PPvuMr3/962RmZpKTk8Odd97Jhg0buPPOO1m7\ndi0pKSnMmDHDPdbFF19MZmYmRUVF/PnPf3a/zvLly/n2t7/N1VdfTVpaGo8++qi/324VBA11pXwg\nIjzzzDNs2LCBPXv2sG3bNh555BHAGZxLlixhzZo11NXVsXTpUi6++GLa29v7fS3P8klNTQ319fWU\nlZXxwAMP0NnZyZIlSygrK6OsrIzExERuuOEGr3PMy8tjzpw5PPfcc+5tTz31FJdddhnR0dG88MIL\n3Hnnnfztb3+jtraWs846iyuucF7aqampiXnz5nHBBRdQXV3N7t27Oe+88/jGN77BrbfeyuLFi2lq\namLLli0ALF68mMLCQqqrq3n22We59dZbefvtt93jvvjii1x22WU0NjZy5ZVX+v39VoHTUFfDhog1\nH4H68Y9/TE5ODunp6Vx00UVs3boVgNWrV7N06VJOPfVURIRrrrmG+Ph4Nm7c2O9reb7JKioqihUr\nVhAbG0tCQgIZGRksXLiQhIQEkpOTufXWW3nnnXd8muOVV17J008/7R5j7dq17lC9//77ueWWW5gw\nYQJRUVHccsstbN26lbKyMl566SXy8vL46U9/SlxcHMnJyZx22mnu1/Gcb3l5Oe+99x6///3viYuL\nY9q0afzgBz/gsccec+8zd+5cLr74YgASEhJ8mruyhoa6GjaMseYjUDk5Oe7PExMTaW5uBmDfvn2s\nXLmS9PR090dFRQVVVVU+vW5WVhZxcXHux62trSxdupRx48aRlpbG2WefTWNjo0/vtl20aBHvv/8+\n+/fv59133yUqKoozzzzTPc+bbrrJPcfMzEwAKisrqaio4MQTT/RpvlVVVWRkZDBixAj3tsLCwm4l\novx8vVVxuGioKxUgVwmlsLCQ//7v/6a+vt790dzczOWXXw5AUlISra2t7q+rrq7uVn7p2cmycuVK\ndu7cyaZNm2hsbOSdd97x+YYJ6enpnH/++axdu5annnrKXV5xzXP16tXd5tnS0sKcOXMoKCjoVvf3\nFBXVPSby8vKoq6tz/1EDKCsr6xbkeh2f8NFQVypArpC97rrruP/++9m0aRPGGFpaWnj55ZfdoTd9\n+nSefPJJOjo6eO2113j33XcHfN3m5mYSExNJS0ujrq6OFStW9Dt2X6688koeffRRnnvuuW717B/+\n8IfccccdbN++HYDGxkaeeeYZAC688EKqq6u55557OHr0KE1NTWzatAmA7Oxs9u7d6x6zoKCAuXPn\ncsstt3D06FG2bdvGQw89xFVXXeXrt06FkIa6UgHwPNk5a9Ys1qxZww033EBGRgZFRUXd6sv33HMP\n69evJz09naeeeoqFCxf2ei1PP/nJTzhy5AijRo1i7ty5LFiwoNc+A62EL774Ynbv3k1ubi5Tpkxx\nb7/00kv55S9/yeLFi0lLS2PKlCls2LABgOTkZN544w3Wr19Pbm4uJ510EiUlJQBcdtllAGRmZnLK\nKacA8PTTT7N3717y8vJYtGgRt99+O+eee26v740afHo9dTVkdF03OtzTUCos+vv99/d66rpSV0op\nG9FQHyZ0BauU8oWG+jCx9KWlPLzl4XBPQyk1xGlNfRjoNJ1k/SGLkQkj2XnDTqKjosM9pZDQmrqK\nZFpTjyBb929l9IjRZI/IZt2OdeGejlJqCNNQHwbe/PJN5p0wj5/P/Tl/eO8PuppVSvVLQ30YePPL\nN5l34jwunnAx9W31/KPsH+GeklJqiNJQH+LaHG28X/E+Z487m+ioaH4252fc/d7d4Z6WUmqI0lAf\n4t4vf5/JWZMZmTASgGunXcv7Fe9T3lge5plFlnHjxvH3v/893NPoxfPa7EPFP/7xDyZOnBjuafTi\neQensrIyUlJSAipl3nnnnVx33XVWT88yGupDnKv04pIYm8j0nOl8dvCzMM4q8gzVt74PxXmdddZZ\nlJaWhnsavXh+nwoLC2lqavL6vSspKaGgoKDbtltuuYU1a9aEZI5W8BrqIvKQiNSIyKcD7HOviOwS\nkU9EZIa1U4xsb+7pHuoA49PHs7tud5hmpIaaSDxxbsfb/lnFl5X6w8D8/p4UkQuA8caYIuB64D6L\n5hbx6o/Us/3gdubkz+m2vSiziF2HdoVpVpFry5YtAd3Obty4cdx9991MnTqVlJQUlixZQk1NDQsW\nLCAtLY2vf/3rNDQ0uPd/8cUXmTx5Munp6ZxzzjndVr1btmxh5syZpKamsnjxYtra2tyrza9+9au8\n9NJL7n3b29sZNWoUn3zyCXv37iUqKorHHnuMsWPHkpWVxR133OHed9OmTcyZM4f09HTy8vK48cYb\nu925KSoqivvuu4+ioiJSU1P59a9/zRdffMGcOXPc3w/X/j1Xt+Xl5SxatIjRo0czatQobrzxxj6/\nv67b4C1evJjU1FRmzZrFtm3bun0f77rrLvf3sbOzk40bNzJ37lzS09OZPn16t5uJ7Nmzh7PPPpvU\n1FTOP/98amtr3c+5vh+dnZ0A1NXV8b3vfY8xY8aQkZHBokWLaG1tZcGCBVRVVZGSkkJqairV1dW9\nbsQ90M/L220QQ8J1neaBPoBxwKf9PHc/cLnH41Igu4/9jPLPuu3rzDce/0av7S+UvmAuePKCMMwo\ntIby78jYsWPN6aefbqqrq01dXZ2ZNGmSuf/++40xxmzevNmMHj3abNq0yXR2dppHH33UjBs3zhw7\ndswYY8y4cePMnDlzzIEDB0xlZaUZPXq0mTFjhtm6datpa2sz5557rlmxYoUxxpjPP//cjBgxwrz5\n5pvG4XCYu+66y4wfP960t7ebo0ePmsLCQrNq1SrjcDjMs88+a2JjY81tt91mjDHmrrvuMpdffrl7\nzs8//7yZOnWqMcaYPXv2GBEx119/vWlrazOffPKJiY+PN6WlpcYYYz7++GPzwQcfmI6ODrN3714z\nadIks2rVKvdriYi59NJLTVNTk/nss89MXFycOeecc8yePXtMY2OjOfnkk82jjz5qjDHm7bffNvn5\n+cYYYxwOh5k6daq5+eabTWtrq2lrazP//Oc/+/weL1u2zMTGxprnnnvOOBwOc/fdd5sTTjjBOBwO\n989gxowZpqKiwrS1tZmKigqTmZlpXn31VWOMMW+88YbJzMw0tbW1xhhjZs+ebX72s5+ZY8eOmXff\nfdekpKSYq6++utv3o6OjwxhjzAUXXGAWL15sGhoaTHt7u3n33XeNMcaUlJS4j8Vl+fLl5qqrrvL6\n83L97Pv7vempv9//ru0+ZbUxhhgL/i6MATzP2lUA+UCNBa8d0f594N/Myp3Va3tRRmSu1GWFNbVj\ns8z/coWIuG9nB/R7OzuAa665hjvuuIONGzdy1llnAXDjjTeSlZUFOGvO2dnZTJs2DYCFCxe6T8Ku\nXbuWCy+8kPPOOw+A//qv/+Kee+7hX//6FyKCw+HgpptuAuBb3/qWe0yA73znO9x+++00NzeTnJzM\n448/3m1FCbBs2TLi4+OZOnUq06ZNY+vWrUyYMIGZM2e69xk7dizXX38977zzjnssgF/84hckJydz\n8sknM2XKFBYsWMC4ceMAWLBgAVu2bOGaa67pNt6mTZuorq7mD3/4g/tmG2eccUa/3+dTTjmFRYsW\nAXDzzTezcuVKNm7cyBlnnOH+GYwZMwaAJ554ggsuuID5852FhHnz5nHKKafw8ssvU1xczEcffcRb\nb71FbGwsZ511FhdddFGfparq6mpee+016urqSEtLc/+MoO/Slue2/n5e7733Hl/72tcA+v29CRUr\nQh2g539tYS3yPfEETJ8OX/1q6MZ48fMX+ezAZ9x4+o08sjqZhQuh63fNMuWHy5mZO7PX9hPST6Cs\n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\n", "text": [ "" ] } ], "prompt_number": 35 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Getting the time series from a voxel " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's say I have a 4D image:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import nibabel as nib\n", "img = nib.load('ds114_sub009_t2r1.nii', mmap=False)\n", "data = img.get_data()\n", "data.shape" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 36, "text": [ "(64, 64, 30, 173)" ] } ], "prompt_number": 36 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Each element slicing over the last dimension, is a 3D volume:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "vol0 = data[..., 0]\n", "vol1 = data[..., 1]\n", "vol1.shape" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 37, "text": [ "(64, 64, 30)" ] } ], "prompt_number": 37 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The term *voxel* refers to a 3 dimensional pixel - a position in three dimensional space.\n", "\n", "These 3D volumes contain voxel values, for all of the 64, 64, 30 voxels, for a single time point.\n", "\n", "For example, let's say I was interested at the voxel at (i, j, k) coordinates (10, 23, 9):" ] }, { "cell_type": "code", "collapsed": false, "input": [ "vox_value = vol0[10, 23, 9]\n", "vox_value" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 38, "text": [ "30" ] } ], "prompt_number": 38 }, { "cell_type": "markdown", "metadata": {}, "source": [ "This value is the value for this voxel (voxel at 10, 23, 9) for this time point (first time point). This would be the value for the same voxel at the second time point (volume index 1):" ] }, { "cell_type": "code", "collapsed": false, "input": [ "vol1[10, 23, 9]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 39, "text": [ "17" ] } ], "prompt_number": 39 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Of course I could get the value for this voxel, at every time point, by doing a loop:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "vox_values = []\n", "for i in range(data.shape[-1]):\n", " vox_values.append(data[10, 23, 9, i])\n", "len(vox_values)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 40, "text": [ "173" ] } ], "prompt_number": 40 }, { "cell_type": "code", "collapsed": false, "input": [ "vox_values[:15]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 41, "text": [ "[30, 17, 22, 30, 40, 38, 26, 45, 47, 27, 32, 38, 33, 35, 21]" ] } ], "prompt_number": 41 }, { "cell_type": "markdown", "metadata": {}, "source": [ "I can get the same effect by slicing over the last dimension:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "sliced_vox_values = data[10, 23, 9, :]\n", "sliced_vox_values[:15]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 42, "text": [ "array([30, 17, 22, 30, 40, 38, 26, 45, 47, 27, 32, 38, 33, 35, 21], dtype=int16)" ] } ], "prompt_number": 42 }, { "cell_type": "code", "collapsed": false, "input": [ "np.all(vox_values == sliced_vox_values)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 43, "text": [ "True" ] } ], "prompt_number": 43 } ], "metadata": {} } ] }