Skip to content

Instantly share code, notes, and snippets.

@lhk
Created August 28, 2015 10:07
Show Gist options
  • Save lhk/949c7bf7007445033fd9 to your computer and use it in GitHub Desktop.
Save lhk/949c7bf7007445033fd9 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt \n",
"from matplotlib.animation import FuncAnimation\n",
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAa4AAAGnCAYAAADv+rNSAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAEGpJREFUeJzt3V2Ipnd5x/Hf1U0sBGqjLHiQrMRqEC0oWoyvxRGFbnNg\nwEJDfMMXaihEembUA7MnWjwTEUIIUTwyByqYlpAg6KBItAZM1LorWTWwGyUY3xCbgyxePdgnZpzN\nzvPM5NmdvdzPBwbmnvvvPdf8mc2X+3kZq7sDAFP81X4PAAC7IVwAjCJcAIwiXACMIlwAjCJcAIyy\nNFxV9dmqerSqfrDDmk9X1UNV9WBVvWK9IwLAU1a54/pcksNnO1lV1yZ5UXdfneQDSW5d02wAcIal\n4erubyb5zQ5L3prk84u130lyeVU9bz3jAcCfW8dzXFckObHl+GSSK9dwXQA4wyVruk5tOz7j70hV\nlb8tBcAZunt7Q3a0jnA9kuTQluMrF187w26HI6mqI919ZL/nmMa+7Y192xv7tnd7ualZx0OFdyV5\n92KA1yT5bXc/uobrAsAZlt5xVdUXkrwxycGqOpHkliSXJkl339bdd1fVtVV1PMkfkrz3XA4MwMVt\nabi6+4YV1ty0nnF4Gpv7PcBQm/s9wFCb+z3AUJv7PcDFpM7X/x9XVbXnuADYai9t8CefABhFuAAY\nRbgAGEW4ABhFuAAYRbgAGEW4ABhFuAAYRbgAGEW4ABhFuAAYRbgAGEW4ABhFuAAYRbgAGEW4ABhF\nuAAYRbgAGEW4ABhFuAAYRbgAGEW4ABhFuAAYRbgAGEW4ABhFuAAYRbgAGEW4ABhFuAAYRbgAGEW4\nABhFuAAYRbgAGEW4ABhFuAAYRbgAGEW4ABhFuAAYRbgAGEW4ABhFuAAYRbgAGEW4ABhFuAAYRbgA\nGEW4ABhFuAAYRbgAGEW4ABhFuAAYRbgAGEW4ABhFuAAYRbgAGEW4ABhFuAAYRbgAGEW4ABhFuAAY\nRbgAGEW4ABhFuAAYRbgAGEW4ABhFuAAYRbgAGEW4ABhFuAAYZWm4qupwVR2rqoeq6uanOX+wqu6p\nqgeq6odV9Z5zMikAJKnuPvvJqgNJfpzkLUkeSfLdJDd099Eta44k+evu/khVHVysf153n9p2re7u\nWv+PAMBUe2nDsjuua5Ic7+6Hu/uJJHcmuW7bml8kefbi82cn+dX2aAHAulyy5PwVSU5sOT6Z5NXb\n1tye5GtV9fMkf5PkX9c3HgD8uWXhOvvjiE/5aJIHunujql6Y5KtV9fLu/v32hYuHFZ+02d2bK08K\nwHhVtZFk45lcY1m4HklyaMvxoZy+69rqdUk+niTd/ZOq+lmSFye5f/vFuvvInicFYLzFDcvmk8dV\ndctur7HsOa77k1xdVVdV1bOSXJ/krm1rjuX0izdSVc/L6Wj9dLeDAMAqdrzj6u5TVXVTknuTHEhy\nR3cfraobF+dvS/KJJJ+rqgdzOoQf6u5fn+O5AbhI7fhy+LV+Iy+HB2Cbc/FyeAC4oAgXAKMIFwCj\nCBcAowgXAKMIFwCjCBcAowgXAKMIFwCjCBcAowgXAKMIFwCjCBcAowgXAKMIFwCjCBcAowgXAKMI\nFwCjCBcAowgXAKMIFwCjCBcAowgXAKMIFwCjCBcAowgXAKMIFwCjCBcAowgXAKMIFwCjCBcAowgX\nAKMIFwCjCBcAowgXAKMIFwCjCBcAowgXAKMIFwCjCBcAowgXAKMIFwCjCBcAowgXAKMIFwCjCBcA\nowgXAKMIFwCjCBcAowgXAKMIFwCjCBcAowgXAKMIFwCjCBcAowgXAKMIFwCjCBcAowgXAKMIFwCj\nCBcAowgXAKMIFwCjCBcAowgXAKMIFwCjCBcAowgXAKMIFwCjLA1XVR2uqmNV9VBV3XyWNRtV9b2q\n+mFVba59SgBYqO4++8mqA0l+nOQtSR5J8t0kN3T30S1rLk/yrST/1N0nq+pgdz/2NNfq7q51/wAA\nzLWXNiy747omyfHufri7n0hyZ5Lrtq15e5IvdffJJHm6aAHAuiwL1xVJTmw5Prn42lZXJ3luVX29\nqu6vqnetc0AA2OqSJefP/jjiUy5N8sokb05yWZL7qurb3f3Q9oVVdWTL4WZ3b644JwB/AapqI8nG\nM7nGsnA9kuTQluNDOX3XtdWJJI919+NJHq+qbyR5eZIzwtXdR/Y+KgDTLW5YNp88rqpbdnuNZQ8V\n3p/k6qq6qqqeleT6JHdtW/OVJG+oqgNVdVmSVyf50W4HAYBV7HjH1d2nquqmJPcmOZDkju4+WlU3\nLs7f1t3HquqeJN9P8sckt3e3cAFwTuz4cvi1fiMvhwdgm3PxcngAuKAIFwCjCBcAowgXAKMIFwCj\nCBcAowgXAKMIFwCjCBcAowgXAKMIFwCjCBcAowgXAKMIFwCjCBcAowgXAKMIFwCjCBcAowgXAKMI\nFwCjCBcAowgXAKMIFwCjCBcAowgXAKMIFwCjCBcAowgXAKMIFwCjCBcAowgXAKMIFwCjCBcAowgX\nAKMIFwCjCBcAowgXAKMIFwCjCBcAowgXAKMIFwCjCBcAowgXAKMIFwCjCBcAowgXAKMIFwCjCBcA\nowgXAKMIFwCjCBcAowgXAKMIFwCjCBcAowgXAKMIFwCjCBcAowgXAKMIFwCjCBcAowgXAKMIFwCj\nCBcAowgXAKMIFwCjCBcAowgXAKMIFwCjCBcAowgXAKMsDVdVHa6qY1X1UFXdvMO6V1XVqap623pH\nBICn7BiuqjqQ5DNJDid5aZIbquolZ1n3yST3JKlzMCcAJFl+x3VNkuPd/XB3P5HkziTXPc26Dyb5\nYpJfrnk+APgzy8J1RZITW45PLr72J1V1RU7H7NbFl3pt0wHANpcsOb9KhD6V5MPd3VVV2eGhwqo6\nsuVws7s3V7g+AH8hqmojycYzukb32dtUVa9JcqS7Dy+OP5Lkj939yS1rfpqnYnUwyf8l+bfuvmvb\ntbq7Pf8FwJ/spQ3LwnVJkh8neXOSnyf5nyQ3dPfRs6z/XJL/6u4vr2M4AP6y7aUNOz5U2N2nquqm\nJPcmOZDkju4+WlU3Ls7ftudpAWAPdrzjWus3cscFwDZ7aYO/nAHAKMIFwCjCBcAowgXAKMIFwCjC\nBcAowgXAKMIFwCjCBcAowgXAKMIFwCjCBcAowgXAKMIFwCjCBcAowgXAKMIFwCjCBcAowgXAKMIF\nwCjCBcAowgXAKMIFwCjCBcAowgXAKMIFwCjCBcAowgXAKMIFwCjCBcAowgXAKMIFwCjCBcAowgXA\nKMIFwCjCBcAowgXAKMIFwCjCBcAowgXAKMIFwCjCBcAowgXAKMIFwCjCBcAowgXAKMIFwCjCBcAo\nwgXAKMIFwCjCBcAowgXAKMIFwCjCBcAowgXAKMIFwCjCBcAowgXAKMIFwCjCBcAowgXAKMIFwCjC\nBcAowgXAKMIFwCjCBcAowgXAKMIFwCjCBcAoK4Wrqg5X1bGqeqiqbn6a8++oqger6vtV9a2qetn6\nRwWApLp75wVVB5L8OMlbkjyS5LtJbujuo1vWvDbJj7r7d1V1OMmR7n7Ntut0d9e6fwAA5tpLG1a5\n47omyfHufri7n0hyZ5Lrti7o7vu6+3eLw+8kuXI3QwDAqlYJ1xVJTmw5Prn42tm8P8ndz2QoADib\nS1ZYs/NjiVtU1ZuSvC/J689y/siWw83u3lz12gDMV1UbSTaeyTVWCdcjSQ5tOT6U03dd24d5WZLb\nkxzu7t883YW6+8geZgTgL8TihmXzyeOqumW311jlocL7k1xdVVdV1bOSXJ/krq0Lqur5Sb6c5J3d\nfXy3QwDAqpbecXX3qaq6Kcm9SQ4kuaO7j1bVjYvztyX5WJLnJLm1qpLkie6+5tyNDcDFaunL4df2\njbwcHoBtztXL4QHggiFcAIwiXACMIlwAjCJcAIwiXACMIlwAjCJcAIwiXACMIlwAjCJcAIwiXACM\nIlwAjCJcAIwiXACMIlwAjCJcAIwiXACMIlwAjCJcAIwiXACMIlwAjCJcAIwiXACMIlwAjCJcAIwi\nXACMIlwAjCJcAIwiXACMIlwAjCJcAIwiXACMIlwAjCJcAIwiXACMIlwAjCJcAIwiXACMIlwAjCJc\nAIwiXACMIlwAjCJcAIwiXACMIlwAjCJcAIwiXACMIlwAjCJcAIwiXACMIlwAjCJcAIwiXACMIlwA\njCJcAIwiXACMIlwAjCJcAIwiXACMIlwAjCJcAIwiXACMIlwAjCJcAIwiXACMIlwAjCJcAIwiXACM\nsjRcVXW4qo5V1UNVdfNZ1nx6cf7BqnrF+se8eFXVxn7PMJF92xv7tjf27fzaMVxVdSDJZ5IcTvLS\nJDdU1Uu2rbk2yYu6++okH0hy6zma9WK1sd8DDLWx3wMMtbHfAwy1sd8DXEyW3XFdk+R4dz/c3U8k\nuTPJddvWvDXJ55Oku7+T5PKqet7aJwWALA/XFUlObDk+ufjasjVXPvPRAOBMlyw53ytep1b531XV\nqtdji6q6Zb9nmMi+7Y192xv7dv4sC9cjSQ5tOT6U03dUO625cvG1P9Pd2+MGALu27KHC+5NcXVVX\nVdWzklyf5K5ta+5K8u4kqarXJPltdz+69kkBIEvuuLr7VFXdlOTeJAeS3NHdR6vqxsX527r77qq6\ntqqOJ/lDkvee86kBuGhVt6edAJhj7X85wxuW92bZvlXVOxb79f2q+lZVvWw/5rzQrPL7tlj3qqo6\nVVVvO5/zXahW/He6UVXfq6ofVtXmeR7xgrTCv9ODVXVPVT2w2Lf37MOYF5Sq+mxVPVpVP9hhze6a\n0N1r+8jphxOPJ7kqyaVJHkjykm1rrk1y9+LzVyf59jpnmPix4r69NsnfLj4/bN9W27ct676W5L+T\n/Mt+z73fHyv+vl2e5H+TXLk4Prjfc+/3x4r7diTJfz65Z0l+leSS/Z59n/ftH5O8IskPznJ+101Y\n9x2XNyzvzdJ96+77uvt3i8PvxHvlktV+35Lkg0m+mOSX53O4C9gq+/b2JF/q7pNJ0t2PnecZL0Sr\n7Nsvkjx78fmzk/yqu0+dxxkvON39zSS/2WHJrpuw7nB5w/LerLJvW70/yd3ndKIZlu5bVV2R0/9x\nefJPkXlSd7Xft6uTPLeqvl5V91fVu87bdBeuVfbt9iR/X1U/T/Jgkv84T7NNtusmLHsf126t9Q3L\nF5GVf/6qelOS9yV5/bkbZ4xV9u1TST7c3V1VlTN/9y5Gq+zbpUlemeTNSS5Lcl9Vfbu7Hzqnk13Y\nVtm3jyZ5oLs3quqFSb5aVS/v7t+f49mm21UT1h2utb1h+SKzyr5l8YKM25Mc7u6dbr0vFqvs2z8k\nufN0s3IwyT9X1RPdvf39iBeTVfbtRJLHuvvxJI9X1TeSvDzJxRyuVfbtdUk+niTd/ZOq+lmSF+f0\ne2J5ertuwrofKvSG5b1Zum9V9fwkX07yzu4+vg8zXoiW7lt3/113v6C7X5DTz3P9+0UerWS1f6df\nSfKGqjpQVZfl9JPmPzrPc15oVtm3Y0nekiSL52lenOSn53XKeXbdhLXecbU3LO/JKvuW5GNJnpPk\n1sXdwxPdfc1+zXwhWHHf2GbFf6fHquqeJN9P8sckt3f3RR2uFX/fPpHkc1X1YE7fGHyou3+9b0Nf\nAKrqC0nemORgVZ1IcktOPxS95yZ4AzIAo6z9DcgAcC4JFwCjCBcAowgXAKMIFwCjCBcAowgXAKP8\nP8jgW5R/fPO9AAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f3f10a28be0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(7,7))\n",
"ax = plt.axes(xlim=(0,1),ylim=(0,1))\n",
"scatter=ax.scatter([],[],animated=True)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"n=2"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"particles=np.zeros(n,dtype=[(\"position\", float , 2),\n",
" (\"velocity\", float ,2),\n",
" (\"force\", float ,2),\n",
" (\"size\", float , 1)])\n",
"\n",
"particles[\"position\"]=np.random.uniform(0,1,(n,2));\n",
"particles[\"size\"]=0.1*np.ones(n);\n"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0.62091787, 0.78018275],\n",
" [ 0.48109411, 0.0492571 ]])"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"particles[\"position\"]"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def init():\n",
" scatter.set_offsets([])\n",
" return scatter"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def update(frame_number):\n",
" scatter.set_offsets(particles[\"position\"][:,:])\n",
" return scatter\n",
" \n",
" "
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "AttributeError",
"evalue": "'PathCollection' object has no attribute 'canvas'",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mAttributeError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m<ipython-input-21-a66506b267fb>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0manim\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mFuncAnimation\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mscatter\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mupdate\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0minit_func\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0minit\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0minterval\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m10\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshow\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m/home/lars/.local/lib/python3.4/site-packages/matplotlib/animation.py\u001b[0m in \u001b[0;36m__init__\u001b[1;34m(self, fig, func, frames, init_func, fargs, save_count, **kwargs)\u001b[0m\n\u001b[0;32m 1065\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_save_seq\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 1066\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1067\u001b[1;33m \u001b[0mTimedAnimation\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__init__\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfig\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1068\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1069\u001b[0m \u001b[1;31m# Need to reset the saved seq, since right now it will contain data\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m/home/lars/.local/lib/python3.4/site-packages/matplotlib/animation.py\u001b[0m in \u001b[0;36m__init__\u001b[1;34m(self, fig, interval, repeat_delay, repeat, event_source, *args, **kwargs)\u001b[0m\n\u001b[0;32m 907\u001b[0m \u001b[1;31m# sharing timers between animation objects for syncing animations.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 908\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mevent_source\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 909\u001b[1;33m \u001b[0mevent_source\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mfig\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcanvas\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mnew_timer\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 910\u001b[0m \u001b[0mevent_source\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0minterval\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_interval\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 911\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mAttributeError\u001b[0m: 'PathCollection' object has no attribute 'canvas'"
]
}
],
"source": [
"anim = FuncAnimation(scatter, update, init_func=init, interval=10)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAEACAYAAAC9Gb03AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAE7BJREFUeJzt3X+QXWd93/H3pyubwaXGsd1xJvK26hCF2J3WCWkUSp3J\nNri1YBJEoFNj0oSWTKvpRLgZSCPIpPX+0x/8YUITD1RDVUKaNmqHXxUdjEgmbGkTClKRHRxWHgnQ\nVJLbBuxiTHBnpPLtH/fI3Cx3997de3bv+tn3a2Zn7nPOc8/97u6jzz4659z7pKqQJLXrT8y6AEnS\n5jLoJalxBr0kNc6gl6TGGfSS1DiDXpIaNzbok+xPcibJ2SSHR+z/jiQfSvJIkk8n+fObU6okaSPW\nDPokc8CDwH7gduDeJLet6PaLwGer6g7gp4F/sRmFSpI2ZtyMfh9wrqrOV9Vl4BhwYEWf24BPAFTV\nY8CeJH+690olSRsyLuh3AxeG2he7bcMeAV4DkGQf8GeBW/sqUJI0nXFBP8nnI/xz4IYkp4FDwGng\n/01bmCSpH7vG7L8EzA+15xnM6p9VVU8Db7zaTvIl4IsrD5TED9WRpA2oqkx7gFW/GPwh+AKwB7gW\neBi4bUWfFwLXdo//LvBrqxyr1nqtWXwBi7Ou4blQ03aty5qsaSfU1Ud2rjmjr6orSQ4BJ4A54GhV\nLSc52O0/wuBunF/rZuyPAj8z1V8eSVKvxp26oaoeAh5ase3I0ONPAS/uvzRJUh92+jtjl2ZdwAhL\nsy5gFUuzLmCEpVkXMMLSrAsYYWnWBYywNOsCVrE06wI2Q7pzQJv/QknVtBcUJGmH6SM7d/qMXpKa\nZ9BLUuMMeklqnEEvSY0z6CWpcQa9JDXOoJekxhn0ktQ4g16SGmfQS1LjDHpJapxBL0mNM+glqXEG\nvSQ1bmzQJ9mf5EySs0kOj9h/c5KPJXk4yaNJ/vamVCpJ2pA1P48+yRzwGHAXg4XCTwL3VtXyUJ9F\n4HlV9bYkN3f9b6mqKyuO5efRS9I6bcXn0e8DzlXV+aq6DBwDDqzo8z+B67vH1wNPrAx5SdLsjFsz\ndjdwYah9EfihFX3eA/xOkseBPwX8zf7KkyRNa1zQT7LO4C8CD1fVQpIXAb+V5I6qenplx+40z1VL\nVbU0caWStAMkWQAW+jzmuKC/BMwPtecZzOqHvQz4JwBV9YUkXwJeDJxaebCqWtxwpZK0A3QT4KWr\n7ST3T3vMcefoTwF7k+xJci1wD3B8RZ8zDC7WkuQWBiH/xWkLk6StlOTu5KaPD75y96zr6dOaM/qq\nupLkEHACmAOOVtVykoPd/iPAPwXem+QRBn84fqGqntzkuiWpN4Ngv/5D8I7nD7bcd2eSn6iqE7Ot\nrB9r3l7Z6wt5e6WkbSq56ePwjr8Gb+i2vA94829VPfHXZ1kXbM3tlZKk57hxF2MlaQd48gG4707g\n6qmbZ+BrD8y0pB556kaSuHqe/sa3DFpPPrBdzs/3kZ0GvSRtY56jlySNZdBLUuMMeklqnEEvSY0z\n6CWpcQa9JDXOoJekxhn0ktQ4g16SGmfQS1LjDHpJapxBL0mNGxv0SfYnOZPkbJLDI/b/fJLT3dfn\nklxJcsPmlCtJWq81P70yyRzwGIM1YS8BJ4F7q2p5lf4/BvxcVd01Yp+fXilJ67QVn165DzhXVeer\n6jJwDDiwRv/XA785TUGSpH6NC/rdwIWh9sVu27dJch1wN/CBfkqTJPVh3FKC61mV5MeB/1pVX12t\nQ5LFoeZSVS2t4/iS1LwkC8BCn8ccF/SXgPmh9jyDWf0or2PMaZuqWpy4MknagboJ8NLVdpL7pz3m\nuIuxuxhcjH058DjwGUZcjE3yQuCLwK1V9cwqx/JirCStUx/ZueaMvqquJDkEnADmgKNVtZzkYLf/\nSNf11cCJ1UJekjQ7Lg4uSduYi4NLksYy6CWpcQa9JDXOoJekxhn0ktQ4g16SGmfQS1LjDHpJapxB\nL0mNM+glqXEGvSQ1zqCXpMYZ9JLUOINekhpn0EtS4wx6SWrc2KBPsj/JmSRnkxxepc9CktNJHk2y\n1HuVkqQNG7dm7ByDNWPvYrBQ+ElWrBmb5Abgd4G7q+pikpur6isjjuUKU5K0TluxwtQ+4FxVna+q\ny8Ax4MCKPq8HPlBVFwFGhbwkaXbGBf1u4MJQ+2K3bdhe4MYkn0hyKslP9VmgJGk6u8bsn2Tl8GuA\nlwAvB64DPpXkv1XV2ZUdkywONZeqamnCOiVpR0iyACz0ecxxQX8JmB9qzzOY1Q+7AHylqp4Bnkny\nSeAO4NuCvqoWN16qJLWvmwAvXW0nuX/aY447dXMK2JtkT5JrgXuA4yv6/EfgziRzSa4Dfgj4/LSF\nSZL6seaMvqquJDkEnADmgKNVtZzkYLf/SFWdSfIx4PeBbwLvqSqDXpK2iTVvr+z1hby9UpLWbStu\nr5QkPccZ9JLUOINekhpn0EtS4wx6SWqcQS9JjTPoJalxBr0kNc6gl6TGGfSS1DiDXpIaZ9BLUuMM\neklqnEEvSY0z6CWpcWODPsn+JGeSnE1yeMT+hSRPJTndff3S5pQqSdqINVeYSjIHPAjcxWD92JNJ\njlfV8oqu/7mqXrVJNUqSpjBuRr8POFdV56vqMnAMODCinytHSdI2NS7odwMXhtoXu23DCnhZkkeS\nfDTJ7X0WKEmazpqnbhiE+DifBear6htJXgF8GPieqSuTJPViXNBfAuaH2vMMZvXPqqqnhx4/lORd\nSW6sqidXHizJ4lBzqaqW1l2xJDUsyQKw0Osxq1aftCfZBTwGvBx4HPgMcO/wxdgktwB/WFWVZB/w\nH6pqz4hjTb2SuSTtNH1k55oz+qq6kuQQcAKYA45W1XKSg93+I8DfAP5+kivAN4DXTVOQJKlfa87o\ne30hZ/SStG59ZKfvjJWkxhn0ktQ4g16SGmfQS1LjDHpJapxBL0mNM+glqXEGvSQ1zqCXpMYZ9JLU\nOINekhpn0EtS4wx6SWqcQS9JjTPoJalxBr0kNW5s0CfZn+RMkrNJDq/R7weTXEnymn5LlCRNY82g\nTzIHPAjsB24H7k1y2yr93g58DHAVKUnaRsbN6PcB56rqfFVdBo4BB0b0exPwfuDLPdcnSZrSuKDf\nDVwYal/stj0ryW4G4f/ubtPWLEIrSZrIuKCfJLTfCby1BquMB0/dSNK2smvM/kvA/FB7nsGsftgP\nAMeSANwMvCLJ5ao6vvJgSRaHmktVtbTegiWpZUkWgIVejzmYiK/6gruAx4CXA48DnwHurarlVfq/\nF/hIVX1wxL6qKmf7krQOfWTnmjP6qrqS5BBwApgDjlbVcpKD3f4j07y4JGnzrTmj7/WFnNFL0rr1\nkZ2+M1aSGmfQS1LjDHpJapxBL0mNM+glqXEGvSQ1zqCXpMYZ9JLUOINekhpn0EtS4wx6SWqcQS9J\njTPoJalxBr0kNc6gl6TGGfSS1LixQZ9kf5IzSc4mOTxi/4EkjyQ5neS/J/nRzSlVkrQR49aMnWOw\nZuxdDBYKP8mKNWOT/Mmq+qPu8V8APlRV3z3iWK4wJUnrtBUrTO0DzlXV+aq6DBwDDgx3uBrynRcA\nX5mmIElSv8YF/W7gwlD7Yrftj0ny6iTLwEPAff2VJ0ma1q4x+ydaObyqPgx8OMkPA/8GePGofkkW\nh5pLVbU0yfElaadIsgAs9HnMcUF/CZgfas8zmNWPVFX/JcmuJDdV1RMj9i9uqEpJ2iG6CfDS1XaS\n+6c95rhTN6eAvUn2JLkWuAc4PtwhyYuSpHv8kq7Qbwt5SdJsrDmjr6orSQ4BJ4A54GhVLSc52O0/\nArwW+Okkl4GvA6/b5JolSeuw5u2Vvb6Qt1dK0rptxe2VkqTnOINekhpn0EtS4wx6SWqcQS9JjTPo\nJalxBr0kNc6gl6TGGfSS1DiDXpIaZ9BLUuMMeklqnEEvSY0z6CWpcQa9JDXOoJekxk0U9En2JzmT\n5GySwyP2/2SSR5L8fpLfTfIX+y9VkrQRY1eYSjIHPAbcxWCx8JPAvVW1PNTnLwOfr6qnkuwHFqvq\npSuO4wpTkrROW7XC1D7gXFWdr6rLwDHgwHCHqvpUVT3VNT8N3DpNUZKk/kwS9LuBC0Pti9221fwM\n8NFpipIk9WfXBH0mXj08yV8F3gj8lVX2Lw41l6pqadJjS9JOkGQBWOjzmJME/SVgfqg9z2BW/8d0\nF2DfA+yvqv8z6kBVtbiBGiVpx+gmwEtX20nun/aYk5y6OQXsTbInybXAPcDx4Q5J/gzwQeBvVdW5\naYuSJPVn7Iy+qq4kOQScAOaAo1W1nORgt/8I8I+B7wDenQTgclXt27yyJUmTGnt7ZW8v5O2VkrRu\nW3V7pSTpOcygl6TGGfSS1DiDXpIaZ9BLUuMMeklqnEEvSY0z6CWpcQa9JDXOoJekxhn0ktQ4g16S\nGmfQS1LjDHpJapxBL0mNM+glqXETBX2S/UnOJDmb5PCI/d+b5FNJ/m+St/RfpiRpo8YuJZhkDngQ\nuIvBQuEnkxyvquWhbk8AbwJevSlVSpI2bJIZ/T7gXFWdr6rLwDHgwHCHqvpyVZ0CLm9CjZKkKUwS\n9LuBC0Pti902SdJzwNhTN0Bvq4cnWRxqLlXVUl/HlqQWJFkAFvo85iRBfwmYH2rPM5jVr1tVLW7k\neZK0U3QT4KWr7ST3T3vMSU7dnAL2JtmT5FrgHuD4Kn0zbUGSpH6lavyZmSSvAN4JzAFHq+qfJTkI\nUFVHknwncBK4Hvgm8DRwe1V9fegYVVX+IZCkdegjOycK+j4Y9JK0fn1kp++MlaTGGfSS1DiDXpIa\nZ9BLUuMMeklq3I4O+iR3Jzd9fPCVu2ddjyRthh17e+Ug2K//EPzK8wdb7nsGvvYTVXVitpVJ0rf0\nkZ2TfARCo258C7zj+fCGqxueD29+C2DQS2rKjj51I0k7wQ6e0T/5ANx3JzB86uaBmZYkSZtgx56j\nh6vn6W/slj588gHPz0vabvysG0lqnJ91I0kay6CXpMYZ9JLUuLFBn2R/kjNJziY5vEqfX+n2P5Lk\n+/svU5K0UWsGfZI54EFgP3A7cG+S21b0eSXw3VW1F/h7wLs3qdbedYvwbivbsSbYnnVZ02SsaXLb\nta5pjZvR7wPOVdX5qroMHAMOrOjzKuB9AFX1aeCGJLf0XunmWJh1ASMszLqAVSzMuoARFmZdwAgL\nsy5ghIVZFzDCwqwLWMXCrAvYDOOCfjdwYah9sds2rs+t05cmSerDuKCf9Cb7lfd4bs3N+ZKksdZ8\nw1SSlwKLVbW/a78N+GZVvX2oz78ElqrqWNc+A/xIVf3vFccy/CVpAzb70ytPAXuT7AEeB+4B7l3R\n5zhwCDjW/WH46sqQ76NQSdLGrBn0VXUlySEGH907BxytquUkB7v9R6rqo0lemeQc8EfA39n0qiVJ\nE9uyz7qRJM3G1O+MneQNVV2/H0xyJclrhrbdkOT9SZaTfL479dOLDdT12qFtb0vyB0k+l+TfJXne\nVtSUZCHJU0lOd1+/tN7vZ6tqSjKf5BPdz+nRJPfNuqah/XPd9o9sh5pmOc7H1DWTcT5U1+lu7Cyt\n57lbWdMsx/lqNQ3tm3ycV9WGvxiczjkH7AGuAR4Gblul3+8A/wl47dD29wFv7B7vAl44TT191NU9\n54vA87r2vwfesBU1MbiH9/hGv58truk7ge/rHr8AeGzWNQ3tfzPwb9fqs5U1zXKcr/H7m+U4vwH4\nA+DWrn3zNhjnq9U0y3E+sqaNjPNpZ/STvKEK4E3A+4EvX92Q5IXAD1fVv4bB9YCqemrKeqauC/ga\ncBm4Lsku4Drg0hbWNOqi9aTP3bKaqup/VdXD3eOvA8vAd82yJoAktwKvBP7Van22sqZtMs5H/Rxm\nOc5fD3ygqi4CVNVX1vHcLa1pxuN8tZ/Tusf5tEE/9g1VSXYz+AaufjTC1YsCfw74cpL3Jvlskvck\nuW7Keqauq6qeBB4A/geDO42+WlW/vRU1dTW8LIPPDPpoktvX8dytrulZGdyV9f3Ap7dBTb8M/EPg\nmz3U0kdNMx3nq9U143G+F7ixOyVyKslPreO5W13Ts2YwzteqaV3jfNqgn+RK7juBt9bg/xrhW399\ndgEvAd5VVS9hcMfOW6esZ+q6krwI+DkG/6X6LuAFSX5yi2r6LDBfVXcAvwp8uIfXXcvUNSV5AYP/\nFf2DbsYzs5qS/Bjwh1V1mv5m81PVxOzH+Wo/q1mO82sY/ExeCdwN/KMkeyd87lbXBMxsnI+saSPj\nfNqgvwTMD7XnGfxlGvYDDO6x/xLwWuBdSV7F4K/Zxao62fV7P4Nvqg8bretAt/33quqJqroCfBB4\n2VbUVFVPV9U3uscPAdckubHrN+772eqaSHIN8AHgN6qqrz9KG63pJga/p1d1v9PfBH40ya/PsKar\nv7uZjfM1flZ/iRmNcwb/9j9eVc9U1RPAJ4E7JnzuVtc0s3G+Rk3rH+dTXlDYBXyBwazgWsZcPAHe\nC7xmqP1J4Hu6x4vA26epp4+6uh/kowwWDQ+DC2k/uxU1AbfwrVte9wHnN/L9bFFNAX4d+OU+fmd9\n1LSiz48AH9kONc1ynK/x+/u+GY7z7wV+m8EFyeuAzzH4dNxZjvPVaprlOB9Z00bGeR8Fv4LBlehz\nwNu6bQeBgyP6rgz6O4CTwCMMZhS93I3QQ12/wOBq9+e6fwDXbEVNwM92//geBn4PeOlaz51lTcCd\nDM4PPgyc7r72z/rntOIfQC933fTwu5vZOB9T10zGedf++aHXvm/W43y1mmY5ztf6Oa13nPuGKUlq\nnEsJSlLjDHpJapxBL0mNM+glqXEGvSQ1zqCXpMYZ9JLUOINekhr3/wGmcEgeARsfxQAAAABJRU5E\nrkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f3ef40330f0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.scatter(particles[\"position\"][:,0], particles[\"position\"][:,1])\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.4.3"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment