diff --git a/02_Vectorization_Explained/.ipynb_checkpoints/02_01_Vectorization_Explained-checkpoint.ipynb b/02_Vectorization_Explained/.ipynb_checkpoints/02_01_Vectorization_Explained-checkpoint.ipynb new file mode 100644 index 0000000..c338baa --- /dev/null +++ b/02_Vectorization_Explained/.ipynb_checkpoints/02_01_Vectorization_Explained-checkpoint.ipynb @@ -0,0 +1,169 @@ +{ + "metadata": { + "name": "", + "signature": "sha256:79f6f8d38fa86628294d097bb12e0276d748f4c87e67bc8618a9f14678a01e02" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import random\n", + "import math\n", + "import numpy as np\n", + "from IPython.display import Image, display \n", + "random.seed(0)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 6 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Lets generate a random array for illustration purposes!" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def generateNoise(width,height):\n", + " noise = [[r for r in range(width)] for i in range(height)]\n", + "\n", + " for i in range(0,height):\n", + " for j in range(0,width):\n", + " noise[i][j] = random.randint(0,9)\n", + "\n", + " return noise\n", + "\n", + "A = generateNoise(30,10)\n", + "A = np.asarray(noise)\n", + "A[A > 1] = 0" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 7 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we have an array with ones randomly distributed." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print A" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "[[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0]\n", + " [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", + " [0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 1 0 0 1 0 1 0 0 0 0 1]\n", + " [0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0]\n", + " [0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0]\n", + " [0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0]\n", + " [0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]\n" + ] + } + ], + "prompt_number": 8 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's an illustration that made the vectorization \"click\" for me. Hopefully it makes sence to somebody else than me." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "display(Image(filename='vectorization.png'))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "iVBORw0KGgoAAAANSUhEUgAAAyEAAACxCAYAAADTYLItAAAACXBIWXMAAAsTAAALEwEAmpwYAAAK\nrGlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjarZZnUFP5Gsbfc056oSVEOqE3QXqVXkMRpION\nkEAIhBBCgopdERVYUVREwIaugCi4FkDWgohiWwR7X5BFRV0XCzZU7geWcO/cez/cmfvOnJnfPPP+\nn/P8z/nyANAucSUSEaoCkC2WSaOD/diJScls4hOgAAPIoA90Li9P4hsVFQ7/eRCAj3cAAQC4ac2V\nSETwv40qPy2PB4BEAUAqP4+XDYAcB0CO8CRSGQDGBwCjhTKJDABbDwBMaWJSMgBWAwBMwQQfAQBm\n6gR3AQBTGhvtD4DdAyDRuFypAID6BwCw83kCGQANBwC2Yr5QDEBzBAAvXgaXD0CTAcD07OwcPgBt\nDwCYp/6Tj+BfPFMVnlyuQMETdwEAAFKAME8i4i6G//dki+ST7zAEAFqGNCQaAEgASH1WTpiCxamz\nIidZyJ/IBIDUZ8hD4iaZl+efPMl8bkDYJMuz4nwnmSudOiuUcWInWZoTrfBPywuMUfinccIVGUSz\nFJwuDOJMckFGbMIk5wvjZ01yXlZM2NSOv0KXyqMVmdOlQYo7ZudNZeNxpzLIMmJDprIlKjLw0wIC\nFbo4TrEvkfkpPCWiKMV+mihYoeflxyjOyqSxCj2TGxo15ROl+D4ghAjgAk+WtkgGAOCfI1ksFQoy\nZGxfiUSUxuaIeTbT2fa2do4AiUnJ7Ilf+p4FCAAgrCtTWm4HgFsxACKY0rhGACefATA+TmlG7wBo\nmwBO9/Lk0vwJDQcAgAcKKAMTNEEPjMAcrMEenMEDfCAQQiESYiEJ5gMPMiAbpLAQlsIqKIIS2ATb\noAp2wz6oh8NwFFrhFJyDi3AVeuE2PIR+GIJXMAIfYQxBECJCRxiIJqKPmCBWiD3iinghgUg4Eo0k\nISmIABEjcmQpsgYpQcqRKmQv0oD8gpxEziGXkT7kPjKADCPvkK8ohtJQJqqLmqIzUFfUFw1DY9F5\nqADNRQvQQnQjWonWoofQFvQcehW9jfajr9BRDDAqxsIMMGvMFfPHIrFkLB2TYsuxYqwCq8WasHas\nG7uJ9WOvsS84Ao6BY+OscR64EFwcjofLxS3HleKqcPW4FlwX7iZuADeC+4Gn43XwVnh3PAefiBfg\nF+KL8BX4A/gT+Av42/gh/EcCgcAimBFcCCGEJEImYQmhlLCT0EzoIPQRBgmjRCJRk2hF9CRGErlE\nGbGIuIN4iHiWeIM4RPxMopL0SfakIFIySUxaTaogHSSdId0gPSeNkVXIJmR3ciSZT15MLiPvJ7eT\nr5OHyGMUVYoZxZMSS8mkrKJUUpooFyiPKO+pVKoh1Y06myqkrqRWUo9QL1EHqF9oajRLmj9tLk1O\n20iro3XQ7tPe0+l0U7oPPZkuo2+kN9DP05/QPysxlGyUOEp8pRVK1UotSjeU3iiTlU2UfZXnKxco\nVygfU76u/FqFrGKq4q/CVVmuUq1yUuWuyqgqQ9VONVI1W7VU9aDqZdUXakQ1U7VANb5aodo+tfNq\ngwyMYcTwZ/AYaxj7GRcYQ0wC04zJYWYyS5iHmT3MEXU1dUf1ePVF6tXqp9X7WRjLlMVhiVhlrKOs\nO6yv03Sn+U5Lm7ZhWtO0G9M+aWhr+GikaRRrNGvc1viqydYM1MzS3KzZqvlYC6dlqTVba6HWLq0L\nWq+1mdoe2jztYu2j2g90UB1LnWidJTr7dK7pjOrq6QbrSnR36J7Xfa3H0vPRy9TbqndGb1ifoe+l\nL9Tfqn9W/yVbne3LFrEr2V3sEQMdgxADucFegx6DMUMzwzjD1YbNho+NKEauRulGW406jUaM9Y0j\njJcaNxo/MCGbuJpkmGw36Tb5ZGpmmmC6zrTV9IWZhhnHrMCs0eyROd3c2zzXvNb8lgXBwtUiy2Kn\nRa8laulkmWFZbXndCrVythJa7bTqm46f7jZdPL12+l1rmrWvdb51o/WADcsm3Ga1TavNmxnGM5Jn\nbJ7RPeOHrZOtyHa/7UM7NbtQu9V27Xbv7C3tefbV9rcc6A5BDisc2hzeOlo5pjnucrznxHCKcFrn\n1On03dnFWerc5DzsYuyS4lLjcteV6RrlWup6yQ3v5ue2wu2U2xd3Z3eZ+1H3vzysPbI8Dnq8mGk2\nM23m/pmDnoaeXM+9nv1ebK8Urz1e/d4G3lzvWu+nPkY+fJ8DPs99LXwzfQ/5vvGz9ZP6nfD75O/u\nv8y/IwALCA4oDugJVAuMC6wKfBJkGCQIagwaCXYKXhLcEYIPCQvZHHKXo8vhcRo4I6EuoctCu8Jo\nYTFhVWFPwy3DpeHtEWhEaMSWiEezTGaJZ7VGQiQnckvk4yizqNyoX2cTZkfNrp79LNoueml0dwwj\nZkHMwZiPsX6xZbEP48zj5HGd8crxc+Mb4j8lBCSUJ/Qnzkhclng1SStJmNSWTEyOTz6QPDoncM62\nOUNzneYWzb0zz2zeonmX52vNF80/vUB5AXfBsRR8SkLKwZRv3EhuLXc0lZNakzrC8+dt573i+/C3\n8ofTPNPK056ne6aXp78QeAq2CIYzvDMqMl4L/YVVwreZIZm7Mz9lRWbVZY2LEkTN2aTslOyTYjVx\nlrgrRy9nUU6fxEpSJOnPdc/dljsiDZMeyEPy5uW1yZgyieya3Fy+Vj6Q75Vfnf95YfzCY4tUF4kX\nXVtsuXjD4ucFQQU/L8Et4S3pXGqwdNXSgWW+y/YuR5anLu9cYbSicMXQyuCV9asoq7JW/bbadnX5\n6g9rEta0F+oWriwcXBu8trFIqUhadHedx7rd63Hrhet7Njhs2LHhRzG/+EqJbUlFybdSXumVn+x+\nqvxpfGP6xp4y57JdmwibxJvubPbeXF+uWl5QPrglYkvLVvbW4q0fti3YdrnCsWL3dsp2+fb+yvDK\nth3GOzbt+FaVUXW72q+6uUanZkPNp538nTd2+exq2q27u2T31z3CPff2Bu9tqTWtrdhH2Je/79n+\n+P3dP7v+3HBA60DJge914rr++uj6rgaXhoaDOgfLGtFGeePwobmHeg8HHG5rsm7a28xqLjkCR+RH\nXv6S8sudo2FHO4+5Hms6bnK85gTjRHEL0rK4ZaQ1o7W/Lamt72Toyc52j/YTv9r8WnfK4FT1afXT\nZWcoZwrPjJ8tODvaIel4fU5wbrBzQefD84nnb3XN7uq5EHbh0sWgi+e7fbvPXvK8dOqy++WTV1yv\ntF51vtpyzenaid+cfjvR49zTct3leluvW29738y+Mze8b5y7GXDz4i3Orau3Z93uuxN3597duXf7\n7/Hvvbgvuv/2Qf6DsYcrH+EfFT9WeVzxROdJ7e8Wvzf3O/efHggYuPY05unDQd7gqz/y/vg2VPiM\n/qziuf7zhhf2L04NBw33vpzzcuiV5NXY66I/Vf+seWP+5vhfPn9dG0kcGXorfTv+rvS95vu6D44f\nOkejRp98zP449qn4s+bn+i+uX7q/Jnx9PrbwG/Fb5XeL7+0/wn48Gs8eH5dwpVwAAMAAAE1PB3hX\nB0BPAmD0AlCUJjrx310emWr1/40nejMAADgD1PkAxK0ECO8A2NUBYLISgNYBEAUAsT6AOjgonr8n\nL93BfsKLJgXAfx4ff68LQGwH+C4dHx/bOT7+fT8Adh+gI3eiiwMAEFQA9hABAC6b6f1bJ/4H6Fn/\npQqU9roAAAAgY0hSTQAAbXUAAHOgAAD83QAAg2QAAHDoAADsaAAAMD4AABCQ5OyZ6gAACkJJREFU\neNrs3c9V20ofBuDf3EMDviU4W3a0EEowJXBLcEqwS0hKgBJMCbBjG0oIJcy3yPig4w/LtrD193nO\nYZGgIEfzMtJryVLKOQcAAEBb/rEJAAAAJQQAAFBCAAAAlBAAAEAJAQAAUEIAAAAlBAAAUEIAAACU\nEAAAQAkBAABQQgAAACUEAABACQEAAJQQAABACQEAAFBCAAAAJQQAAEAJAQAAlBAAAAAlBAAAUEIA\nAAAlBAAAQAkBAACUEAAAACUEAABQQgAAACUEAABACQEAAJQQAAAAJQQAAFBCAAAAlBAAAEAJAQAA\nlBAAAICLuurzi0spZUPUXM452QqyK7tyhVzJmIzJlEz1jTMhAACAEgIAAIzX1VBeaM71Z/NSSpbd\nWZbhZfd1uald9np9O9hlZdecaE6UMRmTKTmRqS1nQgAAACUEAABQQgAAAJQQAABACQEAAFBCAAAA\nJQQAAJiodOhexZ2+uJSyIWou5+zm5bIru3KFXMmYjMmUTPWOMyEAAIASAgAAjNfVUF7oKY+4f11u\nape9Xt8OdtlTtgOyK7tyZVm5asp8JGNDmbfGnNUxcyYEAABQQgAAACUEAABACQEAAJQQAAAAJQQA\nAFBCAACAiUqH7sPc6YtLKRui5nLObl4uu7IrV8iVjMmYTMlU7zgTAgAAKCEAAMB4XQ3lhR66bCyl\nj7NVr8tN7bLX69vBLnvKdkB2ZVeu5EqumpIbGety3jLHjZ8zIQAAgBICAAAoIQAAAEoIAACghAAA\nANS6sgkA/t/OA7Z6/WBX5ApkjKFxJgQAAGi3MPe5Ie+0eU6Uc3bzctmV3fOMYS/mSrmSKxmTsaFl\nTKYcy+3jciwGNREpVpw5k19e1qUOyBUyBkoIwCml9ugdtx02coWMwQRLyKFfouov3etyU7vs9fp2\nsMuesh2QXdmVK7mSq6bkRsa6nLfMcUoInJOZGgAAJQSYcCs+/nNKuea6auUauULGQAmhr1yXCgBA\nhOeEAAAALXMmBJiyussR8pHLgVwhY6CE0NsZ03NCAABQQoApc6995AoZg26kPofzHO+cT3ySSmMb\nz6GcCZHd4Y/zzhj2Yq6UK7mSMRkbWsZkahrHPU04E4JfJAAAWuXuWAAAQKsGcybk0OnE6jWQr8tN\n7bLX69vBLnvKdkB2ZVeu5EqumpIbGety3jLHjZ8zIQAAQKt8JgTgEz7DhFwhY3A5zoQAAABKCAAA\noIQAAAAoIQAAgBICAABQKx26D3OnLy6lbIiac4cM2ZVduUKuZEzGZEqm+siZEAAAQAkBAADGazAP\nKzx02VhKH2erXpeb2mWv17eDXfaU7cDwsmtZzInmxL6QGxkbyv5wzFkdM2dCAAAAJQQAAFBCAAAA\nlBAAAEAJAQAAUEIAAAAlBAAAmKh06D7Mnb64lLIhai7n7Oblsiu7coVcyZiMyZRM9Y4zIQAAgBIC\nAACM19VQXuihy8ZSSpbdWRbZlV25ioh4XW5ql71e3w52Wbkyd5m7ZEqmhsmZEAAAQAkBAACUEAAA\nACUEAABQQgAAAJQQAABACQEAACYqHbpXcacvLqVsiJrLObt5uezKrlwhVzImYzIlU73jTAgAAKCE\nAAAA49Xry7EAAIDxcSYEAABQQgAAACUEAABACQEAAJQQAAAAJQQAAFBCAAAAJQQAAEAJAQAAlBAA\nAAAlBAAAUEIAAACUEAAAQAkBAACUEAAAACUEAABQQgAAAE6Vc+70a49ZROTK13Ln+/cRsYqITUQ8\nX3gTtbmum7Kun+X/PbvgumZlXauI+BMRi0/G5mZnHBZd56VvXyfmNiLiofL9hwuO76JktrqumdyO\nJneHstbm+PctI8esa7mz/WYTm7emuo/dHftNRMwvuK5VZV2/y/91N6uT28dOOH/znWOATcnAVzI8\n6PmrrcA97Gyw6i/loqaErD753vfKv/194dC0ua4oB1W5rOfSO+rNzroWNeO3mGoJ2ZPd+YESstqz\nzR9KjuZl2d/lQOkSB2HVkjMr4/wst8PN2p6d+KoH49+3jJyyrtVYSsgZ8zPmfez24G1RmU8utc6H\nksWbPese1T5W/o6yXcdsJyNN58PBz1+tXI6Vc76LiB/lj3c555RzThHxVAbhlHciniIiRcS3iHi/\n8Etvc10REf+W9T21sK7bsq6184H12S1Zfa9kYNHwHZBFRPyKiLfys36Vd2HO/U7cTfn5/5U/v0fE\nY/n7G7kdfdbaHv++ZaTNdY0xP2Pex96XdT6WP6/L78T9hd4M+hURL5V1vTccE/kbfv7m5WtdWde6\nFJD7mKiuPxMyv/DPn1Ua7mxkY7d9R/i7qnBZKaX7kp91KRBNJoztwd9b5e/edr53rtz+Kgdi75Wf\ntyh/fpPb0WftlPHv4xwpI93mZ6z72Fk55nip/N1LzbHIV3P4LT7efI34eyZk1oM5WP668VYKz+NO\nJmJPJiYxD3ZRQh5SSjmltN24Lx39Uu5ei1n9uhn4uP7Z8/9a2k03soiIt5zzuhzgzVNKXU0Mp+Z2\nFh/XnVbfgZHbaWRtSOMvI9Oeq8acw2X8vXTmJcZ99YH8nXAsXLbX404xmZSrDtZ5l3N+LK15+4v5\nMz4uHTin9/JuxGdeSisdqtua7/1rX3weKaV5Kcs/IiJyzuuS20Vc7nKPc+W2egD6oyc7P7ltL2vH\njH9d1mTEXGUf+/UcVgvI7QjeCJC/8xaQuwb5G41OL8cqbfkpRnqNJKOwzeaqcgZv1iCzn532n+98\n75zm8fcDcDel4Pvsz3SyZvzl56v5GaPt5YjVd8E/u0z2nLZ38nsacwGRv5Ns4uPzoXdT3xidlpCU\n0mfXaJ5T29cLbu9w8dBSkF03fXn3EbHe3kyhfPDuW0TMyvWvx3qLjw+ib3N/X94JOfd1+jfxcQeO\nu7JeuZ1O1k4Z/2Oztr0Ly1JGRp+fMe9j1yVX22wtK3PzuXP4UH7+FAqI/B33Wp/j42zRoat/pjEP\ndnyL3n336a67fdui5mctzhzQU9YV8feysqa3W5vVrGt1gYA+71nXs1v0fnof84c9z6BYHZnb3XGr\nm8i+mtvnmizN5Xa4WTvyFpenjP+xWfvK7SvbzMip6xr8LS4vkJ+x7mOjUjyOeU7IV3JY9//6uXv8\nNeR9rPwdbVWzrvuG+Rv+/NXzhxWuBtbp/gztNR85RpN9TkjDhxXKbQ/yO+bctpy17zU75aEbzXNC\nepwfc9WB+Wtq+1j5M38NpYQM6c4n30sbH9NBnCemn/+J6XJ74fyGJ6af2zLauVSvTZ6Ybq7qA09M\nl79Jz1+ppggAAACc3T82AQAAoIQAAABKCAAAgBICAAAoIQAAAEoIAACghAAAAEoIAACAEgIAACgh\nAAAASggAAKCEAAAAKCEAAIASAgAAKCEAAABKCAAAoIQAAAAoIQAAgBICAACghAAAAEoIAACghAAA\nACghAACAEgIAAKCEAAAASggAAKCEAAAAKCEAAIASAgAAoIQAAABKCAAAgBICAAD0wv8AAAD//wMA\n2qOJU7LchecAAAAASUVORK5CYII=\n", + "text": [ + "" + ] + } + ], + "prompt_number": 9 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In words what we are going to to is to sum all neighouring elements in the array. Let's do it in code!" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "B = np.zeros_like(A) # an array of A's size with only zeros\n", + "\n", + "B[1:-1,1:-1] = A[0:-2, 1:-1] + \\\n", + " A[2:, 1:-1] + \\\n", + " A[1:-1, 0:-2] + \\\n", + " A[1:-1, 2:]\n", + "print B" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "[[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", + " [0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 1 0 0 0 0 0 0 0 2 0 1 0 0]\n", + " [0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 0 1 0 0 1 1 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 1 1 0 1 1 0 1 1 1 0 0 1 2 1 1 1 0 1 0 0 0 0 0]\n", + " [0 0 0 0 0 0 1 1 1 2 0 0 0 1 1 1 0 0 1 1 2 1 0 2 0 1 0 0 1 0]\n", + " [0 0 0 0 0 0 0 2 2 0 1 0 0 0 1 0 0 0 0 1 0 0 2 0 1 0 0 0 0 0]\n", + " [0 0 0 0 1 0 1 0 1 1 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 0 0 0 0 0]\n", + " [0 0 1 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 0 1 0 1 0 0]\n", + " [0 1 0 1 2 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 1 0 1 0]\n", + " [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]\n" + ] + } + ], + "prompt_number": 10 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Se how every element now is the sum of it's neighbours?" + ] + } + ], + "metadata": {} + } + ] +} \ No newline at end of file diff --git a/02_Vectorization_Explained/02_01_Vectorization_Explained.ipynb b/02_Vectorization_Explained/02_01_Vectorization_Explained.ipynb new file mode 100644 index 0000000..92e4f60 --- /dev/null +++ b/02_Vectorization_Explained/02_01_Vectorization_Explained.ipynb @@ -0,0 +1,334 @@ +{ + "metadata": { + "name": "", + "signature": "sha256:fa0bb89a881c0f866351843897a1c3c5a2b2035f3996132bfa36341ea45901d6" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import random\n", + "import math\n", + "import numpy as np\n", + "from IPython.display import Image, display \n", + "random.seed(0)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 6 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Lets generate a random array for illustration purposes!" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def generateNoise(width,height):\n", + " noise = [[r for r in range(width)] for i in range(height)]\n", + "\n", + " for i in range(0,height):\n", + " for j in range(0,width):\n", + " noise[i][j] = random.randint(0,9)\n", + "\n", + " return noise\n", + "\n", + "A = generateNoise(30,10)\n", + "A = np.asarray(A)\n", + "A[A > 1] = 0" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 7 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we have an array with ones randomly distributed." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print A" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "[[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0]\n", + " [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", + " [0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 1 0 0 1 0 1 0 0 0 0 1]\n", + " [0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0]\n", + " [0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0]\n", + " [0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0]\n", + " [0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]\n" + ] + } + ], + "prompt_number": 8 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's an illustration that made the vectorization \"click\" for me. Hopefully it makes sence to somebody else than me." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "display(Image(filename='vectorization.png'))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n2qOJU7LchecAAAAASUVORK5CYII=\n", + "text": [ + "" + ] + } + ], + "prompt_number": 9 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In words what we are going to to is to sum all neighouring elements in the array. Let's do it in code!" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "B = np.zeros_like(A) # an array of A's size with only zeros\n", + "\n", + "B[1:-1,1:-1] = A[0:-2, 1:-1] + \\\n", + " A[2:, 1:-1] + \\\n", + " A[1:-1, 0:-2] + \\\n", + " A[1:-1, 2:]\n", + "print B" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "[[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", + " [0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 1 0 0 0 0 0 0 0 2 0 1 0 0]\n", + " [0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 0 1 0 0 1 1 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 1 1 0 1 1 0 1 1 1 0 0 1 2 1 1 1 0 1 0 0 0 0 0]\n", + " [0 0 0 0 0 0 1 1 1 2 0 0 0 1 1 1 0 0 1 1 2 1 0 2 0 1 0 0 1 0]\n", + " [0 0 0 0 0 0 0 2 2 0 1 0 0 0 1 0 0 0 0 1 0 0 2 0 1 0 0 0 0 0]\n", + " [0 0 0 0 1 0 1 0 1 1 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 0 0 0 0 0]\n", + " [0 0 1 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 0 1 0 1 0 0]\n", + " [0 1 0 1 2 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 1 0 1 0]\n", + " [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]\n" + ] + } + ], + "prompt_number": 10 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Se how every element now is the sum of it's neighbours?" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from IPython.core.display import HTML\n", + "css_file = '../styles/numericalmoocstyle.css'\n", + "HTML(open(css_file, \"r\").read())" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "metadata": {}, + "output_type": "pyout", + "prompt_number": 11, + "text": [ + "" + ] + } + ], + "prompt_number": 11 + } + ], + "metadata": {} + } + ] +} \ No newline at end of file diff --git a/02_Vectorization_Explained/vectorization.png b/02_Vectorization_Explained/vectorization.png new file mode 100644 index 0000000..90a7e55 Binary files /dev/null and b/02_Vectorization_Explained/vectorization.png differ