diff --git a/accep_reject.ipynb b/accep_reject.ipynb index 051a66c..23398bd 100644 --- a/accep_reject.ipynb +++ b/accep_reject.ipynb @@ -1,8 +1,15 @@ { "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Used this notebook to play with acceptance/rejection principle" + ] + }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": { "collapsed": false }, @@ -39,14 +46,14 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ - "box_size = 8\n", - "n = 10**7\n", + "box_size = 4\n", + "n = 10**6\n", "\n", "valid_networks = []\n", "for network in get_some_possible_network(n, box_size):\n", @@ -56,16 +63,16 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAEACAYAAACwB81wAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAADrJJREFUeJzt3X+M5Hddx/Hn6zgqkUINbVLlaqsUmiZEqAjHRSEMVmGL\niWf4Q65NAJsY7w+Lxj+wxWi6/xgl0aiISk7PVlQ4YiF6mhKq0IkBoT3SXwh7vSuYcnctNVh+BBQ9\nLm//mPGcLLs7czvf3Zmdz/ORbDrfnc9+5/PJDM/98pmdNlWFJGnx7Zr1BCRJ28PgS1IjDL4kNcLg\nS1IjDL4kNcLgS1IjxgY/yeEkTyV5ZIMx70pyMslDSa7rdoqSpC5McoV/B/D69e5McgNwdVW9CDgI\nvKejuUmSOjQ2+FX1ceArGwzZD7x3OPY+4JIkl3czPUlSV7rYw98DnBo5PjP8niRpjvimrSQ1YncH\n5zgDfP/I8RXD732HJP6LeyRpE6oq055j0iv8DL/WchR4C0CSfcBXq+qp9U5UVQv7dfvtt898Dq5v\n81/DV+hCvk4X/blb9PV1ZewVfpL3AT3g0iRfBG4HLhr8b6IOVdXdSd6Q5DHgm8DNnc1OktSZscGv\nqpsmGHNLN9ORJG0V37TtUK/Xm/UUttSir2+RLfpzt+jr60q63B8a+2BJbefjSRciCYM9/HS6bypN\nKwm1jW/aSpJ2OIMvSY0w+JLUCIMvSY0w+JLUCIMvSY0w+JLUCIMvSY0w+JLUCIMvSY0w+JLUCIMv\nSY0w+JLUCIMvSY0w+JLUCIMvSY0w+JLUCIMvSY0w+JLUCIMvSY0w+JLUCIMvSY0w+JLUCIMvSY0w\n+JLUCIMvSY0w+JLUCIMvSY0w+JLUCIMvSY0w+JLUCIMvSY0w+JLUCIMvSY2YKPhJlpIcT3Iiya1r\n3H9pkg8neSjJZ5L8XOczlSRNJVW18YBkF3ACuB54AjgGHKiq4yNjbgeeVVXvSHIZ8ChweVV9e9W5\natzjSbOSBCgg+DrVPElCVWXa80xyhb8XOFlVj1fVWeAIsH/VmC8Bzxnefg7wH6tjL0mard0TjNkD\nnBo5Ps3gl8CoPwU+muQJ4GLgTd1MT5LUlUmCP4l3AA9X1WuTXA38Y5KXVNU3Vg9cXl4+f7vX69Hr\n9TqagiQthn6/T7/f7/y8k+zh7wOWq2ppeHwbUFX1zpExdwO/WVWfGB5/FLi1qj696lzu4WtuuYev\nebWde/jHgBcmuSrJRcAB4OiqMSvATwwndjlwDfCFaScnSerO2C2dqjqX5BbgHga/IA5X1UqSg4O7\n6xDwW8AdSR4GAvxqVT29lROXJF2YsVs6nT6YWzqaY27paF5t55aOJGkBGHxJaoTBl6RGGHxJaoTB\nl6RGGHxJaoTBl6RGGHxJaoTBl6RGGHxJaoTBl6RGGHxJaoTBl6RGGHxJaoTBl6RGGHxJaoTBl6RG\nGHxJaoTBl6RGGHxJaoTBl6RGGHxJaoTBl6RGGHxJaoTBl6RGGHxJaoTBl6RGGHxJaoTBl6RGGHxJ\naoTBl6RGGHxJaoTBl6RGGHxJaoTBl6RGTBT8JEtJjic5keTWdcb0kjyY5F+T3NvtNCVJ00pVbTwg\n2QWcAK4HngCOAQeq6vjImEuAfwFeV1VnklxWVV9e41w17vGkWUkCFBB8nWqeJKGqMu15JrnC3wuc\nrKrHq+oscATYv2rMTcAHq+oMwFqxlyTN1iTB3wOcGjk+PfzeqGuA5yW5N8mxJG/uaoKSpG7s7vA8\nLwN+HHg28Mkkn6yqxzo6vyRpSpME/wxw5cjxFcPvjToNfLmqvgV8K8k/Ay8FviP4y8vL52/3ej16\nvd6FzViSFly/36ff73d+3knetH0G8CiDN22fBO4HbqyqlZEx1wJ/CCwB3wXcB7ypqj636ly+aau5\n5Zu2mlddvWk79gq/qs4luQW4h8Ge/+GqWklycHB3Haqq40k+AjwCnAMOrY69JGm2xl7hd/pgXuFr\njnmFr3m1nX+WKUlaAAZfkhph8CWpEQZfkhph8CWpEQZfkhph8CWpEQZfkhph8CWpEQZfkhph8CWp\nEQZfkhph8CWpEQZfkhph8CWpEQZfkhph8CWpEQZfkhph8CWpEQZfkhph8CWpEQZfkhph8CWpEQZf\nkhph8CWpEQZfkhph8CWpEQZfkhph8CWpEQZfkhph8CWpEQZfkhph8CWpEQZfkhph8CWpEQZfkhox\nUfCTLCU5nuREkls3GPeKJGeTvLG7KUqSujA2+El2Ae8GXg+8GLgxybXrjPtt4CNdT1KSNL1JrvD3\nAier6vGqOgscAfavMe5twF3Av3c4P0lSRyYJ/h7g1Mjx6eH3zkvyfOBnqupPgHQ3PUlSV7p60/b3\ngdG9faMvSXNm9wRjzgBXjhxfMfzeqJcDR5IEuAy4IcnZqjq6+mTLy8vnb/d6PXq93gVOWZIWW7/f\np9/vd37eVNXGA5JnAI8C1wNPAvcDN1bVyjrj7wD+vqo+tMZ9Ne7xpFkZXK8UEHydap4koaqm3jkZ\ne4VfVeeS3ALcw2AL6HBVrSQ5OLi7Dq3+kWknJUnq3tgr/E4fzCt8zTGv8DWvurrC95O2ktQIgy9J\njTD4ktQIgy9JjTD4ktQIgy9JjTD4ktQIgy9JjTD4ktQIgy9JjTD4ktQIgy9JjTD4ktQIgy9JjTD4\nktQIgy9JjTD4ktQIgy9JjTD4ktQIgy9JjTD4ktQIgy9JjTD4ktQIgy9JjTD4ktQIgy9JjTD4ktQI\ngy9JjTD4ktQIgy9JjTD4ktQIgy9JjTD4ktQIgy9JjTD4ktQIgy9JjZgo+EmWkhxPciLJrWvcf1OS\nh4dfH0/yQ91PVZI0jVTVxgOSXcAJ4HrgCeAYcKCqjo+M2QesVNXXkiwBy1W1b41z1bjHk2YlCVBA\n8HWqeZKEqsq055nkCn8vcLKqHq+qs8ARYP/ogKr6VFV9bXj4KWDPtBOTJHVrkuDvAU6NHJ9m46D/\nPPDhaSYlSere7i5PluS1wM3Aq9Ybs7y8fP52r9ej1+t1OQVJ2vH6/T79fr/z806yh7+PwZ780vD4\nNqCq6p2rxr0E+CCwVFWfX+dc7uFrbrmHr3m1nXv4x4AXJrkqyUXAAeDoqslcySD2b14v9pKk2Rq7\npVNV55LcAtzD4BfE4apaSXJwcHcdAn4DeB7wxxlcJp2tqr1bOXFJ0oUZu6XT6YO5paM55paO5tV2\nbulIkhaAwZekRhh8SWqEwZekRhh8SWqEwZekRhh8SWqEwZekRhh8SWqEwZekRhh8SWqEwZekRhh8\nSWqEwZekRhh8SWqEwZekRhh8SWqEwZekRhh8SWqEwZekRhh8SWqEwZekRhh8SWqEwZekRhh8SWqE\nwZekRhh8SWqEwZekRhh8SWqEwZekRhh8SWqEwZekRhh8SWqEwZekRhh8SWrERMFPspTkeJITSW5d\nZ8y7kpxM8lCS67qdpiRpWmODn2QX8G7g9cCLgRuTXLtqzA3A1VX1IuAg8J4tmOvc6/f7s57Cllr0\n9S2yRX/uFn19XZnkCn8vcLKqHq+qs8ARYP+qMfuB9wJU1X3AJUku73SmO8Civ+gWfX2LbNGfu0Vf\nX1cmCf4e4NTI8enh9zYac2aNMZKkGdo96wlspbe+9a08/fTTXHrppdx5552zno4kzVSqauMByT5g\nuaqWhse3AVVV7xwZ8x7g3qr6wPD4OPCaqnpq1bk2fjBJ0pqqKtOeY5Ir/GPAC5NcBTwJHABuXDXm\nKPCLwAeGvyC+ujr20M2EJUmbMzb4VXUuyS3APQz2/A9X1UqSg4O761BV3Z3kDUkeA74J3Ly105Yk\nXaixWzqSpMXQySdtkxxO8lSSR0a+dyTJA8Ovf0vywAY/v2s47mgX8+naNOtLckmSv0mykuSzSV65\nfTOfzJTre8dwXY8k+eskF23fzCezzvpekeT+JA8O//nydX527IcOZ2mza0tyRZKPDZ+7zyT5pe2d\n+WSmee6GY3diWyZ9bV54W6pq6i/gVcB1wCPr3P87wK9v8PO/AvwVcLSL+XT9Nc36gDuBm4e3dwPP\nnfV6ulofcBXwBeCi4fEHgLfMej2TrA+4F3jd8PYNDP7oYPXP7QIeG67zmcBDwLWzXk9Ha/te4Lrh\n7YuBR+dtbdOsb2TsjmvLpOvbTFs6ucKvqo8DX9lgyM8C71/rjiRXAG8A/qyLuWyFza4vyXOBV1fV\nHcPzfLuqvr41s9y8KZ6/rwP/Azw7yW7gu4Enup/hdNZZ35PAJcPb38PgsyOrTfKhw5na7Nqq6ktV\n9dDw9jeAFebwszNTPHc7uS1j17fZtmz53+EneTXwpar6/DpDfg94O/+/wB1lzPp+EPhykjuAlwKf\nBn65qv5rO+c4jY3WV1VfSfK7wBeB/wTuqap/2u45btJtwCeG8w/wo2uMWetDh3u3YW7TmmRt5yX5\nAQZXmfdt+cy6Men6dmpbJlnfptqyHf+2zBtZ/+r+p4CnhlcaGX7tNOuuj8Ev1JcBf1RVL2MQxdu2\na2Id2ej5ewGD/8t8FfB84OIkN23j3KZxGHhbVV3JYA1/PuP5dGnitSW5GLiLQSy+sU3zm9bY9e3w\ntkzy/G2qLVsa/CTPAN7IYG93LT8G/HSSLzCIymuTvHcr59SlCdZ3GjhVVZ8eHt/F4EnaESZY38uB\nT1TV01V1DvgQY64m58grq+pvAarqLta+cj8DXDlyfAXrbB/MmUnWxnAb7i7gL6vq77ZxftOaZH07\nuS2TrG9Tbeky+Gv9Fv1JYKWq1tzXrapfq6orq+oFDD7Q9bGqekuHc+rSZtb3FHAqyTXDb10PfG7r\npjiVC14fgzf69iV5VpIwWN/KFs5xGqvXdzLJawCSXA+cWONnzn/ocPjXRwcYfMhw3mxmbTC4cvxc\nVf3BFs9vWhe8vh3elknWt7m2dPRO8/sYvFn33wz2c//vneM7gF9YNfb7gH9Y4xyvYX7fSd/0+hjs\nrx1j8BceHwIumfV6Ol7f24HPAo8AfwE8c9brmWR9wI8w2LN+EPgk8MPrrG+JwS+2k8Bts15LV2tj\ncAV8bvi6fBB4AFia9Xq6fO5GzrGj2nIBr80LbosfvJKkRvifOJSkRhh8SWqEwZekRhh8SWqEwZek\nRhh8SWqEwZekRhh8SWrE/wK3PGNUV5ra5AAAAABJRU5ErkJggg==\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -77,55 +84,6 @@ "None" ] }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "18.0" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "mean(list(map(get_number_of_activated_antenna, valid_networks)))" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "□-□-□-□-■-□-□-□\n", - "■-□-□-□-□-■-□-■\n", - "□-■-□-■-□-□-■-□\n", - "□-□-■-□-□-■-□-■\n", - "■-□-□-□-■-□-■-□\n", - "□-■-□-□-□-□-□-□\n", - "□-□-□-□-□-□-■-□\n", - "■-□-□-□-□-■-□-■\n", - "\n" - ] - } - ], - "source": [ - "print(pp_network(valid_networks[0], 8))" - ] - }, { "cell_type": "code", "execution_count": null, diff --git a/brute_force.ipynb b/brute_force.ipynb index 37f80f8..c35ee5e 100644 --- a/brute_force.ipynb +++ b/brute_force.ipynb @@ -1,8 +1,15 @@ { "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Use this notebook to generate all the possible network using brute force" + ] + }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 13, "metadata": { "collapsed": false }, @@ -28,59 +35,14 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [], "source": [ - "box_size = 3\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\nC5aY7wAAAABJRU5ErkJggg==\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "hist(list(map(get_number_of_activated_antenna, valid_networks)), bins=100)\n", - "None" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "6.208433278626436" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "mean(list(map(get_number_of_activated_antenna, valid_networks)))" + "box_size = 4\n", + "all_networks = [network for network in get_all_possible_network(box_size) if is_valid_network(network, box_size)]\n" ] }, { @@ -94,73 +56,35 @@ "name": "stdout", "output_type": "stream", "text": [ - "■-□-■-□-■\n", - "□-■-□-■-□\n", - "■-□-■-□-■\n", - "□-■-□-■-□\n", - "■-□-■-□-■\n", - "\n" + "4.06482982172\n" ] - } - ], - "source": [ - "print(pp_network(valid_networks[-1], box_size))" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": { - "collapsed": false - }, - "outputs": [ + }, { "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAEACAYAAABI5zaHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAFRxJREFUeJzt3X+sXOV95/H3h3ih/CgIJQs3iwMGkVJnpYiE4FTL7naq\nNIQkEkb5g5K0m6RJdiOxbFAaRbGRKl9VVbpEgmilXf5oybIGQSlBm8WoEjgEJqsgrUmx3RDsUmsr\nO8Yb321akhaxUk347h/32B3b93Ln+s7cOXP8fkkjn/vMc+Z878z4c88855x5UlVIkrrljEkXIEka\nPcNdkjrIcJekDjLcJamDDHdJ6iDDXZI6aOhwT3JGkl1JtjU/b0nycpKdze2Ggb6bk+xLsjfJ9eMo\nXJK0uDXL6Hs78CJw/kDb3VV192CnJOuBm4H1wFrgqSTvLE+ol6RVM9See5K1wEeAe0+8a4HuG4GH\nq+r1qtoP7AM2rKRISdLyDDss83Xgy8CJe9+3Jdmd5N4kFzRtlwAHB/ocatokSatkyXBP8lFgrqp2\nc/ye+j3AFVV1NXAYuGs8JUqSlmuYMffrgBuTfAQ4G/jFJPdX1ScH+vwR8HizfAh4x8B9a5u24yRx\nDF6STkFVLTQkfpwl99yr6o6qurSqrgBuAZ6uqk8mmRno9jHgh83yNuCWJGcmuRy4Enhukcdu/W3L\nli0Tr8E6rXOa65yGGqepzmEt52yZE30tydXAG8B+4PNNYO9J8giwBzgC3FrLqUiStGLLCveq+i7w\n3Wb5k2/S7w+AP1hZaZKkU+UVqkvo9XqTLmEo1jla1jk601AjTE+dw8qkRkySOFojScuUhBrFAVVJ\n0vQx3CWpgwx3Seogw12SOshwl6QOMtwlqYMMd0nqIMNdkjrIcJekDjLcJamDDHdJ6iDDXZI6yHCX\npA4y3CWpg4YO9yRnJNmZZFvz84VJtid5KcmTSS4Y6Ls5yb4ke5NcP47CJUmLW86e++3MT5131Cbg\nqaq6Cnga2AyQ5F3AzcB64MPAPUmW/O5hSdLoDBXuSdYCHwHuHWjeCGxtlrcCNzXLNwIPV9XrVbUf\n2AdsGEm10iqZmVlHEpIwM7Nu0uVIyzbsnvvXgS8Dg1MnXVxVcwBVdRi4qGm/BDg40O9Q0yZNjbm5\nA8y/3atZlqbLkhNkJ/koMFdVu5P03qTrsufMm52dPbbc6/U6N4ehJK1Uv9+n3+8ve70l51BN8lXg\nt4DXgbOBXwS+BbwP6FXVXJIZ4JmqWp9kE1BVdWez/hPAlqraccLjOoeqWmv+MNHR92fwvaq2GNkc\nqlV1R1VdWlVXALcAT1fVvwEeBz7ddPsU8FizvA24JcmZSS4HrgSeO4XfQZJ0ipYclnkT/xF4JMln\ngAPMnyFDVe1J8gjzZ9YcAW51F12SVteSwzJj27DDMmoxh2XUViMblpEkTR/DXZI6yHCXpA4y3CWp\ngwx3Seogw12SOshwl6QOMtwlqYMMd0nqIMNdkjrIcJekDjLcJamDDHdJ6iDDXZI6yHCXpA4y3CWp\ng5YM9yRnJdmRZFeSF5s5VUmyJcnLSXY2txsG1tmcZF+SvUmuH+cvIEk62VAzMSU5p6peS/IW4Fng\nS8CvA39fVXef0Hc98BBwLbAWeAp454nTLjkTk9rMmZjUViOdiamqXmsWz2rWeeXodhbovhF4uKpe\nr6r9wD5gwzDbkSSNxlDhnuSMJLuAw0C/qvY0d92WZHeSe5Nc0LRdAhwcWP1Q0yZJWiVrhulUVW8A\n70lyPrA9ya8C9wC/V1WV5PeBu4DPLWfjs7Ozx5Z7vR69Xm85q0tS5/X7ffr9/rLXG2rM/bgVkt8F\nXququwbaLgMer6p3J9kEVFXd2dz3BLClqnac8DiOuau1HHNXW41szD3J244OuSQ5G/ggsDvJzEC3\njwE/bJa3AbckOTPJ5cCVwHPL/QUkSadumGGZtwNbM78rcwbwQFV9J8n9Sa4G3gD2A58HqKo9SR4B\n9gBHgFvdRZek1bXsYZmRbdhhGbWYwzJqq5GeCilJmi6GuyR1kOEuSR1kuEtSBxnuktRBhrskdZDh\nLkkdZLhLUgcZ7pLUQYa7JHWQ4S5JHWS4S1IHGe6S1EGGuyR1kOEuSR1kuEtSBw0zzd5ZSXYk2ZXk\nxSRfbdovTLI9yUtJnjw6FV9z3+Yk+5LsTXL9OH8BSdLJhpqJKck5VfVakrcAzwJfAm4E/qaqvpbk\nK8CFVbUpybuAB4FrgbXAU8A7T5x2yZmY1GbOxKS2GulMTFX1WrN4VrPOK8BGYGvTvhW4qVm+EXi4\nql6vqv3APmDD8KVLWsrMzDqSkISZmXWTLkctNFS4JzkjyS7gMNCvqj3AxVU1B1BVh4GLmu6XAAcH\nVj/UtEkakbm5A8x/sqhmWTremmE6VdUbwHuSnA88maTHP35mPdZtuRufnZ09ttzr9ej1est9CEnq\ntH6/T7/fX/Z6Q425H7dC8rvA/wM+C/Sqai7JDPBMVa1Psgmoqrqz6f8EsKWqdpzwOI65q7XaPube\n9vo0PiMbc0/ytqNnwiQ5G/ggsAvYBny66fYp4LFmeRtwS5Izk1wOXAk8t+zfQJJ0yoYZlnk7sDXz\nuwpnAA9U1XeaMfhHknwGOADcDFBVe5I8AuwBjgC3uosuSatr2cMyI9uwwzJqsbYPe7S9Po3PSE+F\nlCRNF8NdkjrIcJekDjLcJamDDHdJ6iDDXZI6yHCXpA4y3LUqBr/F0G8ylMbPi5i0Ko6/6AbafuFN\n2y8Sant9Gh8vYpKk05jhLkkdZLhLUgcZ7pLUQYa7JHWQ4S5JHTTMTExrkzyd5MUkLyT5D037liQv\nJ9nZ3G4YWGdzkn1J9ia5fpy/gCTpZEue597MjzpTVbuTnAc8D2wEfgP4+6q6+4T+64GHgGuBtcBT\nwDtPPKnd89xPL57nPlptr0/jM7Lz3KvqcFXtbpZfBfYClxzdzgKrbAQerqrXq2o/sA/YMGzhkqSV\nW9aYe5J1wNXAjqbptiS7k9x7dBJt5oP/4MBqh/jHPwaSpFUwdLg3QzKPArc3e/D3AFdU1dXAYeCu\n8ZQoSVquNcN0SrKG+WB/oKoeA6iqvx7o8kfA483yIeAdA/etbdpOMjs7e2y51+vR6/WGLFuSTg/9\nfp9+v7/s9Yb64rAk9wM/qarfGWibqarDzfIXgWur6hNJ3gU8CLyf+eGYb+MB1dOeB1RHq+31aXyG\nPaC65J57kuuA3wReSLKL+XfUHcAnklwNvAHsBz4PUFV7kjwC7AGOALea4pK0uvzKX60K99xHq+31\naXz8yl9JOo0Z7pLUQYa7JHWQ4S5JHWS4S1IHGe6S1EGGuyR1kOEuSR1kuEtSBxnuktRBhrskdZDh\nLkkdZLhLUgcZ7pLUQYa7JHWQ4S5JHbRkuCdZm+TpJC8meSHJF5r2C5NsT/JSkieTXDCwzuYk+5Ls\nTXL9OH8BSdLJlpyJKckMMFNVu5OcBzwPbAR+G/ibqvpakq8AF1bVpoE5VK9lfnLsp3AO1dOeMzGN\nVtvr0/iMbCamqjpcVbub5VeBvcyH9kZga9NtK3BTs3wj8HBVvV5V+4F9wIZl/waSpFO2rDH3JOuA\nq4H/BVxcVXMw/wcAuKjpdglwcGC1Q02bJGmVDB3uzZDMo8DtzR78iZ8D/VwoSS2xZphOSdYwH+wP\nVNVjTfNckouraq4Zl/+/Tfsh4B0Dq69t2k4yOzt7bLnX69Hr9ZZVvCR1Xb/fp9/vL3u9JQ+oAiS5\nH/hJVf3OQNudwN9W1Z2LHFB9P/PDMd/GA6qnPQ+ojlbb69P4DHtAdZizZa4D/ifwAvPvpgLuAJ4D\nHmF+L/0AcHNV/bRZZzPwWeAI88M42xd4XMP9NGK4j1bb69P4jCzcx8VwP70Y7qPV9vo0PiM7FVKS\nNH0Md0nqIMNdkjrIcJekDjLcJamDDHdJ6iDDXZI6yHCXpA4y3CWpgwx3Seogw12SOshwl6QOMtwl\nqYMMd0nqIMNdkjrIcJekDloy3JN8I8lckh8MtG1J8nKSnc3thoH7NifZl2RvkuvHVbgkaXHD7Lnf\nB3xogfa7q+q9ze0JgCTrgZuB9cCHgXsyP2WMJGkVLRnuVfU94JUF7lootDcCD1fV61W1H9gHbFhR\nhZKkZVvJmPttSXYnuTfJBU3bJcDBgT6HmjZJ0ipac4rr3QP8XlVVkt8H7gI+t9wHmZ2dPbbc6/Xo\n9XqnWI4kdVO/36ff7y97vQwza3qSy4DHq+rdb3Zfkk1AVdWdzX1PAFuqascC65Uztp8+5g+9DL7e\noc2v//H1tq/Wtten8UlCVS15LHPYYZkwMMaeZGbgvo8BP2yWtwG3JDkzyeXAlcBzQ25DkjQiSw7L\nJHkI6AFvTfIjYAvwa0muBt4A9gOfB6iqPUkeAfYAR4Bb3T2XpNU31LDMWDbssMxpxWGZ0Wp7fRqf\nUQ/LSJKmiOEuSR1kuEtSBxnuktRBhrskdZDhLkkdZLhLUgcZ7pLUQYa7JHWQ4S5JHWS4S1IHGe6S\n1EGGuyR1kOEuaaxmZtaR5NhtZmbdpEs6LfiVv1oVfuXvaLW9vkHT9tq3nV/5K0mnsSXDPck3kswl\n+cFA24VJtid5KcmTSS4YuG9zkn1J9ia5flyFS5IWN8ye+33Ah05o2wQ8VVVXAU8DmwGSvAu4GVgP\nfBi4J/OfySRJq2jJcK+q7wGvnNC8EdjaLG8FbmqWbwQerqrXq2o/sA/YMJpSJUnDOtUx94uqag6g\nqg4DFzXtlwAHB/odatokSatozYge55QOfc/Ozh5b7vV69Hq9EZUjSd3Q7/fp9/vLXm+oUyGTXAY8\nXlXvbn7eC/Sqai7JDPBMVa1Psgmoqrqz6fcEsKWqdizwmJ4KeRqZttPh2n6qYdvrGzRtr33bjfpU\nyDS3o7YBn26WPwU8NtB+S5Izk1wOXAk8N+Q2tAKDF4p4kYikJffckzwE9IC3AnPAFuB/AN8E3gEc\nAG6uqp82/TcDnwWOALdX1fZFHtc99xFq+57ctO29Tdfz2b76Bk3ba992w+65e4VqR7T9P/u0/Qef\nruezffUNmrbXvu28QlWSTmOGuyR1kOEuSR1kuEtSBxnuktRBhrskdZDhLkkdZLhLUgcZ7pLUQYa7\nJHWQ4S5JHWS4S1IHGe6S1EGGuyR1kOEuSR1kuEtSB61oguwk+4GfAW8AR6pqQ5ILgT8BLgP2Mz9L\n089WWKckaRlWuuf+BvMTZb+nqjY0bZuAp6rqKuBpYPMKtyFJWqaVhnsWeIyNwNZmeStw0wq3IUla\nppWGewHfTvL9JJ9r2i6uqjmAqjoMXLTCbUiSlmlFY+7AdVX14yT/FNie5CWOnwmXBX4+ZnZ29thy\nr9ej1+utsBxJ6pZ+v0+/31/2ehnVLORJtgCvAp9jfhx+LskM8ExVrV+gfzkD+ugcP8N8+2aXP74+\naGONg6br+WxffYOm7bVvuyRUVZbqd8rDMknOSXJes3wucD3wArAN+HTT7VPAY6e6DUnSqVnJsMzF\nwLeSVPM4D1bV9iR/BjyS5DPAAeDmEdQpSVqGkQ3LLHvDDsuMVNs/pk/bR/Ppej7bV9+gaXvt227s\nwzKSpPYy3CWpgwx3Seogw12SOshwl6QOMtwlqYMMd0nqIMNdkjrIcJekDjLcJamDDHdJp72ZmXUk\nIQkzM+smXc5I+N0yHdH27xqZtu8Xma7ns331DZqG137ank+/W2aFuvjXXNLpwT33NzFtf83bXOs0\n7L0Nmq7ns331DZqG137ank/33CXpNDW2cE9yQ5K/SPKXSb4yru1Ikk42lnBPcgbwn4EPAf8c+HiS\nXx7HtsavP+kCOqY/6QI6pj/pAjqkP+kCRmpce+4bgH1VdaCqjgAPAxvHtK0x60+6gI7pT7qAjulP\nuoAO6U+6gJFayRyqb+YS4ODAzy8zH/jH2blzJwDnnnsuV1111ZhKkaTTz7jCfSjXXHPNseUDBw5w\n6aWXTrAaSWqnmZl1zM0dWNY6YzkVMsmvALNVdUPz8yagqurOgT7tPddIklpsmFMhxxXubwFeAj4A\n/Bh4Dvh4Ve0d+cYkSScZy7BMVf08yW3AduYP2n7DYJek1TOxK1QlSeMzkStUp+ECpyTfSDKX5AeT\nruXNJFmb5OkkLyZ5IckXJl3TiZKclWRHkl1NnV+ddE1vJskZSXYm2TbpWhaTZH+SP2+e0+cmXc9i\nklyQ5JtJ9jav/fsnXdOJkvxS8zzubP79WRv/HwEk2dw8jz9I8mCSMxftu9p77s0FTn/J/Hj8/wG+\nD9xSVX+xqoUsIcm/BF4F7q+qd0+6nsUkmQFmqmp3kvOA54GNLXw+z6mq15rjMc8CX6qqZydd10KS\nfBG4Bji/qm6cdD0LSfJXwDVV9cqka3kzSf4b8N2qui/JGuCcqvq7CZe1qCafXgbeX1UHl+q/mpJc\nBjwD/HJV/UOSPwH+tKruX6j/JPbcp+ICp6r6HtDq/zgAVXW4qnY3y68Ce5m/zqBVquq1ZvEs5t93\nrXxuk6wFPgLcO+lalhBa/t1QSc4H/lVV3QdQVa+3Odgbvw7877YFe+PvgH8Azj36h5L5HeQFTeLN\nsdAFTq0Lo2mUZB1wNbBjspWcrBnq2AUcBvpVtWfSNS3i68CXOf5rDNuogG8n+X6SfzvpYhZxOfCT\nJPc1Qx5/mOTsSRe1hN8A/njSRSyk+ZR2F/Aj4BDw06p6arH+rf7Lr+E1QzKPArc3e/CtUlVvVNV7\ngLXAv07yq5Ou6URJPgrMNZ+E0tza6rqqei/znzL+fTOM2DZrgPcC/6Wp9TVg02RLWlySfwLcCHxz\n0rUsJMkVwBeBy4B/BpyX5BOL9Z9EuB8CBi9FXdu06RQ1H9EeBR6oqscmXc+baT6W/ynwvknXsoDr\ngBub8ew/Bn4tyYLjmZNWVT9u/v1r4Fss8PUeLfAycLCq/qz5+VHmw76tPgw83zynbfQ+4Nmq+tuq\n+jnw34F/sVjnSYT794Erk1zWHOm9BWjrWQlt33s76r8Ce6rqP026kIUkeVuSC5rls4EPArsnW9XJ\nquqOqrq0qq5g/n35dFV9ctJ1nSjJOc0nNZKcC1wP/HCyVZ2squaAg0l+qWn6ANDW4TiAj9PSIZnG\nS8CvJPmFzM8u8gHmj7EtaNW/W2ZaLnBK8hDQA96a5EfAlqMHhtokyXXAbwIvNGPaBdxRVU9MtrLj\nvB3Y2rwhz2D+E8Z3JlzTNLsY+FbzFR5rgAeravuEa1rMF4AHmyGPvwJ+e8L1LCjJOcwfTP13k65l\nMVX1580nyeeBnwO7gD9crL8XMUlSB3lAVZI6yHCXpA4y3CWpgwx3Seogw12SOshwl6QOMtwlqYMM\nd0nqoP8P4meNbB7XVXwAAAAASUVORK5CYII=\n", "text/plain": [ - "63" + "" ] }, - "execution_count": 20, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ - "len(valid_networks)" + "print(mean( list(map(get_number_of_activated_antenna, all_networks)) ))\n", + "hist(list(map(get_number_of_activated_antenna, all_networks)), bins=100)\n", + "\n", + "None" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "344239" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sum(list(map(get_number_of_activated_antenna, valid_networks)))" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false + "collapsed": true }, "outputs": [], - "source": [ - "random.choice?" - ] + "source": [] } ], "metadata": { diff --git a/fuck_me.ipynb b/fuck_me.ipynb deleted file mode 100644 index 474410e..0000000 --- a/fuck_me.ipynb +++ /dev/null @@ -1,112 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# algorithme\n", - "\n", - "\n", - "1. Posons $X^{(0)}$ un reseau quelconque.\n", - "\n", - "2. copie $X^{(0)}$ dans $X^{(1)}$\n", - "\n", - "3. pour change antenne dans $X^{(1)}$\n", - " \n", - " 1. si `antenne` peut etre allume et $U(0, 1) < 0.5$\n", - " 1. On allume `antenne` dans $X^{(1)}$ \n", - " 2. sinon\n", - " 1. On eteint `antenne` dans $X^{(1)}$ " - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Populating the interactive namespace from numpy and matplotlib\n" - ] - } - ], - "source": [ - "%pylab inline\n", - "from network.network import (is_valid_network,\n", - " get_number_of_activated_antenna,\n", - " pp_network,\n", - " switch_antenna_in_network,\n", - " turn_off_antenna,\n", - " can_antenna_be_turned_on,\n", - " turn_on_antenna)\n", - "from numpy import mean\n", - "from random import Random\n", - "from itertools import cycle" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "random = Random(666)\n", - "\n", - "def get_all_antennas(box_size):\n", - " return range(box_size * box_size)\n", - " \n", - "def get_new_network_with_gibbs(network, box_size):\n", - " for antenna in get_all_antennas(box_size):\n", - " if can_antenna_be_turned_on(antenna, network, box_size) and random.choice([True, False]):\n", - " network = turn_on_antenna(antenna, network, box_size)\n", - " else:\n", - " network = turn_off_antenna(antenna, network)\n", - " return network" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "networks = [0]\n", - "box_size = 5\n", - "\n", - "for i in range(100):\n", - " last_network = networks[-1]\n", - " networks.append(get_new_network_with_gibbs(last_network, box_size))\n", - "\n" - ] - } - ], - "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 -} diff --git a/gibbs_sampler.ipynb b/gibbs_sampler.ipynb index 9d2b5a1..924545a 100644 --- a/gibbs_sampler.ipynb +++ b/gibbs_sampler.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": { "collapsed": false }, @@ -23,62 +23,41 @@ " pp_network,\n", " turn_off_antenna,\n", " turn_on_antenna)\n", + "from network.gibbs import get_random_networks, estimate_number_of_activated_antenna\n", "from numpy import mean\n", "from random import Random\n" ] }, { "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "random = Random(666)\n", - "\n", - "def create_new_network(network, box_size):\n", - " number_of_square = box_size * box_size\n", - " for antenna in range(number_of_square):\n", - " if can_antenna_be_turned_on(antenna, network, box_size) and random.choice([True, False]):\n", - " network = turn_on_antenna(antenna, network)\n", - " else:\n", - " network = turn_off_antenna(antenna, network)\n", - " return network\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 12, + "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [], "source": [ + "random = Random()\n", + "antennas = []\n", "box_size = 8\n", - "n = 15000\n", - "\n", - "valid_networks = [0]\n", - "\n", - "for random_antenna in range(n):\n", - " network = valid_networks[-1]\n", - " new_network = create_new_network(network, box_size)\n", - " valid_networks.append(new_network)" + "N = 500\n", + "for _, network in zip(range(N), get_random_networks(box_size, random)):\n", + " antennas.append(get_number_of_activated_antenna(network))\n", + " \n", + " " ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -86,142 +65,9 @@ } ], "source": [ - "hist(list(map(get_number_of_activated_antenna, valid_networks)), bins=100)\n", - "None" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "15.072261849210053" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "mean(list(map(get_number_of_activated_antenna, valid_networks)))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "□-■-□-□-■\n", - "□-□-■-□-□\n", - "□-□-□-□-□\n", - "□-■-□-■-□\n", - "■-□-□-□-■\n", - "\n", - "□-□-□-□-■\n", - "□-□-□-■-□\n", - "■-□-■-□-■\n", - "□-□-□-□-□\n", - "■-□-■-□-□\n", - "\n", - "□-□-■-□-□\n", - "□-■-□-□-□\n", - "□-□-■-□-■\n", - "□-□-□-■-□\n", - "■-□-□-□-□\n", - "\n", - "□-□-□-□-□\n", - "□-□-□-□-□\n", - "■-□-■-□-■\n", - "□-□-□-■-□\n", - "□-□-■-□-■\n", - "\n", - "■-□-□-□-□\n", - "□-□-□-■-□\n", - "■-□-□-□-□\n", - "□-■-□-■-□\n", - "■-□-□-□-■\n", - "\n", - "□-■-□-□-■\n", - "□-□-□-□-□\n", - "■-□-□-□-□\n", - "□-■-□-■-□\n", - "■-□-■-□-□\n", - "\n", - "□-□-□-□-■\n", - "□-□-□-□-□\n", - "■-□-□-□-□\n", - "□-■-□-□-□\n", - "□-□-□-□-□\n", - "\n", - "■-□-□-□-□\n", - "□-■-□-□-□\n", - "□-□-■-□-■\n", - "□-■-□-■-□\n", - "□-□-□-□-■\n", - "\n", - "□-□-□-■-□\n", - "□-■-□-□-□\n", - "■-□-□-□-■\n", - "□-□-□-□-□\n", - "□-■-□-□-■\n", - "\n", - "■-□-□-□-□\n", - "□-■-□-■-□\n", - "■-□-■-□-■\n", - "□-□-□-■-□\n", - "□-□-□-□-□\n", - "\n" - ] - } - ], - "source": [ - "for network in valid_networks[-10:]:\n", - " print(pp_network(network, box_size))" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "ename": "ValueError", - "evalue": "Cannot take a larger sample than population when 'replace=False'", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mValueError\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[0mrandom\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mchoice\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m3\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m4\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m111\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mreplace\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mFalse\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[1;32mmtrand.pyx\u001b[0m in \u001b[0;36mmtrand.RandomState.choice (numpy/random/mtrand/mtrand.c:11010)\u001b[1;34m()\u001b[0m\n", - "\u001b[1;31mValueError\u001b[0m: Cannot take a larger sample than population when 'replace=False'" - ] - } - ], - "source": [ - "random.choice([1,2,3,4], 111, replace=False)" + "hist(antennas, bins=100)\n", + "title(\"Estimation de la distribution du nombre \\n d'antennes allumées dans un réseau\")\n", + "savefig(\"/home/didier/Downloads/gibbs.png\")" ] }, { diff --git a/play_around.ipynb b/play_around.ipynb deleted file mode 100644 index 6567959..0000000 --- a/play_around.ipynb +++ /dev/null @@ -1,220 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "from network.gibbs import *\n", - "from network.network import pp_network, can_antenna_be_turned_on\n", - "from collections import defaultdict\n", - "from random import Random\n", - "from numpy import matrix" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "mc = defaultdict(dict)\n", - "random = Random(66)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "prec_network = 0\n", - "\n", - "for i, network in zip(range(10**5), get_random_networks(2, random)):\n", - " if network not in mc[prec_network]:\n", - " mc[prec_network][network] = 0\n", - " mc[prec_network][network] += 1\n", - " prec_network = network" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "defaultdict(dict,\n", - " {0: {0: 964, 1: 3671, 2: 1844, 4: 1759, 6: 1835, 8: 938, 9: 3387},\n", - " 1: {0: 891, 1: 3646, 2: 1832, 4: 1839, 6: 1729, 8: 938, 9: 3663},\n", - " 2: {0: 1810, 2: 3548, 4: 3517, 6: 3611, 8: 1811},\n", - " 4: {0: 1779, 2: 3519, 4: 3490, 6: 3486, 8: 1796},\n", - " 6: {0: 1885, 2: 3554, 4: 3465, 6: 3475, 8: 1757},\n", - " 8: {0: 3633, 1: 3553, 8: 3654, 9: 3572},\n", - " 9: {0: 3436, 1: 3668, 8: 3518, 9: 3527}})" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "mc" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "def get_prob(from_, to):\n", - " return mc[from_][to]/ sum(mc[from_].values())\n", - "\n", - "def get_matrix(mc):\n", - " n = len(mc)\n", - " mat = [[] for i in range(n)]\n", - " for i, from_ in enumerate(mc):\n", - " for j in enumerate(mc):\n", - " pass\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "for key in mc:\n", - " print(key)\n", - " print( pp_network(key, 2))" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "□-□\n", - "■-□\n", - "\n", - "1 True\n" - ] - } - ], - "source": [ - "ant = 1\n", - "print(get_prob(0, 2))\n", - "print(ant, can_antenna_be_turned_on(ant, 4, 2))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "0.5**4" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "m = matrix([[1, 2], [3, 4]])\n", - "v = matrix([[1, 3]])" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "from numpy import std" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "42.73458667121028" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "std([1432, 1376, 1461, 1436, 1436, 1363, 1496])" - ] - }, - { - "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 -}