diff --git a/00-Preface.ipynb b/00-Preface.ipynb index 2968af33..8a626d0a 100644 --- a/00-Preface.ipynb +++ b/00-Preface.ipynb @@ -27,7 +27,6 @@ "metadata": {}, "outputs": [], "source": [ - "from __future__ import division, print_function\n", "%matplotlib inline" ] }, @@ -43,7 +42,7 @@ " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "from __future__ import division, print_function\n", "%matplotlib inline\n", "import sys\n", "sys.path.insert(0,'..') # allow us to format the book\n", - "sys.path.insert(0,'../code') \n", + "\n", "# use same formatting as rest of book so that the plots are\n", "# consistant with that look and feel.\n", "import book_format\n", - "book_format.load_style(directory='..')" + "book_format.set_style()" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": { - "collapsed": false, "scrolled": true }, "outputs": [ { - "ename": "ModuleNotFoundError", - "evalue": "No module named 'gif_animate'", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mnumpy\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mmatplotlib\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpyplot\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[1;32mfrom\u001b[0m \u001b[0mgif_animate\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0manimate\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 4\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mstats\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mgaussian\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mmatplotlib\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpylab\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mpylab\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;31mModuleNotFoundError\u001b[0m: No module named 'gif_animate'" - ] + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", - "from gif_animate import animate\n", + "from kf_book.gif_animate import animate\n", "from stats import gaussian\n", "import matplotlib.pylab as pylab\n", "from matplotlib import animation\n", @@ -87,15 +95,6 @@ " frames=80, interval=50, figsize=(6,4))" ] }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [] - }, { "cell_type": "markdown", "metadata": {}, @@ -120,9 +119,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.10" + "version": "3.7.4" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/animations/Kalman_Filters_Animations.ipynb b/animations/Kalman_Filters_Animations.ipynb index 32b7d901..e49fb47a 100644 --- a/animations/Kalman_Filters_Animations.ipynb +++ b/animations/Kalman_Filters_Animations.ipynb @@ -2,37 +2,51 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": false - }, + "execution_count": 2, + "metadata": {}, "outputs": [ { - "ename": "AttributeError", - "evalue": "module 'book_format' has no attribute 'load_style'", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mAttributeError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 8\u001b[0m \u001b[1;31m# consistant with that look and feel.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 9\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mbook_format\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 10\u001b[1;33m \u001b[0mbook_format\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mload_style\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdirectory\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m'..'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 11\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 12\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;31mAttributeError\u001b[0m: module 'book_format' has no attribute 'load_style'" - ] + "data": { + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "from __future__ import division, print_function\n", "%matplotlib inline\n", "import sys\n", "sys.path.insert(0,'..') # allow us to format the book\n", - "sys.path.insert(0,'../code') \n", "\n", "# use same formatting as rest of book so that the plots are\n", "# consistant with that look and feel.\n", "import book_format\n", - "book_format.load_style(directory='..')\n", - "\n", - "\n", - "\n", + "book_format.set_style()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ "def update(mu1, var1, mu2, var2):\n", " mean = (var1*mu2 + var2*mu1) / (var1+var2)\n", " variance = 1 / (1/var1 + 1/var2)\n", @@ -51,10 +65,8 @@ }, { "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, + "execution_count": 4, + "metadata": {}, "outputs": [], "source": [ "def plot_3d_covariance(ax, mean, cov):\n", @@ -111,37 +123,97 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(25, 20.4)" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "voltage" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiEAAAD4CAYAAAA6uTZJAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/d3fzzAAAACXBIWXMAAAsTAAALEwEAmpwYAAAyGElEQVR4nO3dd1gVZ+L28e9Db1IFRVERu6KIYs2ml9U00zSaXnaNyaZtqluS3bibTd/03rsxxmw0Mcmmm8QYxYIdRSwgSBHpHZ73D9i8/ggqKjDnwP25Li45c+bIzVwD52bmmWeMtRYRERGR9ubhdAARERHpnFRCRERExBEqISIiIuIIlRARERFxhEqIiIiIOMLL6QDN6dq1q42NjXU6hoiIiLSClStX5ltrI5sud8kSEhsbS3JystMxREREpBUYY3Y2t1ynY0RERMQRKiEiIiLiCJUQERERcYRKiIiIiDhCJUREREQcoRIiIiIijlAJEREREUe45DwhItJxWGvJKa4ic185WUWVFJRWUVFTT2VNHd6eBj9vT4L9vIkO9aNHqD+9wwPw9tTfRyKdgUqIiLSqmrp6Vu3cx/db81m7u4gNu4vYW1bd4tf7eHowsHsQw3uG8pv+XTmmfwShAT5tmFhEnKISIiJHraaunm9T8/jP6t0s2ZJHSVUtnh6GQd26cPKQKIb1CKFPRAA9Qv3pGuSLv7cnvl4e1NTXU1lTT3FFDVmFFewurCB1Twkbs4v5OCWLd5fvwhhI7BXKlJE9OXNENBFBvk5/uyLSSoy11ukMv5KUlGQ1bbuI68soKOf1pTv4cPVu9pZV0zXIh1OGdOOEQZFM7N+VYD/vI/6/a+vqScksZMmWfP67MYdN2cV4ehhOHBTJVcf0ZUK/CIwxrfjdiEhbMcastNYm/Wq5SoiIHK4NWUU8/106n6zLxgCnDu3GBaNjOG5gZJuN59i8p5gPV+/mg5WZ5JdWMzQ6mN8f15ezE3ri6aEyIuLKVEJE5Kjt3FvGg5+n8snabIJ8vbhoXG+uPCaW6BD/dstQWVPHR2t289L329maW8rAbkHc/tvBnDIkSkdGRFyUSoiIHLGiihoe+3ILby3biZeHB78/ti9XHxtHiP+Rn245WtZaPl2/h4c/TyU9v4ykPmHMmRLP0B7BjmUSkeaphIjIYbPW8sm6bO5ZtJG9pVVcOKY3fzxlAFHBfk5H+0VtXT3zkjN55L+pFFbUcOXEWG4+dSBBvhp3L+IqDlRC9FMqIs3KKa7kTwvW8fXmXOJ7BvPK5WMYHhPidKxf8fL04KJxvTl9eHce/DyVl37YzuJ12Tw0NYFj+nd1Op6IHISOhIjIr3y2fg9/WrCWipo6bjttEFdMjMXLTSYQW7lzH7fPTyE9r4yrjunLHZMG4eft6XQskU5NR0JE5JAqa+q4Z9EG3l2eQXzPYB67MJH+UUFOxzoso/uE8ckNx/LAZ5t55cft/JCWxzMXj3a770OkM3CPP21EpM1lFJRz3jNLmbsig1nH92PBtce47Ru3v48nfz97GK9fNZa9pdVMeeoHPl2X7XQsEWlCJURE+H5rHmc99QMZ+8p55fIxzJ48GB8v9//1cPzASD6+8TcM6NaFa99exX2LN1FbV+90LBFp5P6/ZUTkiFlreXFJOpe/spxuXfxYdP1vOHFwlNOxWlV0iD/vXTOeS8b35vkl6Vz52gpKKmucjiUiqISIdFp19Za/LdzAvYs3MSm+Owuum0hs10CnY7UJXy9P/nnOcO4/bzhLt+1l6nM/kV1U4XQskU5PJUSkE6qormPWWyt546edzDwujqdmjCKwE8yrMX1sb169YgyZ+yo45+kf2ZBV5HQkkU5NJUSkk9lXVs2MF5fx5aYc7jl7GH8+fQgenejeK8cNjGT+tRPwNIZpz/3ET9v2Oh1JpNNqUQkxxkwyxqQaY9KMMbObed4YY55ofH6tMWbUfs/90RizwRiz3hjzrjHGdaZaFOlk8kqqmP7CMjZmF/PsxaO5fGKs05EcMbh7MB/+4Rh6hPpzxavL+SY11+lIIp3SIUuIMcYTeBqYDAwFZhhjhjZZbTIwoPFjJvBs42t7AjcCSdbaeMATmN5q6UWkxbKLKrjw+Z/YVVDOq1eMYVJ8d6cjOapbsB/vXTOBAd2CmPlGMot1Ca9Iu2vJkZCxQJq1Nt1aWw3MBaY0WWcK8IZtsAwINcZENz7nBfgbY7yAACCrlbKLSAtlFJQz7fmfyC2p4o2rx2o680bhgT688/vxJMSEcv07q/hwdabTkUQ6lZaUkJ5Axn6PMxuXHXIda+1u4GFgF5ANFFlr/9vcFzHGzDTGJBtjkvPy8lqaX0QOYXdhBdNfWEZxRS1v/24cY2LDnY7kUoL9vHnj6rGMj4vg1nkpLErR30ki7aUlJaS5EWtNbzjT7DrGmDAajpL0BXoAgcaYS5r7ItbaF6y1SdbapMjIyBbEEpFDySmu5KIXl1FcWcPbvxtHQq9QpyO5pAAfL166PImkPuHc/N4aPlu/x+lIIp1CS0pIJtBrv8cx/PqUyoHWOQXYbq3Ns9bWAAuAiUceV0Raam9pFRe/9DP5JVW8ftVY4nu63h1wXUmAjxevXDmGETEh3PDuKr7enON0JJEOryUlZAUwwBjT1xjjQ8PA0oVN1lkIXNZ4lcx4Gk67ZNNwGma8MSbAGGOAk4FNrZhfRJpRVF7DpS8vJ6OgnJevGMOo3mFOR3ILQb5evHblWAZ3D2bWW6v4YWu+05FEOrRDlhBrbS1wPfA5DQVinrV2gzFmljFmVuNqi4F0IA14Ebiu8bU/A/OBVcC6xq/3Qmt/EyLy/1VU13Hla8tJyy3lhcuSGB8X4XQktxLi782bV48lrmsg17yZzLpMTWgm0laMtU2HdzgvKSnJJicnOx1DxO3U1VtmvbWSLzfl8OzFo5gUH33oF0mzcoorOe+ZpVTV1vHBtRPpE9Exp7QXaQ/GmJXW2qSmyzVjqkgHYa3lbwvX88XGHP5+1jAVkKPULdiP168aS2295bJXlpNfWuV0JJEORyVEpIN45tttvLVsF9ccH9dpZ0Jtbf2jgnj58jHkFFdy5asrKKuqdTqSSIeiEiLSAXywMpOHPk/lnJE9uPO3g52O06GM7hPG0xeNYmN2Mde/s4q6etc7hS3irlRCRNzc0rR87vxgLRP7RfDgBQmd6mZ07eXkId2YM2UY36Tmce8nusBPpLV0/Ht3i3RgO/LLuPbtVfTtGshzl47Gx0t/V7SVi8f1IS23lFd+3E7/qCAuGtfb6Ugibk+/sUTcVHFlDVe/vgIPAy9fPoZgP2+nI3V4fz1jKCcMiuTuj9azNE1ziIgcLZUQETdUV2+54Z3V7NxbzjMXj6Z3RIDTkToFTw/DkzMSiYsMZNZbK0nPK3U6kohbUwkRcUP3Ld7Ed1vymDMlngn9NBlZe+ri583Ll4/By9ODq19Ppqi8xulIIm5LJUTEzcxLzuClH7Zz+YQ+GpfgkF7hAbxw6Wgy95Vz83urqdcVMyJHRCVExI2kZBTy1w/Xc0z/CO46c6jTcTq1pNhw7j6r4YqZx7/a6nQcEbekEiLiJgrKqrnu7VVEdvHlyRmj8PLUj6/TLhnXmwtGx/D4V1v5apPuuityuPRbTMQN1NVbbpq7mrySKp69ZBThgT5ORxLAGMM/z4knvmcwN7+3hh35ZU5HEnErKiEibuCxL7fw/dZ85kwZxoiYUKfjyH78vD157pLReHkYrnlzJeXVmtpdpKVUQkRc3Febcnjy6zSmJcUwfawGorqimLAAnpiRyNbcEu6YvxZXvDu5iCtSCRFxYTv3lnHze2uI7xnMnCnxTseRgzh2QCS3/XYQH6/N5o2fdjodR8QtqISIuKjKmjqufWsVnh6GZy8ejZ+3p9OR5BBmHdePkwZHce8nm1i/u8jpOCIuTyVExEX9a/EmNmYX8+9pCfQK14yo7sDDw/DI1AQignz4wzurKKnURGYiB6MSIuKCPl3XcEh/5nFxnDS4m9Nx5DCEBfrw5IxEMvdVMHvBOo0PETkIlRARF5NRUM4dH6wloVcot502yOk4cgSSYsO57bRBfLI2m7d+3uV0HBGXpRIi4kKqa+u5/t3VADw1IxEfL/2IuqtrjovjhEGR/OPjjWzI0vgQkeboN5yIC3n4v6mkZBTywPkjNA7Ezf1vfEhYgDfXv7Oa0irNHyLSlEqIiIv4ZnMuLyxJ55LxvTl9eLTTcaQVRAT58sT0RHbuLeMvH65zOo6Iy1EJEXEBe4oqufX9FAZ378Jfz9CN6TqScXER3HzKQD5ak8WHqzOdjiPiUlRCRBxWX2+59f01VFTX8fTFozQfSAf0hxP7MyY2jLv+s4GMgnKn44i4DJUQEYe98uN2fkzby91nDaVfZJDTcaQNeHoYHr1wJAa4ae5qauvqnY4k4hJUQkQctDGrmAc/S+XUod2YPqaX03GkDcWEBfDPc+NZtauQJ79OczqOiEtQCRFxSGVNHTe/t5qQAG8eOH8ExhinI0kbmzKyJ+cl9uTJr7eycmeB03FEHKcSIuKQ+z/dzJacUh6emkB4oI/TcaSd3DNlGDFhAdw0dw3FmtZdOjmVEBEHfLclj9eW7uCKibEcPzDS6TjSjrr4efPY9JFkF1Vy93/WOx1HxFEqISLtbG9pFbe9n8LAbkHMnjzY6TjigFG9w7jp5AH8Z00W/1m92+k4Io5RCRFpR9ZaZi9YR1F5DY9PT9TluJ3YdSf0I6lPGHd9tJ6swgqn44g4QiVEpB3NXZHBFxtzuGPSIIZEBzsdRxzk5enBv6eNpK7ecvv8FOrrdbdd6XxUQkTayfb8MuYs2shv+nflqmP6Oh1HXEDviADuOnMoP6bt5Y2fdjgdR6TdqYSItIO6esst89bg4+XBw1MT8PDQ5bjSYPqYXpw4KJL7Pt1MWm6p03FE2pVKiEg7eH7JNlbvKmTOlGF0D/FzOo64EGMMD5w/ggAfT26dt0azqUqnohIi0sY27ynm0S+2cMbwaM5O6OF0HHFBUcF+3HvucFIyi3jm221OxxFpNy0qIcaYScaYVGNMmjFmdjPPG2PME43PrzXGjNrvuVBjzHxjzGZjzCZjzITW/AZEXFl1bT23vJdCiL83/zgnXrOiygGdPjyac0b24ImvtrIus8jpOCLt4pAlxBjjCTwNTAaGAjOMMU3vNT4ZGND4MRN4dr/nHgc+s9YOBhKATa2QW8QtPPX1VjZmF3PfeSM0K6oc0j1nx9M1yJc/zltDZU2d03FE2lxLjoSMBdKstenW2mpgLjClyTpTgDdsg2VAqDEm2hgTDBwHvAxgra221ha2XnwR15WSUcjT327j/FExnDq0m9NxxA2EBHjz0NQRpOWW8tDnqU7HEWlzLSkhPYGM/R5nNi5ryTpxQB7wqjFmtTHmJWNMYHNfxBgz0xiTbIxJzsvLa/E3IOKKKmvquGXeGqK6+HL3WU0PHIoc2LEDIrlsQh9e/mE7S7flOx1HpE21pIQ0dxK76aw6B1rHCxgFPGutTQTKgF+NKQGw1r5grU2y1iZFRupeGuLeHv48lW15ZTx4wQhC/L2djiNuZvbkwfTtGsjt76+lRDe5kw6sJSUkE+i13+MYIKuF62QCmdbanxuXz6ehlIh0WD+n7+XlH7dz6fg+HDtAhVoOX4CPF49MSyC7qII5izY6HUekzbSkhKwABhhj+hpjfIDpwMIm6ywELmu8SmY8UGStzbbW7gEyjDGDGtc7GdBPlHRYZVW13DY/hd7hAbo5nRyVUb3DuO6E/ry/MpMvN+Y4HUekTRyyhFhra4Hrgc9puLJlnrV2gzFmljFmVuNqi4F0IA14Ebhuv//iBuBtY8xaYCTwr9aLL+Ja7l28icx9FTw8NYFAXy+n44ibu/HkAQyJDmb2gnUUlFU7HUek1RlrXe+mSUlJSTY5OdnpGCKH5bsteVz+ynJmHhfHn08f4nQc6SA2ZRdz9lM/cNrQ7jx1UaLmmhG3ZIxZaa1NarpcM6aKtIKi8hrunL+W/lFB3HLqQKfjSAcyJDqYP546kE/WZbNobbbTcURalUqISCu4Z9EG8kqr+Pe0BPy8PZ2OIx3MzGPjSOwdyl3/WU9OcaXTcURajUqIyFH6bP0eFqzezfUn9mdETKjTcaQD8vL04JGpCVTV1jH7g7W44ml0kSOhEiJyFPJLq/jLh+sY1iOY60/q73Qc6cDiIoOYPWkw36TmMS8549AvEHEDKiEiR8hay18/XE9JZS3/njYSb0/9OEnbumxCLBPiIpizaCMZBeVOxxE5avqtKXKEFqZk8dmGPfzx1IEM6t7F6TjSCXh4GB6aOgJjDLfPT6G+XqdlxL2phIgcgZziSu7+aAOJvUOZeVyc03GkE4kJC+DuM4eyLL2A15bucDqOyFFRCRE5TNZa/rRgHZU1dTw8NQFPD83bIO1ralIMJw+O4oHPNrMtr9TpOCJHTCVE5DDNX5nJ15tzuWPSYPpFBjkdRzohYwz3nTccfx9PbpmXQm1dvdORRI6ISojIYcgqbLih2NjYcK6cGOt0HOnEooL9+Oc58aRkFPL8knSn44gcEZUQkRay1nLnB2uprbc8NHUEHjoNIw47c0QPzhwRzWNfbmFjVrHTcUQOm0qISAu9uzyD77fm8+fTB9MnItDpOCIA/GNKPKEBPtwybw1VtXVOxxE5LCohIi2QUVDOvZ9s5Jj+EVw8ro/TcUR+ERbowwPnD2fznhIe/3Kr03FEDotKiMgh1Ndbbp+fgjGGB87XaRhxPScN7saFSb147rttrNq1z+k4Ii2mEiJyCG8u28my9AL+esYQYsICnI4j0qy/njmE6BB/bpuXQkW1TsuIe1AJETmIHfll3P/pZk4YFMmFY3o5HUfkgLr4efPQ1BGk55fxwGebnY4j0iIqISIHUFdvue39FLw9Dfef1zBVtogrm9ivK1dMjOW1pTtYmpbvdByRQ1IJETmAV3/cTvLOffz97GF0D/FzOo5Ii9w5aTBxXQO5ff5aSiprnI4jclAqISLNSMst5cHPUzllSDfOTezpdByRFvP38eThaQlkF1Xwj483Oh1H5KBUQkSaqK2r59b3Uwjw8eRf58XrNIy4nVG9w5h1fD/mJWfy1aYcp+OIHJBKiEgTzy9JJyWjkH9MiSeqi07DiHu66ZQBDO7ehdkL1rGvrNrpOCLNUgkR2c/mPcU89uUWzhgezVkJPZyOI3LEfL08+fe0kRSWV3PXR+udjiPSLJUQkUY1dfXcOi+FYD9v5kwZ5nQckaM2tEcwN58ykI/XZrMoJcvpOCK/ohIi0uipr9PYkFXMvecOJyLI1+k4Iq3imuPiGNkrlLs+Wk9ucaXTcUT+D5UQEWBNRiFPfZPGuYk9mRTf3ek4Iq3Gy9ODR6YlUFFdx+wF67DWOh1J5BcqIdLpVVTXcct7a+jWxZd7dBpGOqB+kUHcOWkwX2/O5f3kTKfjiPxCJUQ6vfs/3UR6fhkPT00g2M/b6TgibeKKibGMjwtnzscbySgodzqOCKASIp3cki15vP7TTq46pi8T+3d1Oo5Im/HwMDx0QQIAd8xfS329TsuI81RCpNMqLK/m9vkp9I8K4o5Jg5yOI9LmeoUHcNeZQ/gpfS+v/7TD6TgiKiHSed310Qb2llbz2IUj8fP2dDqOSLuYltSLkwZHcf+nm9mWV+p0HOnkVEKkU1qYksWilCxuPmUA8T1DnI4j0m6MMdx/3nD8vD25dV4KtXX1TkeSTkwlRDqdPUWV/PXDdST2DmXW8f2cjiPS7qKC/fjHOfGsySjk+SXpTseRTkwlRDqV+nrL7fNTqKmzPDptJF6e+hGQzunshB6cMSKax77cwsasYqfjSCel38DSqby5bCffb83nL2cMIbZroNNxRBz1jynxhPj7cMu8NVTX6rSMtD+VEOk0tuWVct+nmzhhUCQXj+vtdBwRx4UH+nD/ecPZvKeEJ77a6nQc6YRUQqRTqK6t56a5q/Hz9uTB80dgjHE6kohLOGVoN6aOjuGZb9NYvWuf03Gkk2lRCTHGTDLGpBpj0owxs5t53hhjnmh8fq0xZlST5z2NMauNMR+3VnCRw/HIf1NZv7uYB84fQVSwn9NxRFzKXWcNJTrEn1vnpVBRXed0HOlEDllCjDGewNPAZGAoMMMYM7TJapOBAY0fM4Fnmzx/E7DpqNOKHIEftubz/JJ0LhrXm98O083pRJoK9vPmoQtGkJ5fxr2LNzodRzqRlhwJGQukWWvTrbXVwFxgSpN1pgBv2AbLgFBjTDSAMSYGOAN4qRVzi7RIQVk1t8xbQ7/IQO46o2l3FpH/mdi/K78/ti9vLdvF5xv2OB1HOomWlJCeQMZ+jzMbl7V0nceAO4CDDr02xsw0xiQbY5Lz8vJaEEvk4Ky13PnBWgrLa3hiRiL+PpoVVeRgbv/tYIb3DOHOD9aSXVThdBzpBFpSQpobwdf0zkfNrmOMORPItdauPNQXsda+YK1NstYmRUZGtiCWyMG9/fMuvtiYwx2TBjGsh2ZFFTkUHy8PnpiRSHVtPTfPXUOdbnInbawlJSQT6LXf4xggq4XrHAOcbYzZQcNpnJOMMW8dcVqRFtqaU8I/P9nIcQMjueqYvk7HEXEbfbsGMmdKPD9vL+DZb9OcjiMdXEtKyApggDGmrzHGB5gOLGyyzkLgssarZMYDRdbabGvtn6y1Mdba2MbXfW2tvaQ1vwGRpqpq67hx7hoCfbx4eOoIPDx0Oa7I4Th/VE/OTujBo19uZeVOXbYrbeeQJcRaWwtcD3xOwxUu86y1G4wxs4wxsxpXWwykA2nAi8B1bZRX5JAe/CyVTdnFPDR1BFFddDmuyOEyxvDPc+PpEerHje+upqiixulI0kEZa13vnF9SUpJNTk52Ooa4oa8353DVa8lcPqEP90yJdzqOiFtbtWsfU5/7icnx3XlyRqIm+ZMjZoxZaa1NarpcM6ZKh5FVWMEt81IYGh3Mn04f4nQcEbc3qncYt5w6kI/XZvP+ykyn40gHpBIiHUJNXT03vLuamtp6nr54FH7euhxXpDXMOr4fE+Ii+NtHG0jLLXU6jnQwKiHSITzy3y2s3LmP+84fQV/dHVek1Xh6GB69cCT+Pp5c/84qTesurUolRNzeN6m5PPfdNmaM7c3ZCT2cjiPS4XQP8ePRC0eSmlPC3xaudzqOdCAqIeLWsosquHVeCoO7d+FvZ2ladpG2cvzASG44sT/zkjN5Pznj0C8QaQGVEHFbtXX13Pjuaipr6jQORKQd3HTKQCbERXDXR+vZvKfY6TjSAaiEiNt69MstrNixj3+dO5x+kUFOxxHp8Dw9DI/PGEkXP2+ue3sVpVW1TkcSN6cSIm7pm825PPPtNi5M6sU5iU3vpygibSWqix9PTE9kR34Zf1qwDleca0rch0qIuJ2de8u4ae5qhnQP5p4pw5yOI9LpTOgXwa2nDWJRShZv/7zL6TjixlRCxK1UVNcx661VGGN4/tLRGgci4pBrj+/HCYMimbNoI2szC52OI25KJUTchrWWv3y4js17inls+kh6hQc4HUmk0/LwMDw6bSSRXXy59q1V7C2tcjqSuCGVEHEbby3byYLVu7n55IGcOCjK6TginV5YoA/PXTKavNIqrn9nNbV19U5HEjejEiJuYeXOfcz5eCMnDY7ihpP6Ox1HRBoNjwnhvnOH81P6Xu7/dLPTccTNeDkdQORQ8kqquO7tlUSH+PPotJF4eOhOniKu5PzRMazbXcRLP2xneEwIU0bqijVpGR0JEZdWXVvPH95eRWF5Dc9dMpqQAG+nI4lIM/5yxhDGxoZz5wdr2ZBV5HQccRMqIeKyrLXc/dF6lu8o4MELRjC0R7DTkUTkALw9PXj64lGE+vtwzZsr2VdW7XQkcQMqIeKyXl+6g7krMvjDif10eFfEDUR28eW5S0eTW1zFDe9qoKocmkqIuKQftubzj082cerQbtx66iCn44hIC43sFco/z43nh7R85ny80ek44uI0MFVczvb8Mq57eyX9I4N49EINRBVxN9OSerE1p4QXv99O/6ggLpsQ63QkcVEqIeJSiitr+N3rK/Dy9OCly5MI8tUuKuKOZk8ewvb8Mu5ZtJHYiECOGxjpdCRxQTodIy6jtq6eG99dzc695Txz8SjNiCrixjw9DI9PT2RAVBB/eHsVW3NKnI4kLkglRFyCtZZ7Fm3k29Q85kyJZ3xchNORROQoBfp68fIVY/D19uTq15Mp0BUz0oRKiLiEl77fzpvLdnLNcXFcNK6303FEpJX0DPXnxctGs6e4kllvrqSqts7pSOJCVELEcYvXZXPv4k2cMTyaOycNdjqOiLSyxN5hPDw1geU7Cpj9wTqstU5HEhehUX/iqJU7C7j5vTWM7hPGI9MSdCWMSAd1dkIPMgrKeejzVLqH+OkPDgFUQsRB2/PL+N3ryY2Ha5Pw8/Z0OpKItKHrTuhHdlEFz367je7Bflw+MdbpSOIwlRBxRH5pFVe+uhxjDK9eMYbwQB+nI4lIGzPGcM/Z8eQWV/H3RRvoFuzLpPhop2OJgzQmRNpdSWUNV7y6nD3Flbx4WRKxXQOdjiQi7cTTw/DEjEQSe4Vy49w1rNhR4HQkcZBKiLSrypo6fv9GMpuzS3j24tGM7hPmdCQRaWd+3p68fPkYYsL8ufq1FWzRHCKdlkqItJvaunpueHc1y9ILeGRaAicOjnI6kog4JCzQh9evHIuvtyeXvvwzu/aWOx1JHKASIu3CWsvsBev4YmMOfz9rqO6KKyL0Cg/gravHUVVbz8UvL2NPUaXTkaSdqYRIm7PWct+nm5m/MpObTh7AFcf0dTqSiLiIQd278PqVY9lXVsMlL//M3tIqpyNJO1IJkTb32JdbeWFJOpdN6MPNpwxwOo6IuJiEXqG8fHkSGQXlXPbKcooqapyOJO1EJUTa1JNfbeXxr7ZywegY/n7WMIzRZGQi8mvj4iJ4/tLRbMkp4arXVlBeXet0JGkHKiHSZp75No1HvtjCeYk9eeD8EZoNVUQO6oRBUTw+PZHVu/apiHQSKiHSJl5cks6Dn6UyZWQPHpqagKcKiIi0wOnDo3n0wpEs317AFa+uoKxKRaQja1EJMcZMMsakGmPSjDGzm3neGGOeaHx+rTFmVOPyXsaYb4wxm4wxG4wxN7X2NyCu55UftjfckG5ENI+ogIjIYZoysiePTU8keUcBV766glIVkQ7rkCXEGOMJPA1MBoYCM4wxQ5usNhkY0PgxE3i2cXktcKu1dggwHvhDM6+VDuTFJenM+Xgjk4Z157ELR+LlqYNtInL4zk7owRMzElm5ax9XvLJcRaSDask7xFggzVqbbq2tBuYCU5qsMwV4wzZYBoQaY6KttdnW2lUA1toSYBOgCSI6IGstj325peEIyPBonpiRiLcKiIgchTNH9ODJGYmszijkspd/pqRSV810NC15l+gJZOz3OJNfF4lDrmOMiQUSgZ+b+yLGmJnGmGRjTHJeXl4LYomr+N88II992XAVzBMzEvHxUgERkaN3+vBonpqRyNrMIi5+SfOIdDQteado7oS+PZx1jDFBwAfAzdba4ua+iLX2BWttkrU2KTIysgWxxBXU11vu+mj9L/OAPHj+CI0BEZFWNXl4NM9fOprUPSVMff4ndhdWOB1JWklLSkgm0Gu/xzFAVkvXMcZ401BA3rbWLjjyqOJqqmvrufX9FN5atotrjo/jnrOH6TJcEWkTJw/pxptXjyOvuIoLnl1KWm6p05GkFbSkhKwABhhj+hpjfIDpwMIm6ywELmu8SmY8UGStzTYNM1O9DGyy1v67VZOLo0qrarn69RV8uHo3t502kNmTBmsiMhFpU2P7hjP3mvHU1FmmPreUlIxCpyPJUTpkCbHW1gLXA5/TMLB0nrV2gzFmljFmVuNqi4F0IA14EbiucfkxwKXAScaYNY0fp7f2NyHtK7ekkguf/4ml2/by4AUjuP6kASogItIuhvUIYf6sCQT6enHRi8v4YWu+05HkKBhrmw7vcF5SUpJNTk52OoY0Y1teKZe/spy9pdU8c8koThwU5XQkEemEcoorufyV5aTllvKvc4czbUyvQ79IHGOMWWmtTWq6XJcwSIut2FHABc8upaK6jrkzx6uAiIhjugX7MW/WBCb0i+COD9by4Gebqa93vT+q5eBUQqRF5iVncNGLywgL8OGDayeS0CvU6Ugi0skF+3nzyhVjuGhcb575dhs3zF1NZU2d07HkMHg5HUBcW1295f5PN/Hi99v5Tf+uPH3RKEICvJ2OJSICgLenB/eeE09sRAD3fbqZ7MIKnrt0NFFd/JyOJi2gIyFyQCWVNfz+jWRe/H47l03ow6tXjlEBERGXY4xh5nH9ePbiUWzKLuGsJ39g1a59TseSFlAJkWal5ZZw7jNL+W5LHv84J545U+I1DbuIuLRJ8dEsuG4ivl6eTH9+GXOX73I6khyC3lXkVz5em8XZT/3IvrJq3rxqLJeO7+N0JBGRFhkSHczC649hXFw4sxes4y8frqO6tt7pWHIAKiHyi+raeu5ZtIHr31nNkOhgPrnxWCb27+p0LBGRwxIa4MNrV47l2hP68fbPu5j6/E9kFJQ7HUuaoRIiAOwurGDGi8t49ccdXHVMX+bOHE/3EA3sEhH35OlhuHPSYJ67ZBTpeaWc/sT3fLou2+lY0oRKiPDx2iwmP7aEzdnFPHVRInefNVTjP0SkQ5gUH83iG48lLjKIa99exV//s06X8boQvdN0YqVVtdz2fgrXv7OauMggFt90LGeO6OF0LBGRVtUrPID3r5nAzOPieGvZLs55+kdS95Q4HUtQCem01mQUcsYT37NgVSY3ntSf92dNoE9EoNOxRETahI+XB38+fQivXJFEXkkVZz35A899t406zbLqKJWQTqaypo77Pt3Eec/8SG2dZe7MCdxy2iCdfhGRTuGkwd34/I/HceLgSO7/dDMXPv8TO/eWOR2r09IN7DqRlTsLuH3+WtLzypgxthd/On0IwX6afExEOh9rLf9Zs5u7P9pAbZ1l9uTBXDK+D54euiN4WzjQDew0bXsnUFZVyyP/3cKrS7fTI8Sft64ex28G6NJbEem8jDGcmxjD+LgI7vxgHX9buIEPV+/mvvOGMyQ62Ol4nYaOhHRg1lo+W7+HOR9vJLuokssm9OGOSYMJ8lX3FBH5H2stC1OymLNoI4UVNfzu2L7cfPJA/H08nY7WYehISCezPb+Muz9az/db8xkSHcxTFyUyuk+407FERFyOMYYpI3ty/MBI7lu8mee/S+eTtdn89Yyh/HZYN4zRKZq2oiMhHUxJZQ3PfbeNF5dsx9fLg1tOG8il4/vgpYGnIiIt8nP6Xu76aD1bckqZEBfB3WcN1Smao3SgIyEqIR1ETV09c1dk8NgXW9hbVs05I3vw59OHEBWsWU9FRA5XbV097y7fxSNfbKG4ooYZY3tzy6kDiQjydTqaW1IJ6aCstXy5KZf7P93EtrwyxvYN5y+nDyGhV6jT0URE3F5heTWPfbmVN5ftxM/Lg6uPjeN3x/bVlYWHSSWkg7HWsmRrPo99uYXVuwqJiwxk9qTBnDpU5y9FRFpbWm4pj36xhU/WZRMa4M21x/fjsgmxGrzaQiohHUTT8tEz1J8/nNifqUkxmnBMRKSNrd9dxMP/TeXb1Dyiuvhy3Qn9uHBMb5WRQ1AJcXP19ZavNufy7LdprNqvfFwwOgYfL5UPEZH2tHx7AQ9/nsryHQWEB/pw5cRYLpsQS0iATtM0RyXETVVU1/HBqkxe+WE76fllKh8iIi5kxY4Cnv12G19vziXQx5OLxvXmqt/0JTrE3+loLkUlxM3kFFfy9rKdvLlsJ/vKa0iICeF3x8YxOb67LrcVEXExm7KLef67bSxamw3Ab4d149LxsYyPC9c4PVRC3EJdvWXJ1jze/XkXX23Opd5aTh7cjd8f25exfbUji4i4uoyCct5atpO5KzIoqqhhYLcgLp0Qy7mJPTv1bNUqIS4sq7CCBasyeXd5BrsLK4gI9OGCpBhmjOlNbNdAp+OJiMhhqqiuY1FKFm8s28H63cUE+HgyOT6aC0bHMK5vOB6d7EZ5KiEupqi8hsXrs/nP6t0s31GAtTCxXwQzxvbmtGHd8PXSSGsREXdnrWV1RiHvJ2ewKCWb0qpaYsL8OX9UDOeN6kmfiM7xh6ZKiAsorarl29RcFq7J4tvUPKrr6omLDOSckT05O6GHjnqIiHRgFdV1/HfjHuavzOSHtHyshWE9gjl9eDST47sTFxnkdMQ2oxLikNziSr7YlMMXG3NYmraX6rp6orr4clZCD84Z2ZP4nsEa6yEi0slkFVaweF02i9dls2pXIQCDu3fh9OHRnDwkiqHRHeu9QSWkndTW1ZOSWcj3W/P5NjWPNRmFAPSJCODUId04bVh3RvcJw7OTnQ8UEZHmZRVW8Nn6PSxel03yzn0ARHXx5YRBkZw4KIpjBnR1+2niVULaiLWW9PwyfkzL5/ut+SzbtpeSqlqMgRExoZw6JIrThnVnQFRQh2q1IiLS+nJLKvkuNY9vt+SxZEseJZW1eHkYEnuHMj4ugnF9IxjVJ5QAH/e60kYlpJVU1daxfncRyTv2kbxzHyt37qOgrBqAXuH+/KZ/JMcO6MrEfhGEBvg4nFZERNxVbV09q3YV8k1qLkvT8lmfVUxdvcXLw5DQK5RxfcMZ0zechJhQwgNd+/1GJeQI1NTVk5ZbyvrdRWzIKmbd7iLW7S6iurYegL5dAxndJ4ykPmFM6BfRaUY5i4hI+yuprCF55z5+Ti9gWfpe1u0uoq6+4T28T0QAI2JCSYgJYWSvUIb1CHGp+9mohByEtZa8kiq25paSlltKak4JG3YXsWlPyS+FI8DHk6HRwST2DmV0n3BG9wkjsotvu2UUERHZX1lVLSmZhazNLCIlo5CUjEKyiioBMAZiIwIZ1K0Lg6O7MLh7FwZ1D6Z3eIAjYxIPVELc66TSUSqprCGjoIKMfeXs3FvG1pxS0vIaikdJZe0v6wX7eRHfM4QrJsYyrEcw8T1DiI0I1GBSERFxGYG+Xkzs15WJ/br+siy3uJI1GYVsyComdU8JqTklfL5xD/873uDn7UFsRCB9uzZ8xP7v34hAugb5tPvYxQ5zJKS2rp69ZdXkFFeSU1zFnuJKMveVk9lYOjIKytlXXvN/XtM1yJf+UYH0jwpiQFQX+kcF0T8qiKguvhpEKiIiHUJFdR1bc0vYnN1QSrbnl7Ejv4xdBeXU1v//DhDk60VMmD/RIX70CPVv/PCjR0jD592C/Y74xqlHdSTEGDMJeBzwBF6y1t7f5HnT+PzpQDlwhbV2VUteeyDWWkqqatlXVs2+8hr2lVf/8nlheTX5pdXkFleSU9JQOvaWVlHfpE/5eHrQM8yfmDB/hg+Ppld4AL3CAugV7k/v8AANHBURkQ7P38eTETGhjIgJ/T/La+vq2V1YQXpjKdmRX8buwkqyiypYk1H4qz/cjYGwAB+6BvnQNciXrkG+RDR+HhnkS9cuPoQH+hIW4E2ovw9d/LwOOT39IUuIMcYTeBo4FcgEVhhjFlprN+632mRgQOPHOOBZYFwLX/srm7KLGfCXT/9PQ2u6IcIDfOgW7Ee3YF/ie4QQ1cWXqGC/X5Z1C/YjMsi3083PLyIi0hJenh70iQhsuKhi0K+fr6iuI6uogqzCCrILK9ldWEFeacMf/fml1aRkFpJfUkVZdV2z/78xEOLvTaj/gec4acmRkLFAmrU2veE/NXOBKcD+RWIK8IZtOLezzBgTaoyJBmJb8NpfCfb3ZuZxcYQF+BAW6NPQqgIa/g0P9CHYz1vlQkREpA35+3jSLzKIfoeYTr6iuo780iryS6vYW1pNUUUNhRU1FJVXN/xbUcN3B3htS0pITyBjv8eZNBztONQ6PVv42l9/wVB/7pg0uAXRRERExEn+Pp4Nwx3CAw64zhMzml/ekhEmzR1yaHqe5EDrtOS1Df+BMTONMcnGmOS8vLwWxBIRERF31pISkgn02u9xDJDVwnVa8loArLUvWGuTrLVJkZGRLYglIiIi7qwlJWQFMMAY09cY4wNMBxY2WWchcJlpMB4ostZmt/C1IiIi0gkdckyItbbWGHM98DkNl9m+Yq3dYIyZ1fj8c8BiGi7PTaPhEt0rD/baNvlORERExK10mMnKRERExDUdaLKyI5v6TEREROQoqYSIiIiII1RCRERExBEuOSbEGJMH7HQ6h4vqCuQ7HaIT0HZuH9rO7UPbuX1oOx9YH2vtr+bfcMkSIgdmjElubnCPtC5t5/ah7dw+tJ3bh7bz4dPpGBEREXGESoiIiIg4QiXE/bzgdIBOQtu5fWg7tw9t5/ah7XyYNCZEREREHKEjISIiIuIIlRARERFxhEqICzPGvGKMyTXGrN9v2d+NMbuNMWsaP053MqO7M8b0MsZ8Y4zZZIzZYIy5qXF5uDHmC2PM1sZ/w5zO6s4Osp21P7ciY4yfMWa5MSalcTvf07hc+3MrOsh21v58mDQmxIUZY44DSoE3rLXxjcv+DpRaax92MltHYYyJBqKttauMMV2AlcA5wBVAgbX2fmPMbCDMWnunc0nd20G28zS0P7caY4wBAq21pcYYb+AH4CbgPLQ/t5qDbOdJaH8+LDoS4sKstUuAAqdzdGTW2mxr7arGz0uATUBPYArweuNqr9PwhilH6CDbWVqRbVDa+NC78cOi/blVHWQ7y2FSCXFP1xtj1jaertFh1VZijIkFEoGfgW7W2mxoeAMFohyM1qE02c6g/blVGWM8jTFrgFzgC2ut9uc2cIDtDNqfD4tKiPt5FugHjASygUccTdNBGGOCgA+Am621xU7n6aia2c7an1uZtbbOWjsSiAHGGmPiHY7UIR1gO2t/PkwqIW7GWpvTuPPXAy8CY53O5O4az+l+ALxtrV3QuDincRzD/8Yz5DqVr6Nobjtrf2471tpC4Fsaxilof24j+29n7c+HTyXEzfzvF0mjc4H1B1pXDq1xgNnLwCZr7b/3e2ohcHnj55cDH7V3to7kQNtZ+3PrMsZEGmNCGz/3B04BNqP9uVUdaDtrfz58ujrGhRlj3gVOoOH20DnA3xofj6RhENQO4Jr/neuVw2eM+Q3wPbAOqG9c/GcaxivMA3oDu4Cp1loNEj5CB9nOM9D+3GqMMSNoGHjqScMfmfOstXOMMRFof241B9nOb6L9+bCohIiIiIgjdDpGREREHKESIiIiIo5QCRERERFHqISIiIiII1RCRERExBEqISIiIuIIlRARERFxxP8DGyYcvdoLokUAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "stats.plot_gaussian_pdf(25, 20.4);" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ax1.plot([3,2,4])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 57, "metadata": { - "collapsed": false + "scrolled": true }, "outputs": [ { - "ename": "ModuleNotFoundError", - "evalue": "No module named 'gif_animate'", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mmath\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mstats\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 6\u001b[1;33m \u001b[1;32mfrom\u001b[0m \u001b[0mgif_animate\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0manimate\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 7\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 8\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;31mModuleNotFoundError\u001b[0m: No module named 'gif_animate'" - ] + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" } ], "source": [ - "from __future__ import print_function, division\n", "import matplotlib.pyplot as plt\n", "import numpy.random as random\n", "import math\n", "import stats\n", - "from gif_animate import animate\n", - "\n", - "\n", + "from kf_book.gif_animate import animate\n", "\n", "sensor_error = 1.2**2\n", "movement_error = .2\n", "movement = 0\n", - "voltage = (25,20) #who knows what the first value is?\n", + "voltage = (25, 20) #who knows what the first value is?\n", "\n", "volts = [14.44, 18.74, 17.21, 15.98, 16.76, 14.8, 16.01, 16.90, 15.41, 17.31,\n", " 16.39, 17.96]\n", @@ -151,40 +223,42 @@ "i = 0\n", "pred = 0\n", "def volt_animate(frame):\n", - " global i, ps, voltage, Z, x, pred\n", + " global i, ps, voltage, Z, x, pred, ax1, ax2\n", " \n", " step = frame % 4\n", - " plt.subplot(211)\n", - " plt.ylim([14,26])\n", + " ax1.set_ylim([14, 26])\n", + " ax1.set_xlim([0, 10])\n", "\n", " if step == 0:\n", " prev = voltage[0]\n", " voltage = predict(voltage[0], voltage[1], movement, movement_error)\n", " pred = voltage[0]\n", - " plt.plot ([i, i+1], [prev, pred], c='g') \n", + " ax1.plot([i, i+1], [prev, pred], c='g') \n", " \n", " elif step == 1:\n", " Z = volts[i]\n", - " i += 1\n", - " \n", - " plt.scatter(i, Z, marker='+', s=64, color='r')\n", + " i += 1 \n", + " ax1.scatter(i, Z, marker='+', s=64, color='r')\n", "\n", " elif step == 2:\n", - " plt.plot ([i,i], [pred, Z], c='r', alpha=0.3)\n", + " ax1.plot([i,i], [pred, Z], c='r', alpha=0.3)\n", "\n", " else:\n", " voltage = update(voltage[0], voltage[1], Z, sensor_error)\n", " ps.append(voltage[0])\n", - " plt.plot(ps, c='b')\n", + " ax1.plot(ps, c='b')\n", " \n", - " plt.subplot(212)\n", - " plt.cla()\n", - " stats.plot_gaussian(voltage[0], voltage[1], xlim=[0,32])\n", - " plt.ylim([0,1])\n", - " plt.tight_layout()\n", + " ax2.cla()\n", + " stats.plot_gaussian_pdf(voltage[0], voltage[1], xlim=[0,32], ax=ax2)\n", + " ax2.set_xlim([10, 25])\n", + " ax2.set_ylim([0, 1])\n", + " #plt.tight_layout()\n", " \n", "N=12\n", - "animate('05_volt_animate.gif', volt_animate, N*3, 350)" + "fig = plt.figure()\n", + "ax1 = fig.add_subplot(211)\n", + "ax2 = fig.add_subplot(212)\n", + "animate('05_volt_animate.gif', volt_animate, N*3, 350, fig);" ] }, { @@ -196,21 +270,20 @@ }, { "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false - }, + "execution_count": 59, + "metadata": {}, "outputs": [ { - "ename": "ModuleNotFoundError", - "evalue": "No module named 'gif_animate'", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mmath\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mstats\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 6\u001b[1;33m \u001b[1;32mfrom\u001b[0m \u001b[0mgif_animate\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0manimate\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 7\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 8\u001b[0m \u001b[1;31m# assume dog is always moving 1m to the right\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;31mModuleNotFoundError\u001b[0m: No module named 'gif_animate'" - ] + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" } ], "source": [ @@ -219,12 +292,12 @@ "import numpy.random as random\n", "import math\n", "import stats\n", - "from gif_animate import animate\n", + "from kf_book.gif_animate import animate\n", "\n", "# assume dog is always moving 1m to the right\n", "movement = 1\n", "movement_error = .05\n", - "sensor_error = 4.5\n", + "sensor_error = 2.5\n", "pos = (0, 100) # gaussian N(0,100)\n", "\n", "# this is the recorded output of a run of the dog sensor with an initial\n", @@ -238,7 +311,7 @@ "N=20\n", "\n", "def dog_animate(frame):\n", - " global pos, zs, ps, N, ZS\n", + " global pos, zs, ps, N, ZS, ax1, ax2, fig\n", " pos = predict(pos[0], pos[1], movement, movement_error) \n", " Z = ZS[frame]\n", " zs.append(Z)\n", @@ -247,23 +320,23 @@ " ps.append(pos[0])\n", "\n", "\n", - " plt.subplot(211)\n", - " plt.plot(zs,c='r', linestyle='dashed')\n", "\n", - " plt.xlim([0,N*1.2])\n", - " plt.ylim([0,N*1.2])\n", + " ax1.plot(zs,c='r', linestyle='dashed')\n", + " ax1.set_xlim([0, N*1.2])\n", + " ax1.set_ylim([0, N*1.2])\n", "\n", " if len(ps) > 1:\n", - " plt.plot(ps, c='#8EBA42')\n", + " ax1.plot(ps, c='#8EBA42')\n", " \n", - " plt.subplot(212)\n", - " plt.cla()\n", - " stats.plot_gaussian(pos[0], pos[1], xlim=[0,N*1.2])\n", - " plt.ylim(0, 1)\n", - " plt.tight_layout()\n", - "\n", - "\n", - "animate('05_dog_track.gif', dog_animate, N, 200)" + " ax2.cla()\n", + " stats.plot_gaussian_pdf(pos[0], pos[1], xlim=[0,N*1.2], ax=ax2)\n", + " ax2.set_ylim(0, 1)\n", + " fig.tight_layout()\n", + "\n", + "fig = plt.figure()\n", + "ax1 = fig.add_subplot(211)\n", + "ax2 = fig.add_subplot(212)\n", + "animate('05_dog_track.gif', dog_animate, N, 200, fig=fig)" ] }, { @@ -275,6 +348,11 @@ } ], "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, "language_info": { "codemirror_mode": { "name": "ipython", @@ -285,7 +363,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.10" + "version": "3.7.4" } }, "nbformat": 4, diff --git a/animations/discrete_bayes_animations.ipynb b/animations/discrete_bayes_animations.ipynb index 161d5ac3..0fcd9d1b 100644 --- a/animations/discrete_bayes_animations.ipynb +++ b/animations/discrete_bayes_animations.ipynb @@ -10,63 +10,64 @@ { "cell_type": "code", "execution_count": 1, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { - "ename": "AttributeError", - "evalue": "module 'book_format' has no attribute 'load_style'", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mAttributeError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[0msys\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpath\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0minsert\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;34m'../code'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 6\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mbook_format\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 7\u001b[1;33m \u001b[0mbook_format\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mload_style\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdirectory\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m'..'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[1;31mAttributeError\u001b[0m: module 'book_format' has no attribute 'load_style'" - ] + "data": { + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "from __future__ import division, print_function\n", "import matplotlib.pyplot as plt\n", "import sys\n", "sys.path.insert(0,'..') # allow us to format the book\n", - "sys.path.insert(0,'../code') \n", "import book_format\n", - "book_format.load_style(directory='..')" + "book_format.set_style()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "This notebook creates the animations for the Discrete Bayesian filters chapter. It is not really intended to be a readable part of the book, but of course you are free to look at the source code, and even modify it. However, if you are interested in running your own animations, I'll point you to the examples subdirectory of the book, which contains a number of python scripts that you can run and modify from an IDE or the command line. This module saves the animations to GIF files, which is quite slow and not very interactive. " + "This notebook creates the animations for the Discrete Bayesian filters chapter. It is not really intended to be a readable part of the book, but of course you are free to look at the source code, and even modify it. However, if you are interested in running your own animations, I'll point you to the examples subdirectory of the book, which contains a number of python scripts that you can run and modify from an IDE or the command line. This module saves the animations to GIF files, which is quite slow and not very interactive. \n", + "\n", + "On Windows you need to install ffmpeg with\n", + "\n", + " $ conda install -c conda-forge ffmpeg\n", + " \n", + "I don't know what to do for linux or MaxOS." ] }, { "cell_type": "code", "execution_count": 2, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "ename": "ModuleNotFoundError", - "evalue": "No module named 'book_plots'", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mmatplotlib\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpyplot\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mnumpy\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 4\u001b[1;33m \u001b[1;32mfrom\u001b[0m \u001b[0mbook_plots\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mbar_plot\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 5\u001b[0m \u001b[0mget_ipython\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrun_line_magic\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'matplotlib'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'inline'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 6\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;31mModuleNotFoundError\u001b[0m: No module named 'book_plots'" - ] - } - ], + "metadata": {}, + "outputs": [], "source": [ "from matplotlib import animation\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", - "from book_plots import bar_plot\n", + "from kf_book.book_plots import bar_plot\n", "%matplotlib inline\n", "\n", "# the predict algorithm of the discrete bayesian filter\n", @@ -101,9 +102,7 @@ { "cell_type": "code", "execution_count": 3, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -133,24 +132,35 @@ { "cell_type": "code", "execution_count": 4, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { - "ename": "ModuleNotFoundError", - "evalue": "No module named 'gif_animate'", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[1;32mfrom\u001b[0m \u001b[0mgif_animate\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0manimate\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[0mpos\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;36m1.0\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mbar_animate\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnframe\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;32mglobal\u001b[0m \u001b[0mpos\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;31mModuleNotFoundError\u001b[0m: No module named 'gif_animate'" - ] + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" } ], "source": [ - "from gif_animate import animate\n", + "from kf_book.gif_animate import animate\n", "\n", "pos = [1.0,0,0,0,0,0,0,0,0,0]\n", "def bar_animate(nframe):\n", @@ -177,28 +187,18 @@ { "cell_type": "code", "execution_count": 5, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ - { - "ename": "NameError", - "evalue": "name 'animate' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 18\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 19\u001b[0m \u001b[0mfig\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfigure\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfigsize\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m6.5\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m2.5\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 20\u001b[1;33m \u001b[0manimate\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'02_simulate.gif'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mbar_animate\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfig\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mfig\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mframes\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m40\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0minterval\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m85\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m;\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[1;31mNameError\u001b[0m: name 'animate' is not defined" - ] - }, { "data": { + "image/png": "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\n", "text/plain": [ - "
" + "
" ] }, - "metadata": {}, + "metadata": { + "needs_background": "light" + }, "output_type": "display_data" } ], @@ -236,7 +236,7 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python [default]", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -250,9 +250,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.10" + "version": "3.7.4" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/animations/multivariate_animations.ipynb b/animations/multivariate_animations.ipynb index 991ed2f4..3370a21b 100644 --- a/animations/multivariate_animations.ipynb +++ b/animations/multivariate_animations.ipynb @@ -3,22 +3,42 @@ { "cell_type": "code", "execution_count": 1, - "metadata": { - "collapsed": false - }, - "outputs": [], + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "from __future__ import division, print_function\n", "%matplotlib inline\n", "import sys\n", "sys.path.insert(0,'..') # allow us to format the book\n", - "sys.path.insert(0,'../code') # allow us to format the book\n", - "sys.path.insert(0,'./code') # allow us to format the book\n", "\n", "# use same formatting as rest of book so that the plots are\n", "# consistant with that look and feel.\n", - "#import book_format\n", - "#book_format.load_style('..')" + "import book_format\n", + "book_format.set_style()" ] }, { @@ -31,9 +51,7 @@ { "cell_type": "code", "execution_count": 2, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "import filterpy.stats as stats\n", @@ -47,27 +65,32 @@ { "cell_type": "code", "execution_count": 3, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { - "ename": "ModuleNotFoundError", - "evalue": "No module named 'gif_animate'", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;31m#import mkf_internal\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mmatplotlib\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpyplot\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 4\u001b[1;33m \u001b[1;32mfrom\u001b[0m \u001b[0mgif_animate\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0manimate\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 5\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 6\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mellipse_animate\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mframe\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;31mModuleNotFoundError\u001b[0m: No module named 'gif_animate'" - ] + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ "import numpy as np\n", - "#import mkf_internal\n", "import matplotlib.pyplot as plt\n", - "from gif_animate import animate\n", + "from kf_book.gif_animate import animate\n", "\n", "def ellipse_animate(frame):\n", " \n", @@ -90,43 +113,17 @@ { "cell_type": "code", "execution_count": 4, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'f' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mf\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mQ\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[1;31mNameError\u001b[0m: name 'f' is not defined" - ] - } - ], - "source": [ - "f.Q" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { - "ename": "ModuleNotFoundError", - "evalue": "No module named 'gif_animate'", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mmatplotlib\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mcm\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mmpl_toolkits\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmplot3d\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mAxes3D\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 6\u001b[1;33m \u001b[1;32mfrom\u001b[0m \u001b[0mgif_animate\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0manimate\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 7\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mnumpy\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrandom\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mrandom\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 8\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mDogSimulation\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mDogSimulation\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;31mModuleNotFoundError\u001b[0m: No module named 'gif_animate'" - ] + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ @@ -135,14 +132,12 @@ "import matplotlib.pyplot as plt\n", "from matplotlib import cm\n", "from mpl_toolkits.mplot3d import Axes3D\n", - "from gif_animate import animate\n", + "from kf_book.gif_animate import animate\n", "import numpy.random as random\n", - "from DogSimulation import DogSimulation\n", + "from kf_book.DogSimulation import DogSimulation\n", "import filterpy.stats\n", "from filterpy.common import Q_discrete_white_noise\n", "from filterpy.kalman import KalmanFilter\n", - "import book_format\n", - "book_format.load_style('..')\n", "\n", "def dog_tracking_filter(R, Q=0, cov=1.):\n", " dog_filter = KalmanFilter(dim_x=2, dim_z=1)\n", @@ -223,9 +218,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.10" + "version": "3.7.4" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/animations/multivariate_ellipse.gif b/animations/multivariate_ellipse.gif index 082f301f..86731514 100644 Binary files a/animations/multivariate_ellipse.gif and b/animations/multivariate_ellipse.gif differ diff --git a/animations/multivariate_track1.gif b/animations/multivariate_track1.gif index 52062c3c..43a7f557 100644 Binary files a/animations/multivariate_track1.gif and b/animations/multivariate_track1.gif differ diff --git a/animations/particle_animate.ipynb b/animations/particle_animate.ipynb index 3032a9e8..80ead09a 100644 --- a/animations/particle_animate.ipynb +++ b/animations/particle_animate.ipynb @@ -4,17 +4,41 @@ "cell_type": "code", "execution_count": 1, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "from __future__ import division, print_function\n", "%matplotlib inline\n", "import sys\n", "sys.path.insert(0,'..') # allow us to format the book\n", - "sys.path.insert(0,'../kf_book') \n", - "# use same formattibng as rest of book so that the plots are\n", + "\n", + "# use same formatting as rest of book so that the plots are\n", "# consistant with that look and feel.\n", "import book_format\n", - "#book_format.load_style(directory='..')" + "book_format.set_style()" ] }, { @@ -109,7 +133,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAGGCAYAAAB/gCblAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzde1xUdf4/8NeZ+8AwDAyODo06ChVUg+WYhV0cu3iNSnK3Vlit/QbkamVMS/eElrL6Sdu2ZBb7yC47pltWu3TBalfd3VorMbOLtV28BdrFG4iKIO/fH/o5nTPMwACD3N7P74PHxsyZcw7Tt8/7fD7vz+f9kYiIwBhjjB2n6ekbYIwx1rtwYGCMMabCgYExxpgKBwbGGGMqHBgYY4ypcGBgjDGmwoGBMcaYCgcGxhhjKhwYGGOMqXBgYLL3338f06dPx7Bhw2A0GjF48GBkZmbC7/erjlu8eDGeeeaZnrnJ45577jlcc801OPXUU6HRaOB2u0Met3HjRkybNg3Dhg2D2WxGYmIiMjMz8Ze//KVL1/f5fJAkKeRPuHsJ54033kBxcXHI99xuN6699tou3WtnLVu2DI8++miPXJv1LIlLYjAAeP3113H55ZfD5/MhLy8PTqcTO3fuxPr167F8+XJ899138rFnnHEGkpKSsGbNmh6730svvRS7du3CmWeeiXXr1qGpqQlbt25tddyaNWuwfPlynH/++TjppJPQ0NCAQCCA5cuX4/e//z3uvvvuTl3f5/Nhx44dCAQCrd4zGo0466yzIj7XvHnz8PjjjyPUf4offfQRrFYrUlJSOnWfXXHZZZfh008/Dfm9sv6NAwMDAIwfPx41NTX44osvoNPpVO+1tLRAo/m5c9kbAoPynjrTgJ177rmora3F9u3bO3V9n8+Hn376CZ9++mmnPq/UVmDoSRwYBi4eSmIAgN27dyMpKalVUACgCgputxufffYZ1q5dG3LopK6uDrfeeitGjBgBg8GAk046CfPnz0dDQ4PqnJIkYd68eXjyySdxyimnwGg04rTTTsPy5csjul/lPXVGuL812g4ePCh/HyaTCYmJiRgzZgxeeOEFAMC1116Lxx9/HABUw1GiMQ4eSlqzZg0kScKyZctw2223wel0wmKxICsrC99//z3q6+uRn5+PpKQkJCUl4brrrsOBAwdU9/T444/jwgsvhMPhQGxsLDweDx5++GE0NTXJx/h8Prz++uvYtm2b6r6EI0eOoLS0FGlpaTAajRg0aBCuu+46/Pjjj930TbITqfv/y2B9QmZmJv785z/jpptuQk5ODkaPHg29Xt/quFdeeQUzZsxAfHw8Fi9eDODY0AlwrBEcP348vvvuO9x5553IyMjAZ599hnvvvReffPIJ3nnnHVXj8ve//x2rV6/Gfffdh9jYWCxevBi/+tWvoNPpMGPGjKj+fS0tLWhpacHevXvx4osvYtWqVSgvL1cd88wzz+C6667D0qVLIx7Xb25ubvWaRqORA1dhYSGef/55lJaW4qyzzkJDQwM+/fRT7N69GwBwzz33oKGhAS+99BL++9//yudwOp1tXvfOO+/EhAkT8Mwzz2Dr1q249dZb5e9u1KhReOGFF/DRRx/hzjvvRFxcHB577DH5s9988w1mzpwpB++PP/4Y999/P7744gs8/fTTAI7lkfLz8/HNN9/glVdeafVdXnHFFfj3v/+NoqIijBs3Dtu2bcOCBQvg8/mwfv16mM3miL4/1ksRY0T0008/0fnnn08ACADp9XoaN24cLVy4kOrr61XHnn766TR+/PhW51i4cCFpNBr68MMPVa+/9NJLBIDeeOMN+TUAZDabadeuXfJrzc3NlJaWRqmpqR2692nTptHw4cPbPKagoED+2wwGAy1evLjVMc8++yxptVp69tln273m+PHj5fMF//zf//2ffNwZZ5xBV155ZZvnmjt3LoX7T3H48OE0e/Zs+ffVq1cTAMrKylIdN3/+fAJAN910k+r1K6+8khITE8Ne++jRo9TU1ETPPfccabVa2rNnj/xeuO/1hRdeIAC0cuVK1esffvghAQj53bK+hYeSGADAbrfj3//+Nz788EM8+OCDuOKKK/C///0Pd9xxBzweD3766ad2z/Haa6/hjDPOwJlnnonm5mb5Z9KkSZAkqVVO4uKLL8bgwYPl37VaLa6++mp8/fXXqmR3NNx555348MMP8frrr+M3v/kN5s2bh0WLFqmOmTVrFpqbmzFr1qyIzpmSkoIPP/yw1c8999wjHzN27Fi8+eabuP3227FmzRocOnQoKn/PZZddpvo9PT0dADBt2rRWr+/Zs0c1nPTRRx/h8ssvh91uh1arhV6vx6xZs3D06FH873//a/far732Gmw2G7Ky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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAGGCAYAAAB/gCblAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/d3fzzAAAACXBIWXMAAA9hAAAPYQGoP6dpAABVMElEQVR4nO3de3xT9f0/8FfuaZumaVNCUwMUirNVUpVUNOhG8AIi46ugm0o70X1tCwMVU1e8TYqron6p29dVZbLvcGoRfhvqRLci2wDnHBMKKCreEbEFUW7lWmj7/v0B55CTJr2R0tvr+X30MXNycs4n8evnfT6f9+eiExEBERHRCfquLgAREXUvDAxERKTBwEBERBoMDEREpMHAQEREGgwMRESkwcBAREQaDAxERKTBwEBERBoMDKT6z3/+g4kTJ2LgwIGwWCzo378//H4/iouLNec99dRTePbZZ7umkCc899xzuOGGG3DWWWdBr9cjIyMj4nkbN27E+PHjMXDgQMTFxSElJQV+vx8vvPDCKd0/EAhAp9NF/ItWlmj+8pe/oLS0NOJ7GRkZuPnmm0+prB21aNEi/PrXv+6Se1PX0nFJDAKA119/Hf/1X/+FQCCAgoICuN1ubN++HevWrcPixYvx9ddfq+cOGzYMqampWLVqVZeV94orrsCOHTtw3nnnYc2aNTh27Bi+/PLLZuetWrUKixcvxiWXXIIzzjgDBw8eRGVlJRYvXoxf/vKXuP/++zt0/0AggG3btqGysrLZexaLBeeff36brzVjxgw8+eSTiPSf4oYNG2C325GZmdmhcp6KH/7wh3j//fcj/q7UuzEwEABg1KhRqKmpwUcffQSj0ah5r6mpCXr9ycZldwgMoWXqSAV20UUXoba2Fl999VWH7h8IBPDdd9/h/fff79DnQ7UUGLoSA0Pfxa4kAgDs2rULqampzYICAE1QyMjIwAcffIDVq1dH7Dqpq6vDXXfdhcGDB8NsNuOMM87AzJkzcfDgQc01dTodZsyYgd/+9rf43ve+B4vFgrPPPhuLFy9uU3lDy9QR0b5rrB06dEj9PaxWK1JSUpCbm4sXX3wRAHDzzTfjySefBABNd5RSGYd3Ja1atQo6nQ6LFi3CrFmz4Ha7YbPZMGHCBHzzzTfYv38/CgsLkZqaitTUVNxyyy04cOCApkxPPvkkfvCDH8DlciEhIQFerxePPfYYjh07pp4TCATw+uuvY+vWrZpyKY4ePYqysjJkZWXBYrGgX79+uOWWW/Dtt9920i9Jp1Pn/5dBPYLf78fvfvc73H777cjLy8Pw4cNhMpmanffyyy/juuuuQ1JSEp566ikAx7tOgOOV4KhRo/D111/j3nvvRU5ODj744AM88MAD2LRpE/72t79pKpdXX30VK1euxIMPPoiEhAQ89dRTuPHGG2E0GnHdddfF9Ps1NTWhqakJe/bswR//+EcsX74cFRUVmnOeffZZ3HLLLVi4cGGb+/UbGhqaHdPr9WrgCgaDeP7551FWVobzzz8fBw8exPvvv49du3YBAH7xi1/g4MGD+NOf/oR///vf6jXcbneL97333nsxevRoPPvss/jyyy9x1113qb/dueeeixdffBEbNmzAvffei8TERDzxxBPqZz///HNMnjxZDd7vvvsuHnroIXz00Uf4/e9/D+B4HqmwsBCff/45Xn755Wa/5dVXX41//vOfKCkpwciRI7F161bMnj0bgUAA69atQ1xcXJt+P+qmhEhEvvvuO7nkkksEgAAQk8kkI0eOlLlz58r+/fs1555zzjkyatSoZteYO3eu6PV6Wbt2reb4n/70JwEgf/nLX9RjACQuLk527NihHmtoaJCsrCwZOnRou8o+fvx4GTRoUIvnFBUVqd/NbDbLU0891eycP/zhD2IwGOQPf/hDq/ccNWqUer3wv//+7/9Wzxs2bJhcc801LV5r+vTpEu0/xUGDBsmUKVPU1ytXrhQAMmHCBM15M2fOFABy++23a45fc801kpKSEvXejY2NcuzYMXnuuefEYDDI7t271fei/a4vvviiAJClS5dqjq9du1YARPxtqWdhVxIBAJxOJ/75z39i7dq1eOSRR3D11Vfjk08+wT333AOv14vvvvuu1Wu89tprGDZsGM477zw0NDSof2PHjoVOp2uWk7jsssvQv39/9bXBYMD111+Pzz77TJPsjoV7770Xa9euxeuvv46f/vSnmDFjBubNm6c556abbkJDQwNuuummNl0zMzMTa9eubfb3i1/8Qj1nxIgR+Otf/4q7774bq1atwuHDh2PyfX74wx9qXmdnZwMAxo8f3+z47t27Nd1JGzZswH/913/B6XTCYDDAZDLhpptuQmNjIz755JNW7/3aa6/B4XBgwoQJmn/P5513HtLS0ro0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\n", "text/plain": [ "
" ] @@ -119,7 +143,8 @@ } ], "source": [ - "from pf_internal import plot_pf\n", + "from kf_book.pf_internal import plot_pf\n", + "from kf_book.gif_animate import animate\n", "\n", "seed(1234)\n", "N = 3000\n", @@ -159,7 +184,6 @@ " plt.legend(scatterpoints=1, loc=2)\n", " plt.tight_layout()\n", "\n", - "from gif_animate import animate\n", "animate('particle_filter_anim.gif', animatepf, \n", " frames=40, interval=800, figsize=(4, 4))" ] @@ -188,7 +212,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.10" + "version": "3.7.4" } }, "nbformat": 4, diff --git a/animations/particle_filter_anim.gif b/animations/particle_filter_anim.gif index 97f35c57..822f95a9 100644 Binary files a/animations/particle_filter_anim.gif and b/animations/particle_filter_anim.gif differ diff --git a/book_format.py b/book_format.py index 825622e9..65dcec56 100644 --- a/book_format.py +++ b/book_format.py @@ -13,9 +13,6 @@ for more information. """ -from __future__ import (absolute_import, division, print_function, - unicode_literals) - from contextlib import contextmanager from IPython.core.display import HTML import json @@ -62,23 +59,16 @@ def test_installation(): v = matplotlib.__version__ - min_version = "1.5.0" # this is really old!!! + min_version = "3.0" # this is really old!!! if LooseVersion(v) < LooseVersion(min_version): print("Minimum Matplotlib version supported is {}. " "Please install a more recent version.".format(min_version)) - # require Python 2.7, or 3.5+ - + # require Python 3.6+ import sys v = sys.version_info - if v.major > 3: - # I guess if we are this far in the future it'll work? Who knows. - # I just don't want to start getting issue reports when Python goes - # to 4.0 - return - - if (v.major == 2 and v.minor != 7) or (v.major == 3 and v.minor < 5): - print('You must use Python version 2.7 or 3.5+ for the notebooks to work correctly') + if v.major < 3 or (v.major == 3 and v.minor < 6): + print('You must use Python version 3.6 or later for the notebooks to work correctly') # need to add test for IPython. I think I want to be at 6, which also implies @@ -97,11 +87,6 @@ def test_installation(): import matplotlib.pyplot as plt import numpy as np -# version 1.4.3 of matplotlib has a bug that makes -# it issue a spurious warning on every plot that -# clutters the notebook output -if matplotlib.__version__ == '1.4.3': - warnings.simplefilter(action="ignore", category=FutureWarning) try: matplotlib.style.use('default') @@ -169,7 +154,7 @@ def set_style(): plt.rcParams.update(style) except: pass - np.set_printoptions(suppress=True, precision=3, + np.set_printoptions(suppress=True, precision=3, threshold=10000., linewidth=70, formatter={'float':lambda x:' {:.3}'.format(x)}) @@ -183,7 +168,7 @@ def set_style():