Skip to content

Instantly share code, notes, and snippets.

@pybokeh
Last active December 21, 2015 13:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pybokeh/6314006 to your computer and use it in GitHub Desktop.
Save pybokeh/6314006 to your computer and use it in GitHub Desktop.
RandomVariateExample
{
"metadata": {
"name": ""
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "heading",
"level": 4,
"metadata": {},
"source": [
" I will show 2 ways to generate random numbers. There are so many different distributions, so I will only show Normal/Gaussian distribution."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<strong>One way: Using Python's built-in random class(less efficient)</strong>"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import random"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 24
},
{
"cell_type": "heading",
"level": 4,
"metadata": {},
"source": [
"Let's see what methods are available in the random class using Python's dir() method:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"dir(random)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 27,
"text": [
"['BPF',\n",
" 'LOG4',\n",
" 'NV_MAGICCONST',\n",
" 'RECIP_BPF',\n",
" 'Random',\n",
" 'SG_MAGICCONST',\n",
" 'SystemRandom',\n",
" 'TWOPI',\n",
" '_BuiltinMethodType',\n",
" '_MethodType',\n",
" '_Sequence',\n",
" '_Set',\n",
" '__all__',\n",
" '__builtins__',\n",
" '__cached__',\n",
" '__doc__',\n",
" '__file__',\n",
" '__initializing__',\n",
" '__loader__',\n",
" '__name__',\n",
" '__package__',\n",
" '_acos',\n",
" '_ceil',\n",
" '_cos',\n",
" '_e',\n",
" '_exp',\n",
" '_inst',\n",
" '_log',\n",
" '_pi',\n",
" '_random',\n",
" '_sha512',\n",
" '_sin',\n",
" '_sqrt',\n",
" '_test',\n",
" '_test_generator',\n",
" '_urandom',\n",
" '_warn',\n",
" 'betavariate',\n",
" 'choice',\n",
" 'expovariate',\n",
" 'gammavariate',\n",
" 'gauss',\n",
" 'getrandbits',\n",
" 'getstate',\n",
" 'lognormvariate',\n",
" 'normalvariate',\n",
" 'paretovariate',\n",
" 'randint',\n",
" 'random',\n",
" 'randrange',\n",
" 'sample',\n",
" 'seed',\n",
" 'setstate',\n",
" 'shuffle',\n",
" 'triangular',\n",
" 'uniform',\n",
" 'vonmisesvariate',\n",
" 'weibullvariate']"
]
}
],
"prompt_number": 27
},
{
"cell_type": "heading",
"level": 4,
"metadata": {},
"source": [
"Looks like there is a normalvariate and gauss method avialable. We will use Python's built-in help documentation to find out what each one does."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"help(random.normalvariate)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Help on method normalvariate in module random:\n",
"\n",
"normalvariate(self, mu, sigma) method of random.Random instance\n",
" Normal distribution.\n",
" \n",
" mu is the mean, and sigma is the standard deviation.\n",
"\n"
]
}
],
"prompt_number": 33
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"help(random.gauss)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Help on method gauss in module random:\n",
"\n",
"gauss(self, mu, sigma) method of random.Random instance\n",
" Gaussian distribution.\n",
" \n",
" mu is the mean, and sigma is the standard deviation. This is\n",
" slightly faster than the normalvariate() function.\n",
" \n",
" Not thread-safe without a lock around calls.\n",
"\n"
]
}
],
"prompt_number": 28
},
{
"cell_type": "heading",
"level": 4,
"metadata": {},
"source": [
"So looks like we'll use the gauss() method since it says it is faster than the other method."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"mu, sigma = 0, 1\n",
"data = []\n",
"for i in range(0,1000):\n",
" data.append(random.gauss(mu, sigma))"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 25
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Plot the histogram of the raw data that we suspect follows a Normal distribution\n",
"count, bins, patches = hist(data,bins=30,normed=True)\n",
"# Plot the theoretical probability distribution function of the Normal distribution\n",
"plot(bins, 1/(sigma * np.sqrt(2 * np.pi)) * np.exp( - (bins - mu)**2 / (2 * sigma**2) ), linewidth=2, color='r')\n",
"title(\"Histogram\")\n",
"xlabel(\"bin\")\n",
"ylabel(\"Frequency\")\n",
"grid(True)\n",
"show()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAYcAAAEZCAYAAAB8culNAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xt8E1X+//FXChW5tBQEEWgx9gJtBVrkUkHRqEAFhUUE\nt9y0itAfggquK8vihV0FwbuCclsFESm48pXiChWVZkUEKzfRLSiXIlBBLgptubUN5/fHtLElaZOW\nTCZJP8/HIw8yyZmZN0lmTuecmTMmpZRCCCGEKCfI6ABCCCF8j1QOQgghHEjlIIQQwoFUDkIIIRxI\n5SCEEMKBVA5CCCEcSOUgarX27dvz5ZdfGh1DCJ8jlYMIaGazmS+++KLCa4sWLaJnz54A/PDDD9x0\n001VLmP//v0EBQVx4cIF3XIK4WukchABzWQyYTKZPLIsva4XtdlsuixXiEshlYOo1cxmM+vWrQMg\nOzubLl260LhxY6666ioef/xxAPuRRVhYGCEhIXzzzTcopXjuuecwm820aNGC++67j/z8fPtyFy9e\nzNVXX02zZs3s5crWM3XqVAYPHszIkSNp3Lgx7777Lt9++y3du3enSZMmtGrViocffpji4mL78oKC\ngpgzZw4xMTGEhoby9NNPs3fvXrp3705YWBgpKSkVygtxqaRyEAGvqr/4yx9VPProo0ycOJFTp06x\nb98+hgwZAsD69esBOHXqFAUFBSQlJbFw4ULeffddrFYr+/bto7CwkPHjxwOQk5PDuHHjSE9P5/Dh\nw5w6dYpffvmlwnpXrVrFkCFDOHXqFMOGDaNOnTq8/vrrnDhxgo0bN/LFF1/w1ltvVZhn7dq1bNu2\njU2bNjFz5kxGjx5Neno6Bw4c4Pvvvyc9Pd0jn5cQIJWDCHBKKQYOHEiTJk3sj3HjxjltarrsssvY\nvXs3x48fp0GDBiQlJdmXcbH333+fv/zlL5jNZho2bMjzzz/PsmXLsNlsfPjhhwwYMIAePXoQHBzM\nP//5T4f19ejRgwEDBgBw+eWXc91119GtWzeCgoK4+uqrGTNmDP/9738rzPPEE0/QqFEj4uPj6dCh\nA3379sVsNhMaGkrfvn3Ztm2bpz42IaRyEIHNZDKRkZHB77//bn+89dZbTnf4b7/9Nj/99BNxcXF0\n69aNTz75pNLlHj58mKuvvto+3aZNG0pKSvj11185fPgw4eHh9vfq16/PFVdcUWH+8u8D/PTTT9x5\n5520bNmSxo0bM2XKFE6cOFGhTIsWLSos8+LpwsJCF5+GEO6TykHUOpU1M0VHR7N06VKOHTvGpEmT\nGDx4MGfPnnV6lNGqVSv2799vnz5w4AB169blqquuomXLlhw6dMj+3tmzZx129Bcvc+zYscTHx7Nn\nzx5OnTrFtGnT5OwoYSipHIQotWTJEo4dOwZA48aNMZlMBAUF0bx5c4KCgti7d6+97NChQ3n11VfZ\nv38/hYWF/P3vfyclJYWgoCDuvvtuPv74YzZu3EhRURFTp051eaZTYWEhISEhNGjQgF27djFnzhyX\necsvU0beF54mlYOodSo7vfXTTz+lffv2hISEMHHiRJYtW0a9evVo0KABU6ZM4YYbbqBJkyZkZ2fz\nwAMPMHLkSG666SYiIyNp0KABs2bNAuDaa69l1qxZpKSk0KpVK0JCQrjyyiupV69epet/6aWXWLp0\nKaGhoYwZM4aUlJQKZZzlvfh9T52yKwSASc+b/WRmZjJhwgRsNhsPPvggkyZNclqu7DS+5cuXc/fd\ndwPYO9rq1KlDcHAw2dnZesUUQleFhYU0adKEPXv2VOinEMKX1dVrwTabjfHjx/P555/TunVrunbt\nyoABA4iLi3MoN2nSJG6//fYKr5tMJqxWK02bNtUrohC6+fjjj7nttttQSvH444/TsWNHqRiEX9Gt\nWSk7O5vo6GjMZjPBwcGkpKSQkZHhUG7WrFkMHjyY5s2bO7wn7ajCX61atYrWrVvTunVr9u7dy7Jl\ny4yOJES16FY55OXlERERYZ8ODw8nLy/PoUxGRgZjx44FHNtQe/XqRZcuXViwYIFeMYXQxYIFC/j9\n9985efIkn332GTExMUZHEqJadGtWcqdzbMKECcyYMQOTyYRSqsKRwoYNG2jZsiXHjh2jd+/exMbG\n2gdLE0IIoS/dKofWrVtz8OBB+/TBgwcdLvzZsmULKSkpABw/fpw1a9YQHBzMgAEDaNmyJQDNmzfn\nrrvuIjs726FyaN26tcOwBEIIIaoWFRXFnj17qi6kdFJcXKwiIyNVbm6uOn/+vEpISFA5OTmVlk9N\nTVUrVqxQSil1+vRplZ+fr5RSqrCwUPXo0UN9+umnDvPoGN+jnnnmGaMjuEVyepY/5PSHjEpJTk9z\nZ9+p25FD3bp1mT17NsnJydhsNkaNGkVcXBzz5s0DIC0trdJ5jxw5wqBBgwAoKSlh+PDh9OnTR6+o\nuit/Ja0vk5ye5Q85/SEjSE4j6FY5APTt25e+fftWeK2ySmHhwoX255GRkWzfvl3PaEIIIaogV0h7\nQWpqqtER3CI5PcsfcvpDRpCcRtD1Cmm9lZ3lJIQQwn3u7DvlyMELrFar0RHcIjk9yx9y+kNGkJxG\nkMpBCCGEA2lWEkKIWkaalYQQQtSIVA5e4C/tkJLTs/whpz9kBMlpBKkchBBCOJA+ByGEqGWkz0EI\nIUSNSOXgBf7SDik5PcsfcvpDRpCcRpDKQQghhAPpcxBCiFpG+hyEEELUiFQOXuAv7ZCS07P8Iac/\nZATJaQSpHIQQQjjQtc8hMzOTCRMmYLPZePDBB5k0aZLTct9++y3du3dn+fLl3H333W7PK30OQghR\nfYb2OdhsNsaPH09mZiY5OTmkp6ezc+dOp+UmTZrE7bffXu15hRBC6EO3yiE7O5vo6GjMZjPBwcGk\npKSQkZHhUG7WrFkMHjyY5s2bV3tef+Ev7ZCS07MaNAjBZDK5fISGNjUso798lpLT+3SrHPLy8oiI\niLBPh4eHk5eX51AmIyODsWPHAtqhjrvzCuHrzp4tBJTLR0HB74ZlFKIydfVacNmOvioTJkxgxowZ\n9vavsjYwd+Ytk5qaitlsBiAsLIzExEQsFgvwRy0u0+5Nl73mK3l8eTo0tKnTnXoQcA/wKLASWMVI\n0pnHWRoA1tJSltJ/rRXmNer/Y/T63Zm2WCw+laeq6TK+kqfss1u0aBGAfX/pim4d0ps2bWLq1Klk\nZmYC8PzzzxMUFFShYzkyMtJeIRw/fpwGDRqwYMECrrzySpfzgnRIC+Nof8D88dtrxjHSmMdY5tCa\nXyqU/Zk2PMYr/B+DAGd/+MjvWHiXW/tOpZPi4mIVGRmpcnNz1fnz51VCQoLKycmptHxqaqpasWJF\ntebVMb5HZWVlGR3BLZLTfYACpTqyXb3N/eos9ZQCpUD9QLwaw1yVAGoz19lfX0svFUtO2WS5h3G/\nY1/4LN0hOT3Lnd+cbn0OdevWZfbs2SQnJxMfH8+f//xn4uLimDdvHvPmzavRvEL4BJuNgUAWFr4j\nkQdYyOWc5z/cQW/W0p4fmE8a3wHdyCaNuZygKb35nB105AX+Sgj5Rv8vhKiSjK0kRHWUlECfPpCV\nBUABjXiHB5jNePYQc1HhP5qemnKCaUxhDPMJQvELLfkrL7KUYUCQ/I6FV7mz75TKQYjqePppePZZ\njgLTeZWF3E8+jSspXLFfAuA6tjCb8XRnEwDruZHhfMUB+R0LL5KB93zExWcx+CrJ6cL69TBtGphM\n3AO8zoQqKgbnttKZG9jAfSziV66kJ1+RDmCz6ZHYJfnOPctfcrpDKgch3HHyJIwYARcuwKRJ/PcS\nFqUIYjH3EU8Ov9CSGwDeestDQYXwDGlWEsIVpWDYMFi2DLp0gQ0bMNWrx8VNRo4cm5UuNoAMMhgI\nDRvCDz+Am+egC3EppFlJCE947z2tYmjYEJYuhcsu89iiV/EnlgGcPg1jxpSe2SqE8aRy8AJ/aYeU\nnE7s3QvjxmnPZ82CmIvPSLp0jwBccQV89hmUXsXqLfKde5a/5HSHVA5CVKa4GIYPh8JCGDIEUlN1\nWc0xgNdf1yYeewwOH9ZlPUJUh/Q5CFGZp56C556DiAj47jto0sT+1sXDZzjnThmtnLpwAe68E1av\nhrvughUroBpjjAlRHXKdgxA1tX49WCxaH0BWFtx8c4W3PV45KAUHD8K110JBAXzwgXa0IoQOpEPa\nR/hLO6Tk1ESEhPHzTTfBhQtMUwqTxeJwDwZ9VhwBL76oPR8/Hk6c0Gc95ch37ln+ktMdUjkIUZ5S\nvFh4iquBb+jGVIpwfh8GnYwerR2lHD0KEyfqtx4hXJBmJVGrVHYfhjL3Au+ijZnUiW3sJbqSkjo0\nK5XZswc6dIBz57Q+iL593ViGEO6TZiUhLqJVDM7vyNaMo8wiBICHmVVFxaCz6Gh49lnteVoa5MsI\nrsL7pHLwAn9ph6ztOcfxJqEUkAm8y326rMNtEyZA165aJ/XkybqtprZ/557mLzndIZWDEEB9zjCe\n2QA8Dzi/Y5sX1a0Lb78NwcHauEtffmlsHlHrSJ+DqFUqOwX1Id7kTcbzDd24nmynZS5akofKaOUq\n/R1PnQr/+Adcdx1s3izXPgiPMLzPITMzk9jYWGJiYpg5c6bD+xkZGSQkJNCpUyc6d+7MunXr7O+Z\nzWY6duxIp06d6Natm54xRS1XhxL+wssAvMATBqe5yN/+Bs2bw9at8NVXRqcRtYkHbkfqVElJiYqK\nilK5ubmqqKjI6X2gCwsL7c937NihoqKi7NNms1mdOHGiynXoGN+j/OW+srUhJ6X3fi7/uIdlSoH6\niWgVRInTMs7u++yZMm78jp96Sit41101/n9XpjZ8597kLznd2XfqduSQnZ1NdHQ0ZrOZ4OBgUlJS\nyMjIqFCmYcOG9ueFhYU0a9bs4opLr3hClFI8wQsAvMTjXKCOwXmceOghbSTYlSth3z6j04haQrfK\nIS8vj4iICPt0eHg4eXl5DuVWrlxJXFwcffv25Y033rC/bjKZ6NWrF126dGHBggV6xfQKi8VidAS3\n1Mact7KOzmzlV65kMfd6bLkeddVVMHSodpBRbhvxhNr4nevJX3K6o65eC3Z3iIGBAwcycOBA1q9f\nz8iRI/nxxx8B2LBhAy1btuTYsWP07t2b2NhYevbs6TB/amoq5tIbpISFhZGYmGj/gspOK5NpmS4/\n/QcryWinic7iYc7xjcP7GksNp8tec1W+rsvtpUeDEKYBzJ+P5Z//hNBQn/k8Zdr3p61WK4tKh4M3\nu3tDKb3atDZu3KiSk5Pt09OnT1czZsyocp7IyEh1/Phxh9enTp2qXnrpJYfXdYzvUf7SDlkbclKu\nH6Aj25UCVUgD1YQTOvQnuN/n4Fa/hMWiTbzyik98lt4kOT3LnX2nbs1KXbp0Yffu3ezfv5+ioiKW\nL1/OgAEDKpTZu3evvV9h69atAFxxxRWcOXOGgoICAE6fPs3atWvp0KGDXlFFLfVXtEHuFjCa32lq\ncBo3lI219MYbYLMZm0UEPF2vc1izZg0TJkzAZrMxatQoJk+ezLx58wBIS0vjhRdeYPHixQQHB9Oo\nUSNeeeUVunbtyr59+xg0aBAAJSUlDB8+nMlOrhKV6xxEdZVd59CGn9lLFABR7OUAV5cvhbevc3Bn\nWcpmg7ZttbvTrVgBpduIENUl93MQ4iJllcMrTGQir7GE4YxkycWl8MnKQSntVqWPPAI33qjdc0KI\nGjD8IjihcewI9U21JWcTfmM02hlwL/JXDyTyovvvh8aNtQviNm++5MXVlu/cW/wlpzukchC1zljm\n0IjTfEofdpBgdJzqadRIu+cDwKuvGptFBDRpVhIBw9W9GgAuB/ZzJS04ym18zjpuc1LKh5uVAH7+\nGSIjISgI9u+H1q3dWIcQf5BmJVGrVHWvhrLHvUALjrKF61jHrYZlvSRXXw133w0lJfDmm0anEQFK\nKgcv8Jd2yEDPGYSNv5Q+1wbY8+MRTstOa503D86cqfFiAv079zZ/yekOqRxErfEnMmgL7OMaVnC3\n0XEuzfXXQ7du8NtvsHix0WlEAJI+BxEwKrtXg0axietJIptxzOYtxlW1pCqW4+ky7i/L4be+bJk2\n5lJsLPzvf1ofhBBukOscRK1SVeXQna/5mhs4DrThNGdpUNWSKl2O58u4vyyH33pxsdYxfegQrF4N\nffu6sS4hpEPaZ/hLO2Qg53yAdwBYAC4qBj8SHAwPP6w9r+FprYH8nRvBX3K6Q7dRWYXwFQ04zT18\nAMAiY6NcAucjt4YBh4CGn31GUsPGfHP6lNeTicAkzUoiYFTWrDScJSxhJF/TnRvY6LTMRUvyYplL\nX9ZsxjGOt1gAjJbtQbhBmpWEAFJLjxcWkWpoDr28zqMAjADIzzc0iwgcUjl4gb+0QwZizjb8zK2s\n4yyX8wH36BfKQLtpi5WbqQ/w4YfVmjcQv3Mj+UtOd0jlIALaSN4jCMVH3MUpwoyOo5t3uU97Itc8\nCA+RPgcRMBz7HBS7iSGavSSTyVqS8W5/gnf6HABCyOcIjbXzsPbtg2uucWO9oraSPgdRq93ABqLZ\nSx6t+JxeRsfRVQGhfFQ2seTi+1MIUX26Vg6ZmZnExsYSExPDzJkzHd7PyMggISGBTp060blzZ9at\nW+f2vP7EX9ohAy1nWUf0Yu7lAnX0C+Qj7A1KixeX3nbatUD7zo3mLzndoVvlYLPZGD9+PJmZmeTk\n5JCens7OnTsrlOnVqxffffcd27ZtY9GiRYwZM8bteYWoSvlrG+zt8QHuc4CWLWHPHti0yeg4ws/p\nVjlkZ2cTHR2N2WwmODiYlJQUMjIyKpRp2LCh/XlhYSHNmjVze15/YrFYjI7glkDKeRcfEUoBG7me\nH4nVP5QPuAAwYoQ24WbHdCB9577AX3K6Q7fKIS8vj4iICPt0eHg4eXl5DuVWrlxJXFwcffv25Y03\n3qjWvEJUJtCvbajUvfdq/y5bBufOGZtF+DXdhs9wdqm/MwMHDmTgwIGsX7+ekSNHsmvXrmqtJzU1\nFbPZDEBYWBiJiYn22rus/c/o6bLXfCVPZdOvvfaaT35+7n6eGittuIZbWcdagnmf1hXeq6hs2lLN\n992dLnvNVXnPrc96/DiWTp1g2zasM2fCzTdX+Xlu376dCRMmVPq+r0xf/N0bnaeyaV/9PK1WK4sW\nLQKw7y9dUjrZuHGjSk5Otk9Pnz5dzZgxo8p5IiMj1fHjx92eV8f4HpWVlWV0BLf4e05AgVJTeFYp\nUEtJUVrPbPkHTl4zsoxn16eUUurVV7UX+vev8WfpaySnZ7mz79Rt71pcXKwiIyNVbm6uOn/+vEpI\nSFA5OTkVyuzZs0dduHBBKaXUli1bVGRkpNvzKuU/lYPwDm0HekHtJkopUH3IrJ2Vw5EjStWpo1Td\nukr9+quxX4rwSe7sO3VrVqpbty6zZ88mOTkZm83GqFGjiIuLY968eQCkpaWxYsUKFi9eTHBwMI0a\nNWLZsmVVziuEK7Xp2oZKtWgBt98On3yi9T088ojRiYQ/8kIlpRt/ie8vh5r+nhNQCxilFKjp/M0H\njgoMOnJQSqkPPtBevO66Gn2WvkZyepY7+065QloEjAZQ665tqFT//tC4MWzdCj/8YHQa4YdkbCUR\nMEaYTCwBNnI9PdhYSanAHFuprEyF7SEtDebPhyeeAD8fZUB4loytJGqV1NJ/a921DZUpu+ZhyRKw\n2YzNIvyOVA5e4C/jrfh1zp9/5lbgHPVYzp+9Hck39egBUVHwyy9Qbtyy8vz6O/dB/pLTHVI5iMDw\n3nsEQcDft6FaTKY/jh7efdfYLMLvSJ+D8H9KQUwM7C1/34bK1KI+B9Du7RAVBfXrw6+/QkiIG3lE\noJM+B1E7bNgAe/eSB7X32obKREZCz55w9iysWGF0GuFHpHLwAn9ph/TbnO+9p/0DteK+DdVW1rTk\nZKRWv/3OfZS/5HSHy8rh+++/90YOIWqmqAj+/W8A5P5nlRgyBC6/HLKy4OefjU4j/ITLPocbb7yR\n8+fPc//99zN8+HAaN27srWwuSZ+D4OOPYcAAaN8e0w8/4Fv9CT7Q51Bm6FBtKI3nnoMpU9zIJAKZ\nR/ocvvrqK95//30OHDjAddddx9ChQ1m7dq3HQgpxSZYu1f4dNszYHL6ufNOS/EEl3OBWn0Pbtm15\n7rnnmDlzJv/973959NFHadeuHSukg8st/tIO6Xc5Cwth1SrteUqKYXn8Qu/e2oB8P/0E335rf9nv\nvnMf5y853eGycvjuu++YOHEicXFxrFu3jv/85z/s3LmTrKwsJk6c6I2MQji3ahWcOQPdu8M11xid\nxrfVrftHBZqebmwW4Rdc9jncfPPNjBo1isGDB9OgQYMK7y1evJh7yw5XDSB9DrXcnXdqw1LPmgXj\nx5fefdCX+hN8qM8BIDsbkpLgqqvg0CGoI2d21Vbu7DtdVg6FhYXUr1+fOqU/JJvNxrlz52jYsKHn\nktaQVA612IkT2k5OKcjLgxYtpHJwVTmUu1iQL76AW291I5sIRB7pkO7Vqxdnz561T585c4bevXu7\nFSAzM5PY2FhiYmKY6WRUyPfff5+EhAQ6duzIDTfcwI4dO+zvmc1mOnbsSKdOnejWrZtb6/NV/tIO\n6Vc5P/wQSkqgVy+tLV0AdTGZTJU/goJ44WCeVrS0I9+vvnM/4C853eGycjh37hyNGjWyT4eEhHDm\nzBmXC7bZbIwfP57MzExycnJIT09n586dFcpERkby5ZdfsmPHDp566inGjBljf89kMmG1Wtm2bRvZ\n2dnV+T+J2qDsLKWhQ43N4VNK0I4uKn8sLDqnFV2xAs6fNyam8AsuK4eGDRuyZcsW+/TmzZupX7++\nywVnZ2cTHR2N2WwmODiYlJQUMjIyKpTp3r27/bqJpKQkDh06VOH9QGkyslgsRkdwi9/kjIqC9euh\nXj246y6j4/iVXQAJCXDyJGRm+s93Ljm9zuU9pF977TXuueceWrZsCcDhw4dZvny5ywXn5eURERFh\nnw4PD+ebb76ptPzbb79Nv3797NMmk4levXpRp04d0tLSGD16tMt1ilpi+XKt/bx/fwgNNTqN/xk2\nDL77Tjv6+tOfjE4jfJTLI4euXbuyc+dO5syZw9y5c9m1axddunRxuWCtc9A9WVlZvPPOOxX6JTZs\n2MC2bdtYs2YNb775JuvXr3d7eb7GX9oh/SbnvHnaE7nwrWbKTmn9+GOsq1cbm8VNfvPb9JOc7nB5\n5ABaU1Jubi4lJSVs3boVwOUprK1bt+bgwYP26YMHDxIeHu5QbseOHYwePZrMzEyaNGlif73sSKV5\n8+bcddddZGdn07NnT4f5U1NTMZvNAISFhZGYmGg/tCv7ooyeLuMreSqb3r59u0/lcTp94ADs2QOh\noVgbNgSr9aJDeStgKfccJ9Nc4vvuTnsqj4fX16YN3Hgj1q++YvvSpVhKj9h94vv18+nt27f7VJ6y\naavVyqJFiwDs+0tXXJ7KOmLECPbt20diYqL9dFaAWbNmVbngkpIS2rVrxxdffEGrVq3o1q0b6enp\nxMXF2cscOHCAW2+9lSVLlnD99dfbXz9z5gw2m42QkBBOnz5Nnz59eOaZZ+jTp0/F8HIqa+3zzDPw\nz3/C/ffDO+9UeEtOZa3G6a5z5sBDD0HfvuAnRw/CczxynUNcXBw5OTnVaiYqs2bNGiZMmIDNZmPU\nqFFMnjyZeaVNAmlpaTz44IN89NFHtGnTBoDg4GCys7PZt28fgwYNArRKZvjw4UyePLlG/0ERQJSC\ntm21I4fPPtNOYy1HKodqVA7HjkHp0TmHD0Pz5m7kFIHCrX2ncmHw4MEqLy/PVTFDuBHfJ2RlZRkd\nwS0+n/Pbb5UCldWkiVIlJQ5vA0qrQap6+FoZ72ey69tXZYFSb73lxS+xZnz+t1nKX3K6s+902edw\n7Ngx4uPj6datG/Xq1bPXOqvKBjwTwlvKrm245RYZ+sEThg2DNWu0z3XsWKPTCB/jslmprFOj/GGI\nyWTi5ptv1j2cK9KsVIvYbBARoTWBbNqkjRF0EWlWquYQGwUFcOWVcO6cdhOg0uZdEfg8MnyGxWLB\nbDZTXFyMxWKhW7dudOrUyWMhhXDLl19qFUNkJPj5cCo+IyREu1ESaDcCEqIcl5XD/PnzGTJkCGlp\naQAcOnSIu+Sq1Grxl3OffTVnaGhTFpQOEvfcvn2YgoKcjh0kqs/aoYP2xMeH8fbV3+bF/CWnO1xW\nDm+++SZfffUVoaVXorZt25ajR4/qHkyIMucLfmcwYQAs5X9AFs7HDhLV1q0bNG4M27dDTo7RaYQP\ncVk51KtXz94RDdqppfJXWvX4y3grvprzdqAJJ9lOAjuJp+JFX6J6Ko7cektyMv86dQqAZ6+9FpPJ\nRGhoU4MzOvLV3+bF/CWnO1xWDjfffDPTpk3jzJkzfPbZZwwZMoT+/ft7I5sQAJSNu7oUGS7j0jmO\n3JrO5wAMJQq4QEHB78bFEz7DZeUwY8YMmjdvTocOHZg3bx79+vXjueee80a2gOEv7ZA+mbOggNIu\nU5ZRdp9oq0FhApEVKxYOcxXR7KUr37qexQA++dt0wl9yusPldQ516tRhzJgxFe61IITXZGTQAFjP\njRxETrXUwwXqsIwUJvIaw1jqo9WD8DaX1zlc4+TG7SaTiX379ukWyl1ynUMt0K8frFnDQ7zJHB5y\nUdjXrmHwzescnJXpSjbZJHGYqwjnCDbZrgKaO/tOl0cO3377x98R586d48MPP+TEiROXnk4IV379\nFdaupRj4gHuMThPQvqUre4gimr3S3S8AN/ocmjVrZn+Eh4czYcIEPvnkE29kCxj+0g7pcznT08Fm\nYzVwgmbl3rAaFCgQWUv/Ndk7/H3xxqs+99ushL/kdIfLI4ctW7bYT129cOECmzdvxmaz6R5MCJYs\n0f4xOEZtkc5QnuZZBoN2f+lyp7CL2sdln4PFYrFXDnXr1sVsNvP444/Trl07rwSsivQ5BLCdOyE+\nHho35vJTpzjvJ2331S/jW5m20olObIf/+z+5P3cA80ifQyAdJgk/8t572r9DhnD+X/8yNkst8j7D\ntcrhvfdCbsZ4AAAgAElEQVSkcqjlXB45vPzyyw5XRJcfnfWxxx7TL50L/nLkYHW4laVv8pmcFy7A\nNddotwS1WjFZLFT8a9eK86ukfecvcPfLGJ3JSvnPsiW/cJDW1AkO1gY6vOIKF8vzDp/5bbrgLzk9\nMirrli1bmDNnDnl5eRw6dIi5c+eydetWCgsLKSgoqHLezMxMYmNjiYmJYebMmQ7vv//++yQkJNCx\nY0duuOEGduzY4fa8IoCtX69VDG3agJP7hgv9HKYVnwEUF8Py5UbHEUZydTegG2+8UeXn59un8/Pz\n1Y033ujyLkIlJSUqKipK5ebmqqKiIpWQkKBycnIqlPn666/VyZMnlVJKrVmzRiUlJbk9b+kRj8sc\nwg+NGqXdtuzvf1dK+e4d1TxTxvcyDS17Uro9isDjzr7T5ZHD0aNHCQ4Otk8HBwe7NSprdnY20dHR\nmM1mgoODSUlJISMjo0KZ7t2707hxYwCSkpI4dOiQ2/OKAHX2LPz739rzESOMzVJLrQRo1Ai++QZ+\n/NHoOMIgLiuHe++9l27dujF16lSeeeYZkpKSuO+++1wuOC8vj4iICPt0eHg4eXl5lZZ/++236dev\nX43m9XX+0qnvEzk//hjy86FzZ4iLq6SQ1ZuJApzV4ZWzAEOGaBNlJwYYzCd+m27wl5zucFk5TJky\nhYULF9KkSROaNm3KokWL+Pvf/+5ywdUZ1jsrK4t33nnH3rcgQ4LXYqXXNjBypLE5art779X+fe89\n7QQBUeu4PJUV4MyZM4SEhPDAAw9w7NgxcnNznY65VF7r1q05ePCgffrgwYOEh4c7lNuxYwejR48m\nMzOTJk2aVGtegNTUVMxmMwBhYWEkJibazxYoq8Vl2r3pstcMy7NyJXzyCZY6dWDoUCd/hZVNWyqZ\nLnutsvfdXZ676/NWHr3X52T6ppuwXnklHDiA5csvwWIx9PdpMXj91Zku4yt5yj67RYsWAdj3ly65\n6pR45pln1J133qliYmKUUkodOnRI9ejRw2VnRnFxsYqMjFS5ubnq/PnzTjuVf/75ZxUVFaU2btxY\n7XmVkg7pgDNrltYR2q9fhZfx045df86tlFJqyhTthfvvN+DHIPTkzr7TZYmOHTsqm82mEhMT7a91\n6NDBrQCrV69Wbdu2VVFRUWr69OlKKaXmzp2r5s6dq5RSatSoUapp06YqMTFRJSYmqq5du1Y5r0N4\nP6kcsrKyjI7gFiNyhoQ0Kd1hoTaV7p1ScHYP0PI7ryyf2IEGRuXg7LMs3a527dJeaNRIqdOnvf7b\nKE+2Ic9yZ9/pslmpXr16BAX90TVx+vRp9w5JgL59+9K3b98Kr6Wlpdmf/+tf/+JflVz96mxeEXi0\nu44pYviJJNqRTwgZHAEalCslfVCGaNcOkpK0s5ZWroRhcie+2sRlh/SQIUNIS0vj5MmTzJ8/n9tu\nu40HH3zQG9kChj9cMQnG5hxROrzeCu7mbIWKwRmL7nlqD0vVb5d1TC9erHuSqsg25H1VDp+hlOLg\nwYPs2rWLtWvXApCcnEzv3r29FrAq/jJ8hqicdmbaBfYSRSS53MbnrOO2i0uBzw9DUdMyvpip3HZ1\n4gS0bAk2Gxw8CK1auZhX+AO39p1VtTlduHBBXXvttR5o4dKHi/g+w1/aIY3ICagefKUUqIO0VkGU\n1LCd3Oi2+wDscyhz113aGy++6PXfRxnZhjzLnX1nlc1KJpOJzp07k52dfWnVlBBVGIl2odX7DOcC\ndQxOIxyUNS29+25p3SFqA5ejsrZr1449e/Zw9dVX07BhQ20mk6nCIHlGkWYl/1fPZOIwTWjK77Tn\ne/5Heyel/Ld5xl9zV9iuioq0pqXffoNt2yAx0cX8wtdd0v0cDhw4QJs2bfj0009lJyx0cwfQlN/Z\nTkIlFYMw3GWXwdCh8OabWse0VA61QqXNSn/6058A7Wq6xx57DLPZXOEh3Ocv460YkbNsaL33qM5w\nGVYdktRWVveKlTUtvf8+lJTolqYysg15n8tTWQH27dundw5RG/32G3cCNoLsN7cXPqprV+26h6NH\nofTMRRHY3KocxKXxl3OfvZ7zgw+4DPicXhyhZTVmtOgUqDayuFfMZDL0mgfZhryv0g7pOnXq0KCB\ndjHS2bNnqV+//h8zmUzk5+d7J2EVpC/Ez91wA3z9NSNZzJIqm5X8t2PXX3M73a4OHICrr4Z69eDI\nEQgLc7Ec4asu6TahNpuNgoICCgoKKCkpsT8vKCjwiYrBn/hLO6RXc/7wA3z9NQXAR1T3RvZWHQLV\nVlb3i7ZpA7fcAufPw4cf6pbIGdmGvE+alYQx5s0D4D3gNI2MzSLc5yPDaQj9ubzOwZdJs5KfOn1a\nG4YhP58EYEcAN8/4a+5Kt6uCAmjRQrud6969EBnpYlnCF11Ss5IQulm2TLsVaPfuGH8ppaiWkBAY\nNEh7LkcPAU0qBy/wl3ZIr+WcO1f79//9vxouwOqpJKImn+UDD2j/LlgAxcUeTVMZ2Ya8TyoH4V2b\nN2uPJk3+uIm98C+33AKxsfDLL5CRYXQaoRNdK4fMzExiY2OJiYlh5syZDu/v2rWL7t27c/nll/Py\nyy9XeM9sNtOxY0c6depEt27d9IypO38599krOUs7oklNhXKnR1ePxUNhhPPPsi4mk6nyR1AQD+/a\npRV9803vpJRtyOt065C22Wy0a9eOzz//nNatW9O1a1fS09OJi4uzlzl27Bg///wzK1eupEmTJvzl\nL3+xv3fNNdewZcsWmjZtWnl46ZD2L6dOaR3RZ87Arl3Qrl3p/RwCt2M3UHOHcoo8wrTzzH74Aa69\n1sUyhS8xtEM6Ozub6OhozGYzwcHBpKSkkHHRIWjz5s3p0qULwcHBTpcRKDt+f2mH1D3nkiVaxXDL\nLdpQDDVm9VQiUcPPMp/GpQOtA3PmeCpMpWQb8j7dKoe8vDwiIiLs0+Hh4eTl5bk9v8lkolevXnTp\n0oUFCxboEVF4k1J/dESPHWtsFuERb5U9WbxYO8VVBJRKh+y+VFpzQc1t2LCBli1bcuzYMXr37k1s\nbCw9e/Z0KJeammofJTYsLIzExER7u19ZLS7T7k2Xveap5TVoEMLZs4UA9ACmAb8BKffcg/NzXKyl\n/1oumnb1vuWiMpW97+7y3F2ft/LovT5X086X9wNg7dABy/ffw3vvYY2P197V4fdpsVgM3z7cnS7j\nK3nKPrtFixYBuD2qtm59Dps2bWLq1KlkZmYC8PzzzxMUFMSkSZMcyv7jH/+gUaNGFfoc3Hlf+hx8\nW/n+hMWMZCRLmMbfeZJp5UtRm9vufTOT+7nVsmWQkgLx8VrfwyX+USi8w9A+hy5durB79272799P\nUVERy5cvZ8CAAU7LXhzyzJkzFJQepp4+fZq1a9fSoUMHvaLqzl/aIfXKeQXHuYcPuICJBYz2wBKt\nHliG0Fgvbfa77oKrroKcHPjyS48kcqa2b0NG0K1ZqW7dusyePZvk5GRsNhujRo0iLi6OeaWnMqal\npXHkyBG6du1Kfn4+QUFBvP766+Tk5HD06FEGlV6FWVJSwvDhw+nTp49eUYXOUllEPYr4hH78jNno\nOMKTLrsMRo+GZ5/VTmu9+WajEwkPkbGVhG5MJhMmbPxIO2LYQ39W8R/6X1wKaZ7xtUzVaFZSCvLy\ntKG8TSb4+WftdGXh02RsJWG4W1lHDHs4QASr6Wd0HKGH1q1h4EDt9qHz5xudRniIVA5e4C/tkHrk\n/H9op68uYDQXqOOhpVo9tBzhsc9y3Djt3/nzdRlvqTZvQ0aRykHopiUwkJWUUIe3GWV0HKEniwXi\n4uDwYVi50ug0wgOkz0Ho5kmTieeAFQxiMCsqKSVt976XqZp9DmVmz4aHH9Y6pQPoL+hA5M6+UyoH\noQ+bjQN169IG6MVnfEGvSgrKTtb3MtWwcsjP1/ofCgvh+++hfXs3liGMIB3SPsJf2iE9mnPNGtoA\nu4lmHbd6brmA9Dl4ktVziwoNhZEjteceHm+pVm5DBpPKQeijdByleaSh5GdWezz0kPbv4sXakYTw\nW9KsJGokNLQpBQW/O30vBtgFFAOtOcYJmlWxJGme8b1M7uYOBkocXrUCNwPjgPdCmpCf/5sbyxLe\nJM1KQjdaxaCcPv7OfQQBi8FFxSD8WwnOvv83WQ7AOOIq/QNC+D6pHLzAX9ohPZHzGvYxgiWUUIfn\nLz1SJay6Lbn2sXp8iR9xF7/Qknh24qnBNGrTNuQrpHIQHjWZ56mLjfcYSa7RYYQhSghmPmMAeNTg\nLKLmpM9B1Iiz23u24Wf2EE0QF4hlF3to61DGyZI8VMaTy5I+h0vNfRWH2Uck9TkH27ZBYqIbyxPe\nIn0Owqv+xgyCKSGdoewhxug4wkBHaMkcSu/4N3WqoVlEzUjl4AX+0g55KTlbc4gHeIcLmJjGFM+F\ncsqq8/JrE6tuS57JJM4AZGTA5s2XtKzasA35GqkchEc8wQvUo4gPuIddxBkdR/iAo7RgdtnEM88Y\nGUXUgPQ5iBop3+dwFYfJ5Rou5zzt+Z7/UTZsgu+0gftuGV/M5LncV2DieKNG2pAaGzfC9de7sVyh\nN8P7HDIzM4mNjSUmJoaZM2c6vL9r1y66d+/O5Zdfzssvv1yteYXv+CsvcjnnWcGgchWDEHAC4JFH\ntAk5evAvSiclJSUqKipK5ebmqqKiIpWQkKBycnIqlDl69Kj69ttv1ZQpU9RLL71UrXlLj3j0iu9R\nWVlZRkdwS3VyAgqUas6v6jT1lQKVwDYFqtyDi6adPWpSJsuDyzK6jNGZnH2Wns2tTpxQKjRUe2H9\net1/m0byl5zu7Dt1O3LIzs4mOjoas9lMcHAwKSkpZGRkVCjTvHlzunTpQnBwcLXnFb7hL7xMA86S\nwQC+Q05XFE40bQoTJ2rPn37a2CzCbbpVDnl5eURERNinw8PDycvL031eX2SxWIyO4Jbq5ryC44zj\nTQCe5SkdElXG4sV1BTqLd1YzYQKEhUFWlvaopkDdhnxZXb0WrHVY6j9vamoqZrMZgLCwMBITE+1f\nUNlpZTKtz/SfmMhmTnOGvmyhC3+cFmnhD9Zy0xe/b6Wimr5v1Pq8lcfb63M3TzXWFxaGddAgeOcd\nLM88AxYL1v/+VyvtI7/nQJ62Wq0sWrQIwL6/dEmvNq2NGzeq5ORk+/T06dPVjBkznJadOnVqhT4H\nd+fVMb5H+Us7ZHVyhoE6RYhSoK7nax9oJze67V76HCorY3fqlFJNm2pvrF2r22/TSP6S0519p27N\nSl26dGH37t3s37+foqIili9fzoABAyqroGo8rzDGo0AoBaylN5vobnQc4Q9CQ+GJJ7TnTz9dWndo\nw7+bTKYqH/369TcweC2lZ+20evVq1bZtWxUVFaWmT5+ulFJq7ty5au7cuUoppQ4fPqzCw8NVaGio\nCgsLUxEREaqgoKDSeS+mc3xRmZMn1e+lfxreyJc+8hex0X+BS+7KylRQUKBU8+bam6tXK6VquBxx\nSdz5POUiOFF906bBk0+ShYVbyaqioO9dlOV7ZXwxk2dzO2yjL78Mjz8OXbpAdjamoKCaLUfUmOEX\nwQmNv4y34lbOggJ45RUA/olRpyVaDVpvILJ6f5Vjx8JVV2njLX38sffXryN/2dbdIZWDqJ6pU+G3\n3/gKsMoppaImGjSAyZO1508/Tc3PaxR6kmYl4aCy+0NfB2SXPu8GbPXTZg7fKuOLmTyZ2/l9pusB\ne4BwYBDwkTQreZU0K4kacXZ/6DoUs4BO1AFe4zG2GppQ+A/n95k+j2IabwHwHBBMkWEJhXNSOXiB\nv7RDVpXzUV7nOraxn6t5hn94L5RTVoPXH0ishq35HR5gN9HEA39numE5PMlftnV3SOUgXDKTa+98\nHsscTtPI4EQiEBRRj1G8DcAUppHAdoMTifKkz0E4qHh/aMUa+nI7n7KUoQxnaVkp/LMN3NfK+GIm\n7+Z+HROPANtJoCvfUkKwk1KyrXuS9DmISzaUdG7nU36jCRN51eg4IgBNBvYSSSLfMZnnjY4jSknl\n4AX+0g55cc6mnOA1JgDwOC9xlBYGpHLGanSAAGI1OgBnwN689BTP0pHvjA10CfxlW3eHVA6iUi/x\nOFdyjCwsLOR+o+OIAPZfLMxmHMGUsJD7qUux0ZFqPelzEA5MJhO38AXruI1z1KMjO9hN24tLEaht\n4JLbmNwNKeR7OnAN+3mSZ5nGkxXKyLbuOdLnIGrkcmAeaYB2Ex/HikEIzztNI3vz0tP8k/Z8b3Ci\n2k0qBy/wl3bIspxPAjHs4Qeu5UX+amgm56xGBwggVqMDVJDFrbzFWC6jmEWk+l3zkr9s6+6QykFU\ntGMHTwAXMDGaBRRzmdGJRC0ziZns52o6s5W/8qLRcWot6XMQf7DZ4IYb4JtvmM04HmZ2FYUDvw3c\nO2V8MZPxuW/lC76gF0UEcx1b+R8dZFv3IOlzENUzYwZ88w2HCJzhDIR/WsdtzCWNyyhmIfdTx+hA\ntZCulUNmZiaxsbHExMQwc+ZMp2UeeeQRYmJiSEhIYNu2bfbXzWYzHTt2pFOnTnTr1k3PmLrzi3bI\n9HSsTz4JJhNpQAGhRieqgtXoAAHEanSASj3BCxwggq5s5h6jw7jJL7Z1N+lWOdhsNsaPH09mZiY5\nOTmkp6ezc+fOCmVWr17Nnj172L17N/Pnz2fs2LH290wmE1arlW3btpGdnX3x4oUnffklpKZqz196\nidWGhhFCU0AoD/IvAFJB+50Kr9GtcsjOziY6Ohqz2UxwcDApKSlkZGRUKLNq1Sruu+8+AJKSkjh5\n8iS//vqr/f1AaWO0WCxGR6jcrl0wcCAUFWEZPx4mTjQ6kRssRgcIIBajA1TpM/rwOo/QB6B/f9ju\n24Pz+fS2Xk26VQ55eXlERETYp8PDw8nLy3O7jMlkolevXnTp0oUFCxboFbN2+/VX6NcPfv8dBgyA\n114Dk9yXS/iWx3iFDwDy8yE5GXbvNjpSrVBXrwWb3NzJVHZ08NVXX9GqVSuOHTtG7969iY2NpWfP\nng7lUlNTMZvNAISFhZGYmGivvcva/4yeLntNz/VVdve28urXb8Tq1R9r8585g9VigdxcLF26wNKl\nvDZrFomJieXmKMtvqeF02Wuuyrta38Xvl5Xx1vpcLa+yaU/l0XN926F0/Kzq56nJ+qr//gUsDAeu\n7NwZtmzB0qcPbNiA9aeftNI+tL1v376dCRMm+Eyesmmr1cqiRYsA7PtLl5RONm7cqJKTk+3T06dP\nVzNmzKhQJi0tTaWnp9un27Vrp44cOeKwrKlTp6qXXnrJ4XUd43tUVlaW7usAFCgXj9LPq6REqT/9\nSXvRbFaq9DMvy+nusowrk+WDmWpaxuhMzj5L38ytCgqU6tZNe6F9e6V++0337aq6vLGte4I7+07X\nJWqouLhYRUZGqtzcXHX+/HmVkJCgcnJyKpT55JNPVN++fZVSWmWSlJSklFLq9OnTKj8/XymlVGFh\noerRo4f69NNPHcO78R+sLapVOTz6qPZCWJhSF30n1VmWb5XxxUyS26OVg1JKHTumVFyc9mKPHkoV\nFnpxKwsc7uw7dWtWqlu3LrNnzyY5ORmbzcaoUaOIi4tj3rx5AKSlpdGvXz9Wr15NdHQ0DRs2ZOHC\nhQAcOXKEQYMGAVBSUsLw4cPp06ePXlFrl9df1x7BwbByJcTFGZ1ICPc1awaffqpdrPn11zBkCGRk\naL9n4VleqKR04y/xfaVZaSAoZTJpE0uWVJrTnWUZWybLBzP5z1/grj9L38xdwc6dSjVrpr05bJhS\nNpvu25g7AqlZSa6QriW687V2g0+l4LnnYPhwoyMJUXOxsbBmDTRqBEuXwqOPltYhwlNkbKUAUfG+\nzxWlspA5jOVyzsODD8L8+VWeslrVssqV8rEyvphJcnuyjNNtfd066NsXiorgH/+Ap592sRwB7u07\npXIIEM526JdxnteYwFjmAjAX+H9FRS7bZ6VykNy+lzsYKHH6zl3Av0Ebf+nhh+HFF6FePRfLq91k\n4D0fYcR4K63Iw4qFsczlHPV4gLcZC1VWDP4zLozV6AABxGp0ADeVoFUgjo+PUDzAIooAZs2C7t2h\n9BoIb/Ofbcg1qRwMFhraFJPJVOUjNLRptZZ5E/9lK9fRnU38TBtu5CsW8gBQt8r13HLLLW5fvCiE\nL1nMffSgDnsBtm2joF07hntoe6qtpFnJYO424bhsHzSZgAtM4DVe5K/Uxcbn3MZQ0jlOc/tyfK+5\nwF+bOSS372UyEcpJ5pFGCssBeIf7eZhZnKFhhXL+vt+4VNKsVIs0AN5nOK/yGHWxMZMnuJ3MchWD\nEIEvn8YMJZ3RzOcsl/MAC/mWrnI/6hqQysELdG+H3L2bjcAw0imgEYP5N39jJrZqD51l1SGcHqxG\nBwggVqMD6MDEvxhNV77lf8QTz06y6cYY5uHeEVHNSZ+D8A15eTB+PLRvT0fgR9qSxDesYLDRyYQw\n3P9oTzey+RejqM855vH/WM6faWZ0MD8hfQ4Gq1Gfw5EjMHMmzJkD58+DycRipRjPKRd3cPPftmTJ\n7WtlfDFT5WVSSGc+YwihkDNAg0cfhb/8BcrdMqA2kT6HQHP8ODzxBERGavdeOH8e7r4bduzgPnz9\n1p5CGGcZQ+nENv7DHTQAbXyxqCh44AH48Uej4/kmDw/Z4VX+Er+q8VZwY1yZJqDUlClKNWr0x4sD\nBii1bVu1luO6TJab5Ywu42w8IKMz1bSM0ZmcfZb+kLvmn3dHUColRamgIO0Fk0mpwYOV2rKlWtt1\nSEiT0nVW/ggJaVLT3Yau3Nl3ypGDz1J05DueYwq5ANOmQWGhNlTAt99qI1FWuDGPEMIdOwDS07Uj\nhjFjtAtDP/wQOneG22/X7lWtlMvlaDfXurg+yKow7eoGXL5M+hwMVr7PoQ4l3MAGBrKSgazkGvbb\ny30GPA1sqnJprj6LwGtL9u1Mktv3ymjlKuw3fvkFXnkF5s6F06e119q1026h268f9OzpdDgOT12j\nZAQZW6mazp49y/ffuz4fumXLlhXufX0pGphM9C6tDPrzMc04YX/vCC3I4E+8x3w2yEbvoowvZpLc\nvldGK+d0v3HiBMyerQ3BceKP7ZCGDeG227SKom9faNNGW0qAVw6uG54uwZo1a1S7du1UdHS0wy1C\nyzz88MMqOjpadezYUW3durVa83o6/ty5c1W9es1V48ZdK300bBinOnbsUa3l2vscbDal9uxR6v/+\nT6mpU5W68051+qIG0R+JUTN4Ql3P18qEzcttslleXl9Ny2R5eX36toH73mfpD7kv7fOuUlGRSq7f\nSE0Htd3JAr4HNRNUP1BXk1tuO3X2ebpYl0HcyaVb8pKSEhUVFaVyc3NVUVGRy9uEbtq0yX6bUHfm\nVcrzH/zs2bPV5Zc/5OKHtUm1bdvN9cJOnVJqwwal3npLvdq9u1Ldu1fsUC732EQ39Temq1hyFFww\ncON51Uc36IvLvOrl9elZxuhMzj5Lf8h9aZ+3K+WX1ZqDahQL1AruUvk4bsMFNFTZdFGLuFfdwh3q\nDj5W17C3tNJwvS4juJNLt9uEZmdnEx0djdlsBiAlJYWMjAziyt2WctWqVdx3330AJCUlcfLkSY4c\nOUJubq7LeY1Ql2JCOEWbonOwfj0cPqy1Vzr79+RJ+3wnyy+kZUvo2BESEqBjR8JHjCCPb7z+f3Hu\npOsiPsFfcvoD+SxdySOct3mQt3mQYIq4gQ30ZQ3X8SLXchUtOUJXNtOVzeQCU/kEgDPUZyfAd99p\n27uf0a1yyMvLq9AuHx4ezjfffOOyTF5eHr/88ovLefXQ84MPWFz0Cw3pRwgF9kco+YRQoN0sB2A/\ncNNNVS7rHJCDdmZEJrC+9Pnxw4e1yuPTT3X8nwgh9FDMZVi5BSu3AC8Ch2nCb8STQzw5HOAdPiOE\neHJozS90BggLMzZ0DelWObg79LN2hOMbYrZupeOFQmCP0/dLMJFPHc4E1yG8y3XQqpV2JODk3/rN\nmoG9syoVWFTJWn1piOz9Rgdw036jAwSQ/UYH8Hu/05QN3MgGbgS+5tPSbT2M34mnKRv89Cps3SqH\n1q1bc/DgQfv0wYMHCQ8Pr7LMoUOHCA8Pp7i42OW8AFFRUV6+/4ACSqC4BDZudKN8+WzvulnO6DJl\nOX0pk7MylX2evp7bF9bnzmfpD7lrWsbdP15rWkb7PE8CXwOmOnXcyuRNUVFRLsvoVjl06dKF3bt3\ns3//flq1asXy5ctJT0+vUGbAgAHMnj2blJQUNm3aRFhYGC1atOCKK65wOS/Anj3O/8IXQghxaXSr\nHOrWrcvs2bNJTk7GZrMxatQo4uLimDdvHgBpaWn069eP1atXEx0dTcOGDVm4cGGV8wohhPAOv74I\nTgghhD4CZmyll19+maCgIH777Tejozj11FNPkZCQQGJiIrfddluFPhVf8te//pW4uDgSEhIYNGgQ\np06dMjqSg3//+99ce+211KlTh61btxodx0FmZiaxsbHExMQwc+ZMo+M49cADD9CiRQs6dOhgdJQq\nHTx4kFtuuYVrr72W9u3b88Ybbxgdyalz586RlJREYmIi8fHxTJ482ehIlbLZbHTq1In+/ftXXVDv\niy284cCBAyo5OVmZzWZ14sQJo+M4lZ+fb3/+xhtvqFGjRhmYpnJr165VNptNKaXUpEmT1KRJkwxO\n5Gjnzp3qxx9/VBaLRW2p5kiaenP3Ak6jffnll2rr1q2qffv2Rkep0uHDh9W20tGHCwoKVNu2bX3y\n81RKqdOnTyullCouLlZJSUlq/fr1Bidy7uWXX1bDhg1T/fv3r7JcQBw5PPbYY7zwwgtGx6hSSEiI\n/XlhYSHNmvnm/ah69+5NUJD2s0hKSuLQoUMGJ3IUGxtL27ZtjY7hVPmLP4ODg+0XcPqanj170qRJ\nE6NjuHTVVVeRWDr6cKNGjYiLi+OXX34xOJVzDRo0AKCoqAibzUbTpk0NTuTo0KFDrF69mgcffNDl\nZeWV16QAAAQbSURBVAR+XzlkZGQQHh5Ox44djY7i0pQpU2jTpg3vvvsuf/vb34yO49I777xDv379\njI7hVyq7sFNcuv3797Nt2zaSkpKMjuLUhQsXSExMpEWLFtxyyy3Ex8cbHcnBxIkTefHFF+1/AFZF\nt7OVPKl3794cOXLE4fVp06bx/PPPs3btWvtrrmpDPVWWc/r06fTv359p06Yxbdo0ZsyYwcSJE+1n\nZ3mbq5ygfbaXXXYZw4YN83Y8wL2Mvsi7193UHoWFhQwePJjXX3+dRo0aGR3HqaCgILZv386pU6dI\nTk7GarVisViMjmX3n//8hyuvvJJOnTphtVpdlveLyuGzzz5z+voPP/xAbm4uCaXjlhw6dIjOnTuT\nnZ3NlVde6c2IQOU5LzZs2DBD/yJ3lXPRokWsXr2aL774wkuJHLn7Wfoady7+FNVTXFzM3XffzYgR\nIxg4cKDRcVxq3Lgxd9xxB5s3b/apyuHrr79m1apVrF69mnPnzpGfn8+9997L4sWLnc/glR4QL/Hl\nDumffvrJ/vyNN95QI0aMMDBN5dasWaPi4+PVsWPHjI7iksViUZs3bzY6RgXFxcUqMjJS5ebmqvPn\nz/tsh7RSSuXm5vp8h/SFCxfUyJEj1YQJE4yOUqVjx46p33//XSml1JkzZ1TPnj3V559/bnCqylmt\nVnXnnXdWWcbv+xzK8+VD+smTJ9OhQwcSExOxWq28/PLLRkdy6uGHH6awsJDevXvTqVMnHnroIaMj\nOfjoo4+IiIhg06ZN3HHHHfTt29foSHblL+CMj4/nz3/+s09ewDl06FB69OjBTz/9REREhGFNnK5s\n2LCBJUuWkJWVRadOnejUqROZmZlGx3Jw+PBhbr31VhITE0lKSqJ///7cdtttRseqkqv9pVwEJ4QQ\nwkFAHTkIIYTwDKkchBBCOJDKQQghhAOpHIQQQjiQykEIIYQDqRyEEEI4kMpBiEuwf/9+p8Nejx49\nmp07dxqQSAjP8IvhM4TwNwsWLDA6ghCXRI4chLhEJSUljBgxgvj4eIYMGcLZs2exWCz2GxE1atSI\nJ598ksTERLp3787Ro0cNTiyEa1I5CHGJfvzxR8aNG0dOTg6hoaG89dZbFYYmOHPmDN27d2f79u3c\ndNNNclQh/IJUDkJcooiICLp37w7AiBEj+Oqrryq8f9lll3HHHXcA0LlzZ/bv3+/tiEJUm1QOQlyi\n8kcJSimHAc2Cg4Ptz4OCgigpKfFaNiFqSioHIS7RgQMH2LRpEwBLly7lxhtvNDiREJdOKgchLoHJ\nZKJdu3a8+eabxMfHc+rUKcaOHetQpvxzXx5aXogyMmS3EEIIB3LkIIQQwoFUDkIIIRxI5SCEEMKB\nVA5CCCEcSOUghBDCgVQOQgghHEjlIIQQwoFUDkIIIRz8f9xki7ujw9x1AAAAAElFTkSuQmCC\n",
"text": [
"<matplotlib.figure.Figure at 0x4258ab0>"
]
}
],
"prompt_number": 27
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<strong>Using numpy's random class (more efficient)</strong>"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from numpy import random as nprandom"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 28
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"dir(nprandom)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 36,
"text": [
"['RandomState',\n",
" 'Tester',\n",
" 'WarningManager',\n",
" '__RandomState_ctor',\n",
" '__all__',\n",
" '__builtins__',\n",
" '__cached__',\n",
" '__doc__',\n",
" '__file__',\n",
" '__initializing__',\n",
" '__loader__',\n",
" '__name__',\n",
" '__package__',\n",
" '__path__',\n",
" 'bench',\n",
" 'beta',\n",
" 'binomial',\n",
" 'bytes',\n",
" 'chisquare',\n",
" 'choice',\n",
" 'dirichlet',\n",
" 'exponential',\n",
" 'f',\n",
" 'gamma',\n",
" 'geometric',\n",
" 'get_state',\n",
" 'gumbel',\n",
" 'hypergeometric',\n",
" 'info',\n",
" 'laplace',\n",
" 'logistic',\n",
" 'lognormal',\n",
" 'logseries',\n",
" 'mtrand',\n",
" 'multinomial',\n",
" 'multivariate_normal',\n",
" 'negative_binomial',\n",
" 'noncentral_chisquare',\n",
" 'noncentral_f',\n",
" 'normal',\n",
" 'np',\n",
" 'operator',\n",
" 'pareto',\n",
" 'permutation',\n",
" 'poisson',\n",
" 'power',\n",
" 'rand',\n",
" 'randint',\n",
" 'randn',\n",
" 'random',\n",
" 'random_integers',\n",
" 'random_sample',\n",
" 'ranf',\n",
" 'rayleigh',\n",
" 'sample',\n",
" 'seed',\n",
" 'set_state',\n",
" 'shuffle',\n",
" 'standard_cauchy',\n",
" 'standard_exponential',\n",
" 'standard_gamma',\n",
" 'standard_normal',\n",
" 'standard_t',\n",
" 'test',\n",
" 'triangular',\n",
" 'uniform',\n",
" 'vonmises',\n",
" 'wald',\n",
" 'warn_ctx',\n",
" 'warnings',\n",
" 'weibull',\n",
" 'zipf']"
]
}
],
"prompt_number": 36
},
{
"cell_type": "heading",
"level": 4,
"metadata": {},
"source": [
"Looking above, looks like maybe the normal() method is what we need"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"help(nprandom.normal)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Help on built-in function normal:\n",
"\n",
"normal(...)\n",
" normal(loc=0.0, scale=1.0, size=None)\n",
" \n",
" Draw random samples from a normal (Gaussian) distribution.\n",
" \n",
" The probability density function of the normal distribution, first\n",
" derived by De Moivre and 200 years later by both Gauss and Laplace\n",
" independently [2]_, is often called the bell curve because of\n",
" its characteristic shape (see the example below).\n",
" \n",
" The normal distributions occurs often in nature. For example, it\n",
" describes the commonly occurring distribution of samples influenced\n",
" by a large number of tiny, random disturbances, each with its own\n",
" unique distribution [2]_.\n",
" \n",
" Parameters\n",
" ----------\n",
" loc : float\n",
" Mean (\"centre\") of the distribution.\n",
" scale : float\n",
" Standard deviation (spread or \"width\") of the distribution.\n",
" size : tuple of ints\n",
" Output shape. If the given shape is, e.g., ``(m, n, k)``, then\n",
" ``m * n * k`` samples are drawn.\n",
" \n",
" See Also\n",
" --------\n",
" scipy.stats.distributions.norm : probability density function,\n",
" distribution or cumulative density function, etc.\n",
" \n",
" Notes\n",
" -----\n",
" The probability density for the Gaussian distribution is\n",
" \n",
" .. math:: p(x) = \\frac{1}{\\sqrt{ 2 \\pi \\sigma^2 }}\n",
" e^{ - \\frac{ (x - \\mu)^2 } {2 \\sigma^2} },\n",
" \n",
" where :math:`\\mu` is the mean and :math:`\\sigma` the standard deviation.\n",
" The square of the standard deviation, :math:`\\sigma^2`, is called the\n",
" variance.\n",
" \n",
" The function has its peak at the mean, and its \"spread\" increases with\n",
" the standard deviation (the function reaches 0.607 times its maximum at\n",
" :math:`x + \\sigma` and :math:`x - \\sigma` [2]_). This implies that\n",
" `numpy.random.normal` is more likely to return samples lying close to the\n",
" mean, rather than those far away.\n",
" \n",
" References\n",
" ----------\n",
" .. [1] Wikipedia, \"Normal distribution\",\n",
" http://en.wikipedia.org/wiki/Normal_distribution\n",
" .. [2] P. R. Peebles Jr., \"Central Limit Theorem\" in \"Probability, Random\n",
" Variables and Random Signal Principles\", 4th ed., 2001,\n",
" pp. 51, 51, 125.\n",
" \n",
" Examples\n",
" --------\n",
" Draw samples from the distribution:\n",
" \n",
" >>> mu, sigma = 0, 0.1 # mean and standard deviation\n",
" >>> s = np.random.normal(mu, sigma, 1000)\n",
" \n",
" Verify the mean and the variance:\n",
" \n",
" >>> abs(mu - np.mean(s)) < 0.01\n",
" True\n",
" \n",
" >>> abs(sigma - np.std(s, ddof=1)) < 0.01\n",
" True\n",
" \n",
" Display the histogram of the samples, along with\n",
" the probability density function:\n",
" \n",
" >>> import matplotlib.pyplot as plt\n",
" >>> count, bins, ignored = plt.hist(s, 30, normed=True)\n",
" >>> plt.plot(bins, 1/(sigma * np.sqrt(2 * np.pi)) *\n",
" ... np.exp( - (bins - mu)**2 / (2 * sigma**2) ),\n",
" ... linewidth=2, color='r')\n",
" >>> plt.show()\n",
"\n"
]
}
],
"prompt_number": 38
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"mu, sigma = 0, 1\n",
"variates = nprandom.normal(mu,sigma,1000)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 14
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Plot the histogram of the data which we suspect follows a Normal distribution\n",
"count, bins, ignored = plt.hist(variates, 30, normed=True)\n",
"# Plot the theoretical probability distribution function of the Normal distribution\n",
"plot(bins, 1/(sigma * np.sqrt(2 * np.pi)) * np.exp( - (bins - mu)**2 / (2 * sigma**2) ), linewidth=2, color='r')\n",
"title(\"Histogram\")\n",
"xlabel(\"bins\")\n",
"ylabel(\"Frequency\")\n",
"grid(True)\n",
"show()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\nWATcWjTtU+CvwDHAF3cE1XUHaJwyRspiK2PfFygFCxbYOqoLCiA2Fv7zH1uzkwCkz8Ew3NUOaasY\nChnFMn6hEbcCpwliNMsYTiHHKt1kZHF9yGrNoncADSx6B9DIor2oyQQTJ0JKCrRoARYLdO8O337r\nrnB20ucgDKE5sIo7WM49NOY0XzKYq/kfKxiNPKxHVHvXX2/rh7juOsjMtB1BDB4MJR4qJsonzUre\nqLAQVq7k+KhRNAOyacBkXuM97sexUvDNJoTq2nRinDJGymIrU+6+4MIFmDULXnkFcnNt40aOhBde\ngI4dnSzXN0mfg6/JybF1tM2dC/v2AfA1/RnHu2TSppyZfHNHUF13gMYpY6QsAAHYzmoqXxP8eYoC\nJgG1i0ovAZ4HMovKNGjQiOzsU07W5f2kz8Egrrgd8sABePxxCA6Gxx6zVQxt2zIBGMjaCiqGyrK4\naDnCxqJ3AA0segfQyOJkegEVneoKipMU8H8owshkIQ8CNRgP7KUmr/IYzfjDfoJHlVNKn4NwO6Vs\nHWm33w5hYfDqq7bTU/v1g1WrYN8+3gGkb0GIyskimL+ykAh2s4K7qcVFJvM6BwhlMcCXX9qaoqo5\naVYyEqVsRwlffQVvvw0//WQbX7Mm3H237aihWzd7cee3vQDfbEKQ/7f+ZYyU5crKdOUnZvAPhvDf\nSyMbNoShQ223mxk4EGrXBkqfPl6+ACC/whJ6N19Jn4M3OHEC1q+3Xfb/9de2qzuLNW9uu6Dnr3+1\nnZJ3Gakc3F3GSFmMVsZIWVxTpiN7GEkEL3TtCrt2XZrQoAEMGQIjRlBn+HDOu7sD3QM07Tuv6Kbg\nTqxZs0Z17NhRhYWFOTwitNgjjzyiwsLCVNeuXdX27dsrNa+b47tMqXu8Z2cr9fXXSj35pFLXXmt7\nGhslbl7fuLFSI0cqtXSpUufPV7hcoNSsZb8qU6aq9/b31TJXuowUFy3HnWWq+p17Om95OV2/LqWU\nUr/+qtTMmbZttESBs6C+p7d6g0lqLItVV3Yqfy5e9nlWYj060bJ+tyUsKChQ7du3V+np6erixYtO\nHxO6efNm+2NCtcyrlP4fcFny8vJUbk6OOrtnj8r7/HN1/l//Uq9cd50qiI1V1latHH8ltWopdfPN\nSr30klJbtypVUKB5Xa7fQF81yI7AKGWudBmvumg57ixT1e/c03nLy+n6dTnYv1+p2bOV6tGjzJnO\n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\nCOFAKgchKikjI6PMW11PmDCB3bt365BICNfzittnCOENFi1apHcEIVxGjhyEqIKCggLuueceOnfu\nzMiRIzl37hyxsbH2hw/Vr1+ff/zjH0RFRdGrVy+OHTsG2B5UVHyl/A033KDnf0GICknlIEQV/Prr\nrzz88MOkpaURGBjIW2+9Vep2BHl5efTq1YudO3fSr18/+1HFCy+8wNq1a9m5cydffPGFXvGFcEoq\nByGqICQkhF69egFwzz338P3335eaXrNmTW699VYAunfvTkZGBgB9+vThvvvu45133qGgoMCjmYWo\nDKkchKiCkkcJSimHm5gFBATY3/v5+dkrgvnz5zNjxgwyMzPp3r27YZ95LoRUDkJUwcGDB9m8eTMA\nK1as4Prrr9c03/79++nZsyfPPfcczZo1M+RjWIUAqRyEqDSTyUTHjh1588036dy5M2fOnGHixIkO\nZUq+Lx5+8skn6dq1K126dKFPnz5e8XhbUT3JLbuFEEI4kCMHIYQQDqRyEEII4UAqByGEEA6kchBC\nCOFAKgchhBAOpHIQQgjhQCoHIYQQDqRyEEII4eD/AXRtPtuATK/YAAAAAElFTkSuQmCC\n",
"text": [
"<matplotlib.figure.Figure at 0x3fbe1b0>"
]
}
],
"prompt_number": 32
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment