{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Simulating Random Variables with Inverse Transform Sampling\n", "\n", "In studying the transformation of random variables in [All of Statistics](http://www.stat.cmu.edu/~larry/all-of-statistics/) and working on a [few](/ml/hw/all-of-statistics-ch2-cdf-proof/) [related](/ml/hw/all-of-statistics-ch2-problem-04/) [exercises](/ml/hw/all-of-statistics-ch2-problem-08/) I've been in search of bigger picture motivation and a very cool result finally clicked: that we can simulate samples from any distribution by applying its inverse CDF to samples taken from a uniform random variable. (Note: technically this only works when the CDF has a closed form inverse function). Or in plainer terms, how can we transform results from math.random() to simulate draws from another distribution?\n", "\n", "## Transformation of Random Variables\n", "\n", "Let's consider how to take the transformation of a random variable $X$ with cumulative distribution function $F_X(x)$. Let $Y = r(X)$, that is, $Y$ is the transformation of $X$ via function $r(X)$. \n", "\n", "To get the CDF of $Y$ we use the definition of CDFs:\n", "\n", "$F_Y(y) = P(Y \\leq y) = P(r(X) \\leq y)$\n", "\n", "We have $F_X(x)$ and want to know how to compute $F_Y(y)$ in terms of $F_X(x)$. To get there we can take the inverse of $r(x)$ on both sides of the inequality:\n", "\n", "$F_Y(y) = P(Y \\leq y) = P(r(X) \\leq y) = P(X \\leq r^{-1}(y))$\n", "\n", "hey, that kind of looks like the CDF of $X$: \n", "\n", "$P(X \\leq r^{-1}(y)) = F_X(r^{-1}(y))$\n", "\n", "and that's how we get $F_Y(y)$ in terms of $F_X(x)$. We can compute the density function $f_y(y)$ by differentiating $F_Y(y)$, applying the chain rule:\n", "\n", "$f_y(y) = f_y(r^{-1}(y)) \\times \\frac{d}{dy} r^{-1}(y)\\mathop{dy}$\n", "\n", "Note that it is only this simple if $r(x)$ is one-to-one and strictly monotone increasing; it gets more complicated to reason about the regions where $Y$ is defined otherwise, but this hopefully provides the background for why we use with the inverse of the CDF.\n", "\n", "\n", "## Transforming a Uniform Random Variable\n", "\n", "Getting back to the \"cool result\" I mentioned earlier, let's put this to use to show how we can take samples from other distributions if all we have available is a random number generator. [Random number generation](http://www.eg.bucknell.edu/~xmeng/Course/CS6337/Note/master/node36.html) is a whole other topic, but you are likely familiar with a random function available in most languages that will give you a number between 0 and 1. This can be viewed as a function that will give you samples from a uniform random variable in the range 0 to 1.\n", "\n", "So we have a uniform random variable $U$ and another distribution $X$ with CDF $F$ that we'd like to draw samples from. If we'd like to be able to get $X$ as a function of $F$ and $U$, we need to work backwards and use the *inverse* of $F$ as the transformation function of $U$, so that when we apply the inverse of the inverse we get back to $X$:\n", "\n", "$F_X(x) = P(F^{-1}(U) \\leq x) = P(U \\leq F(x)) = F_U(F_X(x))$ \n", "\n", "$F_U(F(x)) =\n", "\\begin{cases}\n", "0 & F(x) < 0 \\\\\\\n", "F(x) & 0 \\leq F(x) \\leq 1 \\\\\\\n", "1 & F(x) > 1\n", "\\end{cases}\n", "$\n", "\n", "Note that $F(x)$, being a CDF, can only take ranges from 0 to 1, so this collapses to just:\n", "\n", "$F_X(x) = F_U(F(x)) = F(x)$ wherever $F(x)$ is defined, so $X \\sim F$.\n", "\n", "Now that we've established that $X = F^{-1}(U)$, let's put it to use in code.\n", "\n", "## Sampling from Uniform\n", "\n", "First, let's plot a histogram of samples from the $U(0, 1)$:\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\npUVpHAeivpVymrmbKQee7MX850f+HuVAoKspB9P9iHIxmBcAH6PM8zx8DLVKkrSoZOZ1lIN+x93u\n3rNvNXTbz1qotqXFahyh/Rjgx5l5RUQcSAnd83UJ8Lu9n+abU259G/gvEfGCzKzi/L6S5mwuB+tJ\nkqRZjPw1WmZemJlXND8ONY0lMy/o9/VbZv6ccvYL2Dq3TtKUyMwTMvNXPAhVkqTRTMOBqHf1LCVJ\nkqQlperQHhHLgJc2P54zyVokSZKkSak6tFOuQvc44EuZ+ZVJFyNJkiRNwjgORF0QEfE6ytUTf8gc\nzz0bER7wJkmSpFZkZmunJa9ypD0i/hg4CfgPYE1mbpxwSZIkSdLEVDfSHhHHAH8OfI9yaePr5ttG\npgPuureIcL/QvbhPqB/3C/XjfqFek7juZ1Uj7RFxHCWwX0QZYZ93YJckSZIWm1ZDe0Qsi4i9ImKP\nPuveBrwH+A5lhP36NmuTJEmSahWjft0TEYcBhzU/PhR4JrAe+Hpz3y8y89hm25XNuqsyc/euNl4G\nfBy4GzgZuKlPVxsy87RZaklweozuy6821ct9Qv24X6gf9wv16kyPafNA1HHMaX8C5Vzqnb05gd2B\nzmj6lcCxPY/p3fNXNsttgGMG9HMhMGNolyRJWkpGnVvth5HpMfJIe00cadcgjpKol/uE+nG/UD81\n7xeG9smY1pF2SZIkTdR8w3f7Zz/RaKo6e4y0UI4//vhJl6DKuE+oH/cL9eN+oRo4PUaSJGlKbZ0e\nM9xIu5lpOJOYHuNIuyRJklQ5Q7skSZJUOUO7JEmSVDlDuyRJklQ5Q7skSZJUOUO7JEmSVDlDuyRJ\nklQ5Q7skSZJUOUO7JEmSVDlDuyRJklS5ZZMuQJIkqVady9UPKzPHVImWOkfaJUmSpMo50i5JkjSr\n+Y6YjzZCL/VypF2SJEmqnKFdkiRJqpyhXZIkSaqcoV2SJEmqnKFdkiRJqpyhXZIkSaqcoV2SJEmq\nnKFdkiRJqpyhXZIkSaqcoV2SJEmqnKFdkiRJqtyySRcgSYtZRIz0+MwcUyWSpGnmSLskSZJUOUfa\nJakV8x0xH22EXlrM/AZLS5Ej7ZIkSVLlHGmXJElTym+wtHQ40i5JkiRVzpH2RWqU+X7O9ZMkSaqL\nI+2SJElS5RxpX/TmM2ruXD9JkqQaOdIuSZIkVc7QLkmSJFXO0C5JkiRVztAuSZIkVc7QLkmSJFXO\n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\nCPgqsCEz95ylHUN7633VXl+bfVnf9PRVe31t9lV7fW32ZX3T01ft9bXZV+31tdmXoX3wg8so+2X0\nCdQRsZwSwhN4SGZumqGdfYBvA2dn5vP7rL8JyMxcMUs9hvbW+6q9vjb7sr7p6av2+trsq/b62uzL\n+qanr9rra7Ov2utrs6/FHdpHndO+plme27siM28BvgHsAMw2J/37lIC/b0Q8uHtFRDwdWA6cN2Kt\nkiRJ0lQaNbSvbpaXDlh/WbNcNVMjmbkZOAy4BfhBRHwkIt4TEZ8Fvkz5UPDqEWuVJEmSptKyER/f\nma5y44D1nfvnchaZfwc+ARwHvLLr/suB07rnuUuSJElLSRXnaY+IZcD5wLuAjwJ7ANsDTwHWA5+O\niPdNrkJJkiRpckYN7Z2R9EEHiHbu3zhLOy8Gfgs4IzPfmJlXZubmzLwIeD7wU+BPImL3uZUVM9zW\nzq0JSZIkLWFrGZwn2zdqaL+4Wa4esL4zl33QnPeOfZrlBb0rMvM24F8otT5xbmXlDLe1c2tCkiRJ\nS9haBufJ9o0a2jsh+5CIuNfHjojYETgAuBX45izt3NEsdx2wfpee7SRJkqQlY6TQnpnrKWd22R14\nbc/qEyjz0k9vRsuJiGURsVdE7NGzbed0jq+KiId3r4iIZ1PC/22UK69KkiRJS8o4roi6ByVM7wqc\nTZkysy9wEHAJsH9m3tBsu5JyYOlVmbl7TztnUE77eDNwJvBz4DHA71C+hzgmM0+epRYvrtR6X7XX\n12Zf1jc9fdVeX5t91V5fm31Z3/T0VXt9bfZVe31t9rW4L640cmgHiIjdgHcAhwIPBq6mBO8TMvPG\nru1WUkL7lZm5R08b2wCvAl4C7E0Zpf8l5UqpH8zMWS+uZGifRF+119dmX9Y3PX3VXl+bfdVeX5t9\nWd/09FV7fW32VXt9bfZlaJ8ahvZJ9FV7fW32ZX3T01ft9bXZV+31tdmX9U1PX7XX12ZftdfXZl+L\nO7RXcZ52SZIkSYMZ2iVJkqTKGdolSZKkyhnaJUmSpMoZ2iVJkqTKGdolSZKkyhnaJUmSpMoZ2iVJ\nkqTKGdolSZKkyhnaJUmSpMoZ2iVJkqTKGdolSZKkyhnaJUmSpMoZ2iVJkqTKGdolSZKkyhnaJUmS\npMoZ2iVJkqTKGdolSZKkyhnaJUmSpMoZ2iVJkqTKGdolSZKkyhnaJUmSpMoZ2iVJkqTKGdolSZKk\nyhnaJUmSpMoZ2iVJkqTKGdolSZKkyhnaJUmSpMoZ2iVJkqTKGdolSZKkyhnaJUmSpMoZ2iVJkqTK\nGdolSZJkCUd6AAAX50lEQVSkyhnaJUmSpMoZ2iVJkqTKGdolSZKkyhnaJUmSpMoZ2iVJkqTKGdol\nSZKkyhnaJUmSpMoZ2iVJkqTKGdolSZKkyhnaJUmSpMoZ2iVJkqTKGdolSZKkyhnaJUmSpMoZ2iVJ\nkqTKGdolSZKkyhnaJUmSpMoZ2iVJkqTKGdolSZKkyhnaJUmSpMoZ2iVJkqTKGdolSZKkyhnaJUmS\npMoZ2iVJkqTKGdolSZKkyhnaJUmSpMoZ2iVJkqTKjRzaI2K3iDg1Iq6OiM0RsSEiToyInYZo6+CI\nODMirmna+mlEnBMRzx61TkmSJGlaLRvlwRGxJ7AO2AU4C7gY2Bc4Gjg0Ig7IzOvn2Nb7gTcCP27a\nug7YFXgycCDwD6PUKkmSJE2rkUI7cAolsB+VmR/u3BkRHwBeD7wbeM1sjUTEkZTA/gngVZl5V8/6\nUeuUJEmSplZk5nAPLKPslwEbMnPPnnXLgWuABB6SmZtmaOd+lNH1W4FVvYF9njU1T2Y+zylo5zGL\nta/a62uzL+ubnr5qr6/Nvmqvr82+rG96+qq9vjb7qr2+Nvtqv77MjFk2HJtR5rSvaZbn9q7IzFuA\nbwA7APvN0s4hwM7AGUBGxHMi4riIODoiZnusJEmStOiNMu1kdbO8dMD6yyiBfBXw1RnaeWqzvB34\nLvC47pUR8U/ACzPzuuFLlSRJkqbXKCPtK5rljQPWd+6f7SwyuzbLY4G7gacBy4HHU0bxnw58bvgy\nJUmSpOlWw3naOzXcCTw3M9dl5qbM/D7wfOAnwIFOlZEkSdJSNUpo74ykrxiwvnP/xlna6ay/KDN/\n1L0iM28Dvtz8+FTmLGa4rZ17M5IkSVqi1jI4T7ZvlDntFzfL1QPWr2qWg+a897YzKNx37n/AHOti\n/kcNS5IkSd3WMniwt/3gPspI+wXN8pCIuFflEbEjcADlNI7fnKWd8ykp+7G97TT2bpYbRqhVkiRJ\nmlpDh/bMXE85UHR34LU9q08AtgdOb6a4EBHLImKviNijp50fAV8EHk25kuo9IuKZwLOAG4Bzhq1V\nkiRJmmZDX1wJoAng6yhngDmbMtVlX+Ag4BJg/8y8odl2JbAeuCozd+9p5xFNO4+kjLx/l/Jh4DDK\nGWV+PzPPnEM9Xlyp9b5qr6/Nvqxvevqqvb42+6q9vjb7sr7p6av2+trsq/b62uzLiysN1Iy27wN8\nghLW30AJ2ycB+3UCe+/D+rTzU+ApwIcoc+FfRznV49nAAXMJ7JIkSdJiNdJIe20caZ9EX7XX12Zf\n1jc9fdVeX5t91V5fm31Z3/T0VXt9bfZVe31t9uVIuyRJkqQJMrRLkiRJlTO0S5IkSZUztEuSJEmV\nM7RLkiRJlTO0S5IkSZUztEuSJEmVM7RLkiRJlTO0S5IkSZUztEuSJEmVM7RLkiRJlTO0S5IkSZUz\ntEuSJEmVM7RLkiRJlTO0S5IkSZUztEuSJEmVM7RLkiRJlTO0S5IkSZUztEuSJEmVM7RLkiRJlTO0\nS5IkSZUztEuSJEmVM7RLkiRJlTO0S5IkSZUztEuSJEmVM7RLkiRJlTO0S5IkSZUztEuSJEmVM7RL\nkiRJlTO0S5IkSZUztEuSJEmVM7RLkiRJlTO0S5IkSZUztEuSJEmVM7RLkiRJlTO0S5IkSZUztEuS\nJEmVM7RLkiRJlTO0S5IkSZUztEuSJEmVM7RLkiRJlTO0S5IkSZUztEuSJEmVM7RLkiRJlTO0S5Ik\nSZUztEuSJEmVM7RLkiRJlTO0S5IkSZUztEuSJEmVM7RLkiRJlTO0S5IkSZUztEuSJEmVM7RLkiRJ\nlTO0S5IkSZUztEuSJEmVM7RLkiRJlTO0S5IkSZUztEuSJEmVM7RLkiRJlRs5tEfEbhFxakRcHRGb\nI2JDRJwYETuN0OaLI2JLc3vFqDVKkiRJ02zZKA+OiD2BdcAuwFnAxcC+wNHAoRFxQGZeP882Hwl8\nCLgFWA7kKDVKkiRJ027UkfZTKIH9qMx8QWa+OTMPBk4EVgPvnk9jERHAx4FfAH85Ym2SJEnSojB0\naG9G2Q8BNmTmh3tWHw9sAl4cEdvPo9nXAWuA/948XpIkSVryRhlpX9Msz+1dkZm3AN8AdgD2m0tj\nEfEY4L3ASZn59RHqkiRJkhaVUUL76mZ56YD1lzXLVbM1FBHLgNOBK4E3j1CTJEmStOiMciDqimZ5\n44D1nfvnchaZtwNPBA7IzNtHqEmSJEladCZ+nvaI2Bd4E/BnmfmtSdcjSZIk1WaU0N4ZSV8xYH3n\n/o2DGmimxXwSuIRy8GrfzYaqTpIkSVokRgntFzfL1QPWd+ayD5rzDuU87KuAxwKbuy6otIUyZQbg\no819J869tJjhtnbuzUiSJGmJWsvgPNm+yBzu2kURsQdwObAB+LXsaigidgR+Rrkw0q6ZeduANu4P\nnEz/Cyg9BXgS8DXKSPxXMvNzs9TUtDOf59R54Rf6MYu1r9rra7Mv65uevmqvr82+aq+vzb6sb3r6\nqr2+Nvuqvb42+2q/vsxsLcEPfSBqZq6PiHOBZwKvpVzFtOMEYHvgLzuBvZkK82vAHZm5vmljM3Bk\nv/YjYi0ltJ+WmacOW6ckSZI07UY5ewzAHwHrgA9GxMGUKTP7AgdRRsff0rXtbsAPgKuA3UfsV5Ik\nSVoyRjp7TDNivg/wCUpYfwMlkJ8E7JeZN/R72Fybn8e2kiRJ0qI19Jz2GjmnfRJ91V5fm31Z3/T0\nVXt9bfZVe31t9mV909NX7fW12Vft9bXZ1+Ke0z7x87RLkiRJmpmhXZIkSaqcoV2SJEmqnKFdkiRJ\nqpyhXZIkSaqcoV2SJEmqnKFdkiRJqpyhXZIkSaqcoV2SJEmqnKFdkiRJqpyhXZIkSaqcoV2SJEmq\nnKFdkiRJqpyhXZIkSaqcoV2SJEmqnKFdkiRJqpyhXZIkSaqcoV2SJEmqnKFdkiRJqpyhXZIkSaqc\noV2SJEmqnKFdkiRJqpyhXZIkSaqcoV2SJEmqnKFdkiRJqpyhXZIkSaqcoV2SJEmqnKFdkiRJqpyh\nXZIkSaqcoV2SJEmqnKFdkiRJqpyhXZIkSaqcoV2SJEmqnKFdkiRJqpyhXZIkSaqcoV2SJEmqnKFd\nkiRJqpyhXZIkSaqcoV2SJEmqnKFdkiRJqpyhXZIkSaqcoV2SJEmqnKFdkiRJqpyhXZIkSaqcoV2S\nJEmqnKFdkiRJqpyhXZIkSaqcoV2SJEmqnKFdkiRJqpyhXZIkSaqcoV2SJEmqnKFdkiRJqpyhXZIk\nSaqcoV2SJEmqnKFdkiRJqpyhXZIkSaqcoV2SJEmqnKFdkiRJqpyhXZIkSaqcoV2SJEmq3FhCe0Ts\nFhGnRsTVEbE5IjZExIkRsdMcH/+giHhlRJwZEZdHxKaI2BgRX4uIIyIixlGnJEmSNI0iM0drIGJP\nYB2wC3AWcDGwL7AGuAQ4IDOvn6WNPwROAa4GLgB+BDwUeAGwAvh8Zh4+h1qaJzOf59T5PLDQj1ms\nfdVeX5t9Wd/09FV7fW32VXt9bfZlfdPTV+31tdlX7fW12Vf79WVmawPL4wjtXwYOAY7KzA933f8B\n4PXAX2Xma2ZpYw2wfWZ+qef+hwDfBh4JvDAzz5ilHUN7633VXl+bfVnf9PRVe31t9lV7fW32ZX3T\n01ft9bXZV+31tdmXoX3wg8so+2XAhszcs2fdcuAayivwkMzcNGQfbwLeDZycmUfPsq2hvfW+aq+v\nzb6sb3r6qr2+Nvuqvb42+7K+6emr9vra7Kv2+trsa3GH9lHntK9pluf2rsjMW4BvADsA+43Qx109\nS0mSJGlJGTW0r26Wlw5Yf1mzXDVM4xGxDHhp8+M5w7QhSZIkTbtRQ/uKZnnjgPWd++d0Fpk+3gs8\nDvhSZn5lyDYkSZKkqVbtedoj4nXAG4AfAi+ZcDmSJEnSxIwa2jsj6SsGrO/cv3E+jUbEHwMnAf8B\nrMnMeT2+HBww6LZ2fk1JkiRpCVrL4DzZvmUjPv7iZrl6wPrOXPZBc97vIyKOAf4c+B5wcGZeN/+y\nRjuNpSRJkpa6tQwe7G0/uI860n5Bszyk96qlEbEjcABwK/DNuTQWEcdRAvtFlBH2IQK7JEmStLiM\nFNozcz3ldI+7A6/tWX0CsD1wembeBuVsMBGxV0Ts0dtWRLwNeA/wHcoI+4xXUZUkSZKWinFcEXUP\nYB2wK3A2ZcrMvsBBwCXA/pl5Q7PtSmA9cFVm7t7VxsuAjwN3AycDN/XpakNmnjZLLV5cqfW+aq+v\nzb6sb3r6qr2+Nvuqvb42+7K+6emr9vra7Kv2+trsa3FfXGnUOe1k5vqI2Ad4B3Ao8NvA1ZQDSU/I\nzH6ng+x9VVY2y22AYwZ0dSEwY2iXJEmSFqORR9pr4kj7JPqqvb42+7K+6emr9vra7Kv2+trsy/qm\np6/a62uzr9rra7OvxT3SXu152iVJkiQVhnZJkiSpcoZ2SZIkqXKGdkmSJKlyhnZJkiSpcoZ2SZIk\nqXKGdkmSJKlyhnZJkiSpcoZ2SZIkqXKGdkmSJKlyhnZJkiSpcoZ2SZIkqXKGdkmSJKlyhnZJkiSp\ncoZ2SZIkqXKGdkmSJKlyhnZJkiSpcoZ2SZIkqXKGdkmSJKlyhnZJkiSpcoZ2SZIkqXKGdkmSJKly\nhnZJkiSpcoZ2SZIkqXKGdkmSJKlyhnZJkiSpcoZ2SZIkqXKGdkmSJKlyhnZJkiSpcoZ2SZIkqXKG\ndkmSJKlyhnZJkiSpcoZ2SZIkqXKGdkmSJKlyhnZJkiSpcoZ2SZIkqXKGdkmSJKlyhnZJkiSpcoZ2\nSZIkqXKGdkmSJKlyhnZJkiSpcoZ2SZIkqXKGdkmSJKlyhnZJkiSpcoZ2SZIkqXKGdkmSJKlyhnZJ\nkiSpcoZ2SZIkqXKGdkmSJKlyhnZJkiSpcoZ2SZIkqXKGdkmSJKlyhnZJkiSpcoZ2SZIkqXKGdkmS\nJKlyhnZJkiSpcoZ2SZIkqXKGdkmSJKlyhnZJkiSpciOH9ojYLSJOjYirI2JzRGyIiBMjYqdJtCNJ\nkiQtNpGZwz84Yk9gHbALcBZwMbAvsAa4BDggM69vsZ3mycznOQXtPGax9lV7fW32ZX3T01ft9bXZ\nV+31tdmX9U1PX7XX12ZftdfXZl/t15eZMcuGYzPqSPsplKB9VGa+IDPfnJkHAycCq4F3t9yOJEmS\ntOgMPdLejI5fBmzIzD171i0HrqF8ZHlIZm5a6Haa7R1pb72v2utrsy/rm56+aq+vzb5qr6/Nvqxv\nevqqvb42+6q9vjb7cqR9kDXN8tzeFZl5C/ANYAdgv5bakSRJkhalUUL76mZ56YD1lzXLVS21I0mS\nJC1Ko4T2Fc3yxgHrO/fPdvaXcbUjSZIkLUrLJl3AwvjIpAuQJEmSxmaU0N4ZAV8xYH3n/o0ttdPl\n1XPf9B7DHEcw7LEHi7Gv2utrsy/rm56+aq+vzb5qr6/Nvqxvevqqvb42+6q9vjb7arO+9owyPebi\nZrl6wPrOHPRBc9XH3Y4kSZK0KI1yysc9gMuBDcCvZVdDEbEj8DPKuXN2zczbFrodSZIkabEaeqQ9\nM9dTTtO4O/DantUnANsDp3eCdkQsi4i9mpA+dDuSJEnSUjP0SDvcM0q+DtgVOJsy1WVf4CDgEmD/\nzLyh2XYlsB64KjN3H7YdSZIkaakZKbQDRMRuwDuAQ4EHA1cDZwInZOaNXdutpIT2KzNzj2HbkSRJ\nkpaakUO7JEmSpIU1ytljJEmSJLXA0C5JkiRVztAuSZIkVa7q0B4Ru0XEqRFxdURsjogNEXFiROw0\niXZUh1Hfz4h4UES8MiLOjIjLI2JTRGyMiK9FxBERUfcl0dTXQvyeR8SLI2JLc3vFOOtVO8a5X0TE\nwc3/G9c0bf00Is6JiGcvRO1aOOPYL6L4rxFxQbMvbIqIKyLisxGx30LWr/GKiBdGxMlNDrip+T//\n9CHbWrDMWe2BqBGxJ+U0kLsAZ7H1NJBrKKeBPCAzr2+rHdVhHO9nRPwhcArlDEUXAD8CHgq8AFgB\n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\n", "text/plain": [ "" ] }, "metadata": { "image/png": { "height": 265, "width": 374 } }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "%config InlineBackend.figure_format = 'retina'\n", "\n", "import random\n", "import matplotlib.pyplot as plt\n", "\n", "plt.hist([random.random() for i in range(10000)], 50, normed=True)\n", "plt.title('Samples from Uniform(0,1)')\n", "None" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "yep, that looks pretty uniform. \n", "\n", "## Sampling from an Exponential Distribution\n", "\n", "Now let's say we want to sample from an [exponential distribution](https://en.wikipedia.org/wiki/Exponential_distribution) to simulate the interval between requests hitting a web server (or see [plenty of other examples](https://www.probabilitycourse.com/chapter11/11_1_2_basic_concepts_of_the_poisson_process.php) of where this function might come in handy).\n", "\n", "The exponential distribution has CDF:\n", "\n", "$F_X(x) = 1 - e^{-\\lambda x}$\n", "\n", "following the plan outlined above, we can create our own exponential sampling function based on the random number generator if we can compute the CDF's inverse:\n", "\n", "$1 - e^{-\\lambda x} = y$\n", "
$e^{-\\lambda x} = 1 - y$\n", "
$-\\lambda x = ln(1 - y)$\n", "
$x = \\frac{-1}{\\lambda}ln(1 - y)$\n", "\n", "so \n", "\n", "$F^{-1}_X(x) = \\frac{-1}{\\lambda}ln(1 - x)$\n", "\n", "Applying this inverse function to a sample taken from our random number generator should do the trick. Let's write this function and plot its histogram." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n07fOWMeg5vFKynV6OuX6XUn5Mns68BeZ+Yq5vB/NTgy+L0iLJyJWU27Ap+SEdMklacsUEesogwwd\nnIvTvaMkWUMuSZIktTRWQB4Rj4+It0fEVyPid1GGuz11jnntXB+kuzgiNkTE2og4ccAT/ZIkLSR/\nOpa0qMYdzvQfKd2RXUN5cG4v5nAji4jdKe17d6S0bz4P2JfSBd7hEXFAZl4xZlklSRqFI0NKWlTj\nNll5AbBHZq6iPLU+V++gBOPPzczHZubLM/NQyoNLe1KemNfyNdeHcyRpvnk/krTo5u2hzog4mDIo\nwocy88hZrLc75Wn2tZm5e1/atpSnjJPSxdR1A7KQJEmSlqxJeKizG2L4zP6ELAMnnANsQ+n6TJIk\nSVpWJiEg37NOLxiSfmGd7rEIZZEkSZIW1SQE5KvqdNjQyt18e1uRJEnSsjNuLysTJSJ8EEeSJEmL\nIjPnpVemSagh72rAVw1J7+ZftQhlkSRJkhbVJNSQn1enew5J79qOD2tjvpn56jlmOYsI99MI3E+j\nc1+Nxv00OvfVaNxPo3E/jc59NbOI+R2uYBJqyM+q08Oi791FxHbAAcC1wDcWu2CSJEnSQlu0gDwi\nVkTEXhGxW+/8zFxD6fJwV+DZfaudAKwETs3M6xenpJIkSdLiGWtgoIh4NPDo+u+dgYcAa4Cv1XmX\nZuZL6rK71LSfZ+auffnsBpwL7AScTmnGsi9wMHA+sH9mXjlCeRJssjIKf44ajftpdO6r0bifRue+\nGo37aTTup9G5r2bWNeqYr4c6x21Dfl/gSKaGGU5KTXdXC74OeEnfOpsd4cxcExH7AK8GDgceBlwM\nvAU4ITOHdYkoSZIkLWlj1ZBPGmvIR+e339G4n0bnvhqN+2l07qvRuJ9G434anftqZvNdQz4JD3VK\nkiRJWywD8i3U8ccf37oIS4L7aXTuq9G4n0bnvhqN+2k07qfRua8Wn01WJEmSpFmwyYokSZK0jBiQ\nS5IkSQ0ZkEuSJEkNGZBLkiRJDRmQS5IkSQ0ZkEuSJEkNGZBLkiRJDRmQS5IkSQ0ZkEuSJEkNGZBL\nkiRJDRmQS5IkSQ0ZkEuSJEkNGZBLkiRJDRmQS5IkSQ0ZkEuSJEkNGZBLkiRJDRmQS5IkSQ0ZkEuS\nJEkNGZBLkiRJDRmQS5IkSQ0ZkEuSJEkNGZBLkiRJDRmQS5IkSQ0ZkEuSJEkNGZBLkiRJDRmQS5Ik\nSQ0ZkEuSJEkNGZBLkiRJDRmQS5IkSQ0ZkEuSJEkNLcuAPCJm9Tr66KNbF1mSJElbqGUZkEuSJElL\nxTINyHPE1/taFVCSJEkClm1ALkmSJC0NBuSSJElSQwbkkiRJUkMG5JIkSVJDBuSSJElSQwbkkiRJ\nUkMG5JIkSVJDBuSSJElSQwbkkiRJUkMG5JIkSVJDBuSSJElSQwbkkiRJUkMG5JIkSVJDBuSSJElS\nQwbkkiRJUkMG5JIkSVJDBuSSJElSQwbkkiRJUkMG5JIkSVJDBuSSJElSQwbkkiRJUkMG5JIkSVJD\nBuSSJElSQwbkkiRJUkMG5JIkSVJDBuSSJElSQwbkkiRJUkMG5JIkSVJDBuSSJElSQwbkkiRJUkMG\n5JIkSVJDBuSSJElSQwbkkiRJUkMG5JIkSVJDBuSSJElSQwbkkiRJUkMG5JIkSVJDBuSSJElSQ/MS\nkEfEzhFxckRcHBEbImJtRJwYEXeYRR4REU+MiLMi4qKIuC4ifhYRH42I/eajnJIkSdKkWTFuBhGx\nO3AusCNwGnAesC/wfODwiDggM68YIav3AEcDl9V8LgP2AB4FPC4ijszMD49bXkmSJGmSjB2QA++g\nBOPPzcyTupkR8SbghcBrgWdNl0FE3J0SjF8C3CczL+tJOxj4EvBqwIBckiRJy8pYTVZq7fhhwNre\nYLw6HrgOOCIiVs6Q1Y51+s3eYBwgM88G1gM7jFNWSZIkaRKN24b8kDo9sz8hM9cD5wDbADO1Af8R\npXZ834i4Y29CRBwIbAt8YcyySpIkSRNn3IB8zzq9YEj6hXW6x3SZZOYG4NGUmvAfR8S7I+J1EfFR\n4HOUgP8ZY5ZVkiRJmjjjtiFfVadXD0nv5o/S28p/AacALwWe1jP/p8AH+puySJIkScvBRPRDHhEr\ngC8Cr6H0trIbsBLYG1gDfDgi3tCuhJIkSdLCGDcg72rAVw1J7+ZfNUM+RwAPAj6Rmcdl5rrM3JCZ\n3wMeA1wEvDgidh2tWDHNa/VoWUiSJGmLtXr1aiJi4Gu+jRuQn1enew5J79qOD2tj3tmnTs/qT8jM\n64FvU8p6v9GKldO8Vo+WhSRJkrZYq1evJjMHvubbuAF5F0AfFn1fFyJiO+AA4FrgGzPk8/s63WlI\n+o59y0mSJEnLwlgBeWauofSAsivw7L7kEyjtwE+ttdxExIqI2CsidutbtuvS8OkRcZfehIh4KCWw\nv54yIqgkSZK0bMzHSJ1/RwmU3xYRh1KasewLHAycD7yiZ9mdgR8DP6cE8QBk5mci4jRK14c/iYhP\nAr8B7gGJcsbcAAAeL0lEQVT8FaWtycsy88p5KK8kSZI0McYOyDNzTUTsQxna/nDgYcDFwFuAEzJz\nUJeIgxrfPB54OvAUyoOcK4HLgU8Db8tMBwaSJEnSsjMfNeRk5q+Ao0dYbh1Dmslk5kbgnfUlSZIk\nbREmoh9ySZIkaUtlQC5JkiQ1FAvRl2IrEVHfzKjv6WTgmDlvbzntO0mSJI2m6+07M+dllCBryCVJ\nkqSG5uWhzuVhNrXd8z9kqiRJkrZM1pBLkiRJDRmQS5IkSQ0ZkEuSJEkNGZBLkiRJDRmQS5IkSQ0Z\nkEuSJEkNGZBLkiRJDRmQS5IkSQ0ZkEuSJEkNGZBLkiRJDRmQS5IkSQ0ZkEuSJEkNGZBLkiRJDRmQ\nS5IkSQ0ZkEuSJEkNGZBLkiRJDRmQS5IkSQ0ZkEuSJEkNGZBLkiRJDRmQS5IkSQ0ZkEuSJEkNGZBL\nkiRJDRmQS5IkSQ0ZkEuSJEkNGZBLkiRJDRmQS5IkSQ0ZkEuSJEkNGZBLkiRJDRmQS5IkSQ0ZkEuS\nJEkNGZBLkiRJDRmQS5IkSQ0ZkEuSJEkNGZBLkiRJDRmQS5IkSQ0ZkEuSJEkNGZBLkiRJDRmQS5Ik\nSQ0ZkEuSJEkNGZBLkiRJDRmQS5IkSQ0ZkEuSJEkNGZBLkiRJDRmQS5IkSQ0ZkEuSJEkNGZBLkiRJ\nDRmQS5IkSQ0ZkEuSJEkNGZBLkiRJDRmQS5IkSQ0ZkEuSJEkNGZBLkiRJDRmQS5IkSQ0ZkEuSJEkN\nGZBLkiRJDRmQS5IkSQ0ZkEuSJEkNGZBLkiRJDRmQS5IkSQ0ZkEuSJEkNGZBLkiRJDRmQS5IkSQ0Z\nkEuSJEkNGZBLkiRJDRmQS5IkSQ0ZkEuSJEkNrWhdgKUsIma9TmYuQEkkSZK0VFlDLkmSJDVkDflY\nZlPbPfvadEmSJC1/Y9eQR8TOEXFyRFwcERsiYm1EnBgRd5hDXodGxCcj4pKa10URcUZEPHTcckqS\nJEmTaKwa8ojYHTgX2BE4DTgP2Bd4PnB4RByQmVeMmNcbgeOAX9a8LgN2Ah4AHAR8dpyySpIkSZNo\n3CYr76AE48/NzJO6mRHxJuCFwGuBZ82USUQcSwnGTwGenpk39aXbtEaSJEnLUsy1149aO34hsDYz\nd+9L2xa4hNLI+k6Zed00+dyWUit+LbBHfzA+yzLVNzPqezoZOIbZrQNT7cFnv469rEiSJC1tXU97\nmTkvDwmO04b8kDo9sz8hM9cD5wDbAPvNkM9hwA7AJ4CMiIdHxEsj4vkRMdO6kiRJ0pI2TlOQPev0\ngiHpF1KC7T2AL02TzwPr9Abg+8C9ehMj4ivA4zPzsrkXVZIkSZpM49SQr6rTq4ekd/Nn6m1lpzp9\nCXAz8GBgW+A+lNr3A4GPzb2YkiRJ0uSahIGBujLcCDwyM8/NzOsy80fAY4BfAQfZfEWSJEnL0TgB\neVcDvmpIejf/qhny6dK/l5m/6E3IzOuBz9V/H4gkSZK0zIwTkJ9Xp3sOSd+jToe1Me/PZ1jg3s3f\nesRyUXo0GfZaPXo2kiRJ2iKtXr2aiBj4mm/jdHu4G/BTYC3wx9mTUURsB/ya0i/gTrWme1g+d6t5\n/ALYLfsKFBGfBf4SeGJmTtuW3G4PJUmStNAmptvDzFxDeehyV+DZfcknACuBU7tgPCJWRMReNZDv\nzecXwKeAu1NG+LxFRDyEEoxfCZwx17JKkiRJk2rONeRwSy35uZSeUk6nND/ZFzgYOB/YPzOvrMvu\nAqwBfp6Zu/bl80c1n7sCX6R0f7gr8GhKzytPysxPjlAea8glSZK0oCamhrwWYg2wD2XI+32BF1EC\n6bcA+3XBeP9qA/K5CNgb+FdK2/PnUbo7PB04YJRgXJIkSVqKxqohnzTWkEuSJGmhTVQNuSRJkqTx\nGJBLkiRJDRmQS5IkSQ0ZkEuSJEkNGZBLkiRJDRmQS5IkSQ0ZkEuSJEkNGZBLkiRJDRmQS5IkSQ0Z\nkEuSJEkNGZBLkiRJDRmQS5IkSQ0ZkEuSJEkNGZBLkiRJDRmQS5IkSQ0ZkEuSJEkNGZBLkiRJDa1o\nXYAtTUTMep3MXICSSJIkaRJYQy5JkiQ1ZA35optNbffsa9MlSZK0tFhDLkmSJDVkQC5JkiQ1ZEAu\nSZIkNWRALkmSJDVkQC5JkiQ1ZEAuSZIkNWRALkmSJDVkQC5JkiQ1ZEAuSZIkNWRALkmSJDVkQC5J\nkiQ1ZEAuSZIkNWRALkmSJDVkQC5JkiQ1ZEAuSZIkNWRALkmSJDVkQC5JkiQ1ZEAuSZIkNWRALkmS\nJDVkQC5JkiQ1ZEAuSZIkNWRALkmSJDVkQC5JkiQ1ZEAuSZIkNWRALkmSJDVkQC5JkiQ1ZEAuSZIk\nNWRALkmSJDVkQC5JkiQ1ZEAuSZIkNWRALkmSJDVkQC5JkiQ1tKJ1ATSziJj1Opm5ACWRJEnSfLOG\nXJIkSWrIGvIlYTa13bOvTZckSVI71pBLkiRJDRmQS5IkSQ0ZkEuSJEkNGZBLkiRJDRmQS5IkSQ0Z\nkEuSJEkNGZBLkiRJDRmQS5IkSQ0ZkEuSJEkNGZBLkiRJDRmQS5IkSQ0ZkEuSJEkNGZBLkiRJDRmQ\nS5IkSQ0ZkEuSJEkNGZBLkiRJDRmQS5IkSQ0ZkEuSJEkNGZBLkiRJDRmQS5IkSQ2NHZBHxM4RcXJE\nXBwRGyJibUScGBF3GCPPIyJiY30dM24ZJUmSpEm1YpyVI2J34FxgR+A04DxgX+D5wOERcUBmXjHL\nPO8K/CuwHtgWyHHKKEmSJE2ycWvI30EJxp+bmY/NzJdn5qHAicCewGtnk1lEBPB+4FLgnWOWTZIk\nSZp4cw7Ia+34YcDazDypL/l44DrgiIhYOYtsnwccAvxtXV+SJEla1sapIT+kTs/sT8jM9cA5wDbA\nfqNkFhH3AF4PvCUzvzZGuSRJkqQlY5yAfM86vWBI+oV1usdMGUXECuBUYB3w8jHKJEmSJC0p4zzU\nuapOrx6S3s0fpbeVVwH3Aw7IzBvGKJMkSZK0pDTvhzwi9gX+AfiXzPxm6/JIkiRJi2mcgLyrAV81\nJL2bf9WwDGpTlQ8C51MeBB242OyLFtO8Vs8+O0mSJG1RVq9eTUQMfM23cQLy8+p0zyHpXdvxYW3M\nofQzvgdwT2BDz2BAGynNWADeU+edOHrRcprX6tGzkSRJ0hZp9erVZObA13wbpw35WXV6WERE9pQu\nIrYDDgCuBb4xTR4bgPcxePCfvYH7A1+l1KCfO0ZZJUmSpIk054A8M9dExJnAQ4BnU0bX7JwArATe\nmZnXwy3NU/4Y+H1mrql5bACOHZR/RKymBOQfyMyT51pOSZIkaZKNU0MO8HeUmuu3RcShlGYs+wIH\nU2q1X9Gz7M7Aj4GfA7uOuV1JkiRpWRirl5Va070PcAolEH8RJdh+C7BfZl45aLVRs5/FspIkSdKS\nFAvRML2ViKhvZtT3dDJwDLNbB6Y6fpncdZbTcZUkSZokXU8rmTkvXa4074dckiRJ2pIZkEuSJEkN\njftQpybUXDqtt5mLJEnS4rOGXJIkSWrIGvJlay4Pj0qSJGmxWUMuSZIkNWRALkmSJDVkQC5JkiQ1\nZEAuSZIkNWRALkmSJDVkQC5JkiQ1ZEAuSZIkNWRALkmSJDVkQC5JkiQ1ZEAuSZIkNWRALkmSJDVk\nQC5JkiQ1ZEAuSZIkNWRALkmSJDVkQC5JkiQ1ZEAuSZIkNWRALkmSJDVkQC5JkiQ1ZEAuSZIkNWRA\nLkmSJDVkQC5JkiQ1ZEAuSZIkNWRALkmSJDVkQC5JkiQ1ZEAuSZIkNWRALkmSJDVkQC5JkiQ1tKJ1\nATQ5ImLW62TmApREkiRpy2ENuSRJktSQNeTqMZva7tnXpkuSJGlz1pBLkiRJDRmQS5IkSQ0ZkEuS\nJEkNGZBLkiRJDRmQS5IkSQ0ZkEuSJEkNGZBLkiRJDdkPucbi6J6SJEnjsYZckiRJasgaco3J0T0l\nSZLGYQ25JEmS1JABuSRJktSQAbkkSZLUkAG5JEmS1JABuSRJktSQAbkkSZLUkAG5JEmS1JABuSRJ\nktSQAbkkSZLUkAG5JEmS1JABuSRJktSQAbkkSZLUkAG5JEmS1JABuSRJktSQAbkkSZLUkAG5JEmS\n1JABuSRJktTQitYF0JYnIma9TmYuQEkkSZLas4ZckiRJasgacjUwm9ru2demS5IkLSXWkEuSJEkN\nGZBLkiRJDRmQS5IkSQ0ZkEuSJEkNGZBLkiRJDRmQS5IkSQ0ZkEuSJEkNGZBLkiRJDRmQS5IkSQ3N\nS0AeETtHxMkRcXFEbIiItRFxYkTcYcT1t4+Ip0XEJyPipxFxXURcFRFfjYijI8LhGiVJkrQsrRg3\ng4jYHTgX2BE4DTgP2Bd4PnB4RByQmVfMkM1fA+8ALgbOAn4B3Bl4LPBe4KHAE8YtqyRJkjRpxg7I\nKYH0jsBzM/OkbmZEvAl4IfBa4Fkz5HE+8IjM/M/emRHxcuBbwOMi4rGZ+Yl5KK8kSZI0McZqslJr\nxw8D1vYG49XxwHXAERGxcrp8MvOs/mC8zv8N8M7670HjlFWSJEmaROO2IT+kTs/sT8jM9cA5wDbA\nfmNs46a+qSRJkrRsjBuQ71mnFwxJv7BO95hL5hGxAjiy/nvGXPKQJEmSJtm4AfmqOr16SHo3f6Te\nVgZ4PXAv4D8z8/NzzEOSJEmaWBPbD3lEPA94EfAT4CmNiyNJkiQtiHED8q4GfNWQ9G7+VbPJNCKe\nA7wF+G/gkMyc1foQ07xWzy4rSZIkbXFWr15NRAx8zbdxA/Lz6nTPIeld2/Fhbcw3ExEvAN4G/JAS\njP929sXKaV6rZ5+dJEmStiirV68mMwe+5tu4AflZdXpY/2iaEbEdcABwLfCNUTKLiJcCbwa+RwnG\nLxuzfJIkSdJEGysgz8w1lC4PdwWe3Zd8ArASODUzr4fSa0pE7BURu/XnFRGvBF4HfAc4dITRPSVJ\nkqQlL8atdq/B9bnATsDplGYs+wIHU0bg3D8zr6zL7gKsAX6embv25PFU4P3AzcDbgd8N2NTazPzA\nDGWpb2bU93QycAyzWwdKW3TXWcx1FuLnIUmSpLnoGoZk5rw0KF8xbgaZuSYi9gFeDRwOPAy4mPJQ\n5gmZOahLxP7oapc63Qp4wZBNnQ1MG5BLkiRJS83YNeSTxBry5bvOcjpPJUnS0jbfNeQT2w+5JEmS\ntCUYu8mKtBjm0uenteqSJGkpsIZckiRJasgaci0Rc2mrLkmSNPmsIZckSZIaMiCXJEmSGjIglyRJ\nkhoyIJckSZIaMiCXJEmSGjIglyRJkhoyIJckSZIaMiCXJEmSGjIglyRJkhoyIJckSZIaMiCXJEmS\nGlrRugDSQomIWa+TmQtQEkmSpOGsIZckSZIasoZcy9hsartnX5suSZI0H6whlyRJkhoyIJckSZIa\nMiCXJEmSGrINudTDnlkkSdJis4ZckiRJasgacmkT9swiSZIWlzXkkiRJUkMG5JIkSVJDBuSSJElS\nQwbkkiRJUkMG5JIkSVJDBuSSJElSQwbkkiRJUkMG5JIkSVJDBuSSJElSQ47UKY0pYnFG7MyczSii\nkiRpqbCGXJIkSWrIGnJpbLOpue5q0+eyjiRJWo6sIZckSZIaMiCXJEmSGjIglyRJkhoyIJckSZIa\nMiCXJEmSGjIglyRJkhoyIJckSZIaMiCXJEmSGjIglyRJkhoyIJckSZIaMiCXJEmSGjIglyRJkhoy\nIJckSZIaMiCXJEmSGlrRugCSRhMRs14nMxegJJIkaT4ZkEvLmEG8JEmTz4BcWjJmEyjPPhCXJElt\nGJBLy5pBvCRJk86AXNImbOYiSdLispcVSZIkqSFryCX1sZmLJEmLyRpySZIkqSEDckmSJKkhA3JJ\nkiSpIQNySZIkqSEf6pQ0NrtKlCRp7qwhlyRJkhqyhlzSPJh9V4nWqkuSVFhDLkmSJDVkDbmkRhyA\nSJIksIZckiRJasqAXJIkSWrIgFySJElqyDbkkpalufTi0rE3F0nSYjIgl7RkjBNkS5I0qQzIJS1z\n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\nSUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": { "image/png": { "height": 265, "width": 370 } }, "output_type": "display_data" } ], "source": [ "import math\n", "\n", "def my_exp(lmbda=1.0):\n", " return (-1 / lmbda)*math.log(1 - random.random())\n", "\n", "plt.hist([my_exp() for i in range(10000)], 50, normed=True)\n", "plt.title('Samples from hand rolled exponential function')\n", "None" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and just to make sure this looks right, let's use numpy's exponential function and compare:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAuQAAAITCAYAAABPMwnEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAWJQAAFiUBSVIk8AAAIABJREFUeJzt3Xm4ZFV97//3F9uBSVAZjAIyiGBUNEqEiBG4BIcYFQkk\n3gRx1hiDOODPKWpjNGq8KjHCL06IQW+i3jBc4wAooCgOaNTEIIN2gwREZqSBVqC/94+1Nl0UVXXq\nnDrnrDqn36/nqWd372HVql377PrUqrXXjsxEkiRJUhsbta6AJEmStCEzkEuSJEkNGcglSZKkhgzk\nkiRJUkMGckmSJKkhA7kkSZLUkIFckiRJashALkmSJDVkIJckSZIaMpBLkiRJDRnIJUmSpIYM5JIk\nSVJDBnJJkiSpIQO5NAcRsWNErIuIda3rMpOIuFdEvCUifhIRa5dKvaWFFBHPr38LZ7Wui9Tpzs8R\nscM8lnlCLfNt81Wm5t+K1hXQ0hERK4DDgOcAjwYeANwMXAmsAr4OnJmZ5zWr5OLL1hUYw7HAi+q/\n1wDXNayLNG2Wwt+wlriI2A/YD/hBZp46w+oLdUx6rE8xA7nGEhFbA18EHldnJbC2TncFdgOeBtwI\n3K9FHXV3EbEF8HzK+/THmXlK2xpJ0gZpP+CtwAnAqEB+IeV8fdvCV0nTxC4rGtenKGH8V8DrgN/K\nzE0z8/7AFsCBwHHA9e2qqAF2A+4BXGsYl6TplpkPz8zfzsxftK6LFpct5JpRROxOCdwJvDAzT+pd\nnpk3A18FvhoR92pQRQ23cZ2uaVoLSRJAtK6AppMt5BrHo3r+/W+jVszM3/TPi4iNIuJpEfHhiPh+\nRPwyIn4TEVdExEkRsf+w8iLi7HoxyuERcd+I+LuI+FlE3FqnfxMR9+lZ/4CIOC0iromImyPiaxHx\npCFlr6xlfyKKV0fEj+p210bEqRHxu2Psn2F13zoi3hUR/xkRa2q5P46Id0TEwG499QLMIyPi3Ii4\nISJuq/vrRxHxoYjYe8znfn69cLO7YO3Oi1Dr43m963UXtkXEn9d9dm2d/6yeMjeKiBfV5dfVC0RX\n1/d1lyH12K+Ws7r+/ykR8ZW6/Q3130/oWX+LiHhnRFxU3+PL6nu+8aDyx9kHPa/tGRFxVn3eNRHx\nrYh4zjjbDlnnzuOnb/5dLviNiMfXY+mqiLipvrd/1LP+vSLi9fXYuKW+3x+OiPsPed5Lavn7RsQO\nEfGxup+69+O9EXHfvm0iIn5at3vFDPvta3W9d8ywXncsPSQiHh4Rn6z1uC0iTu5Z72ER8daIOLPW\nb219D74VEa+Jnr/fvvLn/P71lPGgiPhIRFxen3dVRLwvSleukZba8d5X7+dGxBkRcXWsP9f+S0Q8\nfsD6f1vrfHVEbDtgeUTEl+s650W5lqhbdufFghFx74g4OiIuqK/lqoj43xGx6wz13ba+JxfU4//G\niPhOPTYGNvD0Pe9GEfGqKOfIW+q+/nxEPG7Qtj1lbBYRb6qv6cb6/l4cEX8fEdsN2ab382jjKOeA\nC3te7z9HxEP7ttkxyrngrXXW8+Ku5+J1EfGQnvUHXtQZE3yOaonITB8+Rj6AQ4B1wB3AznPY/pF1\n+66M6yldX+7omf+GIdueXZe/Crig/vtXlP7r3bZfruseUf9/W32OrvxfA78/oOyVdfkJwEk9617X\ns+1twJ8M2HbH7vUMqfcTgWt7XvOtlAtguzpfCjysb5sVPa93HXB7LeM3PfP+ecx9/ifAL4Bresq6\noudxaF3v+XX5WcAHe17zNXX6zLreJsBpPfVY27efbunW7avHfnX5KuAvh7w/a+t62wI/7nmPb+15\nvi/O4bjrfW1v6Xnu3nqvA44cse2ZI8rvjp/jhx0bwLPq+3d73/PeAfx53a9fr/NupvyS0dXrh8C9\nBjzvJXX7FwFX1XVv7Du+LgIe2LfdG+uy7414Tbv01G+XGfZvt95hPc99Q/33ST3rfa9n3ZuBq+v+\n6Or6XWCz+Xz/6vYP79k/d9Rjqtu/FwGvHvYeswSP9/r8mwNn9JRze99z3w68YsB55/t1+RcGlPlX\nddkaYLe+ZSfUZX8LfKv++9a+51zDgPNv3f7x3PU82R0/Xf1/AGw9YLvuef8G+HLPfr2x7z3ae8Sx\ncUnP8/yau34mXQs8YcB2Z9flRwD/3vM8vX+319DzOQlsRzkX39Sz/hV9jwcP+Lvaoe+5J/kc7fbX\nW+dyXPlYnEfzCviY/gewU88f/JeArWa5/a7AR4E/oOeDF9gaeDPlA+sO4PEDtu1OgNcD53cnSeCe\nlEDShdV31X+/A7hvXWcH4Jt1+XkDyl7ZU/ZtwJHAveuynVn/gXwzfV9EGBHIgYew/gPpQ30n50ew\n/gPkx8BGPcsOr/NvAv6MGsYoP3FuT/mAf/0s9/2+tcxVQ5Y/n/WB4A7gr3v232bUD0PgH3s+TF4C\n3LPnvT2T9R+8u/aVv1/PsrWUD9D79uyn7v35AfD5Ae/xC3ve46fP8rV3r617f9/U89zbAJ/teU33\nG7LtJIG8e+6P9OzHrYCT67JfAB8DLqdcEB2UXy2fQQkW6+gLT7WMS3rKvrBnfwXwTNaH0NP6tnsg\n6//WHjXkNb2jbnv2GPu3e42/qsfAb/cs6z3mPwS8ANi+Z969gD9i/ZfsD83z+3dP4L/q8ouBJ/bs\noz8CflnLHRbIl9zxXsvojq3zKOfb7hyyZd1/v6aE8if0bbc764Pwy3vm71b3wbBj8YSe9+gmypfM\ne9Rlj2b9l7FfAFv2bXs/Shjtvnw+rs7fCPhj1gf100c873WUL3iHACvqskcB/1GXf2fAtlsAq+vy\nf6EE3ajLdqJcL9XVeYu+bc/ued6fUbpydts+Efh5Xf6ZAc/7NgacL4b8XQ0K5JN8jnb7y0A+xY/m\nFfCxNB49f9Bda8IZlA+bZzLLgD6g7L8edqLqOQH+mgGt85RA09XrYwOW7zDiBLeyZ9s3Dtj23sBP\n6vKP9i3bsSt3wHbdCf2dQ17vPesH0DrKyCfd/OPqvGPn8X3bj/EC+TrgHUPW2ZH1rTAvGbB8Y0ro\nWQd8csjzrwM+PmDb7blry+Go93jkB9kMr23Q+3sfSjBbBzx3yLaTBvKvDNhuE0pLYLfOE0f8TQwK\ni5cw5IvigH2+T9+yU+r89w/YbiPgsrr88DH2b/ccF1O/yM7h+NyREkBvAjaex/fvuaxvrd11wLZP\n7Cn7zAF1WorH+x/U7c4HNh+yzuvrOp8fsKy3JfxhlJbz8+q8Lw0p74Se1/s/Byx/ACUwrwPe3Les\n+9XjWmCbAdse2FP2/kOe9w4Gt2Q/tmf59n3Lui+dnxqxL79Y13lt3/yze/bRoPfuYNZ/kbtn37KV\n47yvPfXeYdR6A7Yb9Tna7S8D+RQ/7EOucb0EeD/lw/OewAGUb+WnAFfVPn9/Nseyu37pTxixzucy\nc9WA+V+p06S0kt9FZv4c+CmlZewRQ8q+GThmwLa/Bt5X/3vwiLrdKSI2AQ6lnFA/MGidzLwN+Nf6\n3z/oWXRjnT5onOeaZ7dT3t9Bnk3Zf12L7l1k5q3A33XrRsSg88qw9+cyyvsDw9/jr9bpsPdvJrcy\n+P1dS/kVZJKyR0ng3QOe9xbg2/W/38zMbwzYdpzX/NlB+yszzwbOrf89pG9x9/4d1tsXuDoQeDCl\nxftzI56334fq38qsZeYllAC5KfCYIavN5f3rXvdJmXnxgG2/QekqNMhSPd6fV6cfzcybhqzzv+t0\nv4i4y8WFmfkhyv7chNKo8HbKyFrXUn7hGOWSzPzn/pmZeS3w4frf/mOx+//HMvOqAdueQekGA6UL\n3iDnZOa5/TMz898pvzwNOu8/j/L+DDvfAXSv5Q+GLP8/Q967/1un9wYeOmD5Qhrnc1RTzECusWTm\nbZl5FKWF5y8oJ6yLKN+6AX4X+FREfKb/RA9QL4B5db0o5qooF351F779e11tVBD9zyHzr67TtZn5\nsyHr/LJOtxyy/Hv1Q3aQr3XbRsROI+rXeRzlC8tGwI8j4spBD+Couv4OPdt+qU6fFeUiwGfHkAv7\nFsBPM3PYDYMeW6fnZJbmlgHOrNNNKT9z91ubmT8dMB9KFwsoXXhGLR/2/s3k/BHv7xV1ulBj5890\n3E7yms8esaw7bn+nb/4XKUFlK0rXmF4vrNPPjNhf/ZL1oWmoiDiwXvD2s3rh3bqev/896mq/NWTz\nubx/3TH7NYYbtmypHu9dEHvLiPNOd9O2TSmt1/1eQAngewJvoLy/L8/MK2d47nH28yO6L4H1Ys1H\n1vLPGrFtt5/7j+POqJvQXV6ndx4bEbE95UtnAF8asZ/+vm6yA4MNfN7MvJ3Jz1dDzcPnqKaYwx5q\nVjLzakqf2I8ARMQ2lA/2t1LC+qGUfpIf7LaJiN+ihIfuavuktEp3fRPvQekHt+mIpx42JusddfrL\nIct717nnkOWXD5kP6z/woYSY1SPWhfWhIiivaZRk/bCEZObXI+KtlH35jPogIi6ktH58eMSH/KSu\nHrGsex2j9lPvsq0GLB/n/ZnpPR72/s1kWGshlG4Dk5Q9UmYOe93jvuZR5+hxjtu7HIOZuS4iTqD8\nuvUCSp9j6he/Z1GOyeNHlDvIqGOHiPggpTsErL/hybWsv/HJAyj7f9jf/1zev+51X8Fww5Yt1eO9\nO/dsycx3ZExKS/hdZ2ZeGRFvpvShh9KK/3/GeO5xjsV7UMLx1cD9KefInGHbbtmwc+lsj43eL32D\n3rdedzk/z/J5g3k+p8zT56immC3kmkhmXpWZH6e0KnUfQi/sW+0YyknkZ5SuH/fPzPtm5gMz80HA\n7y1ahRde9zd1Q2beY4zH/+jdODPfQem/+UbKz8c3UlrgXgucHxHPXaB63zHzKgwcnk5Lzsfr9Cmx\nfpi7P6NcaPmTzPzOLMsbeuxExNMoYfx2ykVtD83M+2Tm1pn5oPr3/91u9Vk+70Jbasd7d+45aIZz\nzkZ1+vP+AiLiHqzv+gLwO7Ub3kJazP3c7aOkXAg80/l550Ws20w2pM/RDZKBXPOi9hXsbgd857iz\n9afJruXtzzPzlMy8sW/zBy5OLYca9RNf77KRLYFV99PufaNvLOhxZeYlmfmezHwapfVwf0p/1xXA\ncRExU8v7fOte90NGrNM7bu84+2na3V6no8LCjGNZL7AHj1jWHbd3ey9qv+2vUFrwui943ZfoT8xX\n5apD6/Rjmfk3mTnoF6a7jX09D7rXPc4+GrbtUjveuwaRUfWeyRsowe4GygW+u7L+OppRxtnP3VB9\nUEYpScqXsHH283zt496uN5Psp0W1RD5HNSEDuebTLXXae3OgrSgtb1CG+hpk2IUzi2XPGH4jjn3r\n9IYaZGbyPcoHz0bAUyetWGauy8yvUYZqu53yM/Oek5Y7S9+v08eP2E9dS//NlKH4lrouOAy8QUg1\n55tGzZN9x1j270OWdxcrviAiHk25oPI24J/mqW6dbv8N/NuvN0RZiIvfumP2SSPWGbb/lurx3l3c\n+LS5bBwRj6X8ipGUcba7ix9fVn/pGGWcY/HHtY81WW4g111fMeqGNt1+HnYcz0o9h/+S8kVgTvtp\nAt31VnP5JWgpfI5qQgZyzajeaWzkT3f1Z82D6n9/2LOot6/dHvSp/eKOmLiSk9mMMgb5XUTEvYHX\n1P+O04+SzFzTs+7bI2KzYetGxIqI2LTn/6P6HHZjzAbrT8yLpbtp0lbAS/sX1vf+dd26Iy6EW0q6\nsPDgGlTuIiJ+n/ajGfzpoAuNo9yZ9gmUMDVstJSTKTcweThwbJ33hXqNyHzqWvHu9rdf/e08P1+n\ne90H9985ESDK3TKHhfWleryfUKdPiYinjFoxIrbs+//GlJFVVlBGEPl0Ha2nGynq4xEx6CLQzo4x\n4K6p9dqEbh/2H4vdefL5EXG31t2IeDKwN+U4/uyo1zNLJ9TpUREx9NfRKObzV7Bf1elcLvZcCp+j\nmpCBXON4JHBRRPxrRBzae/KMiE0j4hnAOZTxe5P1V6hTh9/6FiVIHl9b47rbAB/A6KvzF8uNwN9E\nxCuj3sa7fgE5lXLDjFsZMHzdCG+g/CT7MODcKLfPvmctNyJi94h4HaVlrbe1+8SIOD4inhwRm3cz\nI2JH4JOUobRuoezrRVP7mn6k/vfdEfGS+hMqEfEw4AuUOzzeTBnjd8mrr/m7lOP2hIh4JJQvTRFx\nKGW4z+tHFLEYfkMZKeL34M6/qWewPuickZkDR0CpQ2+eWP/bfbG4y8Wcsf428OsiYlQL6Cin1+nL\nIuIFPX8HO0TEJ4HnsDD78TOU4RTvDXwxIvapz7tRRDydErr7f/IHpvt4j3Kr9m5UjbvIzNMoryuA\nkyPiqIjYqmfbrSLikIj4Ancf8u89lHPdFcDLeua/iXKDpQeyfvjCQW4EPhoRf1b7oRMRe1Cug9mK\n0ip9XN82H6Jc2Lox8OWot7qPiHtExB9TbtoDZSz/s0c892y9m3In1a0o5+dDu/N+ff6dIuLllIal\ng4aUMZNBX9K6UXV+f9CXxJGFLY3PUU3IQK5x/IZyrDyb8kF3RZShy26gfHM/lTIs1e2Umz+c0rf9\nqymh9lHADyJiDeXGCmdQrrp/0aK8iuFOpYwfewzwq4i4njJW8JMpr+kFQ/q+DpSZl1K6q1xB+TLz\nJeDmiLiGcgX++ZQPwB1Z/zMmlPDwfMqdPG+MiOsj4mbKh8ef1Lq8bMTwhAvptZT3696UD+Y1dT9d\nQPlJei3wZws4CkwLr6Qct48E/iMibqIct58BvsPdA8ZiSsrQmfcDvtlTt1MpQeNi7npx3iC9Y2z/\ngjIk4qjnG2Smn99PoIy5voJyMemt9bi5BDiMMqLQsKEh56x2jTiU0vf4ocA5Pfvo85QA+fYRRUz7\n8T7s/Tic8mXxPpSx0q+q55GbKMPxfZbSVePO7WtL9F/VeS/MzBvufJLSteQwyi90B0fEsGPq/6cE\nzk9RznU3Uu++Sfnicmh/n+f6PAdRvpDtAZwXEb+ivEefo7Qk/4hy9895U+vxFMpN33ag/D2viYhr\nIuJWykWTx7L+VvVzMejv4uxa9v0pDVxXRcQlEbE6Ivr74A/afto/RzUhA7lmlJmnU0b6OIryU3d3\nl7pNKCfT71N+2nx0Zg66Ecp3KRcKnUJpOb4H5eKaf6T0Xf3RqKdn9BBe4/xcPFMZ6ygf3q+hhOUV\ntZ6fp9wFbtY/l2bm9ygtTq+n9O38FXBfygn0PMqvCPtmZm9r9xuA/48S4H9a6xH138cDj83MT8+2\nKhMuLyuVcaCfBryY0kK/hvKhfwnlds6PyszPz7H8+XiP57rd0Oeux+0TKcfB9ZTz5QWUv4OuT/8k\ndZukq0NQ/g73pBwb19d5q4H/Bew5YsjFUoHMn9QyAE7MzP7wkX3TgcXM8By3Ufq2dq2St1O+4J8O\nPCMz38nwfTHp+/cTyvnlY5Qvx/eo0/dT+v8P/WI7xcf7TPv7lsw8mHJ8ngT8N6XeG1He689QvvQf\nARAR96McPwkcV8/1/WX+iNK3HOCYiBg0Nvdayl1K3045BldQvgD8M+W8NejmV2TmecBvUz4/LqS8\nR7+hnCOPAvbKzGsGbcp457Zhx8bPKI1If0kZB/1aYHPKHaF/RPkS9nSg/3w75+etXxIPoPwydRnl\novDtKV8K7jGgjP7tF/JzVFMgpqf7m7S4ImIlpYXuhMzsH6pRmkoRcQnlQ3y/zBx2t8lxytmeEjAB\nHp6ZF01eO21IooxpfziwMjNH/eIgaQa2kEvShumllFb1cwzjktTWRIG8XiDyDxFxTkT8ql5scuLM\nWw4sa7t6QdsVEbG29qv6QP/V4JKkyX5+jojfYf3IQsdMXh1J0iRG3ZZ5HH9NuRjjJkpftd2ZwwdF\nROxC6We7NaV/1AXAXpQPjKdGxD6NLmSTpGk0p7taRsQ3gJ1ZfxORrw24CFuStMgm7bLyKmDXzNwC\nePkE5RxHCeNHZObBmfmmzDyAcqHHbsA7J6ynNIgXumgpmuS4fTDlzphXUi52PHi+KqUNkudQaZ7M\n20WdEbEfcCbwqcw8fBbb7UK5+nt1Zu7St2wzygdHAttm5i0DipAkSZKWrGm4qLO7be6g4ZbWAN8E\nNqXcsUuSJElaVqYhkO9Wp8Ou8u/Gyd11EeoiSZIkLappCORb1OnA2xj3zHe0FUmSJC07k46yMlUi\nwotLJEmStCgyc06jXvWbhhbyrgV8iyHLu/k3LEJdJEmSpEU1DS3kF9TpbkOWd33Hx76T3HyNHLOc\nRYT7aQzup/G5r8bjfhqf+2o87qfxuJ/G576aWcS8NIzfaRpayM+q0wOj79VFxObAPsDNwLcXu2KS\nJEnSQlu0QB4RKyJi94jYuXd+Zq6iDHm4E/CKvs2OBjYBTszMWxenppIkSdLimejGQBFxEHBQ/e8D\ngScDq4Bv1HlXZ+br6ro71mWXZuZOfeXsDJwLbAOcSunGshewH3Ah8ITMvH6M+iTYZWUc/hw1HvfT\n+NxX43E/jc99NR7303jcT+NzX82s69QxXxd1TtqH/NHA4ay/dW5SWrq7VvBLgNf1bXO3dzgzV0XE\nnsDbgacCfwhcARwDHJ2Zw4ZElCRJkpa0iVrIp40t5OPz2+943E/jc1+Nx/00PvfVeNxP43E/jc99\nNbP5biGfhos6JUmSpA2WgXwD9ba3va11FZYE99P43FfjcT+Nz301HvfTeNxP43NfLT67rEiSJEmz\nYJcVSZIkaRkxkEuSJEkNGcglSZKkhgzkkiRJUkMGckmSJKkhA7kkSZLUkIFckiRJashALkmSJDVk\nIJckSZIaMpBLkiRJDRnIJUmSpIYM5JIkSVJDBnJJkiSpIQO5JEmS1JCBXJIkSWrIQC5JkiQ1ZCCX\nJEmSGjKQS5IkSQ0ZyCVJkqSGDOSSJElSQwZySZIkqaEVrSuwEF784hePve797nc/3vve9y5gbSRJ\nkqThIjNb12HeRMSsX8x2223HZZddthDVkSRJ0jIUEQBkZsxHecuyhRw+OsY61wGvX+iKSJIkSSMt\n0xbycV7TZcAOtpBLkiRpVua7hdyLOiVJkqSGDOSSJElSQwZySZIkqSEDuSRJktSQgVySJElqyEAu\nSZIkNWQglyRJkhoykEuSJEkNGcglSZKkhgzkkiRJUkMGckmSJKkhA7kkSZLUkIFckiRJashALkmS\nJDVkIJckSZIaMpBLkiRJDRnIJUmSpIYM5JIkSVJDBnJJkiSpIQO5JEmS1JCBXJIkSWrIQC5JkiQ1\nZCCXJEmSGjKQS5IkSQ0ZyCVJkqSGDOSSJElSQwZySZIkqSEDuSRJktSQgVySJElqyEAuSZIkNWQg\nlyRJkhoykEuSJEkNGcglSZKkhgzkkiRJUkMGckmSJKkhA7kkSZLUkIFckiRJashALkmSJDVkIJck\nSZIaMpBLkiRJDRnIJUmSpIYM5JIkSVJDBnJJkiSpIQO5JEmS1JCBXJIkSWrIQC5JkiQ1NC+BPCK2\ni4jjI+KKiFgbEasj4gMRseUsyoiI+NOIOCsiLo+IWyLiZxHx2YjYez7qKUmSJE2bFZMWEBG7AOcC\nWwOnABcAewFHAk+NiH0y87oxivoo8ELgmlrONcCuwLOAP46IwzPz05PWV5IkSZomEwdy4DhKGD8i\nM4/tZkbE+4BXA+8EXj6qgIh4CCWMXwnskZnX9CzbDzgTeDtgIJckSdKyMlGXldo6fiCwujeMV28D\nbgEOi4hNZihq6zr9Tm8YB8jMs4E1wFaT1FWSJEmaRpP2Id+/Tk/vX5CZa4BvApsCM/UB/zGldXyv\niHhA74KIeBKwGfCVCesqSZIkTZ1JA/ludXrRkOUX1+muowrJzLXAQZSW8PMj4iMR8a6I+CxwGiXw\nv2zCukqSJElTZ9I+5FvU6Y1Dlnfzxxlt5T+AE4DXAy/umf9T4JP9XVkkSZKk5WAqxiGPiBXAV4F3\nUEZb2RnYBHgcsAr4dES8p10NJUmSpIUxaSDvWsC3GLK8m3/DDOUcBvwecFJmHpWZl2Tm2sz8AfBs\n4HLgtRGx03jVihGPleMVIUmSpA3WypUriYiBj/k2aSC/oE53G7K86zs+rI95Z886Pat/QWbeCpxH\nqetjxqtWjnisHK8ISZIkbbBWrlxJZg58zLdJA3kXoA+Mvq8LEbE5sA9wM/DtGcr5TZ1uM2T51n3r\nSZIkScvCRIE8M1dRRkDZCXhF3+KjKf3AT6yt3ETEiojYPSJ27lu3G9LwpRHxoN4FEfE0SrC/lXJH\nUEmSJGnZmI87df4lJSh/MCIOoHRj2QvYD7gQeHPPutsB5wOXUkI8AJn5xYg4hTL04U8i4mTgl8DD\ngT+i9DV5Q2ZePw/1lSRJkqbGxIE8M1dFxJ6UW9s/FfhD4ArgGODozBw0JOKgzjeHAC8Fnku5kHMT\n4Frg34APZqY3BpIkSdKyEwvRMb2ViKgvZpzXdBmww5yeZzntM0mSJM1Od+lkZs7LkCtTMQ65JEmS\ntKGajz7ky8C4Ld7zP+6kJEmSNmy2kEuSJEkNGcglSZKkhgzkkiRJUkMGckmSJKkhA7kkSZLUkIFc\nkiRJashALkmSJDVkIJckSZIaMpBLkiRJDRnIJUmSpIYM5JIkSVJDBnJJkiSpIQO5JEmS1JCBXJIk\nSWrIQC5JkiQ1ZCCXJEmSGjKQS5IkSQ0ZyCVJkqSGDOSSJElSQwZySZIkqSEDuSRJktSQgVySJElq\nyEAuSZIkNWQglyRJkhoykEuSJEkNGcglSZKkhgzkkiRJUkMGckmSJKkhA7kkSZLUkIFckiRJashA\nLkmSJDVkIJckSZIaMpBLkiRJDRnIJUmSpIYM5JIkSVJDBnJJkiSpIQO5JEmS1JCBXJIkSWrIQC5J\nkiQ1tKJ1BZaiiJjV+pm5QDWRJEnSUmcLuSRJktSQLeRzMm6L9+xa0iVJkrThsYVckiRJashALkmS\nJDVkIJckSZIaMpBLkiRJDRnIJUmSpIYM5JIkSVJDBnJJkiSpIQO5JEmS1JCBXJIkSWrIQC5JkiQ1\nZCCXJEmSGjKQS5IkSQ0ZyCVJkqSGDOSSJElSQwZySZIkqSEDuSRJktSQgVySJElqyEAuSZIkNWQg\nlyRJkhov3Q4NAAAcHUlEQVQykEuSJEkNGcglSZKkhgzkkiRJUkMGckmSJKkhA7kkSZLUkIFckiRJ\nashALkmSJDVkIJckSZIaMpBLkiRJDRnIJUmSpIYM5JIkSVJDEwfyiNguIo6PiCsiYm1ErI6ID0TE\nlnMo64CIODkirqxlXR4RX46Ip01aT0mSJGkarZhk44jYBTgX2Bo4BbgA2As4EnhqROyTmdeNWdbf\nAUcBl9WyrgG2AR4L7At8aZK6SpIkSdNookAOHEcJ40dk5rHdzIh4H/Bq4J3Ay2cqJCJeQgnjJwAv\nzczb+5ZPWk9JkiRpKkVmzm3D0jp+MbA6M3fpW7YZcCWQwLaZecuIcu5NaRW/Gdi1P4zPsk71xYzz\nmi4DdmD89QFiTuvPdR9LkiRp+kTcmfFihlXHMkkf8v3r9PT+BZm5BvgmsCmw9wzlHAhsBZwEZEQ8\nPSJeHxFHRsRM20qSJElL2iRdQXar04uGLL+YErZ3Bc4cUc7v1umvgR8Cj+hdGBFfBw7JzGvmXlVJ\nkiRpOk3SQr5Fnd44ZHk3f6bRVrap09cBdwBPBDYD9qC0vj8J+NzcqylJkiRNr2kYh7yrw23AMzPz\n3My8JTN/DDwb+G9gX7uvSJIkaTmaJJB3LeBbDFnezb9hhnK65T/IzJ/3LsjMW4HT6n9/F0mSJGmZ\nmSSQX1Cnuw1ZvmudDutj3l/OsODezd94zHpRRjcZ9lg5fjGSJEnaIK1cuZKIGPiYb5MMe7gz8FNg\nNfDQ7CkoIjYHfkEZH3Cb2tI9rJwdahk/B3bOvgpFxJeApwB/mpkj+5I77KEkSZIW2tQMe5iZqygX\nXe4EvKJv8dHAJsCJXRiPiBURsXsN8r3l/Bz4PPAQyh0+7xQRT6aE8euBL8+1rpIkSdK0mnMLOdzZ\nSn4uZaSUUyndT/YC9gMuBJ6QmdfXdXcEVgGXZuZOfeU8uJazPfBVyvCHOwEHUUZeeU5mnjxGfWwh\nlyRJ0oKamhbyWolVwJ6UW97vBbyGEqSPAfbuwnj/ZgPKuRx4HPAhSt/zV1KGOzwV2GecMC5JkiQt\nRRO1kE8bW8glSZK00KaqhVySJEnSZFa0rsCGYC7D49iqLkmStGGwhVySJElqyBbyRTGb1u75H2xe\nkiRJ08sWckmSJKkhA7kkSZLUkIFckiRJashALkmSJDVkIJckSZIaMpBLkiRJDRnIJUmSpIYM5JIk\nSVJDBnJJkiSpIQO5JEmS1JCBXJIkSWrIQC5JkiQ1ZCCXJEmSGjKQS5IkSQ0ZyCVJkqSGDOSSJElS\nQwZySZIkqSEDuSRJktSQgVySJElqyEAuSZIkNWQglyRJkhoykEuSJEkNGcglSZKkhgzkkiRJUkMG\nckmSJKkhA7kkSZLUkIFckiRJashALkmSJDVkIJckSZIaMpBLkiRJDRnIJUmSpIYM5JIkSVJDBnJJ\nkiSpIQO5JEmS1JCBXJIkSWrIQC5JkiQ1ZCCXJEmSGjKQS5IkSQ0ZyCVJkqSGDOSSJElSQwZySZIk\nqSEDuSRJktSQgVySJElqyEAuSZIkNWQglyRJkhoykEuSJEkNGcglSZKkhgzkkiRJUkMGckmSJKkh\nA7kkSZLUkIFckiRJashALkmSJDVkIJckSZIaMpBLkiRJDRnIJUmSpIYM5JIkSVJDBnJJkiSpIQO5\nJEmS1NCK1hXQYBExq/Uzc4FqIkmSpIVkC7kkSZLUkC3kU2vcFu/ZtaRLkiRputhCLkmSJDVkIJck\nSZIaMpBLkiRJDRnIJUmSpIYM5JIkSVJDBnJJkiSpIQO5JEmS1JCBXJIkSWrIQC5JkiQ1ZCCXJEmS\nGpo4kEfEdhFxfERcERFrI2J1RHwgIracoMzDImJdfbxo0jpKkiRJ02rFJBtHxC7AucDWwCnABcBe\nwJHAUyNin8y8bpZlbg98CFgDbAbkJHWUJEmSptmkLeTHUcL4EZl5cGa+KTMPAD4A7Aa8czaFRUQA\nnwCuBv5xwrpJkiRJU2/Ogby2jh8IrM7MY/sWvw24BTgsIjaZRbGvBPYHXlC3lyRJkpa1SVrI96/T\n0/sXZOYa4JvApsDe4xQWEQ8H3g0ck5nfmKBekiRJ0pIxSSDfrU4vGrL84jrddaaCImIFcCJwCfCm\nCeokSZIkLSmTXNS5RZ3eOGR5N3+c0VbeCjwG2Cczfz1BnSRJkqQlZaJRVuZDROwFvBF4b2Z+p3V9\nlqpyPez4Mh28RpIkaRpM0mWlawHfYsjybv4NwwqoXVX+CbiQciHowNVmX7UY8Vg5++IkSZK0QVm5\nciURMfAx32KuLaX1hj0fBT6SmX8xYPlplFFYDsjMs4aUsSUw7jjlf5+Zr56hTvXFjPOaLgN2YPz1\nYf13g4VafzGeo6xvC7kkSdLcdKE8M+clnU/SZaUL2QdGRGRPwouIzYF9gJuBb48oYy3wcQanyccB\nvwOcQ2lBP3eCukqSJElTac6BPDNXRcTpwJOBV1Durtk5GtgE+MfMvBXu7J7yUOA3mbmqlrEWeMmg\n8iNiJSWQfzIzj59rPSVJkqRpNulFnX9Jabn+YEQcAFwA7AXsR2nVfnPPutsB5wOXAjtN+LySJEnS\nsjDJRZ3Ulu49gRMoQfw1lLB9DLB3Zl4/aLNxi5/FupIkSdKSNOeLOqeRF3WOv/5yet8lSZIW03xf\n1DlRC7kkSZKkyRjIJUmSpIYM5JIkSVJDBnJJkiSpIQO5JEmS1JCBXJIkSWrIQC5JkiQ1ZCCXJEmS\nGjKQS5IkSQ0ZyCVJkqSGVrSugNrobvk6G5m5ADWRJEnasNlCLkmSJDVkC/kGazat3bNvTZckSdJ4\nbCGXJEmSGjKQS5IkSQ0ZyCVJkqSGDOSSJElSQwZySZIkqSEDuSRJktSQgVySJElqyEAuSZIkNWQg\nlyRJkhoykEuSJEkNGcglSZKkhgzkkiRJUkMGckmSJKkhA7kkSZLUkIFckiRJashALkmSJDVkIJck\nSZIaMpBLkiRJDRnIJUmSpIYM5JIkSVJDBnJJkiSpIQO5JEmS1JCBXJIkSWrIQC5JkiQ1ZCCXJEmS\nGjKQS5IkSQ0ZyCVJkqSGDOSSJElSQwZySZIkqSEDuSRJktSQgVySJElqyEAuSZIkNWQglyRJkhoy\nkEuSJEkNGcglSZKkhgzkkiRJUkMrWldAS0dEzGr9zFygmkiSJC0ftpBLkiRJDdlCrlkYt8V7di3p\nkiRJGzJbyCVJkqSGDOSSJElSQwZySZIkqSEDuSRJktSQgVySJElqyEAuSZIkNWQglyRJkhoykEuS\nJEkNGcglSZKkhgzkkiRJUkMGckmSJKmhFa0roOUrIma1fmYuUE0kSZKmly3kkiRJUkO2kGsBjdvi\nPbuWdEmSpOXEFnJJkiSpIQO5JEmS1JCBXJIkSWrIQC5JkiQ1ZCCXJEmSGjKQS5IkSQ0ZyCVJkqSG\nDOSSJElSQ/MSyCNiu4g4PiKuiIi1EbE6Ij4QEVuOuf39I+LFEXFyRPw0Im6JiBsi4pyIeGHM9h7s\nkiRJ0hIRmePeTXFIARG7AOcCWwOnABcAewH7AxcC+2TmdTOU8RfAccAVwFnAz4EHAgcDWwD/mpmH\njlGX+mLGeU2XATsw/vqw/o6SC7X+YjzH9NZp0mNRkiRpMXRtxZk5L43G8xHITwMOBI7IzGN75r8P\neDXw4cx8+Qxl7A9skplf6Ju/LfBdYHvgkMw8aYZyDOTzvv5iPIeBXJIkLR1TFchr6/jFwOrM3KVv\n2WbAlZRUtm1m3jLH53gj8E7gHzLzyBnWNZDP+/qL8RwGckmStHTMdyCftA/5/nV6ev+CzFwDfBPY\nFNh7gue4vW8qSZIkLRuTBvLd6vSiIcsvrtNd51J4RKwADq///fJcypAkSZKm2aSBfIs6vXHI8m7+\nWKOtDPBu4BHAFzLzjDmWIUmSJE2tqR2HPCJeCbwG+Anw3MbVkSRJkhbEpIG8awHfYsjybv4Nsyk0\nIv4KOAb4L2D/zJzV9uUiwWGPlbMrSpIkSRuclStXEhEDH/Nt0kB+QZ3uNmR513d8WB/zu4mIVwEf\nBP6TEsavmn21csRj5eyLkyRJ0gZl5cqVZObAx3ybNJCfVacH9t9NMyI2B/YBbga+PU5hEfF64P3A\nDyhh/JoJ6ydJkiRNtYkCeWauogx5uBPwir7FRwObACdm5q1QRk2JiN0jYuf+siLiLcC7gO8BB8x0\nd09JkiRpOZiPO3XuDJwLbAOcSunGshewH3Ah8ITMvL6uuyOwCrg0M3fqKeN5wCeAO4B/AH414KlW\nZ+YnZ6iLNwaa9/UX4zm8MZAkSVo65vvGQCsmLSAzV0XEnsDbgacCfwhcQbko8+jMHDQkYn/y2rFO\nNwJeNeSpzgZGBnJJkiRpqZm4hXya2EK+EOsvxnPM/cvlcjp+JUnS0jB1LeRSS7MdesgAL0mSpo2B\nXFNkLq32kiRJS5uBXEvcwneLkSRJWkiTjkMuSZIkaQIGckmSJKkhA7kkSZLUkIFckiRJashALkmS\nJDVkIJckSZIaMpBLkiRJDTkOuTYo3tlTkiRNG1vIJUmSpIZsIdcGxjt7SpKk6WILuSRJktSQgVyS\nJElqyEAuSZIkNWQglyRJkhoykEuSJEkNGcglSZKkhgzkkiRJUkMGckmSJKkhA7kkSZLUkIFckiRJ\nashALkmSJDVkIJckSZIaMpBLkiRJDRnIJUmSpIYM5JIkSVJDBnJJkiSpIQO5JEmS1NCK1hWQpllE\nzGr9zFygmkiSpOXKFnJJkiSpIVvIpZHGbfGeXUu6JElSxxZySZIkqSFbyKV5NNs+52C/c0mSNnQG\ncqkxLxyVJGnDZiCX5tVswrL9ziVJkoFcmgJeOCpJ0obMizolSZKkhgzkkiRJUkMGckmSJKkhA7kk\nSZLUkIFckiRJashALkmSJDVkIJckSZIaMpBLkiRJDRnIJUmSpIa8U6e0xETM7o6dmePeCVSSJLVg\nC7kkSZLUkC3k0pIzbov37FrSJUlSG7aQS5IkSQ0ZyCVJkqSGDOSSJElSQwZySZIkqSEDuSRJktSQ\ngVySJElqyEAuSZIkNeQ45NIyN9s7e4J395QkaTHZQi5JkiQ1ZAu5tOzNprW7tKbPtlXdFnVJkubO\nFnJJkiSpIVvIJQ0wbov37PunS5KkuzKQS5qYXVwkSZo7A7mkRefIL5IkrWcglzQP7OIiSdJcGcgl\nNTD7kV8kSVquDOSSlgT7qUuSliuHPZQkSZIasoVc0hJhP3VJ0vJkIJe0LNnFRZK0VNhlRZIkSWrI\nFnJJy5RdXCRJS4OBXJKwi4skqR0DuSTNgXcblSTNl4n7kEfEdhFxfERcERFrI2J1RHwgIrZsUY4k\nzU2O+Zi7iFjQhyRpaZookEfELsD3gecD3wbeD6wCjgS+FRH3X8xyNBsrW1dgiVjZugJLyMrWFVhk\n4wb4xWsVX24hfuXKla2rsCS4n8bjfhqf+2rxxSQ/oUbEacCBwBGZeWzP/PcBrwY+nJkvX8Ry6osZ\n5zVdBuzA+OvD+ou/Fmr9xXiO3g/gaXndy2E/TfNrWKw6xRjbLYf9NOlrWIj9NPdgPc3daCJiqus3\nLdxP43E/jc99NbOuQSMz56VlY86BvLZqXwyszsxd+pZtBlxJ+TTZNjNvWehy6voG8rHXX4zn2JD2\n0zS/BgN52/X7t1nIQD77Oo37GTDX1vQJG30MBWNwP43H/TQ+99XM5juQT9JlZf86Pb1/QWauAb4J\nbArsvUjlSJJmaTl0bZGkpW6SQL5bnV40ZPnFdbrrIpUjSVpws+s3P+lFqvP5ZcGLZSVNq0mGPdyi\nTm8csrybP9MoKfNVjiRp1pb+DZQWOjQvRihfyt0DJtk/S/l1S/NpmY5D/pEx1rluwWshSZrkeoGZ\n+tvPNQhO35eQSUP/Um3JX+x6z/R8s/mCsNDXVSzmvlmMOvnla7RJAnnXcr3FkOXd/BsWqZweLxt/\nVWD2J92FXn+5PMdyeA2z3WYaX8Ni1mnc7ZbDfprkNSzUfloO+7V/m4UIJUszvGrhLUYInsYvT4Pq\nNN/1nMbXPU0m6UN+QZ3uNmR51+d7WN/w+S5HkiRJWnImGfZwZ+CnwGrgodlTUERsDvyC8rvgNpl5\n60KXI0mSJC1Fc24hz8xVlKEKdwJe0bf4aGAT4MQuREfEiojYvQbwOZcjSZIkLSeT3qlzZ+BcYBvg\nVEr3k72A/YALgSdk5vV13R2BVcClmbnTXMuRJEmSlpOJAjlARGwHvB14KvAA4ArgZODozLyxZ70d\nKYH8kszcea7lSJIkScvJxIFckiRJ0txNMsqKJEmSpAkZyCVJkqSGDOSSJElSQ8sikEfEdhFxfERc\nERFrI2J1RHwgIrZsXbdpERGHRMQ/RMQ5EfGriFgXESe2rte0iYj7R8SLI+LkiPhpRNwSETfU/fbC\n8FZjd4qI90TEVyPisrqfrouIH0XEOyJi29b1m2YRcVj9G1wXES9qXZ9pERGX9OyX/scvWtdv2kTE\nAfVcdWX97Ls8Ir4cEU9rXbdpEBHPH3E8dY/bW9dzGkTxpxFxVj2ObomIn0XEZyNi79b1mxZ1P70k\nIr4TEWvq47yIeNmk+WDJX9QZEbtQhkzcGjiF9UMm7k8ZMnGfzLyuXQ2nQ0T8ENgDuAm4HNgd+FRm\nHt60YlMmIv4COI4yys9ZwM+BBwIHA1sA/5qZh7ar4fSIiF8D3wfOB64CNgV+D9gTuIbyt3dxuxpO\np4jYHvhPSoPIZsCLM/P4trWaDhFxCXBf4JgBi9dk5vsXt0bTKyL+DjgKuAz4EuVvbhvgscBXMvMN\nDas3FSLi0cCzhix+EvA/gH/LzGcuXq2mU0R8DHgh5Tg6pU53BZ4JrAAOz8xPt6vhdIiITwP/E/gl\n8H+BW4AnAw+n3DPneXMuexkE8tOAA4EjMvPYnvnvA14NfDgzX96qftMiIvYDLsvMn0XEvpSwaSDv\nExH7A5tk5hf65m8LfBfYHjgkM09qUb9pEhH3yszfDJj/DuBNwCcy09bfHrUF5QzgIZRhXY/CQH6n\nGsjXDRoaV+tFxEuADwMnAC/NzNv7lq/on6e7iohvURrvnpmZ/9a6Pi1FxEMod0u/EtgjM6/pWbYf\ncCawOjN3aVPD6RARzwb+lTKE9+O7xt6IuGed/0fAH2fmyXMpf0l3Wamt4wdSDpRj+xa/jfLN5bCI\n2GTRKzdlMvPszPxZ/a/dLobIzLP6w3id/0vgH+t/913cWk2nQWG8+lydPmix6rKEvJLy690LKOcn\naVYi4t7AO4FLGRDGAQzjo0XEoyhh/L+Bu53vN0Bb1+l3esM4lOwArAG2WuxKTaFn1+n7enteZOZt\nwFvqf/9qroWvmKBi02D/Oj29f0FmromIb1IC+96Ub3jSJG7vm2qwZ9Tp2S0rMW0i4uHAu4FjMvMb\nEfEHres0pe4TEYcBOwA3Az8Cvp6Z69pWa2ocSAlHJwIZEU8HHgmspQSqb7es3BLx0jr9eC71bgLz\n48eU1vG9IuIBmXlttyAinkTpWjenVt9l5oF1umrAstV1+sS5/kK11AP5bnV60ZDlF1NOXrtiINcE\nImIF0HXv+XLLukybiDiKcsLegtJ/fC/gY4D9fat6/JwIXELpzqPBkvKh909981dHxAsy8+sN6jRt\nfrdOfw38EHhE78KI+DqlW901/RsKImJj4DBKw8rHGldnKmTm2og4CPgUcH5EnApcC+xCaWA5HXhZ\nwypOi+5valCXum7eCsp+u3C2hS/pLiuUAABw45Dl3XxHW9Gk3k354PtCZp7RujJT5rXAW4EjgX2A\n7wD/Un/GU/FW4DHA8zPz160rM8U+QbnQbltgE+BRlL7SOwJfiog92lVtamxTp68D7gCeSPlCvAcl\nOD2J9d3GdHd/QskOX87My1tXZor8B+WahPsALwZeDxxCuWj4k37BA6C71uA1EXG/bmbtQ35091/m\nmDmXeiCXFlxEvBJ4DfAT4LmNqzN1MvO3MnMjSog6mNIf8fTa7WCDFxF7AW8E3puZ32ldn2mWmW+v\n17tcnZlrM/O/6kX57wc2Bla2reFU6D63b6NckHhuZt6SmT+m9HH9b2Bfh6obquuu8uGmtZgi9Re8\nrwLvAD5Kae3dBHgcpXvGpyPiPe1qODX+BTiN0gJ+fkR8OCL+nvJL1RMpo7IBzKl73VIP5F0L+BZD\nlnfzb1iEumgZioi/ogzB9l/A/pnpsTREDVGnUIaAuh14X+MqNVc/6P6J8vPl24attng1WrK6C6p/\nv2ktpkN3DvpBZv68d0Fm3koJDLC+a4uqiHgEZWjWy4AvNq7ONDmMsl9OysyjMvOS+oX4B5QveZcD\nr42InZrWsrF6HcszgDcAV1O6sT6Xcn7/PcrFr0kZBnjWlnogv6BOdxuyfNc6HdbHXBoqIl4FfJAy\nZvT+mTmnP7INTQ0JPwG28gZBbEY5D/02sLb3hiSUbiwAH63zPtCsltOv+7l806a1mA7d596wxoFu\n/saLUJelxos5B9uzTs/qX1C/5J1HyYuPWcxKTaPMvD0z/y4z98jMjTPz/pl5MKV1fFfgmsy8dC5l\nL/WLOruD58CIiN4/sIjYnNKf9WbAq841KxHxeuBdwA+AA7251Kw9iNJSsKZ1RRpbC3ycsi/6PQ74\nHeAcSgvLuYtYr6Wm634xaHSDDc1XKcfTb/d/7lWPrNPV6E4RcR9Ka+btlL9JrdcNYbvNkOVb962n\nu3sOcE/gn+dawJJuIc/MVZSLWHYCXtG3+GhKH6gT6zc8aSwR8RZKGP8ecIBh/O4iYteIuFtXsYjY\nKCLeSTmBfyUzb1782k2P+rPvSzLzpf0P4PN1tU/WeRv0hXgRsXtE3K0FPCJ2BD5U//upxazTNKq/\nQH2ecnOpI3uXRcSTgacA1+NoUP0OpVxs9yUv5rybr9TpSyPiLvePiIinURo3b8VGAyLivgPmPQZ4\nL3AdZQCIOVnqLeQAf0k5SD4YEQdQfs7bC9iP0ur05nZVmx51SKOD6n+7sTSfEBEn1H9fnZmvW/SK\nTZmIeB7ly9wdwDeAV5WbK97F6sz85GLXbco8HXhXRJxDGcrvWspFnftSviBfCvxFs9ppKXoOpZ/q\n1yg//95EuXjq6cC9KTdw+V/tqjdVXkH5deX9dRzyH1L+7g6iXOz54sy8qWH9plHXXeUjTWsxhTLz\nixFxCuX4+UlEnEy5NfzDKXefTOANmXl9w2pOizMi4hbKdWU3UfbR0ym9MZ6RmVfOteAlH8gzc1VE\n7Am8HXgq8IfAFZQL8Y7OzGFDIm5oHk25AKH7eTMpJ/Bu7MxLKMNobeh2rNONgFcNWedsYEMP5GdQ\nwtITKcFgS8rJ6QLK2L7/kJkbeneVmSSDu7JsqM4EHkY5nvah9Be/Hvg65ZfODb51vJOZl0fE4yjX\nITyTMtThjcCpwLsy83st6zdt6k259sGLOUc5hPKl5bmUCzk3oTS0/Bvwwcz8yohtNySfozQe/Dnl\nOo3/plx0/q7MvGKSgsPrGiRJkqR2lnQfckmSJGmpM5BLkiRJDRnIJUmSpIYM5JIkSVJDBnJJkiSp\nIQO5JEmS1JCBXJIkSWrIQC5JkiQ1ZCCXJEmSGjKQS5IkSQ0ZyCVJkqSGDOSSJElSQwZySZIkqSED\nuSRJktSQgVySJElqyEAuSZIkNWQglyRJkhr6fwWw+w5qG7BgAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": { "image/png": { "height": 265, "width": 370 } }, "output_type": "display_data" } ], "source": [ "import numpy.random\n", "\n", "plt.hist([numpy.random.exponential() for i in range(10000)], 50, normed=True) \n", "plt.title('Samples from numpy.random.exponential')\n", "None" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Looking good.\n", "\n", "## Why does this work?\n", "\n", "To get some intuition as to why this works, picture a cumulative distribution function and imagine taking a random point on the Y axis and seeing where it intersects the CDF.\n", "\n", "Here's a plot of where 0.7 intersects the CDF for the Exponential distribution:\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "image/png": { "height": 265, "width": 370 } }, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "from scipy.stats import expon\n", "\n", "x = np.arange(0, 5, 0.005)\n", "plt.plot(x, expon.cdf(x))\n", "plt.plot(x, [0.7 for el in x], 'r--')\n", "plt.title('CDF of Exponential')\n", "None" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "this is exactly what it means to take the inverse; where the dotted line intersects is $F^{-1}(0.7)$. \n", "\n", "So with a random number generator in hand, we can randomly start on the Y axis and use a random variable's inverse CDF function to get back to a point sampled according to its distribution.\n", "\n", "Further reading:\n", "- [Notes on transformation of random variables](http://math.arizona.edu/~jwatkins/f-transform.pdf)\n", "- [Notes on generating RVs](http://www.eg.bucknell.edu/~xmeng/Course/CS6337/Note/master/node48.html)\n", "- [Excellent Quora answer providing further intuition](https://www.quora.com/What-is-an-intuitive-explanation-of-inverse-transform-sampling-method-in-statistics-and-how-does-it-relate-to-cumulative-distribution-function/answer/Amit-Sharma-2?srid=X8V)" ] } ], "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.4.4" } }, "nbformat": 4, "nbformat_minor": 0 }