Last active
November 25, 2019 18:34
-
-
Save ELC/c70f818eb3afab743f2d84e1d5b8e49e to your computer and use it in GitHub Desktop.
Pascal Triangle Visualization
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| ffmpeg |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| channels: | |
| - defaults | |
| - conda-forge | |
| dependencies: | |
| - ipython | |
| - ipywidgets | |
| - matplotlib | |
| - numpy | |
| - scipy |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import matplotlib.pyplot as plt\n", | |
| "import numpy as np\n", | |
| "from matplotlib import animation\n", | |
| "from IPython.display import HTML\n", | |
| "\n", | |
| "%matplotlib inline" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "def memoize(f):\n", | |
| " memo = {}\n", | |
| " def helper(x):\n", | |
| " if x not in memo:\n", | |
| " memo[x] = f(x)\n", | |
| " return memo[x]\n", | |
| " return helper" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "@memoize\n", | |
| "def pascal_triangle(n):\n", | |
| " if n == 0:\n", | |
| " return [np.array([1])]\n", | |
| " prev = pascal_triangle(n - 1)[-1]\n", | |
| " middle = np.add(prev[:-1], prev[1:])\n", | |
| " return pascal_triangle(n - 1) + [np.array([1, *middle, 1], dtype=np.ulonglong)]\n", | |
| "\n", | |
| "@memoize\n", | |
| "def pascal_last_row(n):\n", | |
| " return pascal_triangle(n)[-1]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "def animate(i, length, ax, width):\n", | |
| " if i == 0:\n", | |
| " im = ax.imshow([[0],[0]], cmap='Greys', aspect='equal', extent=(0, width - 2, 0, length), animated=True)\n", | |
| " return im,\n", | |
| "\n", | |
| " elements = pascal_last_row(i)\n", | |
| " \n", | |
| " extra_space = [0] * ((width - len(elements) - 1) // 2)\n", | |
| " \n", | |
| " elements = extra_space + list(elements) + extra_space\n", | |
| "\n", | |
| " real_width = len(elements)\n", | |
| "\n", | |
| " if real_width % 2 == 1:\n", | |
| " real_width -= 1\n", | |
| " \n", | |
| " binary_elements = []\n", | |
| "\n", | |
| " for j in elements:\n", | |
| " row = []\n", | |
| " for k in bin(j)[2:].zfill(length):\n", | |
| " row.append(int(k))\n", | |
| " \n", | |
| " binary_elements.append(row)\n", | |
| " \n", | |
| " im = ax.imshow(np.transpose(binary_elements), cmap='Greys', aspect='equal', extent=(0, real_width, 0, length), animated=True)\n", | |
| " \n", | |
| " return im," | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "metadata": { | |
| "scrolled": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<video width=\"576\" height=\"466\" controls autoplay loop>\n", | |
| " <source type=\"video/mp4\" src=\"data:video/mp4;base64,AAAAHGZ0eXBNNFYgAAACAGlzb21pc28yYXZjMQAAAAhmcmVlAAA9EG1kYXQAAAKuBgX//6rcRem9\n", | |
| "5tlIt5Ys2CDZI+7veDI2NCAtIGNvcmUgMTUyIHIyODU0IGU5YTU5MDMgLSBILjI2NC9NUEVHLTQg\n", | |
| "QVZDIGNvZGVjIC0gQ29weWxlZnQgMjAwMy0yMDE3IC0gaHR0cDovL3d3dy52aWRlb2xhbi5vcmcv\n", | |
| "eDI2NC5odG1sIC0gb3B0aW9uczogY2FiYWM9MSByZWY9MyBkZWJsb2NrPTE6MDowIGFuYWx5c2U9\n", | |
| "MHgzOjB4MTEzIG1lPWhleCBzdWJtZT03IHBzeT0xIHBzeV9yZD0xLjAwOjAuMDAgbWl4ZWRfcmVm\n", | |
| "PTEgbWVfcmFuZ2U9MTYgY2hyb21hX21lPTEgdHJlbGxpcz0xIDh4OGRjdD0xIGNxbT0wIGRlYWR6\n", | |
| "b25lPTIxLDExIGZhc3RfcHNraXA9MSBjaHJvbWFfcXBfb2Zmc2V0PS0yIHRocmVhZHM9MTIgbG9v\n", | |
| "a2FoZWFkX3RocmVhZHM9MiBzbGljZWRfdGhyZWFkcz0wIG5yPTAgZGVjaW1hdGU9MSBpbnRlcmxh\n", | |
| "Y2VkPTAgYmx1cmF5X2NvbXBhdD0wIGNvbnN0cmFpbmVkX2ludHJhPTAgYmZyYW1lcz0zIGJfcHly\n", | |
| "YW1pZD0yIGJfYWRhcHQ9MSBiX2JpYXM9MCBkaXJlY3Q9MSB3ZWlnaHRiPTEgb3Blbl9nb3A9MCB3\n", | |
| "ZWlnaHRwPTIga2V5aW50PTI1MCBrZXlpbnRfbWluPTEgc2NlbmVjdXQ9NDAgaW50cmFfcmVmcmVz\n", | |
| "aD0wIHJjX2xvb2thaGVhZD00MCByYz1jcmYgbWJ0cmVlPTEgY3JmPTIzLjAgcWNvbXA9MC42MCBx\n", | |
| "cG1pbj0wIHFwbWF4PTY5IHFwc3RlcD00IGlwX3JhdGlvPTEuNDAgYXE9MToxLjAwAIAAAADLZYiE\n", | |
| "ABf//vfUt8yy7VMn77af/r//UAcVTV3w+9arU1kRkRdhGrxFDa/90q/y6+4qo4pHJS3qQShrG4mw\n", | |
| "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\n", | |
| "\">\n", | |
| " Your browser does not support the video tag.\n", | |
| "</video>" | |
| ], | |
| "text/plain": [ | |
| "<IPython.core.display.HTML object>" | |
| ] | |
| }, | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "frames = 20\n", | |
| "last_row = pascal_last_row(frames)\n", | |
| "length = len(bin(max(last_row))[2:]) - 1\n", | |
| "width = len(last_row)\n", | |
| "\n", | |
| "aspect_ratio = width / length\n", | |
| "\n", | |
| "frame_width = 8\n", | |
| "\n", | |
| "fig, ax = plt.subplots(figsize=(frame_width, frame_width / aspect_ratio))\n", | |
| "\n", | |
| "fig.subplots_adjust(left=0, bottom=0.01, right=1, top=1)\n", | |
| "\n", | |
| "ax.set_xticks([]) \n", | |
| "ax.set_yticks([]) \n", | |
| "\n", | |
| "if frames % 2 == 0:\n", | |
| " width += 1\n", | |
| "\n", | |
| "anim = animation.FuncAnimation(fig, animate, frames=frames, interval=1000, blit=True, fargs=(length, ax, width))\n", | |
| "\n", | |
| "plt.close() # Avoid extra picture\n", | |
| "\n", | |
| "HTML(anim.to_html5_video())" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "Writer = animation.writers['ffmpeg']\n", | |
| "writer = Writer(fps=1, metadata=dict(artist='Me'), bitrate=1800)\n", | |
| "\n", | |
| "anim.save('im.mp4', writer=writer)" | |
| ] | |
| } | |
| ], | |
| "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.6.7" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 2 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment