{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Generating random variables from scratch\n", "\n", "## Dr. Tirthajyoti Sarkar, Fremont, CA, May 2020\n", "\n", "---\n", "\n", "## What is Notebook about?\n", "\n", "[Random variables](https://en.wikipedia.org/wiki/Random_variable) are an integral part of data science, machine learning, and statistical modeling. They play an increasingly important role in the systems and services around us that employ artificial intelligence or deep neural networks.\n", "\n", "The concept and properties of random variables are used in\n", "\n", "- regression techniques,\n", "- ensemble methods like random forests, gradient boosting,\n", "- deep learning,\n", "- clustering algorithms,\n", "- natural language processing,\n", "- reinforcement learning,\n", "- advanced search algorithms in AI and game theory.\n", "\n", "This Notebook aims to show how you can generate random variables from scratch with simple programming.\n", "\n", "Note that phrase _“from scratch”_. It means we will not call a third-party library or subroutine. Instead, we will write our own simple functions to generate such random variables.\n", "\n", "**Can you do the following?**\n", "\n", "- Addition, multiplication, division, and modulus\n", "- Sine, cosine, and logarithm operations\n", "\n", "We will show how to use these rudimentary mathematical operations to generate,\n", "\n", "- Uniform random variates\n", "- Random variates from the Exponential Distribution\n", "- Random variates from the Normal Distribution\n", "- etc.\n", "\n", "## In software, you gotta embrace the ‘Pseudo’\n", "\n", "Mother nature offers numerous instances of true random processes. Nuclear decay is one such instance.\n", "\n", "It turns out that true random processes can only be emulated and modeled with the so-called [hardware random generators](https://en.wikipedia.org/wiki/Hardware_random_number_generator), a device that generates random numbers from a physical process, rather than by means of an algorithm. Such devices are often based on quantum-mechanical phenomena that generate low-level, stochastic “noise” signals, such as thermal noise, the photoelectric effect, interference of optical beams, and other quantum phenomena.\n", "\n", "Unfortunately, in everyday computing systems, and in an algorithmic setting, we only encounter the so-called [‘pseudo-random’ numbers](https://en.wikipedia.org/wiki/Pseudorandom_number_generator). They are not truly random as a natural process can be, and at some level, they are deterministic. A [seed number is supplied to an algorithm](https://pynative.com/python-random-seed/), which generates a series of such numbers.\n", "\n", "However, for all practical computing purposes, these ‘pseudo-random’ numbers are sufficient if they do not exhibit an obvious repeating pattern or predictability.\n", "\n", "Complex and elaborate pseudo-random generators are available in all major programming languages. In many cases, they use special types of mathematics such as [Modular Arithmetic](https://en.wikipedia.org/wiki/Modular_arithmetic) or [Marsenne Twister](https://en.wikipedia.org/wiki/Mersenne_Twister). Here is the link to the [`random` module of Python](https://docs.python.org/3/library/random.html), for example.\n", "\n", "There is also a wholly separate branch of research and development around [cryptographically secured pseudo random generators](https://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator) for encryption systems. Imagine what can happen if someone can guess or tease out the exact algorithm for generating the hash keys for your Google password?\n", "\n", "In this Notebook, we will write a very simple program with the help of rudimentary mathematical operations, to build our random generator. In fact, we will use a method called a [linear congruential generator](https://en.wikipedia.org/wiki/Linear_congruential_generator), which was popular in the old days of pseudo-random generation.\n", "\n", "The output of our program will take the form of a simple [Uniform Distribution](https://en.wikipedia.org/wiki/Uniform_distribution_(continuous)). Thereafter, we will use statistical theorems and transformations to generate random variables, corresponding to other distributions, based on this random generator.\n", "\n", "## Article\n", "\n", "Read my article on Medium on this topic here: [\"How to generate random variables from scratch (no library used)\"](https://towardsdatascience.com/how-to-generate-random-variables-from-scratch-no-library-used-4b71eb3c8dc7)\n", "\n", "---\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The code and the demo\n", "\n", "### Uniform random generator based on _\"Linear Congruential Generator\"_" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from collections import Counter\n", "import time" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "def pseudo_uniform_bad(mult=5,\n", " mod=11,\n", " seed=1,\n", " size=1):\n", " \"\"\"\n", " A bad pseudo random generator with small multipliers and modulus\n", " \"\"\"\n", " U = np.zeros(size)\n", " x = (seed*mult+1)%mod\n", " U[0] = x/mod\n", " for i in range(1,size):\n", " x = (x*mult+1)%mod\n", " U[i] = x/mod\n", " return U" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAD9CAYAAAC1DKAUAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAZGUlEQVR4nO3de5RdZZ3m8e9DMGCAkIRUFJAi0DgEQVSoXiKz1qAwiuEiyqUJ3Yz3TtMuWpQZWsnAMmL3EuxWoEGF6EyDbXOR4IggSRDpIK2DkkjDKISLGq7BTiBAh0QSkt/88e6C4+ZU1a5z9j6VWu/zWWuvynn3u/f51cmp/Zzz7psiAjMzy882Y12AmZmNDQeAmVmmHABmZplyAJiZZcoBYGaWqW3HuoDRmD59esycOXOsyzAzG1eWL1++JiL6yu3jKgBmzpzJsmXLxroMM7NxRdIj7do9BGRmlikHgJlZphwAZmaZcgCYmWVqxACQdJKk70t6QtI6ScslndKm359LekjS74s+R7Tps7uk/1OsZ42kSyVNquuXMTOz6qp8AzgTWAd8Gngf8C/AVZL+arCDpDnAZcC3gNnAr4CbJB3Q0mdbYAmwJ3AycAZwErCglt/EzMxGpcphoMdGxJqWx7dJ2o0UDJcUbZ8HroyILwBIuh14G/BZ4NSiz0nAfsA+EfHbot8m4BpJn4+Ih7r+bczMrLIRvwGUNv6D7gZmAEjaG/hPwHdaltkCXEf6NjBoNnDX4Ma/8D1gI/DeUVduZmZd6XQn8KHAfcW/ZxU/V5T63A9Mk9TX0u8P+kTERuDXLeswM7MeGXUAFDt3jwO+WjRNLX4+W+q6tjR/aps+g/2mtmkffL65kpZJWrZ69erRlvuyXd/Qj6SOpl3f0D8mz9vtc3djrF6vHI3X94iNztb4NzWqS0FImglcBdwQEVeUZpdvLaY27e1uP6Yh2tMCEQsodhQPDAx0fPuyp554jD0/c1NHyz5ywTGdPm1Xz9vtc3djrF6vHI3X94iNztb4N1X5G4CkacAi4FFe2bELr3zSn1JaZPDxsy39yn0G+7X7ZmBmZg2qFADFsfo3AROBoyPihZbZg+P65XH8WcAzEbG6pd8f9JE0EdibV+8/MDOzhlU5EWxb0hE9bwRmR8S/t86PiN8AD5IO8xxcZpvi8aKWrouAP5a0Z0vb+4DtgMWd/gJmZtaZKvsAvgYcRTpxa5qkQ1rm3R0RLwLzgW9LWgn8BPgQKTD+tKXvQuB/At+VdC6wM3AhcJXPATAz670qAfCe4ufFbebtBayMiKsl7Qh8BjiXdCbwMRHxy8GOEbFJ0nuBS0nnDLwIXAOc1UX9ZmbWoREDICJmVllRRHwD+MYIfR4H3l+pMjMza5SvBmpmlikHgJlZphwAZmaZcgCYmWXKAWBmlikHgJlZphwAZmaZcgCYmWXKAWBmlikHgJlZphwAZmaZcgCYmWWq6g1h9pF0uaR7JG2WtLQ0/52SYohpSUu/Dw/R57Safy8zMxtB1XsC70+6J8CdpLuClf0CeEeprR+4lj+8Kcygw4ENLY9/U7EOMzOrSdUAuDEibgCQtBCY3jozIp4nhcPLJP0XYAvp2v9ld0XEutGXa2Zmdak0BBQRWzpY9xzg9oh4soNlzcysYY3sBJb0RuBtwNVDdPm1pJckPSDpL5qowczMhld1CGi0TgE2AdeX2leRbhn5c2BC0e8ySZMi4sKGajEzszaaCoA5wC0R8UxrY0QsAZa0NC2StB1wjqSL2w01SZoLzAXo7+9vqFwzs/zUPgQk6S3Afgw9/FO2EJgGzGw3MyIWRMRARAz09fXVU6SZmTWyD2AO6RDPG0a5XDRQi5mZDaGJADiZdNho1cM8TwDWAI80UIuZmQ2h0j4ASZNIJ4IB7A5MlnRi8fjmiFhf9DsE2As4c4j1XE/aAXwvaSfwycX0yQ4PNTUzsw5V3Qk8A7iu1Db4eC9gZfHvOcBztD/7F+AB4KPAHoCA+4APRsQ/VazDzMxqUikAImIlaYM9Ur9PAZ8aZv48YF7V4szMrDm+GqiZWaYcAGZmmXIAmJllygFgZpYpB4CZWaYcAGZmmXIAmJllygFgZpYpB4CZWaYcAGZmmXIAmJllygFgZpYpB4CZWaYqBYCkfSRdLukeSZslLW3TZ6WkKE1Pten3Jkk/krRe0pOSzpM0oYbfxczMRqHq/QD2J90Q5k5g4jD9rgIuaXm8sXWmpKnAraT7ABwH/BHwZVIQnVOxFjMzq0HVALgxIm4AkLQQmD5Ev1URcecw6zkNeC1wfEQ8D/xQ0mRgvqQvFW1mZtYDlYaAarxd42xgSWlDfw0pFA6r6TnMzKyCuncCf1TSRknPSVooac/S/FnAitaGiHgUWF/MMzOzHqk6BFTFDaR9BI8D+wGfA+6Q9OaIeK7oMxV4ts2ya4t5ryJpLjAXoL+/v8ZyzczyVts3gIg4IyKujog7ImIBcCSwG/CRctc2i2uIdiJiQUQMRMRAX19fXeWamWWvsfMAIuKXwAPAQS3Na4EpbbrvTPtvBmZm1pBenAjW+sl+BaWxfkl7ADtQ2jdgZmbNaiwAJB0A7Assb2leBBwpaaeWtpOBDcDtTdViZmavVmknsKRJpBPBAHYHJks6sXh8M/Au4FTgJuBJ0qf8c4BHgStaVnUZ8Engu5IuAPYG5gNf8TkAZma9VfUooBnAdaW2wcd7AY8VfS4ijfE/DSwG5rVu2CNiraQjgEuBG0nj/heSQsDMzHqoUgBExErSkTrDOaLiuu4DDq/S18zMmuOrgZqZZcoBYGaWKQeAmVmmHABmZplyAJiZZcoBYGaWKQeAmVmmHABmZplyAJiZZcoBYGaWKQeAmVmmHABmZplyAJiZZapSAEjaR9Llku6RtFnS0tL8XSX9XTF/naTHJF0pabdSv3dKijbT+TX+TmZmVkHV+wHsT7ohzJ3AxDbzDwY+AHwT+BnwOtI1/n8q6YCIWFfq/2fAb1oePzGKms3MrAZVA+DGiLgBQNJCYHpp/r8CsyLipcEGSb8g3RT+BODKUv97i5vGm5nZGKl6Q5gtI8x/tk3bg5LWk+4UZmZmW5kmbwp/IDAJuK/N7NuKfQkrJZ0jaUJTdZiZWXtVh4BGRdI2wMXAQ8AtLbOeA84H7gA2AscAnwf6gDOGWNdcYC5Af39/E+WamWWpkQAAvgi8AzgsIjYNNkbE3cDdLf1ulfQicKakL0TEmvKKImIBsABgYGAgGqrXzCw7tQ8BSfoEcBbwoYj4WYVFFpKC6MC6azEzs6HVGgCSTgAuAf46Iq4d5eL+dG9m1kO1BYCkdwL/DFwaEX8/ikVPAF4C7q2rFjMzG1mlfQCSJpFOBAPYHZgs6cTi8c3AnsD3gBXAtZIOaVl8dUT8uljP14HVwF2kncBHAacDF0XE013+LmZmNgpVdwLPAK4rtQ0+3gt4O7Az8BbgJ6V+VwIfLv59P/Bx4NOkM4ofBv478A+jKdrMzLpX9USwlYCG6XJFMY20nn/AG3szs62CrwZqZpYpB4CZWaYcAGZmmXIAmJllygFgZpYpB4CZWaYcAGZmmXIAmJllygFgZpYpB4CZWaYcAGZmmXIAmJllygFgZpapSgEgaR9Jl0u6R9JmSUvb9JGkeZIek7RB0o8lvbVNvzdJ+pGk9ZKelHSepAk1/C5mZjYKVb8B7E+6ecuDxdTOZ4FzgQuAY4F1pJu+v36wg6SpwK2k2z8eB5xHuh/A5zsp3szMOlc1AG6MiD0i4iTgV+WZkrYnBcAXI+LSiLgVOIm0oT+9petpwGuB4yPihxFxGWnjf6akyd38ImZmNjqVAiAitozQ5VBgMvCdlmVeAG4EZrf0mw0siYjnW9quIYXCYVVqMTOzetS1E3gWsBl4qNR+fzGvtd+K1g4R8SiwvtTPzMwaVlcATAXWRcTmUvtaYJKkiS39nm2z/Npi3qtImitpmaRlq1evrqlcMzOr8zDQaNOmNvOG6teunYhYEBEDETHQ19fXZYlmZjaorgBYC+zU5nDOKcD6iNjU0m9Km+V3pv03AzMza0hdAbACmADsU2ovj/mvoDTWL2kPYIdSPzMza1hdAfBT4HnSoZ8ASJpEOh9gUUu/RcCRknZqaTsZ2ADcXlMtZmZWwbZVOhUb86OKh7sDkyWdWDy+OSLWSzofOFfSWtKn+TNJAXNJy6ouAz4JfFfSBcDewHzgK6VDQ83MrGGVAgCYAVxXaht8vBewEjiftME/G9gFWAa8OyJ+N7hARKyVdARwKekcgWeBC0khYGZmPVQpACJiJa8c0TNUnwD+tpiG63cfcHjF+szMrCG+GqiZWaYcAGZmmXIAmJllygFgZpYpB4CZWaYcAGZmmXIAmJllygFgZpYpB4CZWaYcAGZmmXIAmJllygFgZpYpB4CZWaZqCwBJSyXFENM7ij4r28x7qq4azMysuqr3A6jiE8DkUtt5wNuAu1raruIPbxKzscYazMysotoCoLjO/8skTQQGgGsj4qWWWasi4s66ntfMzDrT5D6A9wJTgasbfA4zM+tQkwEwB3gCuKPU/lFJGyU9J2mhpD0brMHMzIZQ5z6AlxU3kT8WWFDcKnLQDcCdwOPAfsDngDskvTkinhtiXXOBuQD9/f1NlGtmlqWmvgEcC+xIafgnIs6IiKsj4o6IWAAcCewGfGSoFUXEgogYiIiBvr6+hso1M8tPUwEwB3g4IpYN1ykifgk8ABzUUB1mZjaE2gNA0s7AbEa38zdG7mJmZnVq4hvAB4DtqBAAkg4A9gWWN1CHmZkNo4mdwHOAeyLi/tZGSUcDpwI3AU8Cs4BzgEeBKxqow8zMhlFrAEiaDhwBnNtm9mPADOAiYArwNLAYmBcRz9dZh5mZjazWAIiINcBrhph3LykczMxsK+CrgZqZZcoBYGaWKQeAmVmmHABmZplyAJiZZcoBYGaWKQeAmVmmHABmZplyAJiZZcoBYGaWKQeAmVmmHABmZplyAJiZZaq2AJD0YUnRZjqtpY8kzZP0mKQNkn4s6a111WBmZtU1cUOYw4ENLY9/0/Lvz5LuFXAWsAI4E7hV0gER8VQDtZiZ2RCaCIC7ImJduVHS9qQA+GJEXFq0/V9gJXA66e5gZmbWI73cB3AoMBn4zmBDRLwA3Ei6ibyZmfVQEwHwa0kvSXpA0l+0tM8CNgMPlfrfX8wzM7MeqnMIaBVpfP/nwATgFOAySZMi4kJgKrAuIjaXllsLTJI0MSI2llcqaS4wF6C/v7/Gcs3M8lZbAETEEmBJS9MiSdsB50i6eLBbm0U1zDwiYgGwAGBgYKBtHzMzG72m9wEsBKYBM0mf9HeSNKHUZwqwPiI2NVyLmZm16NVO4CAd9jkB2Kc0b1Yxz8zMeqjpADgBWAM8AvwUeB44aXCmpEnAscCihuswM7OS2vYBSLqetAP4XtIn/ZOL6ZMRsQX4vaTzgXMlreWVE8G2AS6pqw4zM6umzqOAHgA+CuxB2rF7H/DBiPinlj7nkzb4ZwO7AMuAd0fE72qsw8zMKqjzKKB5wLwR+gTwt8VkZmZjyFcDNTPLlAPAzCxTDgAzs0w5AMzMMuUAMDPLlAPAzCxTDgAzs0w5AMzMMuUAMDPLlAPAzCxTDgAzs0w5AMzMMuUAMDPLVG0BIOkkSd+X9ISkdZKWSzql1GeppGgzbV9XHWZmVk2d9wM4E/gt8GnSXcCOAq6SND0iWm/48i+8+rLRL9ZYh5mZVVBnABwbEWtaHt8maTdSMLQGwDMRcWeNz2tmZh2obQiotPEfdDcwo67nMDOz+jS9E/hQ0q0hW71H0vpiWiLpwIZrMDOzNhoLAElHAMcBX21pvh04AzgSmAv0A3dImjnMeuZKWiZp2erVq5sq18wsO40EQLFBvwq4ISKuGGyPiM9FxD9GxB0R8W3gXUAAnxpqXRGxICIGImKgr6+viXLNzLJUewBImgYsAh4FTh2ub0Q8BfwEOKjuOszMbHi1BoCkScBNwETg6Ih4oeKiUWcdZmY2sjpPBNsWuA54IzA7Iv69wjKvA/4zsLyuOszMrJo6zwP4GunkrzOAaZIOaZl3N7Av8EVSSDxC2gF8NrAFuKjGOszMrII6A+A9xc+L28zbC3gaECkEdgH+A1gKvD8iHq2xDjMzq6C2AIiImRW6HVXX85mZWXd8NVAzs0w5AMzMMuUAMDPLlAPAzCxTDgAzs0w5AMzMMuUAMDPLlAPAzCxTDgAzs0w5AMzMMuUAMDPLlAPAzCxTDgAzs0z1PAAkvUnSjyStl/SkpPMkTeh1HWZmuavzfgAjkjQVuBW4DzgO+CPgy6QgOqeXtZiZ5a6nAQCcBrwWOD4ingd+KGkyMF/Sl4o2MzPrgV4PAc0GlpQ29NeQQuGwHtdiZpa1XgfALGBFa0NxO8j1xTwzM+sRRUTvnkzaBJwVEReV2h8HvhUR89osMxeYWzzcF3ig8UJfMR1Y08Pnq5vrH1vjuf7xXDu4/rI9I6Kv3NjrfQAA7RJHQ7QTEQuABY1WNARJyyJiYCyeuw6uf2yN5/rHc+3g+qvq9RDQWmBKm/adgWd7XIuZWdZ6HQArKI31S9oD2IHSvgEzM2tWrwNgEXCkpJ1a2k4GNgC397iWKsZk6KlGrn9sjef6x3Pt4Por6fVO4Kmkk8B+CVwA7A18BbgoInwimJlZD/U0ACBdCgK4FHgHadz/m8D8iNjc00LMzDLX8wAwM7OtQ5ZXA+3kgnSS9pe0uOj/oqRHJX1T0q69qrullq4uqCdpG0nLJYWkY5qsdYjn7+T1n1nUW56u6VXdLbV0/PpLOl7SXZI2SHq6eE/t0HTNpRo6ef3nD/H6h6Szt+bai+UGJN1SvObPSLpV0tt7UXOpjk7r37+of72kNZK+LmnHbusZi/MAxlQXF6TbGfgt8C3gSWAv4HPAwZL+OCJearLuQTVdUO/jwO6NFDiCGur/H8BPWh739GSfbuqX9HHS8OeXgLOAqcDh9PDvsIv6vwksLrW9H/gM6eCOxnVae3Gk4a3AL4APFs1nAbdIOjAiHmmy7pY6Oq1/Z+A24EHSQTO7kN5Du5L+DzoXEVlNwNmk8xEmt7T9NelyFJNHua53k05gO2i81E/a6KwGPlbUfsx4eP2BmWNRb431Twf+A/jz8Vj/EOv6AXD/1l476SKUm4EpLW1Ti7a/HAf1nw08X6r/fcXfw0A3NeU4BFTnBemeLn5OrKOwirqt/wukT9A/aqC2Ksb7BQE7rf9Pip9XNlVYRbW8/pKmkT4AXV1vecPqtPbXAC8B61ra1hVtqrvIYXRa/1uBZRHRerLsLaQAOLqbgnIMgK4uSFeMn0+UtC9wPnAX8PMmCh1Cx/VLOhD4CGkYZax0e0HAf5S0WdIqSV+R9NomihxGp/W/nXQdq49JelzSJkk/k3Roc6W2VdcFGU8kbVh7uQ+m09qvL/p8WdIMSTOAC0mfxq9rqNZ2Oq1/e2Bjqe0lYAuwXzcF5RgAU2l/2Ym1xbyR3Ay8SPqPnEYakthSX3kj6qb+S4CvRsTDtVdVXaf1vwh8lTR0dQRwOfCX9HYDBJ3X/3rSxQzPIY2bHwu8ACyW9Lq6ixxGt+//QXOAX0TEg7VUVU1HtUfEk8C7gBOA3xXT8cCREbG6gTqH0ulr/zDwFkmvaWk7GJhA2gZ1LMcAgFFekK7kr4BDgP8G7AgskrR9jbVVMer6Jc0hbYD+pqmiRmHU9UfEqog4PSK+HxFLI2I+cCbwPklvbajOIctp0zbS+2cb0vvlYxHxzxGxmLQDbzNwev0lDqub9z/FkW+H0dvhn0GdvPd3BRYCy0nDMLOLf/9AUn8TRQ6jk9f+G0AfcImk10vaH/ga6b3T1flTOQZAVxeki4iHIuJnEfFt4EjgbcCf1lvisEZdf/HJ4e9IZ19vI2kKMLmYvUPp0hxNq/OCgAuLnwd1VdHodFr/M8XPpYMNxVjwcuBNdRVXQR2v/5+QNlrX1lVURZ3WfhbpSKsTI2JxEb4nkDaevRwO7aj+iFhBuiT+KcAq4F7SsPO/kb7NdCzHAKjtgnSRDh97hnRJi17ppP4dgDeQLruxtpjuKeZdA9zdSKXt1XlBwCj97IVO67+fVGd5p6NIY7m9UsfrPwf414h4rObaRtJp7bOAX0XEpsGGiNgI/Ip0KGavdPzaR8T/Bl4HHAjsRvrWuA9wZzcF5RgAtV2QrtgRvAvp/IBe6aT+daQx0NbplGLePODPmim1rTovCHhi8XN5HYVV1Gn9N5E29u8abCiO7z6YV8K4F7p6/SXNJA2BjsXwT6e1PwIcIOnlo/UkbQccAKxsoM6hdPXaR8TvI+L/RcTvgFNJ2+/vdFVRr46B3Vom0s6WVcAPgf9K+mq1DvibUr+Hgf/V8vjvSUf9fID0R/wJ0pvnYWCHrb3+NuuZydicB9Dp6z+fdNLM8cVy55H+cK4fD/UXbd8rlv0Q6fC920nnZEwdD/UX7Z8FNgF9vXzdu3zvHFzU/IPidT+GtDHeBLxlHNQ/mTR8ezRp2Pn8ovYPd11Tr/8Tt4aJNOZ6W7EBWUU6Nn5Cqc9K4IqWx3NIx88/Qzpsa0WxQZo+Hupvs44xCYAuX/9lwHOkQ+IeLkJgu/FQf9G2I/B10vkjG0hnhb55vNRftP8bsLjXNdfw2h8B/Lj4+32GFL7vHA/1k4aIbinq3kA69Pz9ddTji8GZmWUqx30AZmaGA8DMLFsOADOzTDkAzMwy5QAwM8uUA8DMLFMOADOzTDkAzMwy9f8BpovOXo8Xh0IAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "l=pseudo_uniform_bad(seed=3,size=1000)\n", "plt.hist(l,bins=20,edgecolor='k')\n", "plt.xticks(fontsize=15)\n", "plt.yticks(fontsize=15)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "def pseudo_uniform_good(mult=16807,\n", " mod=(2**31)-1,\n", " seed=123456789,\n", " size=1):\n", " \"\"\"\n", " A reasoanbly good pseudo random generator\n", " \"\"\"\n", " U = np.zeros(size)\n", " x = (seed*mult+1)%mod\n", " U[0] = x/mod\n", " for i in range(1,size):\n", " x = (x*mult+1)%mod\n", " U[i] = x/mod\n", " return U" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "l=pseudo_uniform_good(size=10000)\n", "plt.hist(l,bins=20,edgecolor='k')\n", "plt.xticks(fontsize=15)\n", "plt.yticks(fontsize=15)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "def pseudo_uniform(low=0,\n", " high=1,\n", " seed=123456789,\n", " size=1):\n", " \"\"\"\n", " Generates uniformly random number between `low` and `high` limits\n", " \"\"\"\n", " return low+(high-low)*pseudo_uniform_good(seed=seed,size=size)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "l=pseudo_uniform(low=-5,high=7,size=10000)\n", "plt.hist(l,bins=20,edgecolor='k')\n", "plt.xticks(fontsize=15)\n", "plt.yticks(fontsize=15)\n", "plt.xlim(-6,8)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sample picker" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "def sample_pick(lst):\n", " \"\"\"\n", " Picks up a random sample from a given list\n", " \"\"\"\n", " # Sets seed based on the decimal portion of the current system clock\n", " t = time.perf_counter()\n", " seed = int(10**9*float(str(t-int(t))[0:]))\n", " # Random sample as an index\n", " l = len(lst)\n", " s = pseudo_uniform(low=0,high=l,seed=seed,size=1)\n", " idx = int(s)\n", " \n", " return (lst[idx])" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "dice_faces = ['one','two','three','four','five','six']" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "four, one, two, three, four, five, five, six, one, three, five, six, one, two, four, five, six, one, one, two, four, five, one, three, four, six, one, three, four, six, " ] } ], "source": [ "for _ in range(30):\n", " print(sample_pick(dice_faces),end=', ')" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "l = []\n", "for _ in range(10000):\n", " t = time.perf_counter()\n", " seed = int(10**9*float(str(t-int(t))[0:]))\n", " l.append(float(pseudo_uniform(0,6,seed=seed,size=1)))\n", " \n", "plt.hist(l,bins=20,edgecolor='k')\n", "plt.xticks(fontsize=15)\n", "plt.yticks(fontsize=15)\n", "plt.xlim(-1,7)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Bernoulli" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "def pseudo_bernoulli(p=0.5,size=1):\n", " \"\"\"\n", " Bernoulli generator from uniform generator\n", " \"\"\"\n", " # Sets seed based on the decimal portion of the current system clock\n", " t = time.perf_counter()\n", " seed = int(10**9*float(str(t-int(t))[0:]))\n", " B = pseudo_uniform(seed=seed,size=size)\n", " B = (B<=p).astype(int)\n", " \n", " return B" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "l=pseudo_bernoulli(p=0.2,size=1000)\n", "plt.hist(l,bins=20,edgecolor='k')\n", "plt.xticks(fontsize=15)\n", "plt.yticks(fontsize=15)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Binomial" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "def pseudo_binomial(n=100,\n", " p=0.5,\n", " size=1):\n", " \"\"\"\n", " Binomial distribution from the Uniform generator\n", " \"\"\"\n", " binom = []\n", " for _ in range(size):\n", " t = time.perf_counter()\n", " seed = int(10**9*float(str(t-int(t))[0:]))\n", " U = pseudo_uniform(size=n,seed=seed)\n", " Y = (U <= p).astype(int)\n", " binom.append(np.sum(Y))\n", " \n", " return binom" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[69, 74, 75, 72, 80, 75, 69, 78, 79, 84, 75, 83, 83, 63, 68]" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 100 loaded coins, each with probability of head 0.75, are flipped \n", "# This trial/experiment is repeated for 15 times\n", "# The number of heads in each experiment are given below\n", "pseudo_binomial(n=100,p=0.75,size=15)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Normal" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "def pseudo_normal(mu=0.0,sigma=1.0,size=1):\n", " \"\"\"\n", " Generates Normal distribution from the Uniform distribution using Box-Muller transform\n", " \"\"\"\n", " # A pair of Uniform distributions\n", " t = time.perf_counter()\n", " seed1 = int(10**9*float(str(t-int(t))[0:]))\n", " U1 = pseudo_uniform(seed=seed1,size=size)\n", " t = time.perf_counter()\n", " seed2 = int(10**9*float(str(t-int(t))[0:]))\n", " U2 = pseudo_uniform(seed=seed2,size=size)\n", " # Standard Normal pair\n", " Z0 = np.sqrt(-2*np.log(U1))*np.cos(2*np.pi*U2)\n", " Z1 = np.sqrt(-2*np.log(U1))*np.sin(2*np.pi*U2)\n", " # Scaling\n", " Z0 = Z0*sigma+mu\n", " \n", " return Z0" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "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je7Xu3dvOnbs2GC00t69extcZUTTtWtXhgwZwo4d4Su6iEiiqFC0AcXFxRw6dIhzzjkn2LZ582Y++OCDJgtFuBMnTnD06NGY42trvZVUDh8+HGz78MMPWblyJTfddFOj+6WnpzNy5EhWrVpVr33VqlXN6iM5cuQI27dv5+yzz455HxGJL916agP8fj8AhYWF3HnnnZSUlDBjxgyAeh/6S5cu5e677+a1114jKyuLWbNmcfXVV3Peeefx+eef88ILL1BUVMSf/vSnmM89evRounTpwl133cXs2bMpLS3ljjvuYMqUKVx11VWNnhtg5syZ3HTTTVxyySX8wz/8A08//TS7d+/m9ttvD+5XWFhIYWEh27d7cym/973vcc0115Cdnc3evXv54Q9/SE1NDTfffHPLv4GnoE0+X8SO+sZkZGczY443yXP27PmUljZccs3n26o+folIhQJvpnSiJsHVna85/H4/48aNY9euXQwdOpQBAwbw0EMPMXXqVBYsWMD48eMBOHDgAMXFxRw/7q1yUlZWxo033khZWRk9evRg2LBhrFixgq997WvBY0cbKQXQq1cvlixZwsyZMxk+fDhZWVnccsstzJo1q15c+LkBJk+ezGeffcaDDz7Inj17GDp0KMuXL+f8888PxlRUVFBcfHIC/q5du/jmN79JRUUFffr04dJLL+Xtt9+ut4+Aq6mJ2FHfmILApEuA0tIqcnIKGsSsXTvxiycmpyQVCkj55TT8fj8jR45k3rx59dr3799f731+fj75Ib9lLlq0qMlj79y5k9zcXM4999xGYyZMmMCECRMa3R7p3HWmTZvGtGnTGt2voKCAgoKC4PvFixc3mbOIJJb6KNqATZs2tdpM6uXLl1NYWEinTvqdQUQi06dDiisvL6e8vLzVCsW7777bKscVkVOHCkWKy8zMxJuoLiKSHCoUIpIwPt8m8vMLGrRnZ2cwZ86MxCckMVGhEJGEqalxEUdclZQ0bJPUoc5sERGJqt0VCt3vbx/07ywSP+2qUKSlpdVbikJOXYf/9jfSmrFUiYg0rl31UZx11ll8+umnZGVl0blz56irmErb5Jzj8N/+xqdlZWS+/36y05FTnM/vI39GPuCtuJDqk3dbql0Viu7duwOwe/fuektNSNtWVVHBgZAJg2lHj5L5/vt037cviVlJe1BzrCb46NRELgOUaO2q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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "l1=pseudo_normal(size=10000)\n", "plt.hist(l1,bins=25,edgecolor='k',alpha=0.5,color='blue')\n", "l2=pseudo_normal(mu=-3,sigma=2.0,size=10000)\n", "plt.hist(l2,bins=25,edgecolor='k',alpha=0.5,color='red')\n", "l3=pseudo_normal(mu=3,sigma=0.5,size=10000)\n", "plt.hist(l3,bins=25,edgecolor='k',alpha=0.5,color='green')\n", "\n", "plt.xticks(fontsize=15)\n", "plt.yticks(fontsize=15)\n", "plt.legend([\"$\\mu$:0, $\\sigma$:1.0\",\n", " \"$\\mu$:-3, $\\sigma$:2.0\",\n", " \"$\\mu$:3, $\\sigma$:0.5\"],fontsize=14)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "l=pseudo_normal(size=10000)\n", "plt.hist(l,bins=25,edgecolor='k')\n", "plt.xticks(fontsize=15)\n", "plt.yticks(fontsize=15)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exponential" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "def pseudo_exp(lamb,size=1):\n", " \"\"\"\n", " Generates exponential distribution from the Uniform distribution\n", " \"\"\"\n", " t = time.perf_counter()\n", " seed = int(10**9*float(str(t-int(t))[0:]))\n", " U = pseudo_uniform(size=size,seed=seed)\n", " X = -(1/lamb)*(np.log(1-U))\n", " \n", " return X" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAD9CAYAAACiLjDdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAcVUlEQVR4nO3dfZBV9Z3n8ffHVlQMSKttfOJBJAkaZ8pkyW4GJ7EiYxSjknVDoVlrxqQ2rKkY3Zh1FQIbNLEEZ3xISWaQTCXGSSFR14yBCVKixodRd8WYZJUHWRXxOaCNDDQIab/7x+/c9OF4+/Tt5va9Lf15Vd3qvr/zPb977q/gfvqc3znnKiIwMzPrzj7N3gAzMxvYHBRmZlbKQWFmZqUcFGZmVspBYWZmpfZt9gbU22GHHRZjxoxp9maYmX2gPPXUU5sioq3asr0uKMaMGcPKlSubvRlmZh8okl7qblmPh54kfUnSY5LekrRD0lpJsyQNydWslxSFxxtV+jpB0v2SOiS9JulqSS2FGkmaKellSdslPSzppN6+aTMzq49a9igOBR4E/hbYDPx7YA5wBHBxrm4RcHPu+c58J5JagRXAKmAKcBxwPSmsZuVKrwRmA5cDa4DLgBWSToyI94WPmZn1rx6DIiJuKTQ9KGk48A1J34yuS7tfj4gnSrq6CDgQODcitgD3Zf3MkXRdRGyRdAApKK6NiPkAkh4H1pNCaVb1rs3MrL/09aynt4AhPVbtbjKwPAuJisWk8Dglez4RGA7cUSmIiG3Akmx9MzNrsJqDQlKLpKGS/hK4BPiH2P1GUV+VtFPSO5LukjS60MV40qGkP4mIDUBHtqxS0wmsK6y7OldjZmYN1JuznrYB+2e/30aaQ6i4B3gCeAU4Hvgu8IikP4uId7KaVtIcR1F7tqxSszUiOqvUDJU0JCJ2FpYhaTowHWDUqFG9eEtmZtaT3hx6mgh8Bvg2aTJ6fmVBRFwaEbdHxCMRsRA4HTgK+Eqhj2q3qlWhvbua7pYREQsjYkJETGhrq3oasJmZ9VHNexQR8Zvs10clbQJ+Kun6iHi+Su0zktYCn8w1twMjqnR9MF17Gu3AMEkthb2KEUBHROyqdXvNzKw++jqZXQmNY3uoy+8BrKEwzyBpJHAQXXMXa4AWYFyhn/fNb5iZWWP0NShOzn6+WG2hpBOBjwFP5ZqXAadLGpZrmwZsBx7Knj8GbAGm5voaCpydrd/vjjxmFJL69DjyGM+PmNnep8dDT5LuJV0o9yzpjKSTSfMUP4+I5yV9AbgAWAq8RvrrfxawAbg119UC0tlSd0uaB4wlXbh3Q+WU2YjYIWkuMFtSO10X3O3D7hfz9Zs3Xn2Z0Vcs7dO6L807q85bY2bWfLXMUTwJXAiMAf4IvADMIH3wA7wMHA7cRJpLeAu4F5iZv2YiItolTSJNgi8hzUvcSAqLvLmkYJhBuip8JXBaRLzZ2zdnZmZ7rpYrs2eTbqnR3fLfA5NqebGIWAWc2kNNANdkDzMzazJ/H4WZmZVyUJiZWSkHhZmZlXJQmJlZKQeFmZmVclCYmVkpB4WZmZVyUJiZWSkHhZmZlXJQmJlZKQeFmZmVclCYmVkpB4WZmZVyUJiZWSkHhZmZlXJQmJlZKQeFmZmV6jEoJH1J0mOS3pK0Q9JaSbMkDcnVSNJMSS9L2i7pYUknVenrBEn3S+qQ9JqkqyW1FGpq6svMzBqjlj2KQ4EHgf8CTAZ+DHwHuCFXcyXp61LnAWcDW4EVko6oFEhqBVYAAUwBrga+DVxVeL0e+zIzs8ap5Tuzbyk0PShpOPANSd8E9id9uF8bEfMBJD0OrAcuBmZl610EHAicGxFbgPuyfuZIui4itkg6oMa+zMysQfo6R/EWUDn0NBEYDtxRWRgR24AlpD2QisnA8iwkKhaTwuOUXvZlZmYNUnNQSGqRNFTSXwKXAP8QEQGMBzqBdYVVVmfLKsYDa/IFEbEB6MjV1dqXmZk1SG/2KLZlj0eAh4DLs/ZWYGtEdBbq24GhuUnvVmBzlX7bs2W96Ws3kqZLWilp5caNG3vxlszMrCe9CYqJwGdIE9BTgPm5ZVGlXlWWdVdXS013y4iIhRExISImtLW1VSsxM7M+6nEyuyIifpP9+qikTcBPJV1P+mt/mKSWwp7ACKAjInZlz9uztqKD6drTqLUvMzNrkL5OZldC41jSvEMLMK5QU5yTWENhnkHSSOCgXF2tfZmZWYP0NShOzn6+CDwGbAGmVhZKGkq6BmJZbp1lwOmShuXapgHbSXMe9KIvMzNrkB4PPUm6l3Sh3LOkM5JOJs1T/Dwins9q5gKzJbWT/vK/jBRCN+e6WkA6W+puSfOAscAc4IbKKbMRsaPGvszMrEFqmaN4ErgQGAP8EXgBmEH64K+YS/own0G6knslcFpEvFkpiIh2SZNIk+BLSPMSN5LCgt70ZWZmjVPLldmzSbfUKKsJ4JrsUVa3Cji1Hn2ZmVlj+O6xZmZWykFhZmalHBRmZlbKQWFmZqUcFGZmVspBYWZmpRwUZmZWykFhZmalHBRmZlbKQWFmZqUcFGZmVspBYWZmpRwUZmZWykFhZmalHBRmZlbKQWFmZqUcFGZmVqrHoJA0VdIvJb0qaaukpySdX6j5taSo8jigUHe0pF9k/WySNF/S0Cqv+TVJ6yTtyF5v0p6/VTMz64tavjP7MuBF4FvAJuBMYJGkwyLi5lzdg8DMwrrvVn6RtC+wHNgJTANGADdkPy/I1Z1H+j7uOcCjwFeApZI+FRHP9ObNmZnZnqslKM6OiE255w9IOooUIPmgeDsinijpZypwPDAuIl4EkLQLWCzpqohYl9VdBfw0Ir6X1TwEfAK4klygmJlZY/R46KkQEhVPA4f38rUmA09WQiLzz6Q9jDMAJI0FPgrckXv994A7s/XNzKzB+jqZPRFYVWj7vKSO7LFc0p8Xlo8H1uQbImIn8Hy2jNzP3eqA1cAhktr6uL1mZtZHvQ6KbGJ5CvDDXPNDwKXA6cB0YBTwiKQxuZpWYHOVLtuzZeR+FuvaC8uL2zRd0kpJKzdu3FjbGzEzs5r0KiiyD/5FwD0RcWulPSK+GxE/iYhHIuJnwOeAAP5boYuo1m2V9uJzlaxPRCyMiAkRMaGtzTsdZmb1VHNQSDoEWAZsoIdJ5Yh4A/hX4JO55nbSGU5FI+jag2jPtRVroPoeiZmZ9aOagiK71mEpMAT4QkRsq7H//B7AGrrmICr9DgHG0jUnUfm5W132/O2I8HElM7MGq+WCu31JZx19BJgcEX+oYZ0PAycDT+WalwGfkjQ613YOsD9wL0BEvAA8RzqVttLXPtnzZT29rpmZ1V8t11H8Pekiu0tJZx59OrfsaeBjwLWkMHmJNJE9A3gPuClXexfwHeBuSbOBg4EbgUW5ayggXWj3M0nrSYev/oYUUl/u5XszM7M6qCUoPp/9/EGVZccCb5Emm68FDgX+Dfg18MWI2FApjIhdks4A5pOuk3gXWAxcnu8wIm6X9CHgCmA28Cxwlq/KNjNrjh6DIiLG1NDPmbW8WES8AnyxhrofAT+qpU8zM+tfvnusmZmVclCYmVkpB4WZmZVyUJiZWSkHhZmZlXJQmJlZKQeFmZmVclCYmVkpB0U9teyHpD49jjxmVLO33sysqlpu4WG16tzF6CuW9mnVl+adVeeNMTOrD+9RmJlZKQeFmZmVclCYmVkpB4WZmZVyUJiZWSkHhZmZlXJQmJlZqR6DQtJUSb+U9KqkrZKeknR+lbqvSVonaUdWM6lKzdGSfpH1s0nSfElD+9KXmZk1Ri17FJcBW4FvAecADwKLJH2zUiDpPGABcBswmfQ910slnZir2RdYDowGpgGXAlOBhfkXq6UvMzNrnFquzD47Ijblnj8g6ShSgNyctV0F/DQivgcg6SHgE8CVwAVZzVTgeGBcRLyY1e0CFku6KiLW9aIvMzNrkB73KAohUfE0cDiApLHAR4E7cuu8B9xJ2iOomAw8WQmJzD8DO4EzetmXmZk1SF8nsycCq7Lfx2c/1xRqVgOHSGrL1e1WExE7gedzfdTal5mZNUivgyKbWJ4C/DBras1+bi6UtheWt1apqdS1Fmp76qu4TdMlrZS0cuPGjeVvwMzMeqVXQSFpDLAIuCcibi0sjmJ5lfZiTaWu2F5LX13FEQsjYkJETGhr806HmVk91RwUkg4BlgEb2H1SufLX/ojCKpXnm3N1xZpKXb6mlr7MzKxBagqK7FqHpcAQ4AsRsS23uDKfML6w2njg7YjYmKvbrUbSEGBsro9a+zIzswap5YK7fUlnHX0EmBwRf8gvj4gXgOdIp79W1tkne74sV7oM+JSk0bm2c4D9gXt72ZeZmTVILddR/D1wJukCuUMkfTq37OmIeBeYA/xM0nrgX4G/IQXLl3O1dwHfAe6WNBs4GLgRWJS7hoIa+zIzswapJSg+n/38QZVlxwLrI+J2SR8CrgBmk66mPisinqkURsQuSWcA80nXSbwLLAYuz3dYS19mZtY4PQZFRIyppaOI+BHwox5qXgG+WI++zMysMXz3WDMzK+WgMDOzUg4KMzMr5aAwM7NSDgozMyvloDAzs1IOCjMzK+WgMDOzUg4KMzMr5aAwM7NSDgozMyvloDAzs1IOCjMzK+WgMDOzUg4KMzMr5aAwM7NSDgozMytVU1BIGifpFkm/k9Qp6ddVatZLisLjjSp1J0i6X1KHpNckXS2ppVAjSTMlvSxpu6SHJZ3U53dpZmZ9Vst3ZgN8HDgTeAIYUlK3CLg593xnfqGkVmAFsAqYAhwHXE8KrFm50itJ35d9ObAGuAxYIenEiHhf+JiZWf+pNSiWRMQ9AJLuAg7rpu71iHiipJ+LgAOBcyNiC3CfpOHAHEnXRcQWSQeQguLaiJifvebjwHrgYnYPFDMz62c1HXqKiPfq9HqTgeVZSFQsJoXHKdnzicBw4I7c628DlmTrm5lZA9V7MvurknZKekfSXZJGF5aPJx1K+pOI2AB0ZMsqNZ3AusK6q3M1ZmbWILUeeqrFPaQ5jFeA44HvAo9I+rOIeCeraQU2V1m3PVtWqdkaEZ1VaoZKGhIRxbmP6cB0gFGjRtXjvZiZWaZuexQRcWlE3B4Rj0TEQuB04CjgK8XSKqur0N5dTdVlEbEwIiZExIS2trY+bL2ZmXWn366jiIhngLXAJ3PN7cCIKuUH07Wn0Q4MK54ym63XERG76r2tZmbWvUZccJffA1hDYZ5B0kjgILrmLtYALcC4Qj/vm9/Yq7Tsh6Q+PY48xofbzKz/1HOOYjeSTgQ+BtySa14GXC5pWET8W9Y2DdgOPJQ9fwzYAkwFvp/1NRQ4G1jYX9vbdJ27GH3F0j6t+tK8s+q8MWZmXWoKiuyD+szs6dHAcElfyp7/CvgccAGwFHiN9Nf/LGADcGuuqwXAJcDdkuYBY4E5wA2VU2YjYoekucBsSe10XXC3D7tfzGdmZg1Q6x7F4cCdhbbK82OBl7Oam0hzCW8B9wIz89dMRES7pEnAfNJ1EZuBG0lhkTeXFAwzgEOBlcBpEfFmjdtrZmZ1UlNQRMR6us466s6kGvtaBZzaQ00A12QPMzNrIt891szMSjkozMyslIPCzMxKOSjMzKyUg8LMzEo5KMzMrJSDwszMSjkozMyslIPCzMxKOSjMzKyUg8LMzEo5KMzMrJSDwszMSjkozMyslIPCzMxKOSjMzKyUg8LMzErVFBSSxkm6RdLvJHVK+nWVGkmaKellSdslPSzppCp1J0i6X1KHpNckXS2ppS99mZlZ/6t1j+LjwJnAc9mjmiuB2cA84GxgK7BC0hGVAkmtwAoggCnA1cC3gat625eZmTVGrUGxJCJGRsRU4NniQkkHkD7cr42I+RGxAphKCoSLc6UXAQcC50bEfRGxgBQSl0ka3su+zMysAWoKioh4r4eSicBw4I7cOtuAJcDkXN1kYHlEbMm1LSaFxym97MsqWvZDUp8eRx4zqtlbb2YD3L516mc80AmsK7SvBqYV6h7IF0TEBkkd2bIlvejLKjp3MfqKpX1a9aV5Z9V5Y8xsb1Ovs55aga0R0VlobweGShqSq9tcZf32bFlv+voTSdMlrZS0cuPGjX1+E2Zm9n71PD02qrSpyrLu6mqpqbosIhZGxISImNDW1lbLtpqZWY3qFRTtwLDiaa7ACKAjInbl6kZUWf9guvY0au3LzMwaoF5BsQZoAcYV2sdny/J14/MFkkYCB+Xqau3LzMwaoF5B8RiwhXQaKwCShpKugViWq1sGnC5pWK5tGrAdeKiXfZmZWQPUdNZT9kF9Zvb0aGC4pC9lz38VER2S5gKzJbWT/vK/jBREN+e6WgBcAtwtaR4wFpgD3FA5ZTYidtTYl5mZNUCtp8ceDtxZaKs8PxZYD8wlfZjPAA4FVgKnRcSblRUiol3SJGA+6VTYzcCNpLDI67EvMzNrjJqCIiLW03XWUXc1AVyTPcrqVgGn1qMvMzPrf757rJmZlXJQmJlZKQeFmZmVclCYmVkpB4WZmZVyUJiZWSkHhZmZlXJQmJlZKQeFmZmVclCYmVkpB4WZmZVyUJiZWSkHhZmZlXJQmJlZKQeFmZmVclCYmVkpB8Vg17Ifkvr8OPKYUc1+B2bWz2r9KtQeSboQ+EmVRV+PiAVZjUhfb/p14DDgSeCSiPhtoa8TSN+P/Rekr0v9R+CqiOis1/ZapnMXo69Y2ufVX5p3Vh03xswGoroFRc6pwPbc8xdyv18JzAYuB9YAlwErJJ0YEW8ASGoFVgCrgCnAccD1pL2fWf2wvWZmVqI/guLJiNhabJR0ACkoro2I+Vnb48B64GK6QuAi4EDg3IjYAtwnaTgwR9J1WZuZmTVII+coJgLDgTsqDRGxDVgCTM7VTQaWFwJhMSk8TmnAdpqZWU5/BMXzkv4oaa2k/5prHw90AusK9auzZfm6NfmCiNgAdBTqzMysAep56Ol10vzD/wFagPOBBZKGRsSNQCuwtcqEdDswVNKQiNiZ1W2u0n97tszMzBqobkEREcuB5bmmZZL2B2ZJ+kGlrMqqqrKsu7pq7UiaDkwHGDXKp2uamdVTf89R3AUcAowh7REMk9RSqBkBdETErux5e9ZWdDDV9zSIiIURMSEiJrS1tdVlw83MLGnUZHaQ5h1agHGFZcU5iTUU5iIkjQQOKtSZmVkD9HdQ/CdgE/AS8BiwBZhaWShpKHA2sCy3zjLgdEnDcm3TSNdmPNTP22tmZgX1vDL7f5Emsn9P2nOYlj0uiYj3gB2S5gKzJbXTdcHdPqSrsCsWAJcAd0uaB4wF5gA3+BoKM7PGq+dZT2uBrwIjSRPPq4C/joh/ytXMJQXDDOBQYCVwWkS8WSmIiHZJk4D5pGssNgM3ksLCBprsXlF9ccTRI3n9lQ113iAzq7d6nvU0E5jZQ00A12SPsrpVpFuB2EC3B/eK8n2izD4YfPdYMzMr5aAwM7NSDgozMyvloDAzs1IOCjMzK+WgsObZg69h9VewmjVOf3xxkVltfGqt2QeC9yjMzKyUg8LMzEo5KMzMrJSDwszMSjkozMyslIPCPph8aq1Zw/j0WPtg8qm1Zg3jPQozMyvloDAzs1IOCht89mB+w3McNhh5jsIGnz2Y3wDPcdjgM2D3KCSdIOl+SR2SXpN0taSWZm+Xmc+4ssFmQO5RSGoFVgCrgCnAccD1pGCb1cRNM/MZVzboDMigAC4CDgTOjYgtwH2ShgNzJF2XtZl98GR7I31xxNEjef2VDXXeILOeDdSgmAwsLwTCYmAecAqwpClbZban9mRv5O/+Y59DpmXIAXTu3NGndR1QNlCDYjzwQL4hIjZI6siWOShs8NnDQ17NCCjYs5BywA0Miohmb8P7SNoFXB4RNxXaXwFui4iZhfbpwPTs6ceAtXvw8ocBm/Zg/b2dx6dnHqOeeYx61ugxGh0RbdUWDNQ9CoBqCaZq7RGxEFhYjxeVtDIiJtSjr72Rx6dnHqOeeYx6NpDGaKCeHtsOjKjSfjCwucHbYmY2qA3UoFhDmov4E0kjgYOyZWZm1iADNSiWAadLGpZrmwZsBx7q59euyyGsvZjHp2ceo555jHo2YMZooE5mt5IutnuGdErsWOAG4KaI8AV3ZmYNNCCDAtItPID5wF+Q5iX+EZgTEZ1N3TAzs0FmwAaFmZkNDAN1jqKhfAPCLpKmSvqlpFclbZX0lKTzq9R9TdI6STuymknN2N5mk3R0Nk4h6UO5dkmaKellSdslPSzppGZua6NJ2lfSldm/k3clvSLpxkLNoB0nSedJ+k327+dVSbdJOqpQMyDGZ9AHRe4GhEG6AeHVwLeBq5q5XU10GbAV+BZwDvAgsEjSNysFks4DFgC3kW638iywVNKJjd/cpvtb0ngVXQnMJs2xnZ3VrJB0RAO3rdl+AlwC/B3wedKYbC/UDMpxknQOcDvwGOlz5wrgs6T/R/nP5YExPhExqB/ADNJ1G8Nzbf8D6Mi3DZYHcFiVtkXAi7nna4Ef557vA/xf4GfN3v4Gj9VngLeB/076Q+NDWfsBwDvA/8zVHgRsBL7f7O1u0NicAewCTiipGbTjRLp33VOFtnOyf0fHD7TxGfR7FHR/A8IDSTcgHFQiototA54GDgeQNBb4KHBHbp33gDtJYzkoZIcmbybtgRbHbCIwnN3HaBvpHmWDZYy+CjwQEatKagbzOO1HCoG8ysXElRtrDZjxcVCkC/t2u4gvIjaQ9ijGV11j8JlIOl0ZusakeOHjauAQSVXvFbMXuoj0F98PqywbD3QC6wrtqxk8/6b+A/CcpPmStmTzf3cXjsEP5nH6MfAZSX8tabikjwLfBx7MheuAGR8HBbRS/bYg7dmyQS2bpJ5C1wdiZUyKY9ZeWL7XknQo8D3gsojYVaWkFdga7z+Vux0YKmlIf2/jAHAEcCFwEnAe8BXg3wG/UNetaAftOEXEv5DGZyFpz2It0AKcmysbMOMzkG8K2Eg134BwMJE0hjQ/cU9E3FpYXBwbddO+N7oG+N8R8auSmu7+TXW3bG+j7DElIt4CkPQ66c4KpwL3Z3WDcpwkfY50QsgPSHei+DAwhxSkf5ULhwExPg4K34CwKkmHkP4BbwAuyC2q7DmMYPdjrJUx3KvHTNLHScffPyup8p6HZj8PltRJGqNhkloKfw2OADq62QvZ27QDL1RCIvMosBM4gRQUg3mcrgd+GRFXVBok/ZZ0SHcKcDcDaHx86Mk3IHwfSUOBpcAQ4AvZBFpFZUyKx0jHA29HxMYGbGIzfYQ0Efk46T9yO12H5V4hTXCvIR1GGFdY933zYXux1d20C3gv+30wj9N44Lf5hohYSzp9+LisacCMj4OiuTcgHHAk7Us6g+kjwOSI+EN+eUS8ADwHTM2ts0/2fFkDN7VZHgU+V3jMy5adSbqu4jFgC7uP0VDSefCDYYwg/aHx55IOy7V9lhSyv8ueD+Zxegn4ZL5B0vGksy3XZ00DZ3yafT5xsx+kCaPXgfuAvyJ9U95W9vLzuEvGYyHp2OclwKcLj/2zmvNJZ2PMIn1Q3koK1hObvf1NGrMLyV1HkbXNIJ059w1gEvAvpNNoP9zs7W3QmAwnHbZ8nPTB9mXgZeC+Qt2gHCfgUtKe1fXZ585/Jk1ovwgcNNDGp+kDNhAepGOmD2Qfdq+TzmhpafZ2NWks1mcfetUeY3J1XwP+H/Au8BtgUrO3vYljVi0oBHyHdDhqO/AI8Ilmb2uDx2Uc8CtgG+kQ3a1Aa6FmUI5T9r6/Dvw+G59XgZ8DYwfi+PimgGZmVspzFGZmVspBYWZmpRwUZmZWykFhZmalHBRmZlbKQWFmZqUcFGZmVspBYWZmpf4/RcbFwri57CQAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "l=pseudo_exp(lamb=0.1,size=10000)\n", "plt.hist(l,bins=20,edgecolor='k')\n", "plt.xticks(fontsize=15)\n", "plt.yticks(fontsize=15)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Poisson" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "def pseudo_poisson(alpha,size=1):\n", " \"\"\"\n", " \"\"\"\n", " poisson = []\n", " for _ in range(size):\n", " t = time.perf_counter()\n", " seed = int(10**9*float(str(t-int(t))[0:]))\n", " U = pseudo_uniform(seed=seed,size=5*alpha)\n", " X,P,i = 0,1,0\n", " while P >= np.exp(-alpha):\n", " P = U[i]*P\n", " X+=1\n", " i+=1\n", " poisson.append(X)\n", " return np.array(poisson)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "l1=pseudo_poisson(alpha=5,size=10000)\n", "l2=pseudo_poisson(alpha=10,size=10000)\n", "l3=pseudo_poisson(alpha=20,size=10000)\n", "\n", "d1=dict(Counter(l1))\n", "d2=dict(Counter(l2))\n", "d3=dict(Counter(l3))\n", "\n", "k1 = [k for k in d1.keys()]\n", "v1 = [v for v in d1.values()]\n", "k2 = [k for k in d2.keys()]\n", "v2 = [v for v in d2.values()]\n", "k3 = [k for k in d3.keys()]\n", "v3 = [v for v in d3.values()]" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.scatter(k1,v1,c='blue')\n", "plt.scatter(k2,v2,c='k')\n", "plt.scatter(k3,v3,c='green')\n", "plt.legend([\"Rate parameter \"+\"$\\lambda$: \"+str(i) for i in (5,10,20)],fontsize=15)\n", "plt.xticks(fontsize=15)\n", "plt.yticks(fontsize=15)\n", "plt.show()" ] } ], "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.7.0" } }, "nbformat": 4, "nbformat_minor": 4 }