Created
May 6, 2020 23:57
-
-
Save eip/6914762d9820266199441046ed93495f to your computer and use it in GitHub Desktop.
Color sorting examples
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": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "# Color sorting examples" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "# Additional packages\n", | |
| "# pip install hilbertcurve\n", | |
| "# pip install tsp_solver2\n", | |
| "\n", | |
| "import colorsys\n", | |
| "import math\n", | |
| "import random\n", | |
| "\n", | |
| "import numpy as np\n", | |
| "from hilbertcurve.hilbertcurve import HilbertCurve\n", | |
| "from IPython.display import HTML\n", | |
| "from scipy.spatial import distance\n", | |
| "from skimage import color as cc\n", | |
| "from tsp_solver.greedy import solve_tsp\n", | |
| "\n", | |
| "paletteTmpl = '<div style=\"display: flex; flex-direction: row; width: {w}; height: {h};\">{c}</div>'\n", | |
| "swatchTmpl = '<b style=\"flex: auto; background-color: {};\"></b>'\n", | |
| "colorTmpl = \"#{:02x}{:02x}{:02x}\"\n", | |
| "\n", | |
| "\n", | |
| "def toHTML(colors):\n", | |
| " if type(colors) == list and type(colors[0]) == tuple:\n", | |
| " return paletteTmpl.format(c=\"\".join(toHTML(c) for c in colors), w=\"100%\", h=\"32px\")\n", | |
| "\n", | |
| " hex = colorTmpl.format(*[int(c * 255 + 0.5) for c in colors])\n", | |
| " return swatchTmpl.format(hex)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Generate random colors" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div style=\"display: flex; flex-direction: row; width: 100%; height: 32px;\"><b style=\"flex: auto; background-color: #c9de63;\"></b><b style=\"flex: auto; background-color: #791171;\"></b><b style=\"flex: auto; background-color: #1213af;\"></b><b style=\"flex: auto; background-color: #e77118;\"></b><b style=\"flex: auto; background-color: #9bfef3;\"></b><b style=\"flex: auto; background-color: #6992f9;\"></b><b style=\"flex: auto; background-color: #c56e74;\"></b><b style=\"flex: auto; background-color: #57862e;\"></b><b style=\"flex: auto; background-color: #70df72;\"></b><b style=\"flex: auto; background-color: #fcc8e4;\"></b><b style=\"flex: auto; background-color: #478468;\"></b><b style=\"flex: auto; background-color: #669065;\"></b><b style=\"flex: auto; background-color: #110b25;\"></b><b style=\"flex: auto; background-color: #99d5fa;\"></b><b style=\"flex: auto; background-color: #ded791;\"></b><b style=\"flex: auto; background-color: #391702;\"></b><b style=\"flex: auto; background-color: #3e2828;\"></b><b style=\"flex: auto; background-color: #5d9b8d;\"></b><b style=\"flex: auto; background-color: #c4567a;\"></b><b style=\"flex: auto; background-color: #bf2553;\"></b><b style=\"flex: auto; background-color: #014eaa;\"></b><b style=\"flex: auto; background-color: #373ab2;\"></b><b style=\"flex: auto; background-color: #3a979b;\"></b><b style=\"flex: auto; background-color: #6df26f;\"></b><b style=\"flex: auto; background-color: #df8d40;\"></b><b style=\"flex: auto; background-color: #c76b8d;\"></b><b style=\"flex: auto; background-color: #5d6b2d;\"></b><b style=\"flex: auto; background-color: #01cc36;\"></b><b style=\"flex: auto; background-color: #51113b;\"></b><b style=\"flex: auto; background-color: #4b18f3;\"></b><b style=\"flex: auto; background-color: #6d51f6;\"></b><b style=\"flex: auto; background-color: #262961;\"></b><b style=\"flex: auto; background-color: #40281c;\"></b><b style=\"flex: auto; background-color: #729b48;\"></b><b style=\"flex: auto; background-color: #717611;\"></b><b style=\"flex: auto; background-color: #c1b3d0;\"></b><b style=\"flex: auto; background-color: #6bdc9c;\"></b><b style=\"flex: auto; background-color: #25a122;\"></b><b style=\"flex: auto; background-color: #49508f;\"></b><b style=\"flex: auto; background-color: #48347f;\"></b><b style=\"flex: auto; background-color: #3809b6;\"></b><b style=\"flex: auto; background-color: #4d32b4;\"></b><b style=\"flex: auto; background-color: #44a56a;\"></b><b style=\"flex: auto; background-color: #e2944d;\"></b><b style=\"flex: auto; background-color: #aaeed2;\"></b><b style=\"flex: auto; background-color: #9cb690;\"></b><b style=\"flex: auto; background-color: #3e07ab;\"></b><b style=\"flex: auto; background-color: #e089e5;\"></b><b style=\"flex: auto; background-color: #8a6d25;\"></b><b style=\"flex: auto; background-color: #a12bb0;\"></b><b style=\"flex: auto; background-color: #85c277;\"></b><b style=\"flex: auto; background-color: #c41975;\"></b><b style=\"flex: auto; background-color: #5faae1;\"></b><b style=\"flex: auto; background-color: #ef5e12;\"></b><b style=\"flex: auto; background-color: #118348;\"></b><b style=\"flex: auto; background-color: #258841;\"></b><b style=\"flex: auto; background-color: #f6e46b;\"></b><b style=\"flex: auto; background-color: #a72e34;\"></b><b style=\"flex: auto; background-color: #11eb60;\"></b><b style=\"flex: auto; background-color: #9eb382;\"></b><b style=\"flex: auto; background-color: #28b7b7;\"></b><b style=\"flex: auto; background-color: #2e9830;\"></b><b style=\"flex: auto; background-color: #c2bced;\"></b><b style=\"flex: auto; background-color: #129cde;\"></b><b style=\"flex: auto; background-color: #f3ba52;\"></b><b style=\"flex: auto; background-color: #17635a;\"></b><b style=\"flex: auto; background-color: #fbcf6b;\"></b><b style=\"flex: auto; background-color: #fac0e4;\"></b><b style=\"flex: auto; background-color: #b301e0;\"></b><b style=\"flex: auto; background-color: #8e6fd8;\"></b><b style=\"flex: auto; background-color: #beb5c9;\"></b><b style=\"flex: auto; background-color: #b5c749;\"></b><b style=\"flex: auto; background-color: #8c02c4;\"></b><b style=\"flex: auto; background-color: #b4b870;\"></b><b style=\"flex: auto; background-color: #18d2dd;\"></b><b style=\"flex: auto; background-color: #4da015;\"></b><b style=\"flex: auto; background-color: #c79d6e;\"></b><b style=\"flex: auto; background-color: #55a482;\"></b><b style=\"flex: auto; background-color: #aaa344;\"></b><b style=\"flex: auto; background-color: #dacaf8;\"></b><b style=\"flex: auto; background-color: #97a415;\"></b><b style=\"flex: auto; background-color: #49fcd4;\"></b><b style=\"flex: auto; background-color: #d1441a;\"></b><b style=\"flex: auto; background-color: #d4dd7c;\"></b><b style=\"flex: auto; background-color: #d3e3a3;\"></b><b style=\"flex: auto; background-color: #1f9cd3;\"></b><b style=\"flex: auto; background-color: #4872cb;\"></b><b style=\"flex: auto; background-color: #cd195c;\"></b><b style=\"flex: auto; background-color: #877f1d;\"></b><b style=\"flex: auto; background-color: #2f83e5;\"></b><b style=\"flex: auto; background-color: #ea0b63;\"></b><b style=\"flex: auto; background-color: #847ec8;\"></b><b style=\"flex: auto; background-color: #399fd1;\"></b><b style=\"flex: auto; background-color: #6d6848;\"></b><b style=\"flex: auto; background-color: #66ca37;\"></b><b style=\"flex: auto; background-color: #f41ae1;\"></b><b style=\"flex: auto; background-color: #697473;\"></b><b style=\"flex: auto; background-color: #8c76dd;\"></b><b style=\"flex: auto; background-color: #ac604a;\"></b><b style=\"flex: auto; background-color: #728480;\"></b></div>" | |
| ], | |
| "text/plain": [ | |
| "<IPython.core.display.HTML object>" | |
| ] | |
| }, | |
| "execution_count": 2, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "colors = [(random.random(), random.random(), random.random()) for _ in range(100)]\n", | |
| "HTML(toHTML(colors))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## RGB sorting" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div style=\"display: flex; flex-direction: row; width: 100%; height: 32px;\"><b style=\"flex: auto; background-color: #014eaa;\"></b><b style=\"flex: auto; background-color: #01cc36;\"></b><b style=\"flex: auto; background-color: #110b25;\"></b><b style=\"flex: auto; background-color: #118348;\"></b><b style=\"flex: auto; background-color: #11eb60;\"></b><b style=\"flex: auto; background-color: #129cde;\"></b><b style=\"flex: auto; background-color: #1213af;\"></b><b style=\"flex: auto; background-color: #17635a;\"></b><b style=\"flex: auto; background-color: #18d2dd;\"></b><b style=\"flex: auto; background-color: #1f9cd3;\"></b><b style=\"flex: auto; background-color: #25a122;\"></b><b style=\"flex: auto; background-color: #258841;\"></b><b style=\"flex: auto; background-color: #262961;\"></b><b style=\"flex: auto; background-color: #28b7b7;\"></b><b style=\"flex: auto; background-color: #2e9830;\"></b><b style=\"flex: auto; background-color: #2f83e5;\"></b><b style=\"flex: auto; background-color: #373ab2;\"></b><b style=\"flex: auto; background-color: #3809b6;\"></b><b style=\"flex: auto; background-color: #391702;\"></b><b style=\"flex: auto; background-color: #399fd1;\"></b><b style=\"flex: auto; background-color: #3a979b;\"></b><b style=\"flex: auto; background-color: #3e2828;\"></b><b style=\"flex: auto; background-color: #3e07ab;\"></b><b style=\"flex: auto; background-color: #40281c;\"></b><b style=\"flex: auto; background-color: #44a56a;\"></b><b style=\"flex: auto; background-color: #478468;\"></b><b style=\"flex: auto; background-color: #48347f;\"></b><b style=\"flex: auto; background-color: #4872cb;\"></b><b style=\"flex: auto; background-color: #49fcd4;\"></b><b style=\"flex: auto; background-color: #49508f;\"></b><b style=\"flex: auto; background-color: #4b18f3;\"></b><b style=\"flex: auto; background-color: #4d32b4;\"></b><b style=\"flex: auto; background-color: #4da015;\"></b><b style=\"flex: auto; background-color: #51113b;\"></b><b style=\"flex: auto; background-color: #55a482;\"></b><b style=\"flex: auto; background-color: #57862e;\"></b><b style=\"flex: auto; background-color: #5d9b8d;\"></b><b style=\"flex: auto; background-color: #5d6b2d;\"></b><b style=\"flex: auto; background-color: #5faae1;\"></b><b style=\"flex: auto; background-color: #66ca37;\"></b><b style=\"flex: auto; background-color: #669065;\"></b><b style=\"flex: auto; background-color: #697473;\"></b><b style=\"flex: auto; background-color: #6992f9;\"></b><b style=\"flex: auto; background-color: #6bdc9c;\"></b><b style=\"flex: auto; background-color: #6df26f;\"></b><b style=\"flex: auto; background-color: #6d6848;\"></b><b style=\"flex: auto; background-color: #6d51f6;\"></b><b style=\"flex: auto; background-color: #70df72;\"></b><b style=\"flex: auto; background-color: #717611;\"></b><b style=\"flex: auto; background-color: #728480;\"></b><b style=\"flex: auto; background-color: #729b48;\"></b><b style=\"flex: auto; background-color: #791171;\"></b><b style=\"flex: auto; background-color: #847ec8;\"></b><b style=\"flex: auto; background-color: #85c277;\"></b><b style=\"flex: auto; background-color: #877f1d;\"></b><b style=\"flex: auto; background-color: #8a6d25;\"></b><b style=\"flex: auto; background-color: #8c76dd;\"></b><b style=\"flex: auto; background-color: #8c02c4;\"></b><b style=\"flex: auto; background-color: #8e6fd8;\"></b><b style=\"flex: auto; background-color: #97a415;\"></b><b style=\"flex: auto; background-color: #99d5fa;\"></b><b style=\"flex: auto; background-color: #9bfef3;\"></b><b style=\"flex: auto; background-color: #9cb690;\"></b><b style=\"flex: auto; background-color: #9eb382;\"></b><b style=\"flex: auto; background-color: #a12bb0;\"></b><b style=\"flex: auto; background-color: #a72e34;\"></b><b style=\"flex: auto; background-color: #aaeed2;\"></b><b style=\"flex: auto; background-color: #aaa344;\"></b><b style=\"flex: auto; background-color: #ac604a;\"></b><b style=\"flex: auto; background-color: #b301e0;\"></b><b style=\"flex: auto; background-color: #b4b870;\"></b><b style=\"flex: auto; background-color: #b5c749;\"></b><b style=\"flex: auto; background-color: #beb5c9;\"></b><b style=\"flex: auto; background-color: #bf2553;\"></b><b style=\"flex: auto; background-color: #c1b3d0;\"></b><b style=\"flex: auto; background-color: #c2bced;\"></b><b style=\"flex: auto; background-color: #c4567a;\"></b><b style=\"flex: auto; background-color: #c41975;\"></b><b style=\"flex: auto; background-color: #c56e74;\"></b><b style=\"flex: auto; background-color: #c79d6e;\"></b><b style=\"flex: auto; background-color: #c76b8d;\"></b><b style=\"flex: auto; background-color: #c9de63;\"></b><b style=\"flex: auto; background-color: #cd195c;\"></b><b style=\"flex: auto; background-color: #d1441a;\"></b><b style=\"flex: auto; background-color: #d3e3a3;\"></b><b style=\"flex: auto; background-color: #d4dd7c;\"></b><b style=\"flex: auto; background-color: #dacaf8;\"></b><b style=\"flex: auto; background-color: #ded791;\"></b><b style=\"flex: auto; background-color: #df8d40;\"></b><b style=\"flex: auto; background-color: #e089e5;\"></b><b style=\"flex: auto; background-color: #e2944d;\"></b><b style=\"flex: auto; background-color: #e77118;\"></b><b style=\"flex: auto; background-color: #ea0b63;\"></b><b style=\"flex: auto; background-color: #ef5e12;\"></b><b style=\"flex: auto; background-color: #f3ba52;\"></b><b style=\"flex: auto; background-color: #f41ae1;\"></b><b style=\"flex: auto; background-color: #f6e46b;\"></b><b style=\"flex: auto; background-color: #fac0e4;\"></b><b style=\"flex: auto; background-color: #fbcf6b;\"></b><b style=\"flex: auto; background-color: #fcc8e4;\"></b></div>" | |
| ], | |
| "text/plain": [ | |
| "<IPython.core.display.HTML object>" | |
| ] | |
| }, | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "colors.sort()\n", | |
| "HTML(toHTML(colors))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## HSV sorting" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div style=\"display: flex; flex-direction: row; width: 100%; height: 32px;\"><b style=\"flex: auto; background-color: #ac604a;\"></b><b style=\"flex: auto; background-color: #d1441a;\"></b><b style=\"flex: auto; background-color: #40281c;\"></b><b style=\"flex: auto; background-color: #ef5e12;\"></b><b style=\"flex: auto; background-color: #391702;\"></b><b style=\"flex: auto; background-color: #e77118;\"></b><b style=\"flex: auto; background-color: #e2944d;\"></b><b style=\"flex: auto; background-color: #df8d40;\"></b><b style=\"flex: auto; background-color: #c79d6e;\"></b><b style=\"flex: auto; background-color: #f3ba52;\"></b><b style=\"flex: auto; background-color: #fbcf6b;\"></b><b style=\"flex: auto; background-color: #8a6d25;\"></b><b style=\"flex: auto; background-color: #6d6848;\"></b><b style=\"flex: auto; background-color: #f6e46b;\"></b><b style=\"flex: auto; background-color: #ded791;\"></b><b style=\"flex: auto; background-color: #877f1d;\"></b><b style=\"flex: auto; background-color: #aaa344;\"></b><b style=\"flex: auto; background-color: #717611;\"></b><b style=\"flex: auto; background-color: #b4b870;\"></b><b style=\"flex: auto; background-color: #97a415;\"></b><b style=\"flex: auto; background-color: #d4dd7c;\"></b><b style=\"flex: auto; background-color: #b5c749;\"></b><b style=\"flex: auto; background-color: #c9de63;\"></b><b style=\"flex: auto; background-color: #5d6b2d;\"></b><b style=\"flex: auto; background-color: #d3e3a3;\"></b><b style=\"flex: auto; background-color: #9eb382;\"></b><b style=\"flex: auto; background-color: #729b48;\"></b><b style=\"flex: auto; background-color: #57862e;\"></b><b style=\"flex: auto; background-color: #4da015;\"></b><b style=\"flex: auto; background-color: #66ca37;\"></b><b style=\"flex: auto; background-color: #9cb690;\"></b><b style=\"flex: auto; background-color: #85c277;\"></b><b style=\"flex: auto; background-color: #669065;\"></b><b style=\"flex: auto; background-color: #25a122;\"></b><b style=\"flex: auto; background-color: #70df72;\"></b><b style=\"flex: auto; background-color: #2e9830;\"></b><b style=\"flex: auto; background-color: #6df26f;\"></b><b style=\"flex: auto; background-color: #01cc36;\"></b><b style=\"flex: auto; background-color: #258841;\"></b><b style=\"flex: auto; background-color: #11eb60;\"></b><b style=\"flex: auto; background-color: #44a56a;\"></b><b style=\"flex: auto; background-color: #6bdc9c;\"></b><b style=\"flex: auto; background-color: #118348;\"></b><b style=\"flex: auto; background-color: #478468;\"></b><b style=\"flex: auto; background-color: #55a482;\"></b><b style=\"flex: auto; background-color: #aaeed2;\"></b><b style=\"flex: auto; background-color: #728480;\"></b><b style=\"flex: auto; background-color: #5d9b8d;\"></b><b style=\"flex: auto; background-color: #49fcd4;\"></b><b style=\"flex: auto; background-color: #17635a;\"></b><b style=\"flex: auto; background-color: #9bfef3;\"></b><b style=\"flex: auto; background-color: #697473;\"></b><b style=\"flex: auto; background-color: #28b7b7;\"></b><b style=\"flex: auto; background-color: #3a979b;\"></b><b style=\"flex: auto; background-color: #18d2dd;\"></b><b style=\"flex: auto; background-color: #1f9cd3;\"></b><b style=\"flex: auto; background-color: #129cde;\"></b><b style=\"flex: auto; background-color: #399fd1;\"></b><b style=\"flex: auto; background-color: #99d5fa;\"></b><b style=\"flex: auto; background-color: #5faae1;\"></b><b style=\"flex: auto; background-color: #2f83e5;\"></b><b style=\"flex: auto; background-color: #014eaa;\"></b><b style=\"flex: auto; background-color: #4872cb;\"></b><b style=\"flex: auto; background-color: #6992f9;\"></b><b style=\"flex: auto; background-color: #49508f;\"></b><b style=\"flex: auto; background-color: #262961;\"></b><b style=\"flex: auto; background-color: #373ab2;\"></b><b style=\"flex: auto; background-color: #1213af;\"></b><b style=\"flex: auto; background-color: #847ec8;\"></b><b style=\"flex: auto; background-color: #c2bced;\"></b><b style=\"flex: auto; background-color: #6d51f6;\"></b><b style=\"flex: auto; background-color: #4d32b4;\"></b><b style=\"flex: auto; background-color: #8c76dd;\"></b><b style=\"flex: auto; background-color: #110b25;\"></b><b style=\"flex: auto; background-color: #4b18f3;\"></b><b style=\"flex: auto; background-color: #48347f;\"></b><b style=\"flex: auto; background-color: #3809b6;\"></b><b style=\"flex: auto; background-color: #8e6fd8;\"></b><b style=\"flex: auto; background-color: #3e07ab;\"></b><b style=\"flex: auto; background-color: #dacaf8;\"></b><b style=\"flex: auto; background-color: #c1b3d0;\"></b><b style=\"flex: auto; background-color: #beb5c9;\"></b><b style=\"flex: auto; background-color: #8c02c4;\"></b><b style=\"flex: auto; background-color: #b301e0;\"></b><b style=\"flex: auto; background-color: #a12bb0;\"></b><b style=\"flex: auto; background-color: #e089e5;\"></b><b style=\"flex: auto; background-color: #791171;\"></b><b style=\"flex: auto; background-color: #f41ae1;\"></b><b style=\"flex: auto; background-color: #51113b;\"></b><b style=\"flex: auto; background-color: #fac0e4;\"></b><b style=\"flex: auto; background-color: #fcc8e4;\"></b><b style=\"flex: auto; background-color: #c41975;\"></b><b style=\"flex: auto; background-color: #ea0b63;\"></b><b style=\"flex: auto; background-color: #cd195c;\"></b><b style=\"flex: auto; background-color: #c76b8d;\"></b><b style=\"flex: auto; background-color: #c4567a;\"></b><b style=\"flex: auto; background-color: #bf2553;\"></b><b style=\"flex: auto; background-color: #c56e74;\"></b><b style=\"flex: auto; background-color: #a72e34;\"></b><b style=\"flex: auto; background-color: #3e2828;\"></b></div>" | |
| ], | |
| "text/plain": [ | |
| "<IPython.core.display.HTML object>" | |
| ] | |
| }, | |
| "execution_count": 4, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "colors.sort(key=lambda rgb: colorsys.rgb_to_hsv(*rgb))\n", | |
| "HTML(toHTML(colors))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## YIQ (brightness) sorting" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div style=\"display: flex; flex-direction: row; width: 100%; height: 32px;\"><b style=\"flex: auto; background-color: #110b25;\"></b><b style=\"flex: auto; background-color: #391702;\"></b><b style=\"flex: auto; background-color: #1213af;\"></b><b style=\"flex: auto; background-color: #51113b;\"></b><b style=\"flex: auto; background-color: #3e07ab;\"></b><b style=\"flex: auto; background-color: #3809b6;\"></b><b style=\"flex: auto; background-color: #40281c;\"></b><b style=\"flex: auto; background-color: #262961;\"></b><b style=\"flex: auto; background-color: #3e2828;\"></b><b style=\"flex: auto; background-color: #791171;\"></b><b style=\"flex: auto; background-color: #4b18f3;\"></b><b style=\"flex: auto; background-color: #8c02c4;\"></b><b style=\"flex: auto; background-color: #014eaa;\"></b><b style=\"flex: auto; background-color: #48347f;\"></b><b style=\"flex: auto; background-color: #373ab2;\"></b><b style=\"flex: auto; background-color: #4d32b4;\"></b><b style=\"flex: auto; background-color: #17635a;\"></b><b style=\"flex: auto; background-color: #b301e0;\"></b><b style=\"flex: auto; background-color: #a72e34;\"></b><b style=\"flex: auto; background-color: #49508f;\"></b><b style=\"flex: auto; background-color: #cd195c;\"></b><b style=\"flex: auto; background-color: #c41975;\"></b><b style=\"flex: auto; background-color: #ea0b63;\"></b><b style=\"flex: auto; background-color: #bf2553;\"></b><b style=\"flex: auto; background-color: #118348;\"></b><b style=\"flex: auto; background-color: #a12bb0;\"></b><b style=\"flex: auto; background-color: #5d6b2d;\"></b><b style=\"flex: auto; background-color: #258841;\"></b><b style=\"flex: auto; background-color: #6d6848;\"></b><b style=\"flex: auto; background-color: #717611;\"></b><b style=\"flex: auto; background-color: #d1441a;\"></b><b style=\"flex: auto; background-color: #6d51f6;\"></b><b style=\"flex: auto; background-color: #2e9830;\"></b><b style=\"flex: auto; background-color: #8a6d25;\"></b><b style=\"flex: auto; background-color: #25a122;\"></b><b style=\"flex: auto; background-color: #57862e;\"></b><b style=\"flex: auto; background-color: #478468;\"></b><b style=\"flex: auto; background-color: #4872cb;\"></b><b style=\"flex: auto; background-color: #697473;\"></b><b style=\"flex: auto; background-color: #f41ae1;\"></b><b style=\"flex: auto; background-color: #2f83e5;\"></b><b style=\"flex: auto; background-color: #ac604a;\"></b><b style=\"flex: auto; background-color: #877f1d;\"></b><b style=\"flex: auto; background-color: #4da015;\"></b><b style=\"flex: auto; background-color: #129cde;\"></b><b style=\"flex: auto; background-color: #c4567a;\"></b><b style=\"flex: auto; background-color: #3a979b;\"></b><b style=\"flex: auto; background-color: #1f9cd3;\"></b><b style=\"flex: auto; background-color: #728480;\"></b><b style=\"flex: auto; background-color: #669065;\"></b><b style=\"flex: auto; background-color: #01cc36;\"></b><b style=\"flex: auto; background-color: #ef5e12;\"></b><b style=\"flex: auto; background-color: #44a56a;\"></b><b style=\"flex: auto; background-color: #8e6fd8;\"></b><b style=\"flex: auto; background-color: #729b48;\"></b><b style=\"flex: auto; background-color: #399fd1;\"></b><b style=\"flex: auto; background-color: #5d9b8d;\"></b><b style=\"flex: auto; background-color: #8c76dd;\"></b><b style=\"flex: auto; background-color: #847ec8;\"></b><b style=\"flex: auto; background-color: #55a482;\"></b><b style=\"flex: auto; background-color: #c56e74;\"></b><b style=\"flex: auto; background-color: #c76b8d;\"></b><b style=\"flex: auto; background-color: #e77118;\"></b><b style=\"flex: auto; background-color: #28b7b7;\"></b><b style=\"flex: auto; background-color: #97a415;\"></b><b style=\"flex: auto; background-color: #6992f9;\"></b><b style=\"flex: auto; background-color: #5faae1;\"></b><b style=\"flex: auto; background-color: #aaa344;\"></b><b style=\"flex: auto; background-color: #11eb60;\"></b><b style=\"flex: auto; background-color: #66ca37;\"></b><b style=\"flex: auto; background-color: #18d2dd;\"></b><b style=\"flex: auto; background-color: #df8d40;\"></b><b style=\"flex: auto; background-color: #e2944d;\"></b><b style=\"flex: auto; background-color: #c79d6e;\"></b><b style=\"flex: auto; background-color: #9eb382;\"></b><b style=\"flex: auto; background-color: #85c277;\"></b><b style=\"flex: auto; background-color: #9cb690;\"></b><b style=\"flex: auto; background-color: #e089e5;\"></b><b style=\"flex: auto; background-color: #b4b870;\"></b><b style=\"flex: auto; background-color: #70df72;\"></b><b style=\"flex: auto; background-color: #6bdc9c;\"></b><b style=\"flex: auto; background-color: #b5c749;\"></b><b style=\"flex: auto; background-color: #beb5c9;\"></b><b style=\"flex: auto; background-color: #c1b3d0;\"></b><b style=\"flex: auto; background-color: #6df26f;\"></b><b style=\"flex: auto; background-color: #f3ba52;\"></b><b style=\"flex: auto; background-color: #49fcd4;\"></b><b style=\"flex: auto; background-color: #c2bced;\"></b><b style=\"flex: auto; background-color: #99d5fa;\"></b><b style=\"flex: auto; background-color: #c9de63;\"></b><b style=\"flex: auto; background-color: #d4dd7c;\"></b><b style=\"flex: auto; background-color: #fbcf6b;\"></b><b style=\"flex: auto; background-color: #ded791;\"></b><b style=\"flex: auto; background-color: #dacaf8;\"></b><b style=\"flex: auto; background-color: #fac0e4;\"></b><b style=\"flex: auto; background-color: #aaeed2;\"></b><b style=\"flex: auto; background-color: #d3e3a3;\"></b><b style=\"flex: auto; background-color: #fcc8e4;\"></b><b style=\"flex: auto; background-color: #f6e46b;\"></b><b style=\"flex: auto; background-color: #9bfef3;\"></b></div>" | |
| ], | |
| "text/plain": [ | |
| "<IPython.core.display.HTML object>" | |
| ] | |
| }, | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "colors.sort(key=lambda rgb: colorsys.rgb_to_yiq(*rgb))\n", | |
| "HTML(toHTML(colors))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Luminosity sorting" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div style=\"display: flex; flex-direction: row; width: 100%; height: 32px;\"><b style=\"flex: auto; background-color: #110b25;\"></b><b style=\"flex: auto; background-color: #1213af;\"></b><b style=\"flex: auto; background-color: #391702;\"></b><b style=\"flex: auto; background-color: #3e07ab;\"></b><b style=\"flex: auto; background-color: #3809b6;\"></b><b style=\"flex: auto; background-color: #51113b;\"></b><b style=\"flex: auto; background-color: #262961;\"></b><b style=\"flex: auto; background-color: #40281c;\"></b><b style=\"flex: auto; background-color: #3e2828;\"></b><b style=\"flex: auto; background-color: #8c02c4;\"></b><b style=\"flex: auto; background-color: #791171;\"></b><b style=\"flex: auto; background-color: #4b18f3;\"></b><b style=\"flex: auto; background-color: #b301e0;\"></b><b style=\"flex: auto; background-color: #48347f;\"></b><b style=\"flex: auto; background-color: #4d32b4;\"></b><b style=\"flex: auto; background-color: #373ab2;\"></b><b style=\"flex: auto; background-color: #014eaa;\"></b><b style=\"flex: auto; background-color: #ea0b63;\"></b><b style=\"flex: auto; background-color: #cd195c;\"></b><b style=\"flex: auto; background-color: #c41975;\"></b><b style=\"flex: auto; background-color: #a72e34;\"></b><b style=\"flex: auto; background-color: #bf2553;\"></b><b style=\"flex: auto; background-color: #17635a;\"></b><b style=\"flex: auto; background-color: #a12bb0;\"></b><b style=\"flex: auto; background-color: #49508f;\"></b><b style=\"flex: auto; background-color: #f41ae1;\"></b><b style=\"flex: auto; background-color: #6d51f6;\"></b><b style=\"flex: auto; background-color: #5d6b2d;\"></b><b style=\"flex: auto; background-color: #d1441a;\"></b><b style=\"flex: auto; background-color: #118348;\"></b><b style=\"flex: auto; background-color: #6d6848;\"></b><b style=\"flex: auto; background-color: #258841;\"></b><b style=\"flex: auto; background-color: #717611;\"></b><b style=\"flex: auto; background-color: #4872cb;\"></b><b style=\"flex: auto; background-color: #8a6d25;\"></b><b style=\"flex: auto; background-color: #ac604a;\"></b><b style=\"flex: auto; background-color: #697473;\"></b><b style=\"flex: auto; background-color: #c4567a;\"></b><b style=\"flex: auto; background-color: #478468;\"></b><b style=\"flex: auto; background-color: #57862e;\"></b><b style=\"flex: auto; background-color: #2f83e5;\"></b><b style=\"flex: auto; background-color: #2e9830;\"></b><b style=\"flex: auto; background-color: #25a122;\"></b><b style=\"flex: auto; background-color: #877f1d;\"></b><b style=\"flex: auto; background-color: #ef5e12;\"></b><b style=\"flex: auto; background-color: #8e6fd8;\"></b><b style=\"flex: auto; background-color: #728480;\"></b><b style=\"flex: auto; background-color: #129cde;\"></b><b style=\"flex: auto; background-color: #3a979b;\"></b><b style=\"flex: auto; background-color: #1f9cd3;\"></b><b style=\"flex: auto; background-color: #8c76dd;\"></b><b style=\"flex: auto; background-color: #669065;\"></b><b style=\"flex: auto; background-color: #4da015;\"></b><b style=\"flex: auto; background-color: #c56e74;\"></b><b style=\"flex: auto; background-color: #c76b8d;\"></b><b style=\"flex: auto; background-color: #847ec8;\"></b><b style=\"flex: auto; background-color: #e77118;\"></b><b style=\"flex: auto; background-color: #44a56a;\"></b><b style=\"flex: auto; background-color: #399fd1;\"></b><b style=\"flex: auto; background-color: #5d9b8d;\"></b><b style=\"flex: auto; background-color: #729b48;\"></b><b style=\"flex: auto; background-color: #55a482;\"></b><b style=\"flex: auto; background-color: #6992f9;\"></b><b style=\"flex: auto; background-color: #01cc36;\"></b><b style=\"flex: auto; background-color: #28b7b7;\"></b><b style=\"flex: auto; background-color: #97a415;\"></b><b style=\"flex: auto; background-color: #df8d40;\"></b><b style=\"flex: auto; background-color: #5faae1;\"></b><b style=\"flex: auto; background-color: #aaa344;\"></b><b style=\"flex: auto; background-color: #e2944d;\"></b><b style=\"flex: auto; background-color: #e089e5;\"></b><b style=\"flex: auto; background-color: #c79d6e;\"></b><b style=\"flex: auto; background-color: #18d2dd;\"></b><b style=\"flex: auto; background-color: #66ca37;\"></b><b style=\"flex: auto; background-color: #9eb382;\"></b><b style=\"flex: auto; background-color: #11eb60;\"></b><b style=\"flex: auto; background-color: #9cb690;\"></b><b style=\"flex: auto; background-color: #85c277;\"></b><b style=\"flex: auto; background-color: #b4b870;\"></b><b style=\"flex: auto; background-color: #beb5c9;\"></b><b style=\"flex: auto; background-color: #c1b3d0;\"></b><b style=\"flex: auto; background-color: #b5c749;\"></b><b style=\"flex: auto; background-color: #70df72;\"></b><b style=\"flex: auto; background-color: #6bdc9c;\"></b><b style=\"flex: auto; background-color: #f3ba52;\"></b><b style=\"flex: auto; background-color: #c2bced;\"></b><b style=\"flex: auto; background-color: #6df26f;\"></b><b style=\"flex: auto; background-color: #99d5fa;\"></b><b style=\"flex: auto; background-color: #49fcd4;\"></b><b style=\"flex: auto; background-color: #fac0e4;\"></b><b style=\"flex: auto; background-color: #dacaf8;\"></b><b style=\"flex: auto; background-color: #c9de63;\"></b><b style=\"flex: auto; background-color: #fbcf6b;\"></b><b style=\"flex: auto; background-color: #ded791;\"></b><b style=\"flex: auto; background-color: #d4dd7c;\"></b><b style=\"flex: auto; background-color: #fcc8e4;\"></b><b style=\"flex: auto; background-color: #d3e3a3;\"></b><b style=\"flex: auto; background-color: #aaeed2;\"></b><b style=\"flex: auto; background-color: #f6e46b;\"></b><b style=\"flex: auto; background-color: #9bfef3;\"></b></div>" | |
| ], | |
| "text/plain": [ | |
| "<IPython.core.display.HTML object>" | |
| ] | |
| }, | |
| "execution_count": 6, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "def lum(r, g, b):\n", | |
| " return math.sqrt(0.241 * r + 0.691 * g + 0.068 * b)\n", | |
| "\n", | |
| "\n", | |
| "colors.sort(key=lambda rgb: lum(*rgb))\n", | |
| "HTML(toHTML(colors))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Hue - Luminocity step sorting" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 7, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div style=\"display: flex; flex-direction: row; width: 100%; height: 32px;\"><b style=\"flex: auto; background-color: #391702;\"></b><b style=\"flex: auto; background-color: #40281c;\"></b><b style=\"flex: auto; background-color: #d1441a;\"></b><b style=\"flex: auto; background-color: #8a6d25;\"></b><b style=\"flex: auto; background-color: #ac604a;\"></b><b style=\"flex: auto; background-color: #ef5e12;\"></b><b style=\"flex: auto; background-color: #e77118;\"></b><b style=\"flex: auto; background-color: #df8d40;\"></b><b style=\"flex: auto; background-color: #e2944d;\"></b><b style=\"flex: auto; background-color: #c79d6e;\"></b><b style=\"flex: auto; background-color: #f3ba52;\"></b><b style=\"flex: auto; background-color: #fbcf6b;\"></b><b style=\"flex: auto; background-color: #f6e46b;\"></b><b style=\"flex: auto; background-color: #d3e3a3;\"></b><b style=\"flex: auto; background-color: #d4dd7c;\"></b><b style=\"flex: auto; background-color: #ded791;\"></b><b style=\"flex: auto; background-color: #c9de63;\"></b><b style=\"flex: auto; background-color: #b5c749;\"></b><b style=\"flex: auto; background-color: #b4b870;\"></b><b style=\"flex: auto; background-color: #9eb382;\"></b><b style=\"flex: auto; background-color: #aaa344;\"></b><b style=\"flex: auto; background-color: #97a415;\"></b><b style=\"flex: auto; background-color: #729b48;\"></b><b style=\"flex: auto; background-color: #877f1d;\"></b><b style=\"flex: auto; background-color: #717611;\"></b><b style=\"flex: auto; background-color: #6d6848;\"></b><b style=\"flex: auto; background-color: #5d6b2d;\"></b><b style=\"flex: auto; background-color: #57862e;\"></b><b style=\"flex: auto; background-color: #2e9830;\"></b><b style=\"flex: auto; background-color: #25a122;\"></b><b style=\"flex: auto; background-color: #669065;\"></b><b style=\"flex: auto; background-color: #4da015;\"></b><b style=\"flex: auto; background-color: #66ca37;\"></b><b style=\"flex: auto; background-color: #9cb690;\"></b><b style=\"flex: auto; background-color: #85c277;\"></b><b style=\"flex: auto; background-color: #70df72;\"></b><b style=\"flex: auto; background-color: #6df26f;\"></b><b style=\"flex: auto; background-color: #9bfef3;\"></b><b style=\"flex: auto; background-color: #aaeed2;\"></b><b style=\"flex: auto; background-color: #49fcd4;\"></b><b style=\"flex: auto; background-color: #6bdc9c;\"></b><b style=\"flex: auto; background-color: #11eb60;\"></b><b style=\"flex: auto; background-color: #28b7b7;\"></b><b style=\"flex: auto; background-color: #01cc36;\"></b><b style=\"flex: auto; background-color: #55a482;\"></b><b style=\"flex: auto; background-color: #5d9b8d;\"></b><b style=\"flex: auto; background-color: #44a56a;\"></b><b style=\"flex: auto; background-color: #728480;\"></b><b style=\"flex: auto; background-color: #478468;\"></b><b style=\"flex: auto; background-color: #697473;\"></b><b style=\"flex: auto; background-color: #258841;\"></b><b style=\"flex: auto; background-color: #118348;\"></b><b style=\"flex: auto; background-color: #17635a;\"></b><b style=\"flex: auto; background-color: #014eaa;\"></b><b style=\"flex: auto; background-color: #4872cb;\"></b><b style=\"flex: auto; background-color: #2f83e5;\"></b><b style=\"flex: auto; background-color: #129cde;\"></b><b style=\"flex: auto; background-color: #3a979b;\"></b><b style=\"flex: auto; background-color: #1f9cd3;\"></b><b style=\"flex: auto; background-color: #399fd1;\"></b><b style=\"flex: auto; background-color: #6992f9;\"></b><b style=\"flex: auto; background-color: #5faae1;\"></b><b style=\"flex: auto; background-color: #18d2dd;\"></b><b style=\"flex: auto; background-color: #99d5fa;\"></b><b style=\"flex: auto; background-color: #dacaf8;\"></b><b style=\"flex: auto; background-color: #c2bced;\"></b><b style=\"flex: auto; background-color: #c1b3d0;\"></b><b style=\"flex: auto; background-color: #beb5c9;\"></b><b style=\"flex: auto; background-color: #847ec8;\"></b><b style=\"flex: auto; background-color: #8c76dd;\"></b><b style=\"flex: auto; background-color: #8e6fd8;\"></b><b style=\"flex: auto; background-color: #6d51f6;\"></b><b style=\"flex: auto; background-color: #49508f;\"></b><b style=\"flex: auto; background-color: #373ab2;\"></b><b style=\"flex: auto; background-color: #4d32b4;\"></b><b style=\"flex: auto; background-color: #48347f;\"></b><b style=\"flex: auto; background-color: #4b18f3;\"></b><b style=\"flex: auto; background-color: #262961;\"></b><b style=\"flex: auto; background-color: #3809b6;\"></b><b style=\"flex: auto; background-color: #3e07ab;\"></b><b style=\"flex: auto; background-color: #1213af;\"></b><b style=\"flex: auto; background-color: #110b25;\"></b><b style=\"flex: auto; background-color: #8c02c4;\"></b><b style=\"flex: auto; background-color: #791171;\"></b><b style=\"flex: auto; background-color: #b301e0;\"></b><b style=\"flex: auto; background-color: #a12bb0;\"></b><b style=\"flex: auto; background-color: #f41ae1;\"></b><b style=\"flex: auto; background-color: #e089e5;\"></b><b style=\"flex: auto; background-color: #fcc8e4;\"></b><b style=\"flex: auto; background-color: #fac0e4;\"></b><b style=\"flex: auto; background-color: #c76b8d;\"></b><b style=\"flex: auto; background-color: #c56e74;\"></b><b style=\"flex: auto; background-color: #c4567a;\"></b><b style=\"flex: auto; background-color: #bf2553;\"></b><b style=\"flex: auto; background-color: #a72e34;\"></b><b style=\"flex: auto; background-color: #c41975;\"></b><b style=\"flex: auto; background-color: #cd195c;\"></b><b style=\"flex: auto; background-color: #ea0b63;\"></b><b style=\"flex: auto; background-color: #3e2828;\"></b><b style=\"flex: auto; background-color: #51113b;\"></b></div>" | |
| ], | |
| "text/plain": [ | |
| "<IPython.core.display.HTML object>" | |
| ] | |
| }, | |
| "execution_count": 7, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "def step(r, g, b, steps=1):\n", | |
| " h, _, _ = colorsys.rgb_to_hsv(r, g, b)\n", | |
| " h = int(h * steps)\n", | |
| " lum = math.sqrt(0.241 * r + 0.691 * g + 0.068 * b)\n", | |
| " if h % 2 == 1:\n", | |
| " lum = 1 - lum\n", | |
| " return (h, lum)\n", | |
| "\n", | |
| "\n", | |
| "colors.sort(key=lambda rgb: step(*rgb, 8))\n", | |
| "HTML(toHTML(colors))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Hilbert Curve sorting" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 8, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div style=\"display: flex; flex-direction: row; width: 100%; height: 32px;\"><b style=\"flex: auto; background-color: #391702;\"></b><b style=\"flex: auto; background-color: #110b25;\"></b><b style=\"flex: auto; background-color: #3e2828;\"></b><b style=\"flex: auto; background-color: #717611;\"></b><b style=\"flex: auto; background-color: #5d6b2d;\"></b><b style=\"flex: auto; background-color: #40281c;\"></b><b style=\"flex: auto; background-color: #51113b;\"></b><b style=\"flex: auto; background-color: #791171;\"></b><b style=\"flex: auto; background-color: #48347f;\"></b><b style=\"flex: auto; background-color: #6d6848;\"></b><b style=\"flex: auto; background-color: #697473;\"></b><b style=\"flex: auto; background-color: #17635a;\"></b><b style=\"flex: auto; background-color: #262961;\"></b><b style=\"flex: auto; background-color: #373ab2;\"></b><b style=\"flex: auto; background-color: #3e07ab;\"></b><b style=\"flex: auto; background-color: #3809b6;\"></b><b style=\"flex: auto; background-color: #1213af;\"></b><b style=\"flex: auto; background-color: #4b18f3;\"></b><b style=\"flex: auto; background-color: #4d32b4;\"></b><b style=\"flex: auto; background-color: #49508f;\"></b><b style=\"flex: auto; background-color: #6d51f6;\"></b><b style=\"flex: auto; background-color: #4872cb;\"></b><b style=\"flex: auto; background-color: #014eaa;\"></b><b style=\"flex: auto; background-color: #3a979b;\"></b><b style=\"flex: auto; background-color: #28b7b7;\"></b><b style=\"flex: auto; background-color: #1f9cd3;\"></b><b style=\"flex: auto; background-color: #129cde;\"></b><b style=\"flex: auto; background-color: #2f83e5;\"></b><b style=\"flex: auto; background-color: #399fd1;\"></b><b style=\"flex: auto; background-color: #18d2dd;\"></b><b style=\"flex: auto; background-color: #6bdc9c;\"></b><b style=\"flex: auto; background-color: #49fcd4;\"></b><b style=\"flex: auto; background-color: #5faae1;\"></b><b style=\"flex: auto; background-color: #6992f9;\"></b><b style=\"flex: auto; background-color: #5d9b8d;\"></b><b style=\"flex: auto; background-color: #55a482;\"></b><b style=\"flex: auto; background-color: #728480;\"></b><b style=\"flex: auto; background-color: #669065;\"></b><b style=\"flex: auto; background-color: #729b48;\"></b><b style=\"flex: auto; background-color: #44a56a;\"></b><b style=\"flex: auto; background-color: #478468;\"></b><b style=\"flex: auto; background-color: #118348;\"></b><b style=\"flex: auto; background-color: #258841;\"></b><b style=\"flex: auto; background-color: #11eb60;\"></b><b style=\"flex: auto; background-color: #6df26f;\"></b><b style=\"flex: auto; background-color: #70df72;\"></b><b style=\"flex: auto; background-color: #66ca37;\"></b><b style=\"flex: auto; background-color: #01cc36;\"></b><b style=\"flex: auto; background-color: #25a122;\"></b><b style=\"flex: auto; background-color: #2e9830;\"></b><b style=\"flex: auto; background-color: #4da015;\"></b><b style=\"flex: auto; background-color: #57862e;\"></b><b style=\"flex: auto; background-color: #97a415;\"></b><b style=\"flex: auto; background-color: #85c277;\"></b><b style=\"flex: auto; background-color: #b5c749;\"></b><b style=\"flex: auto; background-color: #f6e46b;\"></b><b style=\"flex: auto; background-color: #fbcf6b;\"></b><b style=\"flex: auto; background-color: #d4dd7c;\"></b><b style=\"flex: auto; background-color: #c9de63;\"></b><b style=\"flex: auto; background-color: #f3ba52;\"></b><b style=\"flex: auto; background-color: #df8d40;\"></b><b style=\"flex: auto; background-color: #e2944d;\"></b><b style=\"flex: auto; background-color: #c79d6e;\"></b><b style=\"flex: auto; background-color: #b4b870;\"></b><b style=\"flex: auto; background-color: #aaa344;\"></b><b style=\"flex: auto; background-color: #9cb690;\"></b><b style=\"flex: auto; background-color: #9eb382;\"></b><b style=\"flex: auto; background-color: #beb5c9;\"></b><b style=\"flex: auto; background-color: #99d5fa;\"></b><b style=\"flex: auto; background-color: #9bfef3;\"></b><b style=\"flex: auto; background-color: #aaeed2;\"></b><b style=\"flex: auto; background-color: #ded791;\"></b><b style=\"flex: auto; background-color: #d3e3a3;\"></b><b style=\"flex: auto; background-color: #dacaf8;\"></b><b style=\"flex: auto; background-color: #fcc8e4;\"></b><b style=\"flex: auto; background-color: #fac0e4;\"></b><b style=\"flex: auto; background-color: #c2bced;\"></b><b style=\"flex: auto; background-color: #c1b3d0;\"></b><b style=\"flex: auto; background-color: #e089e5;\"></b><b style=\"flex: auto; background-color: #c76b8d;\"></b><b style=\"flex: auto; background-color: #8c76dd;\"></b><b style=\"flex: auto; background-color: #8e6fd8;\"></b><b style=\"flex: auto; background-color: #847ec8;\"></b><b style=\"flex: auto; background-color: #a12bb0;\"></b><b style=\"flex: auto; background-color: #8c02c4;\"></b><b style=\"flex: auto; background-color: #b301e0;\"></b><b style=\"flex: auto; background-color: #f41ae1;\"></b><b style=\"flex: auto; background-color: #ea0b63;\"></b><b style=\"flex: auto; background-color: #c41975;\"></b><b style=\"flex: auto; background-color: #cd195c;\"></b><b style=\"flex: auto; background-color: #c56e74;\"></b><b style=\"flex: auto; background-color: #c4567a;\"></b><b style=\"flex: auto; background-color: #ac604a;\"></b><b style=\"flex: auto; background-color: #bf2553;\"></b><b style=\"flex: auto; background-color: #a72e34;\"></b><b style=\"flex: auto; background-color: #8a6d25;\"></b><b style=\"flex: auto; background-color: #877f1d;\"></b><b style=\"flex: auto; background-color: #d1441a;\"></b><b style=\"flex: auto; background-color: #e77118;\"></b><b style=\"flex: auto; background-color: #ef5e12;\"></b></div>" | |
| ], | |
| "text/plain": [ | |
| "<IPython.core.display.HTML object>" | |
| ] | |
| }, | |
| "execution_count": 8, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "curve = HilbertCurve(8, 3)\n", | |
| "colors.sort(key=lambda rgb: curve.distance_from_coordinates([int(c * 255 + 0.5) for c in rgb]))\n", | |
| "HTML(toHTML(colors))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Hilbert Curve sorting in CIELAB color space" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 9, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div style=\"display: flex; flex-direction: row; width: 100%; height: 32px;\"><b style=\"flex: auto; background-color: #697473;\"></b><b style=\"flex: auto; background-color: #17635a;\"></b><b style=\"flex: auto; background-color: #6d6848;\"></b><b style=\"flex: auto; background-color: #118348;\"></b><b style=\"flex: auto; background-color: #5d6b2d;\"></b><b style=\"flex: auto; background-color: #717611;\"></b><b style=\"flex: auto; background-color: #391702;\"></b><b style=\"flex: auto; background-color: #40281c;\"></b><b style=\"flex: auto; background-color: #3e2828;\"></b><b style=\"flex: auto; background-color: #bf2553;\"></b><b style=\"flex: auto; background-color: #cd195c;\"></b><b style=\"flex: auto; background-color: #d1441a;\"></b><b style=\"flex: auto; background-color: #8a6d25;\"></b><b style=\"flex: auto; background-color: #ac604a;\"></b><b style=\"flex: auto; background-color: #a72e34;\"></b><b style=\"flex: auto; background-color: #49508f;\"></b><b style=\"flex: auto; background-color: #48347f;\"></b><b style=\"flex: auto; background-color: #110b25;\"></b><b style=\"flex: auto; background-color: #262961;\"></b><b style=\"flex: auto; background-color: #51113b;\"></b><b style=\"flex: auto; background-color: #791171;\"></b><b style=\"flex: auto; background-color: #c41975;\"></b><b style=\"flex: auto; background-color: #a12bb0;\"></b><b style=\"flex: auto; background-color: #6d51f6;\"></b><b style=\"flex: auto; background-color: #b301e0;\"></b><b style=\"flex: auto; background-color: #4b18f3;\"></b><b style=\"flex: auto; background-color: #8c02c4;\"></b><b style=\"flex: auto; background-color: #3e07ab;\"></b><b style=\"flex: auto; background-color: #1213af;\"></b><b style=\"flex: auto; background-color: #3809b6;\"></b><b style=\"flex: auto; background-color: #4d32b4;\"></b><b style=\"flex: auto; background-color: #373ab2;\"></b><b style=\"flex: auto; background-color: #014eaa;\"></b><b style=\"flex: auto; background-color: #4872cb;\"></b><b style=\"flex: auto; background-color: #6992f9;\"></b><b style=\"flex: auto; background-color: #2f83e5;\"></b><b style=\"flex: auto; background-color: #f41ae1;\"></b><b style=\"flex: auto; background-color: #fac0e4;\"></b><b style=\"flex: auto; background-color: #dacaf8;\"></b><b style=\"flex: auto; background-color: #fcc8e4;\"></b><b style=\"flex: auto; background-color: #c2bced;\"></b><b style=\"flex: auto; background-color: #beb5c9;\"></b><b style=\"flex: auto; background-color: #c1b3d0;\"></b><b style=\"flex: auto; background-color: #e089e5;\"></b><b style=\"flex: auto; background-color: #847ec8;\"></b><b style=\"flex: auto; background-color: #8c76dd;\"></b><b style=\"flex: auto; background-color: #8e6fd8;\"></b><b style=\"flex: auto; background-color: #c76b8d;\"></b><b style=\"flex: auto; background-color: #c4567a;\"></b><b style=\"flex: auto; background-color: #c56e74;\"></b><b style=\"flex: auto; background-color: #c79d6e;\"></b><b style=\"flex: auto; background-color: #e2944d;\"></b><b style=\"flex: auto; background-color: #df8d40;\"></b><b style=\"flex: auto; background-color: #e77118;\"></b><b style=\"flex: auto; background-color: #ef5e12;\"></b><b style=\"flex: auto; background-color: #ea0b63;\"></b><b style=\"flex: auto; background-color: #fbcf6b;\"></b><b style=\"flex: auto; background-color: #f3ba52;\"></b><b style=\"flex: auto; background-color: #6bdc9c;\"></b><b style=\"flex: auto; background-color: #aaeed2;\"></b><b style=\"flex: auto; background-color: #d4dd7c;\"></b><b style=\"flex: auto; background-color: #d3e3a3;\"></b><b style=\"flex: auto; background-color: #ded791;\"></b><b style=\"flex: auto; background-color: #f6e46b;\"></b><b style=\"flex: auto; background-color: #c9de63;\"></b><b style=\"flex: auto; background-color: #b5c749;\"></b><b style=\"flex: auto; background-color: #97a415;\"></b><b style=\"flex: auto; background-color: #877f1d;\"></b><b style=\"flex: auto; background-color: #4da015;\"></b><b style=\"flex: auto; background-color: #85c277;\"></b><b style=\"flex: auto; background-color: #b4b870;\"></b><b style=\"flex: auto; background-color: #aaa344;\"></b><b style=\"flex: auto; background-color: #729b48;\"></b><b style=\"flex: auto; background-color: #57862e;\"></b><b style=\"flex: auto; background-color: #258841;\"></b><b style=\"flex: auto; background-color: #44a56a;\"></b><b style=\"flex: auto; background-color: #478468;\"></b><b style=\"flex: auto; background-color: #55a482;\"></b><b style=\"flex: auto; background-color: #669065;\"></b><b style=\"flex: auto; background-color: #728480;\"></b><b style=\"flex: auto; background-color: #5d9b8d;\"></b><b style=\"flex: auto; background-color: #9eb382;\"></b><b style=\"flex: auto; background-color: #9cb690;\"></b><b style=\"flex: auto; background-color: #2e9830;\"></b><b style=\"flex: auto; background-color: #66ca37;\"></b><b style=\"flex: auto; background-color: #01cc36;\"></b><b style=\"flex: auto; background-color: #25a122;\"></b><b style=\"flex: auto; background-color: #6df26f;\"></b><b style=\"flex: auto; background-color: #11eb60;\"></b><b style=\"flex: auto; background-color: #70df72;\"></b><b style=\"flex: auto; background-color: #49fcd4;\"></b><b style=\"flex: auto; background-color: #9bfef3;\"></b><b style=\"flex: auto; background-color: #99d5fa;\"></b><b style=\"flex: auto; background-color: #18d2dd;\"></b><b style=\"flex: auto; background-color: #28b7b7;\"></b><b style=\"flex: auto; background-color: #3a979b;\"></b><b style=\"flex: auto; background-color: #399fd1;\"></b><b style=\"flex: auto; background-color: #1f9cd3;\"></b><b style=\"flex: auto; background-color: #129cde;\"></b><b style=\"flex: auto; background-color: #5faae1;\"></b></div>" | |
| ], | |
| "text/plain": [ | |
| "<IPython.core.display.HTML object>" | |
| ] | |
| }, | |
| "execution_count": 9, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "def toLab255(rgb):\n", | |
| " (l, a, b) = cc.rgb2lab([[rgb]])[0][0]\n", | |
| " return [int(l * 255 / 100 + 0.5), int((a + 100) * 255 / 200 + 0.5), int((b + 100) * 255 / 200 + 0.5)]\n", | |
| "\n", | |
| "\n", | |
| "curve = HilbertCurve(8, 3)\n", | |
| "colors.sort(key=lambda rgb: curve.distance_from_coordinates(toLab255(rgb)))\n", | |
| "HTML(toHTML(colors))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Nearest Neighbour sorting" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 10, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div style=\"display: flex; flex-direction: row; width: 100%; height: 32px;\"><b style=\"flex: auto; background-color: #9bfef3;\"></b><b style=\"flex: auto; background-color: #aaeed2;\"></b><b style=\"flex: auto; background-color: #99d5fa;\"></b><b style=\"flex: auto; background-color: #c2bced;\"></b><b style=\"flex: auto; background-color: #dacaf8;\"></b><b style=\"flex: auto; background-color: #fac0e4;\"></b><b style=\"flex: auto; background-color: #fcc8e4;\"></b><b style=\"flex: auto; background-color: #c1b3d0;\"></b><b style=\"flex: auto; background-color: #beb5c9;\"></b><b style=\"flex: auto; background-color: #e089e5;\"></b><b style=\"flex: auto; background-color: #8c76dd;\"></b><b style=\"flex: auto; background-color: #8e6fd8;\"></b><b style=\"flex: auto; background-color: #847ec8;\"></b><b style=\"flex: auto; background-color: #6992f9;\"></b><b style=\"flex: auto; background-color: #5faae1;\"></b><b style=\"flex: auto; background-color: #399fd1;\"></b><b style=\"flex: auto; background-color: #1f9cd3;\"></b><b style=\"flex: auto; background-color: #129cde;\"></b><b style=\"flex: auto; background-color: #2f83e5;\"></b><b style=\"flex: auto; background-color: #4872cb;\"></b><b style=\"flex: auto; background-color: #3a979b;\"></b><b style=\"flex: auto; background-color: #5d9b8d;\"></b><b style=\"flex: auto; background-color: #55a482;\"></b><b style=\"flex: auto; background-color: #44a56a;\"></b><b style=\"flex: auto; background-color: #478468;\"></b><b style=\"flex: auto; background-color: #669065;\"></b><b style=\"flex: auto; background-color: #697473;\"></b><b style=\"flex: auto; background-color: #728480;\"></b><b style=\"flex: auto; background-color: #729b48;\"></b><b style=\"flex: auto; background-color: #57862e;\"></b><b style=\"flex: auto; background-color: #5d6b2d;\"></b><b style=\"flex: auto; background-color: #6d6848;\"></b><b style=\"flex: auto; background-color: #8a6d25;\"></b><b style=\"flex: auto; background-color: #877f1d;\"></b><b style=\"flex: auto; background-color: #717611;\"></b><b style=\"flex: auto; background-color: #4da015;\"></b><b style=\"flex: auto; background-color: #25a122;\"></b><b style=\"flex: auto; background-color: #2e9830;\"></b><b style=\"flex: auto; background-color: #258841;\"></b><b style=\"flex: auto; background-color: #118348;\"></b><b style=\"flex: auto; background-color: #17635a;\"></b><b style=\"flex: auto; background-color: #262961;\"></b><b style=\"flex: auto; background-color: #48347f;\"></b><b style=\"flex: auto; background-color: #49508f;\"></b><b style=\"flex: auto; background-color: #373ab2;\"></b><b style=\"flex: auto; background-color: #4d32b4;\"></b><b style=\"flex: auto; background-color: #3e07ab;\"></b><b style=\"flex: auto; background-color: #3809b6;\"></b><b style=\"flex: auto; background-color: #1213af;\"></b><b style=\"flex: auto; background-color: #014eaa;\"></b><b style=\"flex: auto; background-color: #28b7b7;\"></b><b style=\"flex: auto; background-color: #18d2dd;\"></b><b style=\"flex: auto; background-color: #49fcd4;\"></b><b style=\"flex: auto; background-color: #6bdc9c;\"></b><b style=\"flex: auto; background-color: #70df72;\"></b><b style=\"flex: auto; background-color: #6df26f;\"></b><b style=\"flex: auto; background-color: #85c277;\"></b><b style=\"flex: auto; background-color: #9eb382;\"></b><b style=\"flex: auto; background-color: #9cb690;\"></b><b style=\"flex: auto; background-color: #b4b870;\"></b><b style=\"flex: auto; background-color: #c79d6e;\"></b><b style=\"flex: auto; background-color: #e2944d;\"></b><b style=\"flex: auto; background-color: #df8d40;\"></b><b style=\"flex: auto; background-color: #e77118;\"></b><b style=\"flex: auto; background-color: #ef5e12;\"></b><b style=\"flex: auto; background-color: #d1441a;\"></b><b style=\"flex: auto; background-color: #a72e34;\"></b><b style=\"flex: auto; background-color: #bf2553;\"></b><b style=\"flex: auto; background-color: #cd195c;\"></b><b style=\"flex: auto; background-color: #c41975;\"></b><b style=\"flex: auto; background-color: #ea0b63;\"></b><b style=\"flex: auto; background-color: #c4567a;\"></b><b style=\"flex: auto; background-color: #c56e74;\"></b><b style=\"flex: auto; background-color: #c76b8d;\"></b><b style=\"flex: auto; background-color: #ac604a;\"></b><b style=\"flex: auto; background-color: #aaa344;\"></b><b style=\"flex: auto; background-color: #b5c749;\"></b><b style=\"flex: auto; background-color: #c9de63;\"></b><b style=\"flex: auto; background-color: #d4dd7c;\"></b><b style=\"flex: auto; background-color: #ded791;\"></b><b style=\"flex: auto; background-color: #d3e3a3;\"></b><b style=\"flex: auto; background-color: #f6e46b;\"></b><b style=\"flex: auto; background-color: #fbcf6b;\"></b><b style=\"flex: auto; background-color: #f3ba52;\"></b><b style=\"flex: auto; background-color: #97a415;\"></b><b style=\"flex: auto; background-color: #66ca37;\"></b><b style=\"flex: auto; background-color: #11eb60;\"></b><b style=\"flex: auto; background-color: #01cc36;\"></b><b style=\"flex: auto; background-color: #3e2828;\"></b><b style=\"flex: auto; background-color: #40281c;\"></b><b style=\"flex: auto; background-color: #391702;\"></b><b style=\"flex: auto; background-color: #110b25;\"></b><b style=\"flex: auto; background-color: #51113b;\"></b><b style=\"flex: auto; background-color: #791171;\"></b><b style=\"flex: auto; background-color: #a12bb0;\"></b><b style=\"flex: auto; background-color: #8c02c4;\"></b><b style=\"flex: auto; background-color: #b301e0;\"></b><b style=\"flex: auto; background-color: #f41ae1;\"></b><b style=\"flex: auto; background-color: #6d51f6;\"></b><b style=\"flex: auto; background-color: #4b18f3;\"></b></div>" | |
| ], | |
| "text/plain": [ | |
| "<IPython.core.display.HTML object>" | |
| ] | |
| }, | |
| "execution_count": 10, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "def NN(A, start):\n", | |
| " \"\"\"Nearest neighbor algorithm.\n", | |
| " A is an NxN array indicating distance between N locations\n", | |
| " start is the index of the starting location\n", | |
| " Returns the path and cost of the found solution\n", | |
| " \"\"\"\n", | |
| " path = [start]\n", | |
| " cost = 0\n", | |
| " N = A.shape[0]\n", | |
| " mask = np.ones(N, dtype=bool) # boolean values indicating which\n", | |
| " # locations have not been visited\n", | |
| " mask[start] = False\n", | |
| " for i in range(N - 1):\n", | |
| " last = path[-1]\n", | |
| " next_ind = np.argmin(A[last][mask]) # find minimum of remaining locations\n", | |
| " next_loc = np.arange(N)[mask][next_ind] # convert to original location\n", | |
| " path.append(next_loc)\n", | |
| " mask[next_loc] = False\n", | |
| " cost += A[last, next_loc]\n", | |
| " return path, cost\n", | |
| "\n", | |
| "\n", | |
| "A = np.empty([len(colors), len(colors)]) # Distance matrix\n", | |
| "for x in range(0, len(colors)):\n", | |
| " for y in range(0, len(colors)):\n", | |
| " A[x, y] = distance.euclidean(colors[x], colors[y])\n", | |
| "\n", | |
| "# Nearest neighbour algorithm starting with the brightest color\n", | |
| "path, _ = NN(A, colors.index(max(colors, key=lambda rgb: lum(*rgb))))\n", | |
| "\n", | |
| "colors = [colors[i] for i in path]\n", | |
| "HTML(toHTML(colors))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Travelling Salesman sorting" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 11, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div style=\"display: flex; flex-direction: row; width: 100%; height: 32px;\"><b style=\"flex: auto; background-color: #01cc36;\"></b><b style=\"flex: auto; background-color: #11eb60;\"></b><b style=\"flex: auto; background-color: #66ca37;\"></b><b style=\"flex: auto; background-color: #729b48;\"></b><b style=\"flex: auto; background-color: #669065;\"></b><b style=\"flex: auto; background-color: #697473;\"></b><b style=\"flex: auto; background-color: #728480;\"></b><b style=\"flex: auto; background-color: #478468;\"></b><b style=\"flex: auto; background-color: #44a56a;\"></b><b style=\"flex: auto; background-color: #55a482;\"></b><b style=\"flex: auto; background-color: #5d9b8d;\"></b><b style=\"flex: auto; background-color: #3a979b;\"></b><b style=\"flex: auto; background-color: #28b7b7;\"></b><b style=\"flex: auto; background-color: #18d2dd;\"></b><b style=\"flex: auto; background-color: #129cde;\"></b><b style=\"flex: auto; background-color: #1f9cd3;\"></b><b style=\"flex: auto; background-color: #399fd1;\"></b><b style=\"flex: auto; background-color: #2f83e5;\"></b><b style=\"flex: auto; background-color: #4872cb;\"></b><b style=\"flex: auto; background-color: #5faae1;\"></b><b style=\"flex: auto; background-color: #6992f9;\"></b><b style=\"flex: auto; background-color: #847ec8;\"></b><b style=\"flex: auto; background-color: #8c76dd;\"></b><b style=\"flex: auto; background-color: #8e6fd8;\"></b><b style=\"flex: auto; background-color: #6d51f6;\"></b><b style=\"flex: auto; background-color: #4b18f3;\"></b><b style=\"flex: auto; background-color: #3e07ab;\"></b><b style=\"flex: auto; background-color: #3809b6;\"></b><b style=\"flex: auto; background-color: #1213af;\"></b><b style=\"flex: auto; background-color: #014eaa;\"></b><b style=\"flex: auto; background-color: #4d32b4;\"></b><b style=\"flex: auto; background-color: #373ab2;\"></b><b style=\"flex: auto; background-color: #49508f;\"></b><b style=\"flex: auto; background-color: #48347f;\"></b><b style=\"flex: auto; background-color: #262961;\"></b><b style=\"flex: auto; background-color: #17635a;\"></b><b style=\"flex: auto; background-color: #118348;\"></b><b style=\"flex: auto; background-color: #258841;\"></b><b style=\"flex: auto; background-color: #2e9830;\"></b><b style=\"flex: auto; background-color: #25a122;\"></b><b style=\"flex: auto; background-color: #4da015;\"></b><b style=\"flex: auto; background-color: #57862e;\"></b><b style=\"flex: auto; background-color: #5d6b2d;\"></b><b style=\"flex: auto; background-color: #6d6848;\"></b><b style=\"flex: auto; background-color: #8a6d25;\"></b><b style=\"flex: auto; background-color: #877f1d;\"></b><b style=\"flex: auto; background-color: #717611;\"></b><b style=\"flex: auto; background-color: #97a415;\"></b><b style=\"flex: auto; background-color: #aaa344;\"></b><b style=\"flex: auto; background-color: #b5c749;\"></b><b style=\"flex: auto; background-color: #c9de63;\"></b><b style=\"flex: auto; background-color: #d4dd7c;\"></b><b style=\"flex: auto; background-color: #f6e46b;\"></b><b style=\"flex: auto; background-color: #fbcf6b;\"></b><b style=\"flex: auto; background-color: #f3ba52;\"></b><b style=\"flex: auto; background-color: #e2944d;\"></b><b style=\"flex: auto; background-color: #df8d40;\"></b><b style=\"flex: auto; background-color: #e77118;\"></b><b style=\"flex: auto; background-color: #ef5e12;\"></b><b style=\"flex: auto; background-color: #d1441a;\"></b><b style=\"flex: auto; background-color: #ea0b63;\"></b><b style=\"flex: auto; background-color: #c41975;\"></b><b style=\"flex: auto; background-color: #cd195c;\"></b><b style=\"flex: auto; background-color: #bf2553;\"></b><b style=\"flex: auto; background-color: #a72e34;\"></b><b style=\"flex: auto; background-color: #ac604a;\"></b><b style=\"flex: auto; background-color: #c4567a;\"></b><b style=\"flex: auto; background-color: #c56e74;\"></b><b style=\"flex: auto; background-color: #c76b8d;\"></b><b style=\"flex: auto; background-color: #c79d6e;\"></b><b style=\"flex: auto; background-color: #b4b870;\"></b><b style=\"flex: auto; background-color: #9eb382;\"></b><b style=\"flex: auto; background-color: #9cb690;\"></b><b style=\"flex: auto; background-color: #85c277;\"></b><b style=\"flex: auto; background-color: #70df72;\"></b><b style=\"flex: auto; background-color: #6df26f;\"></b><b style=\"flex: auto; background-color: #6bdc9c;\"></b><b style=\"flex: auto; background-color: #49fcd4;\"></b><b style=\"flex: auto; background-color: #99d5fa;\"></b><b style=\"flex: auto; background-color: #9bfef3;\"></b><b style=\"flex: auto; background-color: #aaeed2;\"></b><b style=\"flex: auto; background-color: #d3e3a3;\"></b><b style=\"flex: auto; background-color: #ded791;\"></b><b style=\"flex: auto; background-color: #beb5c9;\"></b><b style=\"flex: auto; background-color: #c1b3d0;\"></b><b style=\"flex: auto; background-color: #c2bced;\"></b><b style=\"flex: auto; background-color: #dacaf8;\"></b><b style=\"flex: auto; background-color: #fac0e4;\"></b><b style=\"flex: auto; background-color: #fcc8e4;\"></b><b style=\"flex: auto; background-color: #e089e5;\"></b><b style=\"flex: auto; background-color: #f41ae1;\"></b><b style=\"flex: auto; background-color: #b301e0;\"></b><b style=\"flex: auto; background-color: #8c02c4;\"></b><b style=\"flex: auto; background-color: #a12bb0;\"></b><b style=\"flex: auto; background-color: #791171;\"></b><b style=\"flex: auto; background-color: #51113b;\"></b><b style=\"flex: auto; background-color: #3e2828;\"></b><b style=\"flex: auto; background-color: #40281c;\"></b><b style=\"flex: auto; background-color: #391702;\"></b><b style=\"flex: auto; background-color: #110b25;\"></b></div>" | |
| ], | |
| "text/plain": [ | |
| "<IPython.core.display.HTML object>" | |
| ] | |
| }, | |
| "execution_count": 11, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "colors.sort(key=lambda rgb: colorsys.rgb_to_hsv(*rgb)) # Initial sort\n", | |
| "A = [[distance.euclidean(cx, cy) for cx in colors] for cy in colors]\n", | |
| "path = solve_tsp(A)\n", | |
| "\n", | |
| "colors = [colors[i] for i in path]\n", | |
| "HTML(toHTML(colors))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Travelling Salesman sorting in CIELAB color space" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 12, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div style=\"display: flex; flex-direction: row; width: 100%; height: 32px;\"><b style=\"flex: auto; background-color: #70df72;\"></b><b style=\"flex: auto; background-color: #6df26f;\"></b><b style=\"flex: auto; background-color: #11eb60;\"></b><b style=\"flex: auto; background-color: #01cc36;\"></b><b style=\"flex: auto; background-color: #66ca37;\"></b><b style=\"flex: auto; background-color: #4da015;\"></b><b style=\"flex: auto; background-color: #25a122;\"></b><b style=\"flex: auto; background-color: #2e9830;\"></b><b style=\"flex: auto; background-color: #258841;\"></b><b style=\"flex: auto; background-color: #118348;\"></b><b style=\"flex: auto; background-color: #44a56a;\"></b><b style=\"flex: auto; background-color: #49fcd4;\"></b><b style=\"flex: auto; background-color: #6bdc9c;\"></b><b style=\"flex: auto; background-color: #85c277;\"></b><b style=\"flex: auto; background-color: #729b48;\"></b><b style=\"flex: auto; background-color: #57862e;\"></b><b style=\"flex: auto; background-color: #5d6b2d;\"></b><b style=\"flex: auto; background-color: #6d6848;\"></b><b style=\"flex: auto; background-color: #697473;\"></b><b style=\"flex: auto; background-color: #728480;\"></b><b style=\"flex: auto; background-color: #17635a;\"></b><b style=\"flex: auto; background-color: #478468;\"></b><b style=\"flex: auto; background-color: #669065;\"></b><b style=\"flex: auto; background-color: #55a482;\"></b><b style=\"flex: auto; background-color: #5d9b8d;\"></b><b style=\"flex: auto; background-color: #3a979b;\"></b><b style=\"flex: auto; background-color: #28b7b7;\"></b><b style=\"flex: auto; background-color: #18d2dd;\"></b><b style=\"flex: auto; background-color: #9bfef3;\"></b><b style=\"flex: auto; background-color: #aaeed2;\"></b><b style=\"flex: auto; background-color: #d3e3a3;\"></b><b style=\"flex: auto; background-color: #ded791;\"></b><b style=\"flex: auto; background-color: #b4b870;\"></b><b style=\"flex: auto; background-color: #9eb382;\"></b><b style=\"flex: auto; background-color: #9cb690;\"></b><b style=\"flex: auto; background-color: #c79d6e;\"></b><b style=\"flex: auto; background-color: #8a6d25;\"></b><b style=\"flex: auto; background-color: #717611;\"></b><b style=\"flex: auto; background-color: #877f1d;\"></b><b style=\"flex: auto; background-color: #aaa344;\"></b><b style=\"flex: auto; background-color: #97a415;\"></b><b style=\"flex: auto; background-color: #b5c749;\"></b><b style=\"flex: auto; background-color: #c9de63;\"></b><b style=\"flex: auto; background-color: #d4dd7c;\"></b><b style=\"flex: auto; background-color: #f6e46b;\"></b><b style=\"flex: auto; background-color: #fbcf6b;\"></b><b style=\"flex: auto; background-color: #f3ba52;\"></b><b style=\"flex: auto; background-color: #e2944d;\"></b><b style=\"flex: auto; background-color: #df8d40;\"></b><b style=\"flex: auto; background-color: #e77118;\"></b><b style=\"flex: auto; background-color: #ef5e12;\"></b><b style=\"flex: auto; background-color: #d1441a;\"></b><b style=\"flex: auto; background-color: #ea0b63;\"></b><b style=\"flex: auto; background-color: #cd195c;\"></b><b style=\"flex: auto; background-color: #bf2553;\"></b><b style=\"flex: auto; background-color: #a72e34;\"></b><b style=\"flex: auto; background-color: #ac604a;\"></b><b style=\"flex: auto; background-color: #c56e74;\"></b><b style=\"flex: auto; background-color: #c76b8d;\"></b><b style=\"flex: auto; background-color: #c4567a;\"></b><b style=\"flex: auto; background-color: #c41975;\"></b><b style=\"flex: auto; background-color: #f41ae1;\"></b><b style=\"flex: auto; background-color: #b301e0;\"></b><b style=\"flex: auto; background-color: #8c02c4;\"></b><b style=\"flex: auto; background-color: #a12bb0;\"></b><b style=\"flex: auto; background-color: #791171;\"></b><b style=\"flex: auto; background-color: #51113b;\"></b><b style=\"flex: auto; background-color: #391702;\"></b><b style=\"flex: auto; background-color: #40281c;\"></b><b style=\"flex: auto; background-color: #3e2828;\"></b><b style=\"flex: auto; background-color: #110b25;\"></b><b style=\"flex: auto; background-color: #262961;\"></b><b style=\"flex: auto; background-color: #48347f;\"></b><b style=\"flex: auto; background-color: #49508f;\"></b><b style=\"flex: auto; background-color: #847ec8;\"></b><b style=\"flex: auto; background-color: #8c76dd;\"></b><b style=\"flex: auto; background-color: #8e6fd8;\"></b><b style=\"flex: auto; background-color: #e089e5;\"></b><b style=\"flex: auto; background-color: #fcc8e4;\"></b><b style=\"flex: auto; background-color: #fac0e4;\"></b><b style=\"flex: auto; background-color: #dacaf8;\"></b><b style=\"flex: auto; background-color: #c2bced;\"></b><b style=\"flex: auto; background-color: #c1b3d0;\"></b><b style=\"flex: auto; background-color: #beb5c9;\"></b><b style=\"flex: auto; background-color: #99d5fa;\"></b><b style=\"flex: auto; background-color: #5faae1;\"></b><b style=\"flex: auto; background-color: #399fd1;\"></b><b style=\"flex: auto; background-color: #1f9cd3;\"></b><b style=\"flex: auto; background-color: #129cde;\"></b><b style=\"flex: auto; background-color: #6992f9;\"></b><b style=\"flex: auto; background-color: #2f83e5;\"></b><b style=\"flex: auto; background-color: #4872cb;\"></b><b style=\"flex: auto; background-color: #014eaa;\"></b><b style=\"flex: auto; background-color: #373ab2;\"></b><b style=\"flex: auto; background-color: #4d32b4;\"></b><b style=\"flex: auto; background-color: #3e07ab;\"></b><b style=\"flex: auto; background-color: #3809b6;\"></b><b style=\"flex: auto; background-color: #1213af;\"></b><b style=\"flex: auto; background-color: #6d51f6;\"></b><b style=\"flex: auto; background-color: #4b18f3;\"></b></div>" | |
| ], | |
| "text/plain": [ | |
| "<IPython.core.display.HTML object>" | |
| ] | |
| }, | |
| "execution_count": 12, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "colors.sort(key=lambda rgb: colorsys.rgb_to_hsv(*rgb)) # Initial sort\n", | |
| "lab = cc.rgb2lab([colors])[0]\n", | |
| "A = [[distance.euclidean(cx, cy) for cx in lab] for cy in lab]\n", | |
| "path = solve_tsp(A)\n", | |
| "\n", | |
| "colors = [colors[i] for i in path]\n", | |
| "HTML(toHTML(colors))" | |
| ] | |
| } | |
| ], | |
| "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.7.6" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 4 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment