Skip to content

Instantly share code, notes, and snippets.

@redpanda-ai
Created August 23, 2018 23:05
Show Gist options
  • Save redpanda-ai/11c84e5417a43bf02743a566a7d841bb to your computer and use it in GitHub Desktop.
Save redpanda-ai/11c84e5417a43bf02743a566a7d841bb to your computer and use it in GitHub Desktop.
Paint a Boolean Matrix
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 18_03 Paint a boolean matrix\n",
"\n",
"Implement a routine that takes an n x m Boolean array A together with an entry (x, y) and flips the color of the region associated with (x, y).\n",
"\n",
"### Hint: \n",
"\n",
"Solve this conceptually, then think about implementation optimizations.\n",
"\n",
"\n",
"### Initial Remarks\n",
"\n",
"I want to create a solution that works quickly and doesn't suffer from large execution times "
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"from matplotlib import pyplot as plt \n",
"import matplotlib\n",
"from collections import deque\n",
"\n",
"MASK_VAL = -1\n",
"ROWS, COLS = 7, 10\n",
"TARGET_LABEL = \"Target\"\n",
"\n",
"#Make a repeatably pseudo-random boolean matrix of ROWS x COLS\n",
"np.random.seed(seed=42)\n",
"master_matrix = np.random.randint(2, size=(ROWS, COLS))\n",
"\n",
"\n",
"def solution(my_matrix, my_point):\n",
" \"\"\"Paints a boolean matrix at my_point and along all adjacent points to the opposite color\"\"\"\n",
" original_matrix = my_matrix.copy()\n",
" def get_adjacent_same(a_point, a_matrix):\n",
" \"\"\"Returns points that are both adjacent to the given point and are the same value\"\"\"\n",
" # val = a_matrix[a_point]\n",
" max_x, max_y = a_matrix.shape\n",
" x, y = a_point[:]\n",
"\n",
" points = ((x, y), (x - 1, y), (x + 1, y), (x, y - 1), (x, y + 1))\n",
" result = []\n",
" for _x, _y in points:\n",
" if (0 <= _x < max_x) and (0 <= _y < max_y):\n",
" if a_matrix[(_x,_y)] == val:\n",
" new_point = (_x, _y)\n",
" result.append(new_point)\n",
" my_matrix[new_point] ^= 1\n",
"\n",
" return result\n",
"\n",
" def show_plot(plots):\n",
" \"\"\"Visualizes our solution\"\"\"\n",
" _, axarr = plt.subplots(1,len(plots))\n",
" for i in range(len(plots)):\n",
" data = plots[i][1]\n",
" cmap = matplotlib.cm.spring\n",
" axarr[i].set_title(plots[i][0])\n",
" axarr[i].set_yticklabels([])\n",
" axarr[i].set_xticklabels([])\n",
" if plots[i][0] == TARGET_LABEL:\n",
" axarr[i].set_title(str(my_point))\n",
" cmap.set_bad(color='white')\n",
" masked_array = np.ma.masked_where(data == MASK_VAL, data)\n",
" axarr[i].imshow(masked_array, cmap='flag')\n",
" else:\n",
" axarr[i].imshow(data, cmap='flag') \n",
" axarr[i].tick_params(axis='both', which='both', bottom=False, top=False,\n",
" left=False, labelbottom=False)\n",
"\n",
" plt.show()\n",
" plt.close()\n",
"\n",
" # Start with just the main point\n",
" same_color_points = deque([my_point])\n",
" val = original_matrix[my_point]\n",
" \n",
" # Create a masked field for the solution plot display, so that it can be white\n",
" solution = np.arange(ROWS * COLS).reshape((ROWS, COLS))\n",
" solution.fill(MASK_VAL)\n",
" \n",
" # Flip everything \n",
" %%timeit\n",
" while same_color_points:\n",
" a_point = same_color_points.popleft()\n",
" same_color_points.extend(get_adjacent_same(a_point, my_matrix))\n",
" solution[a_point] = val\n",
"\n",
" # Highlight the provided point in the original problem in the solution plot\n",
" solution[my_point] = 1 - val\n",
" plt.rcParams[\"figure.figsize\"] = [10, 10] \n",
" show_plot([(\"Original\", original_matrix), (TARGET_LABEL, solution), (\"Repaint\", my_matrix)])\n",
"\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x720 with 3 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"solution(master_matrix.copy(), (3, 3))"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x720 with 3 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"solution(master_matrix.copy(), (0, 0))"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x720 with 3 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"solution(master_matrix.copy(), (4, 3))"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x720 with 3 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"solution(master_matrix.copy(), (0, 1))"
]
}
],
"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.6"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
@redpanda-ai
Copy link
Author

I may just switch back to GitHub from GitLab. It seems that plotting, embedding, and LaTex support might be better there.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment