diff --git a/constants.py b/constants.py index 2fc097e..bb3e4f8 100644 --- a/constants.py +++ b/constants.py @@ -1,5 +1,6 @@ from dataclasses import dataclass import numpy as np +from math import sqrt @dataclass(frozen=True) # implements constructor among other boilerplate @@ -10,6 +11,10 @@ class State: entry: float # pi exit: float # eta + @property + def std_dev(self): + return sqrt(self.variance) + state1 = State(1, 1.44, 0.44, 0.02) state2 = State(4, 0.49, 0.56, 0.03) diff --git a/main.py b/main.py deleted file mode 100644 index 9725181..0000000 --- a/main.py +++ /dev/null @@ -1,3 +0,0 @@ -from constants import * - -print(f"state 1: {state1.mean}") diff --git a/markov.ipynb b/markov.ipynb new file mode 100644 index 0000000..ba302af --- /dev/null +++ b/markov.ipynb @@ -0,0 +1,201 @@ +{ + "metadata": { + "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.8.4-final" + }, + "orig_nbformat": 2, + "kernelspec": { + "name": "python3", + "display_name": "Python 3", + "language": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "from constants import *\n", + "from maths import gaussian\n", + "from markov import MarkovModel" + ] + }, + { + "source": [ + "State Probability Functions (1)\n", + "===================" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2020-12-11T21:18:42.713265\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.3, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "x = np.linspace(-5, 10, 120)\n", + "\n", + "state_1_y = [gaussian(i, state1.mean, state1.std_dev) for i in x]\n", + "state_2_y = [gaussian(i, state2.mean, state2.std_dev) for i in x]\n", + "\n", + "plt.plot(x, state_1_y, c='r', label=\"State 1\")\n", + "plt.plot(x, state_2_y, c='b', label=\"State 2\")\n", + "\n", + "plt.legend()\n", + "plt.title(\"State Probability Density Functions\")\n", + "\n", + "plt.ylabel(\"Probability Density\")\n", + "plt.grid(linestyle=\"--\")\n", + "\n", + "plt.show()" + ] + }, + { + "source": [ + "Output Probability Densities (2)\n", + "==========" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "3.8 -> State 1: 0.02185157424475792, State 2: 0.5471239427774459\n4.2 -> State 1: 0.009496655019831194, State 2: 0.5471239427774459\n3.4 -> State 1: 0.04499247209432338, State 2: 0.3947074079064296\n-0.4 -> State 1: 0.16833223796171576, State 2: 1.500652790137751e-09\n1.9 -> State 1: 0.2509478601290037, State 2: 0.006331212017054291\n3.0 -> State 1: 0.08289761566062391, State 2: 0.2054255182126689\n1.6 -> State 1: 0.2933877723035829, State 2: 0.001596702666402633\n1.9 -> State 1: 0.2509478601290037, State 2: 0.006331212017054291\n5.0 -> State 1: 0.0012852324969092556, State 2: 0.2054255182126689\n" + ] + } + ], + "source": [ + "for obs in observations:\n", + " print(f'{obs} -> State 1: {gaussian(obs, state1.mean, state1.std_dev)}, State 2: {gaussian(obs, state2.mean, state2.std_dev)}')" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2020-12-11T21:18:43.366595\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.3, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "x = np.linspace(-5, 10, 120)\n", + "\n", + "state_1_y = [gaussian(i, state1.mean, state1.std_dev) for i in x]\n", + "state_2_y = [gaussian(i, state2.mean, state2.std_dev) for i in x]\n", + "\n", + "plt.plot(x, state_1_y, c='r', label=\"State 1\")\n", + "plt.plot(x, state_2_y, c='b', label=\"State 2\")\n", + "\n", + "plt.legend()\n", + "plt.title(\"State Probability Density Functions\")\n", + "\n", + "plt.ylabel(\"Probability Density\")\n", + "plt.grid(linestyle=\"--\")\n", + "\n", + "state1_pd = [gaussian(i, state1.mean, state1.std_dev) for i in observations]\n", + "state2_pd = [gaussian(i, state2.mean, state2.std_dev) for i in observations]\n", + "\n", + "#############################################\n", + "# Observation Marks \n", + "#############################################\n", + "\n", + "config = {\n", + " \"s\": 65,\n", + " \"marker\": 'x'\n", + "}\n", + "\n", + "plt.scatter(observations, state1_pd, color=(0.5, 0, 0), **config)\n", + "plt.scatter(observations, state2_pd, color=(0, 0, 0.5), **config)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[0.00961469 0.30638941]\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[0.00961469, 1. , 1. , 1. , 1. ,\n", + " 1. , 1. , 1. , 1. ],\n", + " [0.30638941, 1. , 1. , 1. , 1. ,\n", + " 1. , 1. , 1. , 1. ]])" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ], + "source": [ + "model = MarkovModel(states=[state1, state2], observations=observations, state_transitions=state_transition)\n", + "model.populate_forward()\n", + "\n", + "print(model.forward[:, 0])\n", + "\n", + "model.forward\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ] +} \ No newline at end of file diff --git a/markov.py b/markov.py new file mode 100644 index 0000000..f43cc58 --- /dev/null +++ b/markov.py @@ -0,0 +1,39 @@ +from dataclasses import dataclass, field +from typing import List +import numpy as np + +from maths import gaussian + +@dataclass +class Likelihood: + forward: float # forward likelihood + backward: float # backward likelihood + +@dataclass +class TimeStep: + states: List[Likelihood] = field(default_factory=list) + +@dataclass +class Transition: + pass + +class MarkovModel: + + def __init__(self, states: list, observations: list = list(), state_transitions: list = list()): + self.observations = observations + self.state_transitions = state_transitions + + self.states = states # number of states + # self.timesteps = list() + + self.forward = np.zeros((len(states), len(observations))) + self.backward = np.zeros((len(states), len(observations))) + + def populate_forward(self): + for t, observation in enumerate(self.observations): # iterate through observations (time) + for state_number, state in enumerate(self.states): + + if t == 0: # calcualte initial + self.forward[state_number, t] = self.state_transitions[0, state_number + 1] * gaussian(observation, state.mean, state.std_dev) + else: + self.forward[state_number, t] = gaussian(observation, state.mean, state.std_dev) diff --git a/maths.py b/maths.py new file mode 100644 index 0000000..ea63aea --- /dev/null +++ b/maths.py @@ -0,0 +1,15 @@ +from math import sqrt, pi + +import numpy as np +from numpy import exp + +root_2_pi = sqrt(2. * pi) # square root is expensive, define as constant here + +def gaussian(x: float, mu: float, sd: float): + mu_pert = x - mu # mean pertubation + + coefficient = 1. / (sd * root_2_pi) + + return coefficient * exp( - (mu_pert**2) + / + (2.*sd**2)) \ No newline at end of file diff --git a/scratchpad.ipynb b/scratchpad.ipynb index 05fbc16..2fdca7a 100644 --- a/scratchpad.ipynb +++ b/scratchpad.ipynb @@ -1,13 +1,25 @@ { "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "from constants import *\n", + "from maths import gaussian\n", + "from markov import MarkovModel" + ] + }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Hidden Markov Models\n", - "====================\n", - "\n", - "Scratchpad" + "Scratchpad\n", + "====================" ] }, { @@ -27,16 +39,149 @@ } ], "source": [ - "from constants import *\n", - "\n", "state1.mean\n", "state_transition[1,1]" ] }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "0.0004984553049661319" + ] + }, + "metadata": {}, + "execution_count": 3 + } + ], + "source": [ + "gaussian(490, 5, 500)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2020-12-11T21:23:30.705548\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.3, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "x = list(range(0, 1000))\n", + "y = [gaussian(i, 500, 50) for i in x]\n", + "\n", + "plt.plot(x, y)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2020-12-11T21:23:31.076169\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.3, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "x = np.linspace(-500, 500, 120)\n", + "y = [gaussian(i, 0, 100) for i in x]\n", + "\n", + "plt.plot(x, y)\n", + "plt.show()" + ] + }, { "cell_type": "code", "execution_count": 6, "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[0. 0.44 0.56 0. ]\n[0. 0.92 0.06 0.02]\n[0. 0.04 0.93 0.03]\n[0. 0. 0. 0.]\n0.92\n(4, 4)\n" + ] + } + ], + "source": [ + "for i in state_transition:\n", + " print(i)\n", + " # for j in i:\n", + " # print(j)\n", + "\n", + "print(state_transition[1][1])\n", + "print(state_transition.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[[1 2 3]\n [4 5 6]\n [7 8 9]]\n[0.4 1. 1.6]\n[[1 2 3]\n [4 5 6]\n [7 8 9]]\n" + ] + } + ], + "source": [ + "a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])\n", + "print(a)\n", + "print(a[:, 1] / 5)\n", + "a[:, 2] / 2\n", + "print(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[[ 1 4]\n [ 9 16]]\n[ 4 16]\n" + ] + } + ], + "source": [ + "array1 = np.array([[1, 2], [3, 4]])\n", + "array2 = np.array([[1, 2], [3, 4]])\n", + "\n", + "print(array1 * array2)\n", + "print(array1[:, 1] * array2[:, 1])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, "outputs": [], "source": [] } @@ -57,7 +202,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.6-final" + "version": "3.8.4-final" } }, "nbformat": 4,