{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "(einops_tutorial)=\n", "# Einops tutorial (ported)\n", "\n", "This tutorial is a port using `xarray-einstats` of the [einops basics tutorial](https://einops.rocks/1-einops-basics)\n", "\n", "## Einops meets xarray!\n", "\n", "We don't write \n", "```python\n", "y = x.transpose(0, 2, 3, 1)\n", "```\n", "nor we write the more comprehensible alternative\n", "```python\n", "y = rearrange(x, 'b c h w -> b h w c')\n", "```\n", "we write comprehensible code and use labeled arrays\n", "\n", "```python\n", "y_da = rearrange(x_da, 'batch height width channel')\n", "# or, also equivalent\n", "y_da = x_da.einops.rearrange('batch height width channel')\n", "```\n", "`x_da` is a {class}`xarray.DataArray` whose dimensions are already labeled, thus,\n", "we can skip the left side that defines the names of the dimensions.\n", "\n", "`xarray-einstats` wraps [`einops`](https://einops.rocks/) functions to extend them to work on xarray objects.\n", "\n", "## What's in this tutorial?\n", "\n", "- fundamentals: reordering, composition and decomposition of axes\n", "- operations: `rearrange`, `reduce`, `repeat`\n", "- how much you can do with a single operation!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Preparations" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# Examples are given for numpy. This code also setups ipython/jupyter\n", "# so that numpy arrays in the output are displayed as images\n", "import numpy\n", "import xarray\n", "from xarray_einstats.tutorial import display_np_arrays_as_images\n", "\n", "display_np_arrays_as_images()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ ":::{note}\n", "This cell above configures jupyter to display _numpy_ arrays as images, which is a great visual help to understand\n", "the operations performed by einops. To take advantage of this we use `.values`. In some specific cases, we also omit it in order to show the values of the dimensions of the DataArray. If you are running this yourself we encourage you to try both views\n", ":::" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Load a batch of images to play with\n", "\n", ":::{admonition} Download the data for local use\n", ":class: dropdown\n", "\n", "The images are stored as a [zarr store](https://zarr.dev/) in the xarray-einstats repo. You can download it directly from your browser using https://download-directory.github.io/ and\n", "pasting [https://github.com/arviz-devs/xarray-einstats/tree/main/docs/source/tutorials/einops-image.zarr](https://github.com/arviz-devs/xarray-einstats/tree/main/docs/source/tutorials/einops-image.zarr) there. Then move the file if necessary, uncompress and rename it so you can load it with {func}`~xarray.open_zarr` as shown below.\n", ":::" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset> Size: 1MB\n",
       "Dimensions:  (batch: 6, height: 96, width: 96, channel: 3)\n",
       "Dimensions without coordinates: batch, height, width, channel\n",
       "Data variables:\n",
       "    ims      (batch, height, width, channel) float64 1MB 1.0 0.902 ... 0.8039
" ], "text/plain": [ " Size: 1MB\n", "Dimensions: (batch: 6, height: 96, width: 96, channel: 3)\n", "Dimensions without coordinates: batch, height, width, channel\n", "Data variables:\n", " ims (batch, height, width, channel) float64 1MB 1.0 0.902 ... 0.8039" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ds = xarray.open_zarr(\"einops-image.zarr\").load()\n", "ims = ds[\"ims\"]\n", "# There are 6 images of shape 96x96 with 3 color channels packed into the ims DataArray\n", "ds" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "display the first image (whole 4d tensor can't be rendered)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ims.sel(batch=0).values" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "second image in a batch" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAIAAABt+uBvAAAFEUlEQVR4AWJ89v8ZwyjADZhwS43KgAALiKA7vn399rI5yw7vPfzk4ZMf338IiwrrGul6+HsExwSzsrHS3Tn4LKR3Fvv181d9Yf3imYv//fuH6S5pOekJCyZYO1pjSg2UCF0D6Mf3H2EuYWeOncHjW2Zm5t65vWHxYXjU0FOKrmVQcUox/tBhYGD4+/dvaWrp6aOn6RkKeOyiXwq6cPqCl5kXHqcgSxmYGmw7tQ1ZZKDY9EtBS2cvJd6TF05fuHL+CvHqaaeSfgF0dN9RkrxxaM8hktTTSDH9Aujpo6ck+eHJgyckqaeRYjoF0Lev337//k2SHz68/0CSehopplMAcXJxsrCQ1ijl4+ejkZ9JMpZOAcTIyCgpI0mSy2TkZUhSTyPFdAogBgYGG2cbEEU0tnWxJVotDRXSL4CiUqKI94euka6esR7x6mmnkn4BZGxh7BfuR4xPWFhYGvsbGRkZiVFMazX0CyAGBob+ef1G5kYgFm7MxMTUNbPLws4CtxK6ytA1gDi5ONfsXxOdGs3EhN1eSRnJ5TuXRyRF0DUM8FpGv74YMrh17dbS2UuP7Dvy9OHT79+/g8aDDHXd/d1DYkPY2NmQVQ44e2ACaAgB7El9CHmA1mA0gAiA0QAiAEYDiAAYDSACgLQeNh7w/MlzY1ljPArIkNp8fLOxBZXNJNUZoymIABgNIAJgNIAIgNEAIgBGA4gAGA0gAmA0gAiA0QAiAEYDiAAYDSACgGpdDUkZSSKXO757805HVIeAuwaN9GgKIgBGA4gAGA0gAmA0gAiA0QAiAEYDiAAYDSACYDSACIDRACIARgOIABgNIAJgNIAIgNEAIgBGA4gAGA0gAmA0gAiA0QAiAAYggAbJ+l4CAQOTHoAAYmZmhtk+BOgBCCAWVmIHwv/++TvgQTgAAcTOwU6kt79++UqkStopG4AAYmZm5uHlIcZLb169IUYZTdUMQAAxMDAICAmAKEL45pWbhJTQXH5gAkhcSpwYnx07cIwYZTRVMzABRORmuQunL9y5cYem/ido+MAEkJKqEkGXQRQ0FjdCGANFDkwAaehqEOnhvdv2VmZVEtwQ/OfPn4O7Dpamlcb7xhNpMpHKBmYzy5OHT8wUzIh0IgMDg4KyQnxWvK2zrZSsFC8/74/vPz5//Pz08dMnD55cu3Tt3IlzF05fgLQJePl4b36kZtE+MAHEwMBgqWz58N5DEIva+NyTcxLSEtQydWCyGAMDg5ufG4iiAb517RYVTR2wAAqNC6WiN5CNGiYBpGOoQ6ONqbev30YOLwrZA5aCGBgYShpLQBS18TBJQQwMDFYOViGxISAWVfHwCSAGBoaWyS0qGiogFvXw+7fv375+Sy3zBjKLMTAw8PHzLd66WEpWCsShHqZiIhrgAGJgYJBXkt9yfAsVD6JgZWOFNBpBplOMBz6AGBgYJKQlNh/fXNJYwsnFCeKTi6VkpYrqik4/PO3i7UKuGej6BqwljRW8efVmzsQ5a5esJem4KlkFWRdvF88gTysHK1xnOmC1jhjBwRVAEPD///9LZy+dOnLq4pmLD+89fPb42ZdPX75/+87IyMjDx8PLxysiJqKkpqSsrqyioWJoZkj1IgziDAg5GANoUIFBUQYNZjAaQATAaAARAKMBRACMBhABMBpABMBoABEAowFEAIwGEAEwGkAEwGgAEQCjAUQAjAYQATAaQATAaAARAKMBRACMBhABMBpAgBEIIABITjYw313EUgAAAABJRU5ErkJggg==", "text/plain": [] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ims.sel(batch=1).values" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "we'll use three operations" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "from xarray_einstats.einops import rearrange, reduce #, repeat" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "{func}`~xarray_einstats.einops.rearrange`, as its name suggests, rearranges elements.\n", "\n", "Below we swapped height and width.\n", "This can be seen as transposing the first two dimensions, but _in xarray_, by design, the order of the dimensions\n", "should not matter, and that exact code below should (and will work) if the input object\n", "has the same dimension names but different order (in which case the operation might be transposing 1st and 3rd dims)\n", "_or doing nothing_. Having said that, rearranging is still a valuable operation on xarray objects, especially\n", "if done right before accessing the underlying numpy or dask array.\n", "\n", "By rearranging, we are enforcing the width, height, channel order." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAIAAABt+uBvAAAHXUlEQVR4AWL8/+wZwyjADZhwS43KgMBoABEAowFEAIwGEAEwGkAEwGgAEQCjAUQAjAYQATAaQATAaAARAKMBRACMBhABMBpABMBoABEAowFEAIwGEAEwGkAEwGgAEQCjAUQAjAYQATAaQATAaAARAKMBRACwEJCnC3j5+vWNO3cePH784PHj9x8/fvv+/fuPHwwMDFycnJwcHCJCQvIyMgqystrq6kICAnRxEcKSAQugj58+bdixY9fBg8fOnHnw+DHCRXhZakpKVqamvq6uXs7OHOzseNVSR3IAZlb3HTkyed687fv2/fz1i2xP8PLwhPn6FmdkaKqqkm0IMRrpGkBbdu9u6O09e+kSMS4jRg0jI2Ogp2dPXZ2inBwx6slQQ6cAunHnTn5t7a6DB8lwIkEtnBwc1fn5FTk5zMzMBBWTqoAeATR1/vzS5mZIuUuq+4hX72Rjs3zaNDEREeK1EKOStgH04+fP2NzcNVu2EOMUytXISUvvW71aWUGBcqPgJtCwHfT+40fX8HC6hQ4DA8Ojp0/tg4Ju378P9x7lDFqloG/fv7uEhR0/e5ZyJ5JqgoqCwqnt2wX5+UnViFU9TVLQv3//QtPSBiR0GBgY7jx4EJmZ+f//f6weJlWQJgHUNmnStr17SXUKFdXvPHBg+sKFVDGQ+lns5Llz1v7+f//+pYr7yDaEj5f32sGD0hISZJsA0UjlFPTv37/sqqoBDx0GBoZPnz839vZCPEkJSeUAWrxmDRUbypR4jIGBYcGqVQ+fPKHQEGoG0P///zunTiXeQexsbIGenosmTbpGRAv7xcWLxzdvbiguJr4p+Pv370lz5xLvHqwqqVkG7di/3zM6Gqs1aIKMjIyp0dENxcWS4uIQKUYpKQgDFwlfrvz5y5eM8vJl69fjUoksLiYi8vTcORYW8gctqJmClqxdi+w4XGxeHp4N8+fP7OqChw4ulVjFeXl4lkyZkhQRgVUWTfDVmzc79u9HEySJS7UA+vnr18adOwnazczMvHrWLD83N4Iq8ShgZGSc0dmpr6WFRw1casuePXA2GQyqBdDJc+e+fP1K0AWlmZnuDg4ElRFUwMrKOqmlhaAyBgYGCocQqBZAh06cIOhcPl7esuxsgsqIVGBnYWFjZkZQ8f1Hjx5TsN2CagF06fp1gm4N9vKiVhcJYldRejqEgZ+8cPUqfgV4ZKkWQLfv3cNjDUTKxc4OwqAW6e7gQMzI9MXBEEDPXr4k6G0jXV2CakhSwMXJ6WRjQ1DLLSIiD5chVEtBxJTQwoKCuNxBtriZgQFBvU9fvCCoBpcCqgUQMVMUAnx8uNxBtriWmhpBvU+fPyeoBpcCqgUQJwcHLjvg4h8/f4azqcVQV1EhaNT7jx8JqsGlgGoBxMXJicsOuPibd+/gbGoxiMm2lMwXUC2ARISECPr5yo0bBNWQqoCHi4uglkERQMRM3dFimJGHm5tgAFEy/Eq1FKRExNzm+u3bKSkOsAYEMamDm4hUhtVwBgYGqgWQKRHV7YdPn1onTsTlFPLEP3z6RFAjMdkQlyFUCyArExNcdiCL98+atX77dmQRCtkfiKihiMmGuJxBtQBSVlBQVVTEZQ1c/N+/f1FZWfNWrICLUMh4+/49QRN4eXgIqsGlgGoBxMDAEObnB6II4R8/fyYXFblHRu45fPjPnz+ElBOQJ6ZmlJOWJmAKbmnyxyIxQXxYWPvkyf/+/cOUwhTZdfDgroMHebi5jXR1xUVFMRUQKXKGiMU0GkQ0JnFZR80UpKqoGOztjcsmrOJfvn49dOLE6s2bscoSI3jm4kWCygZLADEwMNQXFbGysoJYdMEfP326fvs2QasGUQBpq6sXEzeIRdBXxCjYc/gwwUlKdjY2PeJGr7HaSM0sBgH1xcUm+voQNq3Jzbt3E7TC0sSEmEE1XOZQP4A42NnXz5snISaGy0pqif/9+3cLEQHkaGVFiY3UDyAGBgYZSckDa9dSvnAAZBZuvPfIEWIaQcQMOeK2hHpdDTSgrqx8eMMGXU1NNHEqcpeuW0fQNFFhYUtjY4LK8CigSQqCAEU5uZNbt6bFxEC4VCeV5OT83NzUlZXxzCz7u7tTuPSVmnPzuMDR06dzq6vPX7mCSwEx4vC5eUzFf/78uffo0c27d2/euQMi7969effuqzdvGBgYdixbRuE8JT0CiIEBtPBj65493dOnEzO/CNKAgfEEEIZakMCHT59u3rljrKeHJ32B1BHCdAogOLjz4MGKDRvWb99+4epVIjslEL2kBhBEF+UkvQMIDj5++nTk1Kmzly5du3Xr+u3bT1+8ePfhA56hvxEXQJjg9+/fr9+9+/rt248fPyCTSGxsbGysrNxcXEICApSMCmLaRbzIgKWgoQJoWM0PDzAaQATAaAARAKMBRACMBhABMBpABMBoABEAowFEAIwGEAEwGkAEwGgAEQCjAUQAjAYQATAaQATAaAARAKMBRACMBhABMBpABMBoABEAowFEAIwGEAEwGkAEwGgAAUYggACbSDjns6XbtwAAAABJRU5ErkJggg==", "text/plain": [] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ims.sel(batch=0).einops.rearrange('width height channel').values" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Composition of axes\n", "transposition is very common and useful, but let's move to other capabilities provided by einops" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "einops allows seamlessly composing batch and height to a new height dimension, something that tends\n", "to be tricky in xarray once we move from a standard {meth}`~xarray.Dataset.stack`.\n", "\n", "We just rendered all images by collapsing to 3d tensor!" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGAAAAJACAIAAAD9yfRwAAAk1klEQVR4AWL8/+wZwyjADZhwS43KgMBoABEAowFEAIwGEAEwGkAEwGgAEQCjAUQAjAYQATAaQATAaAARAKMBRACMBhABMBpABMBoABEAowFEAIwGEAEwGkAEwGgAEQCjAUQAjAYQATAaQATAaAARAKMBRACwEJCnJfj569fJc+cOnThx6fr12/fuPXv58svXrz9//eLk4ODi5BQRElKUk1OSkzM1MLAyMVFWUKClW3CaPQATh////9954MCStWs37tz55etXnE5DlVBVVAzz84sPC1NVVESVoS2PrgH079+/xWvWdE6dev32bfK8xcTEFOztXV9UpK2uTp4JpOqiXwCdPHcuu6rq7KVLpDoRUz0rK2txenp9cTEHOzumLHVF6BFA//79a5s0qaG39+/fv1R0vYm+/vp582QkJaloJqZRNA+gb9+/h6albdu7F9NuykUkxMQOrF2rrqxMuVG4TKBtNf/+40eXsDAahQ4DA8OLV6+cQ0PvP3qEy3uUi9MwgH78/OkXH3/87FnKXYnHhKcvXvgnJn7/8QOPGkqkaBhAsbm5R06dosRxROq9fP16QV0dkYpJVUarAJo6f/6aLVtIdQ3Z6mctWXL09GmytePRSJNC+sadO0ZubrRL9lj9Y6ijc3bnTkZGRqyyZAvSJAXl19bSOXQYGBjOX7mydc8esgMCl0bqp6Atu3f7xsfjsg9TnI+XN9jLy8XOzkhXV1hQUICP7+Pnz2/evbty48a2vXvXb9/+4dMnTF1YRewsLA6uW4dVimxB6geQiYcHkc1lZmbm0szMsuxsQX5+XB54//Fj68SJ/bNm/fv3D5caZPHbx46pULVbS+Ustu/IESJDh5eHZ+vixe1VVXhCh4GBQZCfv6eubs3s2UT2KlZs2IAcXpSzqRxAk+fNI8ZNjIyMS6ZMcXdwIEYxAwNDoKfn1PZ2YhSv376dGGXEq6FmAH389Gn7vn3E2J0aHe3n5kaMSriapIgIN3t7OBcX48LVqx+JLrNwGYIsTs0A2rBjx89fv5BNx8pmZ2NrKC7GKoVfsDQrC78CBgZQx5i6rVNqBtCugwcJeoCBgcHL2VlSXJwYlWhqHCwtebi50QQxuUQWgpgasYpQM4COnTmD1Q40wUBPTzQRIrksLCxGuroEFV+7dYugGuIVUC2AXr5+/eDxY2IsNtHXJ0YZVjXioqJYxZEFyR6uRDYEzqbaoP2NO3fghuJnaBFR1uI3Ab/s0xcv8CsgSZZqKYjI5EOS48hT/O7Dh9+/f5OnF1PXMAyg////v373DtOr5IlQLYDef/xIngtooevrt2/UMpZqAfTt+3dquYlyc35Qb4CRagFE//ENPOFITHsVj3ZkKaoF0HAFVAsgLk7OwRNGbGxs1HIM1QKIk4ODWm6i3Bw2VlbKDYGYQLUAEhESgpg4GEhuLi5qOYNqASQvI0MtN1FujpCAAOWGQEygWldDQVYWYiJB8sXFi8R0qQiaQx8FVEtBxK9HoelMMdVDjWoBJCQgoKakRIz7dh44QIyyQaKGagHEwMBgZWoKogjhaQsXfv7yhZCqwSJPzQDydXUlxluv3rzJKC////8/MYoHXA01A8jL2ZmXh4cYLy1bvz6luJiKgxLEWEqeGmoGEAc7e5ivL5HumLdihamn56ETJ4hUj1XZ379/dx08GJ+f39jbi1UB5YJUnlm9fvu2toMDSdnHxsysKD3d3cGB+M7Kx0+f9hw+vHn37i27d799/56BgcHPzW3jggWUBwemCVQOIAYGhuCUlHXbtoFYpGAOdnYnGxszAwMtNTV1FRVhQUEeLi4ebu7vP358+PTpw8ePb9+/v3LjxplLl85cvHj99m205Y7qyso3Dh8mxUJi1VI/gO4/eqTt4EDn0Q8WFpbv9+6xsFCt3QsPP2qWQRCgKCdXnZ8PYdON/PPnzz3arFSkfgAxMDBU5OQ42diAWHTEN+/epYVtNAkgZmbm5dOmyUlL08LFuMy8SfS8Ey4TsIrTJIAYGBjERET2rV4tLSEB4tAFD6UUBAHKCgr7166l7nImiMlYyaEXQAwMDKqKiqe2byd+HRBID7l4SAYQZInY9qVLp7a18fHygvg0w6/evCF+NSPxrqBVGYQMGBkZsxISrh08mBodzUq90WJkKyBsWpTT1G8o4gcPnzyZNHfukrVrX715g18l8bKiwsL+7u4hPj7ONjZUbyvSO4Ag4M+fPzv279+yZ8+ugwfJG2BkZ2OzNDFxtLJysrGxNDZmZmaGmEx1cmACCBk8fvbswtWrF69evXXv3tMXL54+f/7+48fvP358//Hj////3FxckE4ZLw+PnLS0hooKBOlpaRG57hXZLjLYAx9AgxzQo5Ae0mA0gAiA0QAiAEYDiAAYDSACYDSACIDRACIARgOIABgNIAJgNIAIgNEAIgBGA4gAGA0gAmA0gAiA0QAiAEYDiAAYDSACYDSACACW57Q9AmzIg9EURABQf8URMeD29dvL5iw7vPfwk4dPfnz/ISwqrGuk6+HvERwTzMpGtX0oxLiEoBrGZ//peoXfr5+/6gvrF89cjPU0F2k56QkLJlg7WhN0N90U0DWAfnz/EeYSduYYvvMHmJmZe+f2hsWH0S0I8FtE1zKoOKUYf+gwMDD8/fu3NLX09FGaHEiGPyywytIvBV04fcHLzAurIzAFDUwNtp0ieakspjmUi9AvBS2dvZR45144feHK+SvEq6edSvoF0NF9R0nyxqE9h0hSTyPF9Augp4+ekuSHJw+ekKSeRorpFEDfvn4jdevKh/cfaORnkoylUwBxcnGSurSJj5+PJJ/QSDGdAoiRkVFShrRen4y8DI38TJKxdAogBgYGG2fS1t7butiCtA00pl8ARaVEEe9ZXSNdPWM94tXTTiX9AsjYwtgv3I8Yn7CwsDT2N1L92FpirMZUQ78AYmBg6J/Xb2RuBGLhxkxMTF0zuyzsLHAroasMXQOIk4tzzf410anRTEzY7ZWUkVy+c3lEUgRdwwCvZfTriyGDW9duLZ299Mi+I08fPv3+/TtoPMhQ193fPSQ2hI2dage3INtINntgAmgIAexJfQh5gNZgNIAIgNEAIgBGA4gAGA0gAoBq0z7Pnzw3ljUmYBuJ0puPbza2oLKZJDqBYTQFEQCjAUQAjAYQATAaQATAaAARAKMBRACMBhABMBpABMBoABEAowFEAFCtqyEpI0nkWqx3b97piOoQcNegkR5NQQTAaAARAKMBRACMBhABMBpABMBoABEAowFEAIwGEAEwGkAEwGgAEQCjAUQAjAYQATAaQATAaAARAKMBRACMBhABMBpABMAABNAgWd9LIGBg0gMQQLQ7dxXmKWrSAxBALKzEDoT//fOXmn4ly6wBCCB2DnYinfr1y1ciVdJO2QAEEDMzMw8vUXckvXlFtTOnyQ7BAQggBgYGASGi7iC8eeUmSPWA4oEJIHEpcWJ8fezAMWKU0VTNwAQQkZvlLpy+cOcGsdfY0yiYBiaAlFSJug2RgYGhsbiRRj4n0tiBCSANXQ0i3bd3297KrEqCG4L//PlzcNfB0rTSeN94Ik0mUtnAbGZ58vCJmYIZkU5kYGBQUFaIz4q3dbaVkpXi5ef98f3H54+fnz5++uTBk2uXrp07ce7C6QuQNgEvH+/Nj9Qs2gcmgBgYGCyVLR/eewhiURufe3JOQppqdwoNTBZjYGBw83MDUTTAt67doqKpAxZAoXGhVPQGslHDJIB0DHVotDH19vXbyOFFIXvAUhADA0NJYwmIojYeJikIdPWxg1VIbAiIRVU8fAKIgYGhZXKLioYKiEU9/P7t+7ev31LLvIHMYgwMDHz8fIu3LpaSlQJxqIepmIgGOIAYGBjkleS3HN9CxYMoWNlYIY1GkOkU44EPIAYGBglpic3HN5c0lnBycYL45GIpWamiuqLTD0+7eLuQawa6vgFrSWMFb169mTNxztola0k6rkpWQdbF28UzyNPKwQrXmQ5YrSNGcHAFEAT8////0tlLp46cunjm4sN7D589fvbl05fv374zMjLy8PHw8vGKiIkoqSkpqyuraKgYmhlSvQiDOANCDsYAGlRgUJRBgxmMBhABMBpABMBoABEAowFEAIwGEAEwGkAEwGgAEQCjAUQAjAYQATAaQATAaAARAKMBRACMBhABMBpABMBoABEAowFEAIwGEAHAwjB6wRheMJqCCIDRACIARgOIABgNIAJgNIAIgNEAIgBGA4gAGA0gAmA0gAiA0QAiAEYDiAAYDSACYDSACIDRACIARgOIABgNIAJgNIAIgNEAIgBGA4gAGA0gAmA0gAiA0QAiAEYDiAAg9igfqoCXL589enT/yZOHT58+evLk4ZMnD9++ff39+7cfP75DyB8/vv///5+Tk4uDg1NERExGRl5OTsnAwNTY2FJBQZkqbiDVEMZnz/6TqodI8O/fv1u3rl28ePrSpXPXrl28fv3yp0/k35CuoqIREBAZGZkkKUnXS7KpH0CfPn1YuHD6sWMHzp49/uXLZyJDk0hlrKxskZFJJSWNIiJiRGqhUBn1A+jixTOenqYUOgu/dkFB4ba2Kf7+9LjQd0gW0u/fv83MjOzqqsUfjlSRHZIBBAETJrS0t1dB2LQjh3AAMTAwTJ7cvnr1IhCLZnhoBxADA0NNTe7z509ALNrgIR9Anz9/aqTNEReQAB/yAcTAwLB586rr1y+BWDTAwyGA/v//P2/eFBoEDsjI4RBADAwMGzeu+P79G4hFbUzXvhgaaGqaoKysLiEhJSQkygkCXP/+/Xvz5tXjxw/27Nmybt2yFy+eomnBxf3y5fOxYwecnb1wKSBbfCBb0hcuPBcTw3nY2OfPn6qrc9asWUyk35KT85qbJxKpmHhlgzeL8fLyTZiwwM7OlUjPXL58jkiVJCkbvAHEwMDAxMTU2TmDyAO6b926BtJDbTyoAwh0eI68krW1E4hFCH/48O7Nm1eEVJEsP9gDiIGBwcXFG0QRgW/fvk6EKtKUDIEAMja2JNJPDx/eJVIl8cqGQABpa+sT6Z/Pnz8RqZJ4ZUMggDg4OAUFhYnx0tevX4hRRpKaIRBAoDO8JKRBFCFM9RFeUE1KyNJBAYSEiEpB376N1BTExkbURQq06I4NjSzGzs5BTEr+/5/6U1hDI4CITEHEBCKpaoZGAA0gGA0gAmA0gAiA0QAiAEYDiAAYDSACYDSACIDRACIARgOIABgNIAJgNIAIgNEAIgBGA4gAGA0gAmA0gAiA0QAiAEYDiAAYDSACYDSACIDRACIARgOIABgNIAJgNIAIgNEAIgBGA4gAGA0gAoD6y4CHGRhNQQTAaAARAKMBRACMBhABMBpABMBoABEAowFEAIwGEAEwGkAEwGgAEQCjAUQAjAYQATAaQATAaAARAKMBRACMBhABMBpABMBoABEAowFEALCMXi+GH4ymIAJgNIAIgNEAIgBGA4gAGA0gAmA0gAiA0QAiAEYDiAAYDSACYDSACIDRACIARgOIABgNIAJgNIAIgNEAIgBGA4gAGA0gAmA0gAiA0QAiAEYDiAAYDSACYDSACIDRACIABvJM+6f37589cODamTOPbt9+cvfu5w8ffnz9+u/fP05ubi5eXgk5OTlVVVU9PWN7ezUDAyamgYlLxrM0OJwRP3j24MG2xYu3LVny8NYt/CrhsvzCwq5hYb7x8Trm5nBB+jDoGkD3rl2b29q6a+XKf3//kuc9AxubtLo6c1diD7onzxZkXXQKoO9fv86oq1s2cSLZQYPsaHs/v/IpU8RlZZEFacSmRwDdOHeuLCTk6f37VPQDFy9v/bx5LiEhVDQTq1E0L/l2LFuWaG1N3dBhYGD49vlzeWjo1OpqrL6ioiBtA2jD3Lm1sbG/fvygoouRjZrX1taVm4ssQnU2DQNo54oVLamp//79o7qjkQ1cOWXKxLIyZBHqsmlVBl07cybFzu7n9+/UdS4u0xoXLvSJi8MlS4k4TQLo25cvYTo6zx8+pMRlJOll4+BYceGCvLo6SbqIUUyTLDahpISeocPAwPDrx4/GpCRaZGfqB9D1s2fXzZpFTORQV83FY8e2LqL+hZDUz2JZrq4n9+wh3vPsnJy2Pj5u4eEKGhpi0tKsbGyvnz17+fjxoc2bd61c+frZM+KNklJQWHfzJisbG/FaCKqkcgBdOn480cqKoK1wBZbu7vXz5olKScFFkBl///yZ1dg4r72d+PZ33dy5/klJyIZQyKZyFls5hYS7BmNLSqbs2IErdBgYGJhZWDKbmyds3szEzEykP9dMn06kSiKVUTOAPr59u3fNGiItdg4Ozu/qIkaxtadnfmcnMSoZGEDNi5vnzxOpmBhl1AygAxs3/v71ixhb+YSE6ubOJfJmNQYGhpjiYg0jI2JMZmBg2LduHZEqiVFG1QDasIEYKxkYGJKrq3n4+YlUDFGWWlcHYRAkD23eTFAN8QqoVkj/+/fPnp//2xfCt+tw8fDsefWKnZOTeFdCVHrLy7949AjCxk/uff1aQEQEvxoiZamWgu5dvUpM6DAwMNj5+pIROgwMDA7+/kT66tqZM0SqJKiMagF09fRpgpZBFDgFB0MYpJK2Pj5EahmMAfTo9m0iXa9lYkKkSjRlagYGaCK4uI/v3MElRao41VLQC+K6pjz8/JLy8qS6EqJeSEyMyJKFyKIKYix+kmoB9PIJUZe+y6up4XcQfllZFRX8CiCyr4hzDEQxfpJqAURkCc0jIIDfQfhlufn48CuAyH7/+hXCoJykWgD9+EbUZd08xPkQl8e4eXlxSSGLE+kYZC242FQLoD+/f+OyA1mcvAoebgKR2ols0MONxcOgWgCxcxB1yx6Fg7BEZmQiwxFPuMClqBdAxLWMifQh3H1ojK+fiLpqloM4x6AZjpVLtQAism/1+cMHrO4gUpBI7UQ6hhhLqRZA4jIyxNhHfHsS07T///8/vHkTUxxThIqz0lQLIAk5OUyHYop8evfu3cuXmOLEiDy5e5fI+ptIxxBjKdUCSFFTkxj7GBgYrp87R6RKNGVXT51CE8HFVdDQwCVFqjjVAkjT2JhIuw9v2UKkSjRle4gertQ2NUXTSzaXauNB////dxAU/PLxI0GniMvKbn34kPjhRIiB3z5/dhYTI2aan5mF5eCHD5zc3BCNFJJUS0GMjIwWxK1revn4MfFjj3DvLZswgZjQYWBgMLCxoVboUPm2cFtfX7h/8DNmNzfjV4Am++HNm0U9PWiCuLh2RDsDlwnI4lRLQZChQjbi2tM3z59f1N0N0kME/vfvX31CApFNRCYmJmdyB+SwuoWaAcQnKOgaGorVGkzByZWVR7dvxxRHE/n//39vQcGRrVvRxHFxLT08yB5vwmomNQOIgYEhPCcHRBGB//39W+DrO7229u+fP7iUv3zyJMvVdcXkybgUYIqHZWVhClIiQrVaDA7yvL2PbtsG5xJkiEpJuYWH2/n6SsjJiUpJ/f7169XTp/evX9+1cuWhzZuJLJghtmiZmCwmemgcooUgSf0AunnhQoyxMS1WohD0zJQdOyzd3QkqI0kBlbMYAwODuoFBOI3XDYKswcAuISFUDx0GBgbqpyAGBtCq6Ah9/Sd374I4dMF8QkJrr10TEhenum3UT0EMDAyc3Nzda9dSsbUGMhQ3ZmJmbl++nBahQ+WGIjJQ09dvWrSIPjtQ8ru6LNzckG2nIpsmKQgCnIKC6BBG6Q0NMUVFEBtpQdIwgBgYGDyjoztWraJRXmNiYsrr7EyrrwfZRDNMk0IaDdy+dKk0OJiK08EMDKBWe/PixTbe3mh2UZ1L2xQEAap6eisuXowpKiJ+JR1EIy7SKShozbVrdAgdWlXzuMC9a9dmNTbuWb36P7m7+AxsbDKbmkwcHXFZQXVxemQxNPD4zp1N8+dvW7KE+CUGoG5wWJhfYuIw33GIBh7cuHH24MEb5849un372f37Xz5+/A7fs8rDA9qzqqamqqtrZG+vYWhIreyJ5gaC3AFIQUML0KOQHtJgNIAIgNEAIgBGA4gAGA0gAmA0gAiA0QAiAEYDiAAYDSACYDSACIDRACIARgOIABgNIAJgNIAIgNEAIgBGA4gAGA0gAmA0gAgAxv9n/xNQMrLBaAoiAEYDiAAYDSACYDSACIDRACIARgOIABgNIAJgNIAIgNEAIgBGA4gAGA0gAmA0gAiA0QAiAEYDiAAYDSACYDSACIDRACIARgOIABgNIAJgNIAIgNEAIgBGA4gAGA0gAoB+94t9//n91sNbD58/fPLqyZOXT56+fvrk5ZPX719///n9+8/v3358+/7j+68/vzjZObk4uIT4hOQl5eUl5Q3UDSz1LHVVdFmY6edU5DCj4cTh52+fj186fvLKyfM3zl+8dfHB8wdkb6bn5+H3d/APcw3ztPKkzz5YeBhRP4A+fP4wZeWUrUe2nr56+u8/Mu8Rg7sPjaEiq1ISW5Lkn8TKwoomRSMu9QPozLUzprFUOwAKq7e1lbWnVUyzM7LDKktdwSFZSF+9e9UhzaF6ajXZeZb4QBySAcTAADoRrG1em2+B7/eftL1faagGEARsO7rNr9CPpmE0tAOIgYFhz8k9MTUxIBZt8JAPIAYGhnX71nUs6ACxaICHQwAxMDDUTK05f5OaF7KADAXjYRJAf//9TWtJo3qzi4anv9AfnLl2Zsm2JVS3d2A6OBDQX9yvKqcqLiQuxC/Ew8nDw8XDxsr26eun249uHzp3aMm2JZduX4KoJJJsm9cW4xXDzETsVVLEGDuQLennu55LCEvgceXavWuzOrJevXuFRw2a1LqedYGOgWiClHAHdRkU7Bx8ZskZFVkV4n04b+M84hUTo3JQBxADA4OsuOzOqTv5eYi9Smr70e2v378G6aQSHuwBxMDAoCSt1F1A7Lmmf//93XViF0gblfAQCCAGBoZEv0Q1eWKvdBmJAcTCzFKdROy910cvHAUFKpXw0EhBDAwMQU5BHGxEXd1x7+m9z98+g/RQAw+ZAOLh4vG09iTGy////79y5woxKolRM2QCiIGBwdGE2JO5Hj6n2jXTQymAdFV1QeFEBH76+ikRqohSMpQCSE9Vjyg/MTC8ePOCSJUElQ2lABLiEyJyMuPr98F3vxh9AC8XUfeLUXEQdiilIAYGBn5eovocv34TdWEwyERCeIgFEJEnVLKxUu1G9SEWQF++Eb4JmIGBgZ2NnVDKIFZ+iAUQkaUvNyd17q0ZYkOun799JrL0FRMUIzaFEFI3lFLQzQdE3b7GwMAgJjQiA+jWo1uE4hsqLy9J5mXAUP1I1FBKQYfOHUJyOT6murw6PmlS5IZSAG07QtSFL7xcvNJi0qQEAj61QyaAjl089vjlY3xegcmZalNzddKQCaDWua2wECBAW+lbEVBBivTQCKA9J/dsO0pU/iJp2IiYgBoCAfTg2YOIyghiPAPqrPHw2xraEqmYGGUDGUB5XXlX7hIYG915fKdlguXbj2+J8QwDA4OPrQ+RQyJEGjiQc/Or96xevWe1lpKWt423kYaRroquuLA4Pw//1+9fn71+dvra6SXbluw9tZfIDirEw0n+SRAGtciBDCAIuHbv2rV71yBsCklVOVXix62JtGsgsxjVQUVCBanXtxJ0w/AJIBVZlTifOIIeJlXB8AmgKeVTaLGfY5gEUKx3rLsllW83hKS14RBAuiq60yunQ/xDdXLIB5CchNym/k1UHEJEC+KhHUDKMsoHZx9UkFJA8xUVuUM4gHztfM8sOUPT0BngMWlXc1fy6h1JEcnFzYs39W8S4BWgYmLBatRAtqQXNS/69+/f3I1z1+xZQ+SKXy0lreyw7HifeNoVOmjBNFiWAT9++Xj3id3nbpy7dPvSoxePPnz+8OXbFw52Dl4uXhlxGU1FTWNNYw8rDyqOpaIFBC7uYAmgQQuGcCFNHzAaQATAaAARAKMBRACMBhABMBpABMBoABEAowFEAIwGEAEwGkAEwGgAEQCjAUQAjAYQATAaQATAaAARAKMBRABQf8BsmIHRFEQAMP7/f5aAkpENRlMQATAaQATAaAARAKMBRACMBhABMBpABMBoABEAowFEAIwGEAEwGkAEwGgAEQCjAUQAjAYQATAaQATAaAARAKMBRACMBhABMBpABMBoABEAowFEAIwGEAEwGkAEwGgAEQADuZnlzp3HJ05cvnbt3o0bD54/f/Py5bsPHz7/+PHz58/frKws3Nwc3Nyc3Nygw+7l5SWVlWUgSEdHRVxciIC3qCdN74nD////Hzx4buXKXVu2HH7y5CV5HlFQkLKzM3J3t/T0tBIU5CPPECJ10S+Afv/+M2/exv7+pTdvUu0kWjY2Vi8v64yMEDc3C6rvmIeEIJ0CaM+ekzk5nVQMGojr4eS8efWJiX5wLhUZNC+D/v37V1U1tatrIUlHcJDqQ1VVOVK1EKmetgH058/fmJialSupeQo/Vo/p6ChjFadckLbVfHp6Kx1CR0ZGXECAqENwyQgvGgbQ7Nnr583bSIabSNVCu+RDw13Pr169Ky7uI9Wr5KkfkgHU2bnw8+dv5HmYVF06OiTcbUOq4TTJYj9//po/fxOpTiFb/dBLQfv2nX7//hPZHiZJIxMTk5aWEklaSFJMk2r+wAES1j0KCfFFRLjb2hqqqsrJyIhzc3NwcnL8+/fvx49fnz9/ffbs9ZMnry5fvnPhws1Dh869efMBzXtKStKcnFQ7PRrNcAYGBpoE0OXLdzBtwiqSmOg3aVIpDw8XmiwzMxMrKwsvL5eUlKiJiVZAgAPkbtVz525s3Hhgw4YDcCtomr8YGBho0tXQ14+4dOk2mp8xuX5+9hs3klnT3b37ZOPGAxs3HnRyMq2vT8M0nFoiNAkgFRX/u3efEHTiihXt4eFuBJUNrAKa1GLs7ESduX/nDlGH1w7DACKy4d/bu+T+fardMUOjcKRJCtLQIOpIqPfvP1laJuzadYJGfqOKsTQJIHNzHSId9/LlO3f37ICA4pMnCRzqSqSBVFdGk0L6xYu30tIepF4Gb2ysmZISEBrqKixM1PUrVA8LrAbSJIAYGBiioqqXL98BYpGIWVlZnJ3NAgMd/f0d6Dk4j8uZtAqgBw+eGRpGffhA/lV6zMxMTk6mUVGeQUFOfHxUu0gEV0DgEqdVADEwMGzadDAgoJjykVYODjZvb9uoKA9vbxsiGxAg66mEaRhADAwMDQ0zGxtngVjUwKKigpmZIVlZYfTMerQNIAYGhilTVhYU9Pz9+w/EoQZmZ2dLSQlobs6k9YwYxLE0DyAGBoYdO44lJTU+f/4GxKESFhUV7OzMo9FUD7Ib6RFADAwMnz9/a2iYOXnyit+//4D4VMKxsd5z5tSysbFSyTwsxtApgCDgzp3HEyYsW7hwy5cvVBuNtbc33rChl8jODcQZJJF0DSAI+PDh86JFW1eu3HX8+CXK6zgGBgYPD6tt2yYN7alnrODp01dr1uxdvXr3sWOUhlRHR255eQJWWygUHIAUhAmePXu9fv3+DRsOHDx4lrxCioWF+dy5Zbq61J/eGBQBBAcfP37Ztu3I+vX7t2w5/P37T7g4MYyQEJfVqzuJUUmSmsEVQHDw+fO3lSt3TZmy8uJFYi9dY2VleflyN9UbRzQZ7qAc8PJypaQEnD+/bOnSViJrqN+//9BiaGmQBhAEMDIyRkV5HDo0h8iJHeKTG8R8YkiaBBCpI0H4Haqrq5KeHoxfDUT2/v1nEAYVSZoE0PHjl1VVA5qb5zx8+JwqbjUwIOrOwk+fiLqmliQn0SSALl++fefO47q66YqKvo6OaTNmrHn58h1JzkJTfPv2IzQRunFpFEDQmdX///8fOHA2M7NdSsrd3j510qQVZEz1bN9+dMKEZcSECJHFOTFGwdXQZOoZc1r1379/hw6dO3ToXH5+t7y8pLW1voGBupaWkqysuJSUKDc3JwcH279//3///vP16/cPHz6/ePH24cPnFy/e2rXrxIULxN4/q6QkA/cYtRg0aQcJCjpQMthKtt82buzz87MnWztWjdTPYo8fvxyQ0GFjY7W3N8bqSUoEqR9A8HUXlDiLDL2+vnb8/DxkaMSvhRYBRHhdB343kSdbXh5Pnkb8uqgfQJglNH4XUEU2MdHP1FSbKkahGUL9AKJ/FtPVVZk0qRTNY9TiUjmAfv/+Q7sNGVj9rKWltGvXNMw1algVkyFI5QD6/Pmbvr4aGe4gT0tAgMPx4wskJITJ006MLpq0g06evDJz5tpVq3Z//fqdGEeQoUZOTqKjIzcy0oMMvSRpoUkAQcDnz99Wrdq1aNHWw4fPU2VwHmKsgYF6ZmZIQoIvTWd7IHbRahEnGnj06MXq1Xu2bDl09OhF8oacmZmZDAzUvb1tAgMdiezZo7mBbC4NUxAm+Pz52/nzNy5cuHX16t3Hj18+ffrq1at33779+Pnz969fv5mZmdjYWDk42AQEeEVEBMTFhRUVpVRUZHV1VU1Ntbi5OTENpIMIXQNoKAIq12LDD4wGEAEwGkAEwGgAEQCjAUQAjAYQATAaQATAaAARAKMBRACMBhABMBpABMBoABEAowFEAIwGEAEwGkAEwGgAEQCjAUQAjAYQYAQCCAD9jqDV/1s9BQAAAABJRU5ErkJggg==", "text/plain": [] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "da = rearrange(ims, '(batch height) width channel')\n", "da.values" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "but wait, dimensions must be named in xarray, so what happened with this stacked dimension we have just created?\n", "\n", "`xarray_einstats` assigns it a dimension name based on the names of the parent dimensions:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "('batch-height', 'width', 'channel')" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "da.dims" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "we can also compose a new dimension of batch and width. And now we will name it manually (strongly recommended over relying on the automatic names)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAABgCAIAAAB6y1p+AAAiY0lEQVR4AWL8/+wZwyjAHQLPJXHLjcowMDCMBhDeZDAaPHiDh8HoHH75ES87GkB4ARNe2VHJ0RAYDYHREBgNgdEQGKSAZZC6a2Q76/b128vmLDu89/CTh09+fP8hLCqsa6Tr4e8RHBPMysY6ssNm1PejITAaAqMhAAWjQ4jQgMBF0XkI6NfPX/WF9YtnLv737x+mk6TlpCcsmGDtaI0pNWAidA6gAfMnmRaPBg/+gBsdIcMfPqNjrPjB6BAi/vChq+yP7z9CnEIWTl+ItfZiYGB4+uhphGvEqoWr6OqsUctGQ2A0BEZDYFCC0QpsEEVLcUrxmWNn8Dvo79+/pamlp4+exq9sVHY0BEZDYDQEhj0YrcAGSxRfOH1h/bL1xLjm9+/f9YX1xKgcVTMaAqMhMBoCwxiMVmCDJXKXzl5KvFMunL5w5fwV4tWPqhwNgdEQGA2B4QdGK7DBEqdH9x0lySmH9hwiSf2o4tEQGA2B0RAYZmC0AhssEfr00VOSnPLkwROS1I8qHg2B0RAYDYFhBkYrsEERod++fvv9+zdJTvnw/gNJ6kcVj4bAaAiMhsAwA6MV2KCIUE4uThYW0jaV8/HzDQqnjzpiNARGQ2A0BAYIjFZgAxTwqNYyMjJKypB26qKMvAyqGaO80RAYDYHREBhZYLQCGyzxbeNsQ5JTbF1sSVI/qng0BEZDYDQEhhkYrcAGS4RGpUQR7xRdI109Yz3i1Y+qHA2B0RAYDYHhB0YrsMESp8YWxn7hfsS4hoWFpbG/kZGRkRjFo2pGQ2A0BEZDYLiC0QpsEMVs/7x+I3Mj/A5iYmLqmtllYWeBX9mo7GgIjIbAaAgMezBagQ2iKObk4lyzf010ajQTE/Z4kZSRXL5zeURSxCBy9KhTRkNgNARGQ2CAwOh1KgQCfkCuw7h17dbS2UuP7Dvy9OHT79+/g+4DM9R193cPiQ1hY2cj4GI6Sw9IANHZjxRYNxo8+ANv9DoV/OEzep0KfjBageEPH4bRAmg0gAiEAF7p0fSDN3hGy2f8wcMwGkD4AfahKvx6RmVHQ2A0BEZDYDQERkNgwMFoBTbgUTDqgNEQGA2B0RAYDQFywGgFRk6ojeoZDYHREBgNgdEQGHAwWoENeBSMOmA0BEZDYDQERkOAHEDaAbLk2IBbz89fv06eO3foxIlL16/fvnfv2cuXX75+/fnrFycHBxcnp4iQkKKcnJKcnKmBgZWJibKCAm6TRmVGRAi8fPns0aP7T548fPr00ZMnD588efj27evv37/9+PEdQv748f3///+cnFwcHJwiImIyMvJyckoGBqbGxpYKCsojIoyQPPn0/v2zBw5cO3Pm0e3bT+7e/fzhw4+vX//9+8fJzc3FyyshJyenqqqqp2dsb69mYIBr5waSeUOb+f3n91sPbz18/vDJqydPXj55+vrpk5dPXr9//f3n9+8/v3/78e37j++//vziZOfk4uAS4hOSl5SXl5Q3UDew1LPUVdFlYR7IonJAgv7OnccnTly+du3ejRsPnj9/8/Lluw8fPv/48fPnz9+srCzc3Bzc3Jzc3Jw8PFzy8pLKyjIQpKOjIi4uRDcHD8AqxP///+88cGDJ2rUbd+788vUrkV5VVVQM8/OLDwtTVVQkUgtVlFFrFdnzJ8+NZY2p4iS4IZuPbza2oLKZcMOJZVArgDDs+/fv361b1y5ePH3p0rlr1y5ev3750yfyb5BRUdEICIiMjEySlKTrIcg0Cx6M8IIJPHvwYNvixduWLHl46xZMjADNLyzsGhbmGx+vY25OQCm1pWm3jP7zt8/HLx0/eeXk+RvnL966+OD5g3///pHnfH4efn8H/zDXME8rT3rX9LQLIGzg////Bw+eW7ly15Yth588eYlNCWExBQUpOzsjd3dLT08rQUHaXppB1wrs379/i9es6Zw69frt24SDAZsKJiamYG/v+qIibXV1bPLUF6NWATRagREZN58+fVi4cPqxYwfOnj3+5ctnInURqYyVlS0yMqmkpFFERIxILRQqo1b6IcYZ965dm9vaumvlyn9//xKjHlONgY1NWl2duasrphSNRKhePn/4/GHKyilbj2w9ffX0339khgMuz6rIqpTEliT5J7GysOJSQ2VxqgcQDvD795958zb29y+9efMhDiUkC7OxsXp5WWdkhLi5WdDo6Dv6VWAnz53Lrqo6e+kSycGAoYGVlbU4Pb2+uJiDnR1DksoC1CqARiswIiPm4sUznp6mRComT5mgoHBb2xR/f3ocaEKt9IPfp9+/fp1RV7ds4kSyqy5k8+39/MqnTBGXlUUWpBGb6uXzmWtnTGNpm360lbWnVUyzM7KjUZigGEv1AMIG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", "text/plain": [] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ims.einops.rearrange('(batch width)=batched_widths channel').values" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "note that here we have skipped the `height` dimension not only from the input but also from the\n", "output expression. `xarray_einstats` follows xarray convention of adding the new or modified (aka \n", "present in the output expression) dimensions at the end. \n", "\n", "As dimensions are already named, we can skip dimensions not only from the input as we have been doing\n", "but also from the output if we don't mind the new dimensions being moved to the right of the omitted ones." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Resulting dimensions are computed very simply. The length of newly composed axis is a product of components:\n", "`[6, 96, 96, 3] -> [96, (6 * 96), 3]`" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "(96, 576, 3)" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rearrange(ims, '(batch width) channel').shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can compose more than two axes. Let's flatten 4d array into 1d, resulting array has as many elements as the original" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "(165888,)" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rearrange(ims, '(batch height width channel)').shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ ":::{note}\n", "Everything we have done so far could have been done with {meth}`~xarray.Dataset.transpose` or with\n", "{meth}`~xarray.Dataset.stack`, so choosing between those methods or einops is a matter of personal \n", "choice. We'd recommend you stick with the original xarray methods, especially if working\n", "with dask arrays, their defaults will be much more convenient than the lack of automatic dask handling\n", "in `xarray_einstats`. \n", "\n", "The rearrangements below this point however can't be reproduced by a single xarray method.\n", ":::" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "## Decomposition of axis\n", "Decomposition is the inverse process, we represent an axis as a combination of new axes.\n", "\n", "There will always be several decompositions possible, so we specify `b1=2`\n", "to decompose `batch` to two dimensions `b1` and `b2` of lengths 2 and 3 respectively.\n", "\n", "In addition, we also need to specify the name of the dimension we want to decompose." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "(2, 3, 96, 96, 3)" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ims.einops.rearrange('(b1 b2)=batch -> b1 b2 height width channel ', b1=2).shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, combine composition and decomposition:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "da = rearrange(ims, '(b1 b2)=batch -> (b1 height) (b2 width) channel ', b1=2)\n", "da.values" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Again, we skip naming the output dimensions so they are named by `xarray_einstats`" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "('b1-height', 'b2-width', 'channel')" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "da.dims" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Slightly different composition: b1 is merged with width, b2 with height\n", "\n", "... so letters are ordered by w then by h" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rearrange(ims, '(b1 b2)=batch -> (b2 height) (b1 width) channel ', b1=2).values" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Wove part of width dimension to height. We should call this width-to-height as image width shrunk by 2 and height doubled. \n", "\n", "**but all pixels are the same!**\n", "\n", "> Can you write reverse operation (height-to-width)?" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rearrange(ims, '(w1 w2)=width -> (height w2) (batch w1) channel', w2=2).values" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Order of axes matters\n", "Compare with the next two examples\n" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAABgCAIAAAB6y1p+AAAiY0lEQVR4AWL8/+wZwyjAHQLPJXHLjcowMDCMBhDeZDAaPHiDh8HoHH75ES87GkB4ARNe2VHJ0RAYDYHREBgNgdEQGKSAZZC6a2Q76/b128vmLDu89/CTh09+fP8hLCqsa6Tr4e8RHBPMysY6ssNm1PejITAaAqMhAAWjQ4jQgMBF0XkI6NfPX/WF9YtnLv737x+mk6TlpCcsmGDtaI0pNWAidA6gAfMnmRaPBg/+gBsdIcMfPqNjrPjB6BAi/vChq+yP7z9CnEIWTl+ItfZiYGB4+uhphGvEqoWr6OqsUctGQ2A0BEZDYFCC0QpsEEVLcUrxmWNn8Dvo79+/pamlp4+exq9sVHY0BEZDYDQEhj0YrcAGSxRfOH1h/bL1xLjm9+/f9YX1xKgcVTMaAqMhMBoCwxiMVmCDJXKXzl5KvFMunL5w5fwV4tWPqhwNgdEQGA2B4QdGK7DBEqdH9x0lySmH9hwiSf2o4tEQGA2B0RAYZmC0AhssEfr00VOSnPLkwROS1I8qHg2B0RAYDYFhBkYrsEERod++fvv9+zdJTvnw/gNJ6kcVj4bAaAiMhsAwA6MV2KCIUE4uThYW0jaV8/HzDQqnjzpiNARGQ2A0BAYIjFZgAxTwqNYyMjJKypB26qKMvAyqGaO80RAYDYHREBhZYLQCGyzxbeNsQ5JTbF1sSVI/qng0BEZDYDQEhhkYrcAGS4RGpUQR7xRdI109Yz3i1Y+qHA2B0RAYDYHhB0YrsMESp8YWxn7hfsS4hoWFpbG/kZGRkRjFo2pGQ2A0BEZDYLiC0QpsEMVs/7x+I3Mj/A5iYmLqmtllYWeBX9mo7GgIjIbAaAgMezBagQ2iKObk4lyzf010ajQTE/Z4kZSRXL5zeURSxCBy9KhTRkNgNARGQ2CAwOh1KgQCfkCuw7h17dbS2UuP7Dvy9OHT79+/g+4DM9R193cPiQ1hY2cj4GI6Sw9IANHZjxRYNxo8+ANv9DoV/OEzep0KfjBageEPH4bRAmg0gAiEAF7p0fSDN3hGy2f8wcMwGkD4AfahKvx6RmVHQ2A0BEZDYDQERkNgwMFoBTbgUTDqgNEQGA2B0RAYDQFywGgFRk6ojeoZDYHREBgNgdEQGHAwWoENeBSMOmA0BEZDYDQERkOAHEDaAbLk2IBbz89fv06eO3foxIlL16/fvnfv2cuXX75+/fnrFycHBxcnp4iQkKKcnJKcnKmBgZWJibKCAm6TRmVGRAi8fPns0aP7T548fPr00ZMnD588efj27evv37/9+PEdQv748f3///+cnFwcHJwiImIyMvJyckoGBqbGxpYKCsojIoyQPPn0/v2zBw5cO3Pm0e3bT+7e/fzhw4+vX//9+8fJzc3FyyshJyenqqqqp2dsb69mYIBr5waSeUOb+f3n91sPbz18/vDJqydPXj55+vrpk5dPXr9//f3n9+8/v3/78e37j++//vziZOfk4uAS4hOSl5SXl5Q3UDew1LPUVdFlYR7IonJAgv7OnccnTly+du3ejRsPnj9/8/Lluw8fPv/48fPnz9+srCzc3Bzc3Jzc3Jw8PFzy8pLKyjIQpKOjIi4uRDcHD8AqxP///+88cGDJ2rUbd+788vUrkV5VVVQM8/OLDwtTVVQkUgtVlFFrFdnzJ8+NZY2p4iS4IZuPbza2oLKZcMOJZVArgDDs+/fv361b1y5ePH3p0rlr1y5ev3750yfyb5BRUdEICIiMjEySlKTrIcg0Cx6M8IIJPHvwYNvixduWLHl46xZMjADNLyzsGhbmGx+vY25OQCm1pWm3jP7zt8/HLx0/eeXk+RvnL966+OD5g3///pHnfH4efn8H/zDXME8rT3rX9LQLIGzg////Bw+eW7ly15Yth588eYlNCWExBQUpOzsjd3dLT08rQUHaXppB1wrs379/i9es6Zw69frt24SDAZsKJiamYG/v+qIibXV1bPLUF6NWATRagREZN58+fVi4cPqxYwfOnj3+5ctnInURqYyVlS0yMqmkpFFERIxILRQqo1b6IcYZ965dm9vaumvlyn9//xKjHlONgY1NWl2duasrphSNRKhePn/4/GHKyilbj2w9ffX0339khgMuz6rIqpTEliT5J7GysOJSQ2VxqgcQDvD795958zb29y+9efMhDiUkC7OxsXp5WWdkhLi5WdDo6Dv6VWAnz53Lrqo6e+kSycGAoYGVlbU4Pb2+uJiDnR1DksoC1CqARiswIiPm4sUznp6mRComT5mgoHBb2xR/f3ocaEKt9IPfp9+/fp1RV7ds4kSyqy5k8+39/MqnTBGXlUUWpBGb6uXzmWtnTGNpm360lbWnVUyzM7KjUZigGEv1AMIG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", "text/plain": [] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rearrange(ims, '(batch width) channel').values" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rearrange(ims, '(width batch) channel').values" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The order of axes in the composition is different. \n", "\n", "The rule is just as for digits in the number: the leftmost digit is the most significant, while neighboring numbers differ in the rightmost axis. You can also think of this as lexicographic sort" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And what if b1 and b2 are reordered before composing to width?" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rearrange(ims, '(b1 b2)=batch -> (b1 b2 width) channel ', b1=2).values # produces 'einops'\n", "rearrange(ims, '(b1 b2)=batch -> (b2 b1 width) channel ', b1=2).values # produces 'eoipns'" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "## Meet `reduce`\n", "\n", "From einops documentation:\n", "\n", "> In einops-land you don't need to guess what happened\n", "> ```python\n", "> x.mean(-1)\n", "> ```\n", "> Because you write what the operation does\n", "> ```python\n", "> reduce(x, 'b h w c -> b h w', 'mean')\n", "> ```\n", ">\n", "> if an axis is not present in the output — you guessed it — that axis is reduced.\n", "\n", "using xarray objects, you already don't have to guess what happened. Much like with `rearrange`,\n", "the first examples (three in this case) using reduce can be reproduced with a single xarray method. See the\n", "operation above with pure xarray and with `reduce`:\n", "\n", "```\n", "da.mean(\"channel\")\n", "reduce(x, \"batch width height\", \"mean\")\n", "```\n", "\n", "However, again much like with `rearrange`, `reduce` also opens the door to many other operations\n", "that go beyond what single xarray methods can do. These cases are worth making `reduce` work, \n", "and once it's working the simple operations are possible automatically.\n", "\n", "If you prefer thinking in terms of the dimensions that are kept instead of the ones that are reduced, \n", "using `reduce` can be more convenient even for simple operations." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# average over batch\n", "ims.einops.reduce('height width channel', 'mean').values" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# the previous is identical to:\n", "ims.mean(dim=\"batch\") # as xarray operation\n", "ims.values.mean(axis=0) # as numpy operation" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAAAAADH8yjkAAAD70lEQVR4AWI8y0BbwERb4xkYWIi04Muyw09+COt62BOpHq6MyCCatPgfRIv0BCUIg1iSuCBKXwg1n+FpxGFijYaoI8qCljMQxSDyb+kTEEU0JsaCl+uRjftdj8wjyCbGgqWoplx4i8rHzyPGgqNoRhxC4+PlEmPBUzQTSIoEYiz4jWbBBzQ+Xi4xFqBnRj68JqJJEmOBJJoeGTQ+Xi4xFtigmWCLxsfLJcaCKFQTdMVQ+fh5xFgg5YdsBksjMo8gmxgLGOqNEOYwdckjOESwiLKAYXY0TJ3kchILbCKLa4bPS488/S6s6+5IhKNRlBBrAdkA5nWyDSAERi0gCNALMmwafj58/url65fvf/788eMP438WDk5OLkkZGRkVIWyq0cRwpyJjNJVYgJSRpRWhopUiCxgYGFitQywYQQxcmNJU9PtAzmZcZoPFKbWAgYFBDkTgxFSwQBmn4SAJyi0Q5wWZgxNTbgGBtEq5Bdf7cboeJEG5BQxLboIMwoWpYAFDC6zpjc0SalhwbSs2k6FiuC04e9YcqoYgmIXe9kPSgdsChksnkdShgBAUHgPDs21oAkhcPBasRFKGCuLtUPkMa9D4SFzcFnzci6QMDXSilW/XcCck3BYcwBOwbNZoNu5D4yO4eCxAKMIELmhCuPskOC34h9TxwwTotdEtnH0GnBbc+4ZpLAJIIZgQ1jUIhUnitOAqplpkIIjMYWBgwGkBzkr/EZoJyMAXmQNhP4ZQmCROH7zAVIsP4FSO04KX+IzDBK8whSAiOC3AG8eY4DumEEQEpwU/IPLEApzKcVrwh1ijIQBntsdpATtEI7EAp3JqWcCByyU4LeDBpQM7wKkcpwXi2A3CBXAqx2mBBC6jsAOcynFaoIjdIFxAAZcETgs0celgYGBQAxGoWBuVi+DhtEAOZ7QxMGS3ordHmdURRqKycFrAaIGqEBnc9JiDlu4NOJHlkdk4LWDAM2hzjEHFHdkQBgZDVC4SD7cFdmxIylDBha//3qGKmKBykXg4KxwGPlfcLcJG0SNIZjAw8OD2AW4LGMJxW4DeZLLEbQzuIGLQRm/84AYncEvhsYAhA7c2NPAZjY/ExWcBkjJC4DZOBfgseI9TFwa4hSECE8BnAW5nYQDcSqlkAXk+uIPhUJyALAv+PMRpHgbAHV14gugbllIZJ3iASwaPBXwVuDRhAtavmGIQEdx5HCJPFJCKiMapDo8PcOrBADa4zceYfMDQDAeq7378/s3E9I+T4RsjF9e374w8vCJKyiqGaP1BuHoog/ggmioM1UIaRZUgwgdGLSAIRoOIIBgNIoJgNIgIgtEgAowgwD2HQ1ArcQpoHgcAQUuUaVLqVF0AAAAASUVORK5CYII=", "text/plain": [] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Example of reducing of several axes \n", "# besides mean, there are also min, max, sum, prod\n", "reduce(ims, 'height width', 'min').values" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# this is mean-pooling with 2x2 kernel\n", "# image is split into 2x2 patches, each patch is averaged\n", "reduce(ims, '(h h2)=height (w w2)=width -> h (batch w) channel', 'mean', h2=2, w2=2).values" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# max-pooling is similar\n", "# result is not as smooth as for mean-pooling\n", "ims.einops.reduce('(h h2)=height (w w2)=width -> h (batch w) channel', 'max', h2=2, w2=2).values" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# yet another example. Can you compute result shape?\n", "reduce(ims, '(b1 b2)=batch -> (b2 height) (b1 width)', 'mean', b1=2).values" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We skip the section about numpy-like stacking and concatenating because they aren't relevant to xarray objects.\n", "\n", "We have also reimagined the next section. We are working with xarray objects so adding\n", "new axis of length 1 to ensure broadcastability is not relevant either. We have therefore\n", "modified the section to a showcase of xarray automatic broadcasting and alignment." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Broadcasting and alignment\n", "\n", "As we are using xarray objects, we can directly operate between original and reduced inputs without \n", "the need for adding new dimensions, be it with `[np.newaxis, :]` or with `1` and `()` placeholders\n", "in einops expressions. See for yourself:" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# compute max in each image individually, then show a difference \n", "x = reduce(ims, 'batch channel', 'max') - ims\n", "rearrange(x, '(batch width) channel').values" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Repeating elements\n", "\n", "**coming soon**, for now jump to {ref}`einops_examples`\n", "\n", "Third operation we introduce is `repeat`" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# repeat along a new axis. New axis can be placed anywhere\n", "repeat(ims[0], 'h w c -> h new_axis w c', new_axis=5).shape" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# shortcut\n", "repeat(ims[0], 'h w c -> h 5 w c').shape" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# repeat along w (existing axis)\n", "repeat(ims[0], 'h w c -> h (repeat w) c', repeat=3)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# repeat along two existing axes\n", "repeat(ims[0], 'h w c -> (2 h) (2 w) c')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# order of axes matters as usual - you can repeat each element (pixel) 3 times \n", "# by changing order in parenthesis\n", "repeat(ims[0], 'h w c -> h (w repeat) c', repeat=3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note: `repeat` operation covers functionality identical to `numpy.repeat`, `numpy.tile` and actually more than that." ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "## Reduce ⇆ repeat\n", "\n", "reduce and repeat are like opposite of each other: first one reduces amount of elements, second one increases.\n", "\n", "In the following example each image is repeated first, then we reduce over new axis to get back original tensor. Notice that operation patterns are \"reverse\" of each other" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "repeated = repeat(ims, 'b h w c -> b h new_axis w c', new_axis=2)\n", "reduced = reduce(repeated, 'b h new_axis w c -> b h w c', 'min')\n", "assert numpy.array_equal(ims, reduced)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "(einops_examples)=\n", "## Fancy examples in random order\n", "\n", "(a.k.a. mad designer gallery)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# interweaving pixels of different pictures\n", "# all letters are observable\n", "rearrange(ims, '(b1 b2)=batch -> (height b1) (width b2) channel ', b1=2).values" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAASAAAADACAIAAAAr0inhAAAquUlEQVR4AWL8/+wZwyjAHQLPJXHLjcowMDCMBhBewHj2/3+8Cka6pNG5kR4CBPw/GkB4wWgNhjd4RgtoAsEzGkAEwGgNRiCARgvo0QCiBIzWYARCb0C6GLev3142Z9nhvYefPHzy4/sPYVFhXSNdD3+P4JhgVjZWAi6ms/SABNDQAaM1GIG4Gq3BRgOIEjBagxEIPToX0L9+/qovrF88c/G/f/8wXSYtJz1hwQRrR2tMqQEToXMADTUwWoMRiLHRGmw0gCgBozUYgdCjZwH94/uPMJewM8fO4HETMzNz79zesPgwPGroKkXPABqCYLQGIxBpozXYaABRAkZrMAKhR88COjs6e/2y9QQcxMDAysq6Zv8aU2tTgirpoYCeATQEwWgNRiDSRmuw0QCiBIzWYARCj24F9IXTF7zMvAi4BiZtYGqw7dQ2GG9AaboF0NAEozUYgXgbrcFGA4gSMFqDEQg9uhXQpWmlS2cvJeAaJOld53bpGOogCQwQk24BNDTBaA1GIN5Ga7DRAKIEjNZgBEKPbgW0lYrVg7sPCLgGSbqmqyarNAtJYICYdAugoQlGazAC8TZag40GECVgtAYjEHp0K6Dl2eR///5NwDVI0glZCW1T25AEBohJtwAammC0BiMQb6M12GgAUQJGazACoUefAvrb128qPCoEnIIqHRAZMG3ZNFSxgeDRJ4CGLBitwQhE3WgNNhpAlIDRGoxA6NGngP7//788m/yfP38IuAZJOi4jrmN6B5LAADHpE0BDFozWYASibrQGGw0gSsBoDUYg9OhWQJsrmj9+8JiAa5Ckq9qrcipykAQGiEm3ABqaYLQGIxBvozXYaABRAkZrMAKhR7cCujilePnc5QRcgyS9/fR2fRN9JIEBYtItgIYmGK3BCMTbaA02GkCUgNEajEDo0a2APnvirK+lLwHXwKR1jXR3nNnByMgIExg4mm4BNDTBaA1GIN5Ga7DRAKIEjNZgBEKPngV0RkTGppWbCDiIgYGFhWXV3lUWdhYEVdJDAT0DaAiC0RqMQKSN1mCjAUQJGK3BCIQePQvo79++hzqFnjuJ78YkJiamntk9EUkRBNxNN2l6BtAQBKM1GIFIG63BRgOIEjBagxEIPToX0D++/6jNr10+dznWs+klZSQnzJ9g62JLwNH0lKZzAA01MFqDEYix0RpsNIAoAaM1GIHQG5AC+ta1W0tnLz2y78jTh0+/f/8Ouh/MUNfd3z0kNoSNnY2Ai+ksPSABNHTAaA1GIK5Ga7DRAKIEjNZgBEJvtIAeDSBKwGgNRiD0Rmuw0QCiBIzWYARCb7QGGw0gSsBoDUYg9EZrsNEAogSM1mAEQm+0BhsNIErAaA1GIPRGa7DRAKIEjNZgBEJvtAYbDSBKwGgNRiD0Rmuw0QCiBIzWYARCb7QGGw0gSsBoDUYg9EZrsNEAogQMZA3289evk+fOHTpx4tL167fv3Xv28uWXr19//vrFycHBxckpIiSkKCenJCdnamBgZWKirKBAiT/J1jtagxEIOjoG0MuXzx49uv/kycOnTx89efLwyZOHb9++/v79248f3yHkjx/f////z8nJxcHBKSIiJiMjLyenZGBgamxsqaCgTMAjtJEeyBrs6f37Zw8cuHbmzKPbt5/cvfv5w4cfX7/++/ePk5ubi5dXQk5OTlVVVU/P2N5ezcCAiYmJNiFAwFS61WDff36/9fDWw+cPn7x68uTlk6evnz55+eT1+9fff37//vP7tx/fvv/4/uvPL052Ti4OLiE+IXlJeXlJeQN1A0s9S10VXRZmFgI+oZE03QIIA9y58/jEicvXrt27cePB8+dvXr589+HD5x8/fv78+ZuVlYWbm4Obm5Obm5OHh0teXlJZWQaCdHRUxMWFMAyjlcAA1GD////feeDAkrVrN+7c+eXrVyJ9pqqoGObnFx8WpqqoSKQWqiijVgH9/MlzY1ljqjgJbsjm45uNLahsJtxwYhnUCiAM8O/fv1u3rl28ePrSpXPXrl28fv3yp08fMFQRK6CiohEQEBkZmSQpKUOsHmqoG4Aa7NmDB9sWL962ZMnDW7eI9AK/sLBrWJhvfLyOuTmRWqiljHYF9Odvn49fOn7yysnzN85fvHXxwfMHWDdZEuMRfh5+fwf/MNcwTytPelf1tAsgbOD///8HD55buXLXli2Hnzx5iU0JYTEFBSk7OyN3d0tPTytBQT7CGihQQdca7N+/f4vXrOmcOvX67dvkuZmJiSnY27u+qEhbXZ08E0jVRa0CerQGIxJ8+vRh4cLpx44dOHv2+Jcvn4nURaQyVla2yMikkpJGERExIrVQqIyuNdi9a9fmtrbuWrny39+/5LnbwMYmra7O3NWVPO1k6KJ6Af3h84cpK6dsPbL19NXTf/+RGQ64PKIiq1ISW5Lkn8TKwopLDZXFqR5AOMDv33/mzdvY37/05s2HOJSQLMzGxurlZZ2REeLmZkGjU1zpV4OdPHcuu6rq7KVLJAcDhgZWVtbi9PT64mIOdnYMSSoLjNZgBAKUWgEEAxcvnvH0NIXxaEILCgq3tU3x96fHyVx0qsG+f/06o65u2cSJZNddyCFt7+dXPmWKuKwssiCN2FQvoM9cO2MaS9sEpK2sPa1imp2RHY3CBMVYqgcQNrBnz8mcnE4q1l1olsybV5+Y6IcmSBUuPWqwf//+tU2a1NDb+5fcliFWr5ro66+fN09GUhKrLLUEqVVAj/bBiAR0qMEgLikoqCkra4awaUfSowa7ce5cWUjI0/v3qegNLl7e+nnzXEJCqGgmVqOoXkDToQZjYGBgZGSsTKxszmym+aAi1QMIFfz796+qampX18L///+jylCTd/jwXBsbA2qaCDOL5jXYt+/fQ9PStu3dC7ORmrSEmNiBtWvVlWk4ST9agxGIMGoFEAzQrQZjYGDIza2srGyD2UwTmuY12I5lyxqTk3/9+EEL5ydVVWW3ttLCZLiZVC+g6VODQdzvZe21pnsNJzsnhEsTkuoBhAT+/PkbE1OzcuUuJDGaMN+/PyAgwEsLo2lbg73/+NE7Jub42bO0cDrETGkJicMbNijKyUG4VCepVUCP9sGIBPSswRgYGCZOXBgaGkek28hQRtsabMPcua1paWQvUCDGP+E5OWWTJxOjkjw1VC+g6VmDMTAwuJi7bOrfRMNKjOoBhASSk5vmzduIJEATpoyM+OPH22hiNAMDDWuwHz9/uoaHHzl1ikZOhxurq6l5cutWTg4OuAgVGaM1GIHApFYAwQCdazBeXr4DB67SboEiDWuwnStWVEdF0XTwBxIpcaWl+V1dEDbVSaoX0HSuwRgYGIKcgtZ2r6V6yEANpHoAwcDs2evT0lpgPBrSHh5W27fTqhHEYvT8OY3c3r50KR1yFwMDw6Lubo7nz2fSJo89N6JO8AxsH+w5A61imYFaAQQDdK7BGBgY2Nhkn1PbFzDfMLCco81E7bUzZzbvpcnQPNzpyAxpV1caeYRaBbQkg+T/s6CZHCrWYMRfmt6e216RUIEcYlRjUyuAYEBSkun//7OvXr1TUfH//PkbTJiGtJoam6QkvksPKbGbVn2wqfPn51RXU+IyUvUe2bjR2pT6S5Co1cUY2BqM1MAkQT21AggG6F+DMTIy7tlzQVNTD+YEatI06YN9+/IlTEfn+UOqrXom6GM2Do4VFy7I02APC7ULaAYq1mAEgwWugJmJ+fSS04bqhnARqjGoHkBgUFzc39e3BMykObFgQWN8vA+NrKFJDXbjzh0jN7fvtJlcxhUQhjo6Z3fupPqmA2oV0KM1GJGA/jUYAwNDdHRqd/csIl1IkjKa1GBtGRlrZ84kyR2UK9a3sppz+DDVl95RvYAekBqMgYHBRMvkxMITzEzMlAc1iglUDyAGhp8/f0lKur9//wnFIppxzpxZYmysSSPjaVKDuUdG7jp4kEYuxmPs5oULfai9F3O0BsMT4CApagUQDAxIDcbDw3vx4gtOTi6YK6hGU78Gu372bKypKX0G6NGCoWH+fN+EBDRBCrlUL6AHqgZjYGBY0Lgg3ieewgBB1071AGJg2L79qJdXHrpFtOEzMTF9+XKEk5NWO3epX4Nt2b3bN56EWOTj5Q328nKxszPS1RUWFBTg4/v4+fObd++u3Lixbe/e9du3f/hEbFPBzsLi4Lp11I0IahfQhF337s07HVEdwuoYGIblqVLE12BNTROUldUlJKSEhEQ5QYDr379/b968evz4wZ49W9atW/bixVNighGiZvHirc7OXhA2FUnq12BZrq4n9+wh3onsnJy2Pj5u4eEKGhpi0tKsbGyvnz17+fjxoc2bd61c+frZM+KNklJQWHfzJisbNa8Jp3oBTXwN1l/cryqnKi4kLsQvxAM63o+HjZXt09dPtx/dPnTu0JJtSy7dJu38BTV5tWtrrlG5G0b1AGJgKC+f1NW1kMh4FxLii4hwt7U1VFWVk5ER5+bm4OTk+Pfv348fvz5//vrs2esnT15dvnznwoWbhw6de/MG/eA3FRXZ27c3EGkXGcqoX4OZeHgQefAGMzNzaWZmWXa2ID8/Lqe///ixdeLE/lmziFwxfPvYMRWqngE8WoPhihqoOLUDiPga7MKF52JiElBnYFCfP3+qrs5Zs2Yxhgx2geTkvObmidjlKBCl8kqOS8ePE5m7GBgY/v79e/D2bQc+PlEcq0n+/vkza9q0ebNnE5m7GBgYFl+/7m9pSUGAoGulegFNfA32fNdzCWGcCYiBgWHt3rUG3gav3r1CdzRu/rqedYGOgbjlSZehdgBJSjJ5elpv336UoFMMDCQTE/0mTSrl4cEyOCEpybB6dQEDQwHcnP///587d2PjxgMbNhy4fPkORDwgwGH9+l4Im4HhHIxBNZrKNdi+I0ecw8KIcR0vD8/qWbPcHRyIUbx++/aorKwfP38SVNxcVlZTgAhTguoJKqB2AU3QQobRPhiRp0rhr8EYGBj+/fsXFeVx6NBuwoHOwGBmZrNhw2FiVJKkhsp9sOro6B3LlhHpgtiSkoLuboKKj27fXuDrS+RxVFomJotPnyZoJvEKqF1Ak7CSg2ANxsDA8PjlY6d0pzuPoeUxQX/52PpsnrCZoDISFFA9gBgY9PUjLl0ifDStn5/9xo19JDgVSendu082bjywceNBJyfT+vo0JBkqM6lcgwUmJW3YsYOgGxkZGTfMn+/n5kZQJVzBvBUrkouK4FxcDCNd3bM7d+KSJUN8tAYjEGjUDiBq9cEgzn748J6VlQoxk0YCAkLXrr2F6KIiSc0a7OPbt+5SUr9//SLGfc7BwZ2rVxO5smlJb29/SQkxxjIwMCw7d07dkGqL7qheQFOxDwYJkHtP7xlFGX388hHCxU8yMzE/3/VcVFAUvzISZKkeQAwMKir+d+8+IeiGFSvaw8NJKKMJGkgLBdSswT5++iSup/eTiAyWFhNDxvYtYhaIMDExvbt2jZ+Pj1qBRe0CmrC7Rvtg1OqDQcI6LMzlyBGidk5duvRShNpn1lOzBts4b15TcjLEV/hJPiGhzffu8eAencfUHm1sfOMcUYM8KTU1mc1UO1CS6gU01WswBgaG2etnp7UQ25FY0rIk2jMaM4TJFKF6ADEwaGuHXrt2j6B7WlqyqquJSm8EjaKdAmrWYAtXrUogYgSPnY3t/smTkuLipPpqz+HDruHhBHVtWbTI28WFoDIiFYzWYAQCitoBRN0+GAMDw6xZ/Q0NhHvvoGmPtQcsLe0J+JdEaWrWYIV+foc2EzVCVdjbG0PEiAWyXw5s3FgcEIAsgoutpq+//MIFXLKkilO9gKZFDfbn7x/tUO1bD4m6by3OJ25hI7HrJAgHF9UDiIHB2jrp2LGLBK0WFOQ7e3aJoqI0QZUDqICaNVh0dvay9esJeibQ03Pd3LkElWEq+PPnj6CmJsFLMRtLSupIzL2YdsFFqF1Aww3GyRjtg1G3D3b27AlfX6LWHvT1zY2ISMIZMWRJUK0G+/fvnz0//7cvXwg6g4uHZ8+rV+ycJB836y0v/+LRI4LmMzAw7H39WkBEhBiVBNVQvYCmRQ0GOvlny6L4eqLWWCvLKN/ZSOy8GcHwYaB6ADEwEH8cori40KJFzW5uFoTdOUAqqFmDKZqbP3j8mKBHFk2aFEvupQ32QUGHTpzAb0W4n9+KGTPwqyFedrQGIxBW1A4gqvfBfvz4rqSEZS0Vpr8aG/tTU6m5DAh0C8dZKl1acefy5XA9oo4N8YiMbCV6tQdyKHTn5a0g7hDfydu3W3l4IOslm031AppGNdiXb19EnUV//CJ8BwAjI+PHQx95uah0FDvVAwg0LLEuPZ2EKwf8/R0qKxPNzYna40N2SiBPI9VqsJevX0vo6xPjiGsHD2qqqhKjElNNWHr6akLjKHqamhepd2IctQtoTD+hi4z2wajbBwOP+4u8f094lUZZWXNBQQ16fFDGp9pq+o3btxPpki2vX3+3I+fyxRO7dhHMXQwMDJeuX8+aOzelhjohRfUCmso1GNLUYFBJ0Pr9hAeZGBgYjs0/ZqlHVL+fcJxSO4AkJZmeP98lLe1BcAuFgQHK3YvGxpopKQGhoa7Cwui7n969I/5+FqQAJex5wiqoVoMdPH7cITiYsIW0VyEsKPjm6lVq2TNagxEISWoHENX7YAwMDM7O+tevE96cmpVVVlPTScC/JEpTbRRxcmXlgo4OYmzf8uCBpLw8MSrR1Lx79cqVuOlpn/j4xgUL0LSTx6V2AU3l1fTInpq8YnJeN1FHWSxvWx7hTqUrwKkeQGAQFVW9fDnhVeNgtSgEKyuLs7NZYKCjv7+DuLgQitxAcKhWgxG5jIMOfmRkZPz54AErKytV7KJ2AU3YUaN9MKr3wUJDnY4e3U8w6BMSstraphJURpICqtVg1VFRO5YvJ2g3Dz//wQ/o5yIQ1AVX4Cwq+uHNGzgXF8PE0XHmvn24ZEkSp3oBTeU+GJJnDpw94JjmiCSAk9lT2FMcU4xTmiQJqgcQGDx48MzQMOrDh89gHjkEMzOTk5NpVJRnUJATHx83OUZQQw/VarDG3t6GXvjWa2o4jQIznp4/L0VcY5KgJaM1GIEgonYA0aIPFh3tuX8/4QZneHhCf/98Av4lUZpqNViKnd35w4R3XGubmi6i4Eq+BEvLy4QmmhkYGORUVdffImphHsHgonoBTbsa7N2nd8KOwgR9xMDAUBJb0l1AeC85MUbRYiUHBGzadDAgoJiYvZIQ9bhIDg42b2/bqCgPb28bdnZqnjiGy0ZkcarVYAV1dRPnzEE2egDZt44eVVVUpIoDqF1AE3bUaB+M6n2wpKTAHTsIn80WFhY/YQJ1xsbg0Uy1GizKyOjm+fNwc3ExzF1dp+0iflIC3Zhsd/cTRGgXlZLa8ZSEQyfRrUHiD6EaDHSXnDnb7z+/kZyPnZkZkjmtchp2OVJFqR5ASKChYWZjI9XuZBAVFczMDMnKCqPn6CLVarC00tLZS5ciBc5AMi/t3aurSZ3j/EdrMAIRSe0AokUfLCMjYtOmlQQ8wsAwqGuwIA2NhzdvEvSDc3Bw15o1BJXhUlAWErJ37VpcsnBxXgGBA+/fw7mUMKheQNOuD8bAwCDsKPzu0zuC/k3wTZjfQKXePNUDCBVMmbKyoKDn799/qMLk89jZ2VJSApqbMwUFqXauBB7XUK0Gi83NXUJE0sfjFCpKnd6+3YS4hZEELaV2AU3QwtFzEanfBxsONZifsvLTe4TPUfCKiWleTOxpxpiJsTY2dtsSwhcfcnBxHf36FVM7GSJUL6BpWoMp+Sndf3qfoDejPKKWtlKpPU/1AMIAO3YcS0pqfP6c8PwnhlacAqKigp2deYmJfjhVUElitAYjEJCjNRidA2i0D4Y9wEO1te9du4ZdDkmUwj5YcWDggQ2Ex1v5hYX3EbHgA8ldOJlUL6BpWoMp+io+ePYAp2dgEkOoDwYBnz9/a2iYOXnyit+//0BEqELGxnrPmVPLxkadVXVYnUS1Giy9rGwWEY03rI6guuDFvXv1RkcRqR6sWA2kdhU/WoNhDWaGGBOT62fPYpdDErV0d59CxNnaSDpQmBnOzqeJWGQoLiOzjYjDC1CMxsEZWjWYqLPomw+E+yrpwekzqqh0qgLVAwg3uHPn8YQJyxYu3PLlyzfcqkiTsbc33rChV0CASvu7MSynWg02qFZyXD90SENFBcOz5AhQu4Am7IbRlRxUX8kxHEYRiaxbdMzNFxKxmBBXMiTyfF9lbe1VV67gMoQkcaoX0DTtg3FZcX3/+Z2gB4tiinoLqbQym+oBRAh8+PB50aKtK1fuOn78EuUrFRkYGDw8rLZtm0TkNQmEXIcuT7UarGXChNquLnTjB4j/6MwZWSkpqlhO/xrs/dv32iLaxDh+hN/RTPB+MHgYDmANRrUzOU6+eAH3Dx4Gn5DQ/reEjx/BasL///9teXm/EzHBFVFTM5noM0Kw2gUXpHoBTeUaDOkIic/fPvPZErU6oSO3ozyhHO5HihjUDiBJSab//wl35hkYGJ4+vbBq1d7Vq3cfO0ZpVdbRkVtengAOB6QABfMpJKhWgy1esyYuj6j96hS6mBjtX+7c4eYi6ig8gqbRvwb79OGThqAGQYcxMDCM1mB47mhGDsDhUIMdekXsTcG7X7wQIms35OM7dwKIO+8trqureuZM5CAmm03tApraZ3IgFbjE143z6ucl+iWSHSYoGqkdQMTXYAwMz8CI4dmz1+vX79+w4cDBg2fJmyhjYWE+d26Zrq4K1a9pploNdvjkSbtAom7XfnHxorgo9S6AQ4lt6nPoX4N9+/pNhYeoIdANhzeY2ZhR388kmUjtABpm82BU64Md/kbs1MSqp0+tiTsDGC2idyxbVh1N1MVWRX190YWFaNrJ41K7gKZhDbZsx7LoaqLCZ++MvU6mTuQFCLouagcQGTUY3EkfP37Ztu3I+vX7t2w5/P37T7g4MYyQEJeVK/MGbw327sMHYS0tYnxyfPNmC2NjYlQOBjXULqAJ++nv37+yLLKE1TEwLN2+1NGDqFNuiDGNTDXUDqBhVoNRbUfzw5s3gzSI6pqHZmVVTCXncKySoKD9RFyPxMDAMPfwYQMbGzJTDKo2ahfQ1K7BkFyb0ZYxcy1RPc8n259Ii1HpWi2qBxA1wOfP31au3DVlysqLF4k9moWVleXly91U3yRGtT4YAwODuo3NLSJ2rDQUF9cXU+nMMGpEBn4zqF1A47cNKqvGp/blM+GLoCYunBgaFwrVM1AUtQNotAbDHpP///93EBT88pHwXffisrJbHz4kdeL82+fPzmJiv34Qvj2EmYXl4IcPnNzUOQqP6gU08WN9z3c9lxCWwB7c2ETlvOQev3yMTQZFjJeL99PhTyhClHCoHkDUA////1++fGd2dgeR5yuuWNEeHu5GPftBJlGzBkssLFywkvDJB2IiIneOHePl4QHZP+gxtQtoojxspmD25OETgkqzSrNquqhzxwVBu3AqoHYADbMajGqjiAwMDE/+/sUZDUgSr968mXXliiNxY/pwfXOam6fX1cG5eBjGDg6z9hM+JxmPCchSVC+gqVyDwebBjl08Zp1kjexyXGwnU6e9M/bikiVZnNoBRMkoIlbHX758Z/duwnsIGRgYlJWZJCVhAYrVLNIFqVmDrdu2LTglhRg3RAUGLpkyhdRWIjEmU10NtQtoohzoa+V79jjh5UIGpgbbTm0jykTaKaJ2AI3WYDjj6grR9y2cffDgPCmLcT+8eeOnrPz1E1E9h8Le3hjqXYJO7QKa2qOIsALXO89721GiMltNSk1zZjPOWCRVgtoBJCnJ9PfvaSYmJiIcAl3JQVClkhIzQTUMDAxMTC8GdQ324+dPMV3dz0Tcg87AwJAUETGjs5Nad6AQE3zkqaF2AU2UKzIjMzeu2EiM0kPXD6loELXsgxjTyFFD7QAarcFwxsKn9+9//iH2yAReI6PLcnI4zUKS+PfvX6Gf35GtW5HEcDKZmJg23btH3v1jWA2ldgFN7RrsG2jtwZ6Te1yzXLG6H1OQmss4GBiofja9pCTTkSPzEhLq4+J84uK85eVRrrFE9Q6xNVhQkNamTahasfG+fLkzqGswBgaGlOLiuURcYgTxnb6W1qSWFjsLCwiXDPLv3797jxxZum6dkpwcjebWqF1AE+XL7rru/uZ+YpQ6ezkv3kr+MXjEWEFADbUDaLQGwxfgL1hY8EkjyTExMyf39PB4esI6EUhySMz////35OevmDwZSQw7E3J5krWX1yTi6jrspmCIDvYajIHhwZYHJjEmbz8StcuOn4f/9d7XrCzUO0eJ2gEkKck0fXplZmY7AwMDIyOjvb1ReLhbYKATtgPlia3BdHV5hkkNdv32bW0HB5I2ctuYmRWlp7s7OHBxcmIkb+wCHz992nP48Obdu7fs3v0WfES2n5vbRirdGYtmJbULaDTjsXM3r96cHpaOXQ5DND4zvmliE/7e7J8/f47uO7plzZZXz18t3LwQwwwKBKgdQKM1GL7IuPr4MfG5i4mZOamyMq2+npmF5QY2U18+edKQkHBqL+FJm027djGChyUnbtli4+2NzTAyxahdQJPQBwt1Ca1Lq9NR1sHj9J3HdybUJyycTmyeifaMljyHp1eDxyocUtQOIElJpqys0GnTViPbx8TEZGNjEBzs7OVlraICXwlNVA22ffvRvXuJ6IExMLCwvBzsfTAGBobglJR124gaL0YOQQ52dicbGzMDAy01NXUVFWFBQR4uLh5u7u8/fnz49OnDx49v37+/cuPGmUuXzly8eP327b+ok9rqyso3iLj+D9lGItnULqCJsvbJwydmCiRs9FJQVojPird1tpWSleLl5/3x/cfnj5+fPn765MGTa5eunTtx7sLpC1+/gM4S5+XjvfmR8B0dRLkSoojaATRag0HCFSf5EqcMdglRKSm38HA7X18JOTlRKanfv37devr0/vXru1auPLR5MzGLDxkYGG7evcsoJaVlYrL49Gns1pArSu0CmoQaDOJkLSUtbxtvIw0jXRVdcWFxfh7+r9+/Pnv97PS100u2Ldl7au////8f3H3QWNwIUY+f3NC1YfDXYDY2BkeOXMDlEXl5SWtrfQMD9SdPVjEyiktJiXJzc3JwsP379//37z9fv37/8OHzixdvHz58fvHirV27Tly4QGyBoqbGOgRqsPuPHmk7OHwnYlUurhAkQ5yFheX7vXssRA+xEG8FtQtoYm22VLZ8eO8hsapJUXfuyTkJaRLWEBMwm9oBNFqDEQjwmy9f/vz1i4Aiakv/+fOHVU5uyo4dlu7u1DV7wGswKnpHVU715rqbjC8ZGUhtZuBxBLUDSFKSSUCAl5j17wYGVO1MMjBER+sPgRqMgYGhdeLEms5OPJFCC6mbR46oKSlR3WRqF9DEOrC+sH72hNnEqiZF3YpdK+xc7UjRgVcttQNotAbDG9xgyav0bR+C7WTInjChczXK0BNEnEKS2gU0yX0wCt2PrH1u3dwk/ySQCP7JR5AKojG1A+jPn9dE2k3dGoyNjXXWrCR+fioGDcgf1FxNDzIPjP/+/esWGbnvyBEwj07EpoULfV2JXS5EvJuoXUATa/OV81fcjKi8+Q9id9OEppR8ojY9QNQTIKkdQKM1GIEAZ2Bg+P71663nzwmro54KPiEhTnf3c2Qdt4jfFdQuoAesBlORVbm+9joLM3ipDRWLaWoH0Pnzx/HHCFyWujVYcLDzoD5VCu5tCOPVmzemnp6Pnj6FcOlAdtfWlmRmUt0iahfQJDgwyD7oxKETJGggTmlsemznDOr1kKkdQKM1GFHReOvVq9cfPhCllGJFTMzMk7dts3Bzo2K5DHcUtQvoAavBdkzZ4W4JG2KlYkhRO4AWLVoED3z8DOrWYKdOLTI11QbtTcBvK4myNOmDQdxw98ED+6Cgp8RdCgHRQgmZEhU1u6eHEhOw6qV2AY3VEuyCxw4cC3EMwS5Hgai5rfn6Q+spMABVK7UDaLQGQw1f3Lx9x48/J/rAetzGEJaBb2GmYrkMt5XaBfTA1GCx3rGLmpBqBiqGFLUDqKSkFh74+BlUrMESE/3mzasHW0fFoAGZR8MajIGB4fb9+17R0XceEL6WG+QWyrCtufkh4o4lJckeahfQJFnOkBeXt2bxGtL0EFItKCx49c1VQqqIlqd2AI3WYEQHPQPD9n377j16RIIG0pWmNzSk1UPKHgYqFz5gx1C7gB6AGkxXRff4guPcnEgHRVIxpKgdQO7ukeCAJ0xQqwbT1VU5dmw+Dw/kvisqBg3IC7StwRgYGN5//BiZmbnzwAGQbbTEYiIiLy9doroN1C6gSXPgp4+ffCx87ty4Q5o2Qqovv7osLCpMSBVx8tQOoGFWg1HtbHpcsbF37dr6+HhirqXEZQIucSYmppz29viyMlwKqCJO7QKa3jWYnITcwdkHFaQUqBIaWAyhagD9/v2Hh8fm16/fWCyijZCWltLevTMkJKhU3GA4kuY1GAMDw////6cvXFjZ3v7p82cMB1BT4P2NGwJ8RN2hSryt1C6gibcZqvLhvYfBDsHPHj+D8qlBrT2w1tLekhomMTBQO4BGazCS4+X2pUulwcGP71CzncMnKNi8eDF1Ny9j9RhVC2iQDcSf7AtSTRlWllHeM30PDasvap8q9e7dJw+PnNOnqTcGgzcAAwIcFi5s4uND6p3iVU+GJD1qMIiznr540djbu2DVqt+/adUAOLFli7mREcQ6apHULqDJcdeLpy8S/BMunaVOD5OVjXXuurku3i7kOAVTD7UDaLQGwwxjwiI/vn2bXlu7bOLEf6hb/QnrxKbCKSioYupUYQnq7RrEZgtEbOjWYL52vouaFgnwCkA8QiuS6gHEwHDy5JWZM9euWrX769fvNHK2nJxER0duZKQHjcyHG0u/Ggxi5cMnTybNnbtk7dpXb95ARCgnRYWF/d3dQ3x8nG1sqL6pmdoFNJne/f379+T2yVM7p37/Rn6ak5KVikiMiMuME5MQI9MdmNqoHUCjNRhmGBMrcu/atVmNjXtWryb+5Ck0ow1sbDKbmkwc6XdvKtULaOL7YK7mrvvP7P/zl9jDkuFhJSki2ZXfFeMVAxehIYPqAQQDnz9/W7Vq16JFWw8fPk92goEZhqANDNQzM0MSEnzZ2Kh3OCTCeHQWvWswiP1//vzZsX//lj17dh08eJ+smWh2NjZLExNHKysnGxtLY2NmZqJO94fYThJJ7QKaJMvRFb959WbOxDlrl6x9+oiEbQqyCrIu3i6eQZ5WDlbEXaqAbi8+PrUDaLQGwxfaxMg9vnNn0/z525YseUF01uITFHQNC/NLTNQxNyfGCioCqhfQxNdgz3c9//fv39yNc9fsWXPpNlEjHFpKWtlh2fE+8SjrNqgYHJhGUT2AMMCjRy9Wr96zZcuho0cv/v5Ncn3OwMDAzMxkYKDu7W0TGOhoYKCOYQMNBQamBkP20ONnzy5cvXrx6tVb9+49ffHi6fPn7z9+/P7jx/cfP/7//8/NxQU5IJGXh0dOWlpDRQWC9LS0ONjZkc2hEZvaBTQVnPn///9LZy+dOnLq4pmLD+89fPb42ZdPX75/+87IyMjDx8PLxysiJqKkpqSsrqyioWJoZiglK0UFW3EZMQgDaDABmq/kwOPZBzdunD148Ma5c49u3352//6Xjx+/f/36798/Tm5uLh4eCTk5OTU1VV1dI3t7DUNDJpo1AvG4kNrTPCCrSKrB4Hc0P375ePeJ3edunLt0+9KjF48+fP7w5dsXDnYOXi5eGXEZTUVNY01jDysPdXm6Fs8g/9C+BoODz5+/nT9/48KFW1ev3n38+OXTp69evXr37duPnz9///r1m5mZiY2NlYODTUCAV0REQFxcWFFRSkVFVldX1dRUi5ub2IPZ4dZRhTHwNRhVvEE7Q0YLaAJhOxpAeMFA1mB4HTZYJKleQJNXgw2W4MB0B9UDaHiB0RqMQHyOFtCjAUQJGK3BCIQe1Qvo0RpsRIHRGoxAdI/WYKMBRAkYrcEIhN5oDUbvABpeYLQGIxCfozXYaABRAkZrMAKhN1qD0TuAhhcYrcEIxOdoDTYaQJSA0RqMQOiN1mD0DqDhBUZrMALxOVqDjQYQJWC0BiMQeqM1GL0DaHiB0RqMQHyO1mCjAUQJGK3BCITeaA1G7wAaXmC0BiMQn6M12GgAUQJGazACoTdag9E7gIYXGK3BCMTnaA02GkCUgNEajEDojdZg9A6g4QVGazAC8Tlag40GECVgtAYjEHqjNRi9A2h4gdEajEB8jtZgowFECRitwQiE3mgNRu8AGl5gtAYjEJ+jNdhoAFECRmswAqE3WoPRO4CGFxitwQjE52gNNhpAlIDRGoxA6I3WYPQOoOEFRmswAvE5WoONBhAlYLQGIxB6ozUYvQNoeIHRGoxAfI7WYKMBRAkYrcEIhN5oDUbvABpeYLQGIxCfozXYaABRAkZrMAKhN1qD0TuAhhcYrcEIxOdoDTYaQJSA0RqMQOiN1mD0DqDhBUZrMALxOVqDjQYQJWC0BiMAqF6DEbBvyEmPBhBeMFqD4Q0eBobRGmw0gCgBozUYgdAbLaBHAwgwAiGAVxoASGtQ5aSHk38AAAAASUVORK5CYII=", "text/plain": [] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# interweaving along vertical for couples of images\n", "ims.einops.rearrange('(b1 b2)=batch -> (height b1) (b2 width) channel', b1=2).values" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# interweaving lines for couples of images\n", "# exercise: achieve the same result without einops in your favourite framework\n", "reduce(ims, '(b1 b2)=batch -> height (b2 width) channel', 'max', b1=2).values" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# color can be also composed into dimension\n", "# ... while image is downsampled\n", "reduce(ims, '(h h2)=height (w w2)=width -> (channel h) (batch w)', 'mean', h2=2, w2=2).values" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAMAAAAAYCAAAAACJ2q2ZAAAEiklEQVR4AWJ8x0A8+LLpuYoXK/Hq6aGShQRLPjg8YmAw2UaKFhJMJxMwkaDv8CMGBoYz10jQQQelpHhAm42BgUFYgQ6uIgGQlAfOz36ukqVIgul0UEqSB+jgHpIBco78s2Xzued/+JVtYpQwzWk6DRXL8oQy0KjdR+48ffXxFwO/kn2CNJochPtl1a7Lr/+LaLlGCEAEUMCu/Xeevfn8i1lY3SFSDEUGxnm58vDNNz9ZeSXVLGI4YIJIMXA66y5UlKWonBHKhFMRu6DM3kQoA40KPAgX4JzmD2cjGOvL3kI5fC0xUBYSQNZfl44kAWMurvgOY7I/BGVHMA+Riff7wtzP8KerGyxJLvE9HW4Uwoh5yTD3M3zKm4AQxwK+V/Zgih4vgLufwRDufkQp9DblFwOD4fpHL4/HMzAw9DxGN2HFu3fvXqALovMdH7+508jAwPBrIboMw61KBgYG5ZWPn27WZWBgaLmAoQAEHB++vj9blIGBoQOzsF7/n4FBeP3DN88vLMsPBymGYHgMzH0PkrfnYVXvd2Rg+LMBIk0iycbNJJRrBKotMDRO+83AwL7OlZvTejUXA8O/6RgKQICdl5k/eAkDA8M/zBAABfqP95xM7HIe9aAwBqlnYEDUxPsZGBj+RoNF7zMwMFwEs8gidM8xMLzG0HmYgYHBRRYkLOayiYHhCIiFHZgan2VggBUZCCXxSz8yfE3it7W2V0fOoPBS6DkDA8OHo3D1pDSR4JogDC5QGoIwkUiQl8DuZ2CQYmBgeIMkhQ6UzzIwYNqvurPiAAPDxy1bGOSiMnnheuBJiBMuBGZQ0GRDDh+wWWCCDxRAYBbYcSAuhIcJvjEwMKA5B6RIbd3pFk9BBgaGRx02oEQCEkNKQjo3GRh0D2C3HKKUgYGV+S8Dw1cYjzTa+BkDw4Gf7AwMDF/3MjAwGOPW/RuUfNSxyStnZf2/sWvyO4bHZath8vAYiGNgYLiccOk/SOLNFuzlDaM8AwPDmi8MDAzvPoHUkYITGBgYXhR+ZWB4nwYqTrFXJl/+MDD8qn7JwMCAWVuub9r/hYGBURNcBCEKKXgesE2ey8CwebOAPNePp68YZoZidZzbDAaGS9qa/54/7UcqCLAqRRd0jFnCwLBik+bf6z8ZGBhC3NHlweCIkjL77fcMDAyqQWA+MrFh8wQmWTHWH89BuVUbLgP3AEOnSN9vBoYPH8BS57F7oGjrYwaGz6cYGBjOkuoBhj6OOQwM386CjY/uBVOY4Auk9BNfhJEH/59gYPj38CFEi0QrhGZgQFRkDEzlZ4q0ISmKVQ+UVuBqEAyRXTHcIB6Tjg6IIgmzdO0KAGvm9No0GVSoY9EtDraXL/kQZhb4PzEB2g5mMaw7rgrXjNQWAon9ePz+D7uIFIb/QXIQ/Of+W0ZBWSyFBEQaP/n3wZv/woqIWEcGoLaQx7JXj3+JKDEjiyOxPz75/JddSAbF92iGcSC8hqQRmcmiSlAJsnJUNrOyMqoABhDD3hCFqOPnh9DIJCTNIIsMMfaQ9wBgaEloAIM/3IKBQYV0+wHPLyd1oRsQ0QAAAABJRU5ErkJggg==", "text/plain": [] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# disproportionate resize\n", "reduce(ims, '(h h4)=height (w w3)=width -> h (batch w)', 'mean', h4=4, w3=3).values" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# spilt each image in two halves, compute mean of the two\n", "ims.einops.reduce('(h1 h2)=height -> h2 (batch width)', 'mean', h1=2).values" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAABgCAIAAAB6y1p+AAAqpUlEQVR4AWL8/+wZwyjAHQLPJXHL0V6msbhxZt9MZHue/YfG19H9RyNcI/7+/QuRhYtDuPQjBzaA6OdPMm0aDR78AWd0Dr/8iJcdDSC8gAmv7KjkAIfA4b2HcbnA2tG6d24vKysrLgWj4qMhMBoCoyEwvMFoBTao4/fJwyd43BcWH7Zm/xoDUwM8akalRkNgNARGQ2C4gtEKbNDF7IXTF0rTSiHO+vH9B4SBizS1Nt12atuuc7twKRgVHw2B0RAYDYHhCkYrsEEUsz++/8iOzvYy81o6eynEWcKiwhAGflLHUAe/glHZ0RAYDYHREBh+gGX4eWmI+ujXz19hLmFnjp1Bdr+uke7zJ8+RRUbZoyEwGgKjITAaAhAw2gODhMPAk/WF9Wi1FwMDg4e/x8C7bNQFoyEwGgKjITAowWgFNiii5fb124tnLsZ0SnBMsLScNKb4qMhoCIyGwGgIjILRIcRBkQZUNVWf/EVZcCjFKIXVZbjEB2wfGFZXjgqOhsBoCIyGAO3BaA+M9mFMextYWEYbIrQP5VEbRkNgNAQGGRitwAZFhHz7+u3////kOUXXSHfV3lXk6R3VNRoCoyEwGgJDF4y23Ac47qxUrJ4+evr7928WFhZJGUkbZ5uolChjC2Nczqrpqnny4MmH9x/4+Plk5GVsXWz1jPUYGRlxqR8VHw2B0RAYDYHhCkbPQiQQs7Q+yw7rnJZfuN+mlZuwumzQzXXROoCwhsLQERwNHvxxNXrUH/7wYRgNILxgdAgRb/AMkCSu2muAnDNq7WgIjIbAaAgMRjBagQ3GWBl102gIjIbAaAiMhgBBMFqBEQyiUQWjITAaAqMhMBoCgxGMVmADHCvP/j/DiiDOSi1IRZOVYZY5vAfnHSsQXaPkaAiMhsBoCIwEMFqBDepYPrLvCJr7emb32LrYogmOckdDYDQERkNgBILRCmxQR/rTh0/R3BeRFIEmMsodDYHREBgNgZEJRiuwQR3v379/H9TuG3XcaAiMhsBoCAwcGK3ABi7swTZ//4aviiLyPjCwSaPEaAiMhsBoCIwsMFqBDXB8hzqF4rl2WddQd4DdN2r9aAiMhsBoCAxWMFqBDXDMnDt5rja/Fpcj3P3dcUmNio+GwGgIjIbACAejFdjAJ4Dlc5ffunYL0x2SMpIhsSGY4qMioyEwGgKjITAKGBgY6H2Y77fv313Cwo6fPfv/2bOYnJyl69ahRQMzM/Pfv3/RBBkYGP4/e6ZmbX37/n00qf/PniGL3Lx71zk09OmLF2jiyGoGiv38yXNMq5/9fybFKOWg7YAmBRFX4FDAKo4myMDAMOjOSMR0IrkiK1fOLyxMQtMdF5exaNEMNEFQgmZh+fPnD6b4s2f/7ew079y5gSb17Bn6JQCrVy+qqcm9efMjmsohwd2xbFltbOy/f//O/v8fpK7+8BZ6w4iFlfXP79+Yfjn7/397Vtaa6dPRpM5iXJLQlZu7csoUTHE0jYOH2zynuW56HZp74nziFm1ZhCbIwMDAzcn99ftXTPH/Z//H18djavl/FiX9fP/53a/Qb8/JPWjimAYOQpF///5FRVWvXLkLVN7+Pysr6/XkyUs0d3Jysn///hNNkIGBoawsvqtrIab4//9nGRgYAgOLN2w4gCwLEUcWIY9N1x7Yv3//QtPSjp8Feennr18bd+7EdDQnBwemIEQkzM8PwsBDqisrH96wQVdTE4+agZIyljXGRAPlmCFk76VL5zBd++TJQ0xBBgYGTk4urOIMDAwBAZG4pJDFQ0PjDhy4iiwyVNg3zp1rTE7+9+8fAwPD0/v3MWsvUPhwc+Pyjm98PC4pZPGyyZPjSkuRRQY5+/yN85gufPIS5f5YuAIuDpzpJ8w1DK4MF4OTnXNT/6YgpyBcCgazeFXVVEjtxcDAcOfOY8zai4GB4edPLK0fBgYGZWUZPF7LyECMJMnIiHt4WOFRTJIUXSuwtkmTtu3dC3HfyXPnvnzF0tLh4uSEKMAk48PCmJgIO1hRTu7k1q2Y2kdFhmgIXLt2EdPlb9++xhRkYGDg4MCZfiIjk1hZ2bDqQhOUlMSXG9EUDxLu969fy0JCfv34AXHP2QMoDV6IIAMDAxcvL5yNxtAxNzewsUETxMrN7+rCKj44BS/ewpJ+Xr/Hnn6E+IRw+cLTylNFVgWXLFyck51zbfdaOHeoMPbsOYnchTpx4jJWl7OyYh+0w1+BublZzJtXf/jw3PfvDzx+vG379slYDSdDkHB9QIahWLWcPHeuobcXLnXoxAk4G5khIoQzAakqKgZ7eyMrxsXG043DpWVUfDCEwKdPHy5ePIOMGBgYrl/Hkpe+f/+G1cEiImJYxRkYGCQlZSIj0YcicSkecuIz6uqeIg2wXztzBqsXJOTksIpDBNPq0IfaIOJDhfzw+cOZa2eQ0fef3x88f4Dp/u8/sW9fkZeUx1QMEWFiYiqJLYGwhxn5+/efnJxO5Dt1r127h9WP3NzYR8h0dPBV7YyMjImJfjY2BgICONtPWK0jKIi9OiWojVQF//79y66qQp7cunT9OlZDFOXkrmEM3MNV1hcVbdix4ze2QXy4mmHP2Hx883D148KF09vbq5B9d/7800+fPiCLQNg/fmAvgGRk5LFWeBBdJSWNmzevfv/+LYQ7bMh7164tmzgR2TuPbt9G5sLZcqqqF48ehXPRGOaurvZ+fgc3Yb+LDk3xIOROWTmldjrKmt4Lyy9AxlTRXEtGBcbAwJDknzR55eSrd4fkCDMeMG/exps3Ucbkb9zAUuuD5gi5Od+9+4RplLi4kIKC1IMHKCsSMJVRXYROPbDFa9acvXQJ2fW372Gv4ZXwthC11dWL09ORzRmBbGMLY0w0PMLh2DH0ga9Hj9CX7UB8iqsHJienBFGAlRQREWtrm4JVakgLzm1t/Ye69OnJ3btYfaSqp4dVHC5YPmUKnmFGuLLBydh6BH3u4OFzlHIZ7uxvP7D34A3UDeBqMBmsLKzTKqYNswvQ////39+/FM2zz5+/QROBcLm5cQ7R29kZQdTQk6RtBfbjJ2i9yv///zunTkXz1bOX6OtbIApMDfAlIAYGhvriYhN9fYjiUXI4hQBo7dzZ42g+wrVYA1cPzMDAFM0ENK6/f0RBQQ2a4BDl7lyxArQA9cGDXStXonnh8wcs3VYGBgZje3s0lWhccVnZ+nnz0ASHBPfzt8+nr55Gc+qTV9gXa3zH0YO31LNEMwGNa2dkV5lYiSY4RLmzZ69nYGA4ePAcWveLgYHh5ct3WD3Fw4NzkYu7O4Ggw2oghYI0rMDef/zoGh7OwMCw88CB6xgDGlhXcDAwMFiZmOD3Egc7+/p58yTEcE514Nc+KjtoQ+DWrWtfvnxGc97Tp4/QRCBcXBWYsTHhXFRW1pybO+TLoA1z51ZHRTEwMGxbvBit+8XAwPAD2wopBgYGNQMDfmFhSBjiIl1CQpKqUAZycakcVOLHLx3/+w99Bw6u1Ya//vzC6nhdFV1+Hn6sUnDB5sxmL2svOHcoMv78+Zuc3JSW1sLAwABfeYjskQ8f0HMiRFZeXhLCwCQ9Pa3Y2FgxxWkqwkjr/VKMUlJEeoCXh2fJlCn+CQlw9b8ePmRlhYYIpjkc7OxT29uTi4rg6pEZ1PLXc5zxhWwbYTbyJjBJGYShUoyI8EHey4UsTtj0AdwHRq0AwuFJKSlGHDKEhU+ffigtDV2zQKo5mPvDCNuHTQWNg4fBmJGE8HEODt67FrFA7ujXrxxc0AY1SeYwMDBQax+YEZYtEtjCkVwxRmMSwgfNkrf738IXJZJqDtX2gdE4gBgZjdF8TTz38+fD8A4ZsjlBQU5r13ZDzIGLMzExKSlJ6+goGxio19enQWQpJ+m0iIOgQ5mZmVfPmuXugLKf9+Pnz3gWJf74+RNX7UXQOvorMJZFJBTkior+Lhl+NjY1TfDzA/X1GRgYDAwQjYPHjx/AKzBcvvbzC9+8eRXy+itcKgeh+Me3JKxGiS0pye/qMkHaiPL62TNZFXyLxwahl2nhpP7i/gh36C1Fkm6I9HP70W1zHXNa2DgUzfTzs4+K8oiIQAxdcHJiX5F46NC5////Q2YKS0pidXRUdHSUtbSUODnZqe5xGg4h7jtyJDCJ2FXLpZmZaLUXAwPDm3fYx2GRQyEtJgaZO8oegSGgrKwuJiYBQcje37NnCzIXK3vGjBV79lyIjk7l4aHyAl+s1lFL8NLx49XR0e5ED29YursXdHdDyhS4G14+fgxn42I0LlzIhvtsAVy6hpa4qpyqhLAEBCG7/NC5Q8hcrOz23HZmJmasUsNJMDHRb+PGvvBwN2RPYV3eCSq333w4dw565E13d0F8vI+xsSYtai/QyTvIDqIWe8vu3Q29vWjLDvEYzsfLW5adjangyo0bGoRaiDO7uuJCQ3Orq89fuYJpwqjIUAmBixex71sixv0SEohhWGT169Yty8+v4eXlQxbEZGtq6nV3z2pqmnDs2IEDB3Zevnzu1q1rmMoGicj1s2cnV1Sc3LOHePewc3JiXZdxaPNmE0dH/Ob4xMXpmps3JiVdPHYMv8qBlT1zjfz0Iy4kjtXxS7YtKY0jcOZIRUKFu6V7WksaJQ7AavvgERQS4ps0CUs4/PjxC9e+5o0bDxgb0+M4JCoPId64cye/tnbXwYMkhX6wl5cgP5aJ021794b4+BA0ytrU9OzOnVv37OmePh3X/miChgwVBcN1E5inJ4HVg3giSEhIFKvsixdPq6tzJkxYQMwBLpycXM7OXs7Og3dy/tuXLxNKStbNmkXqgKetj48otr7arpUr87u6mFkIFALy6upzDh/eumjRrMbGZw+wbw/CGv70FDSNpSD98GM/POHS7Utr964Ndg7G7xFDdcMTC08s2bakbV7brYfoh0/i10tn2Z8/f+3bd/rAgbOXL995+vTV16/YN1OiuSoiwh0+14Us9fnzV15e6BwqsjgDA8OGDQeamjLRBGnBJZB2SbJy6vz5pc3N32GH2RCv18XODqvi9du39zY0YK3b0NQzMjL6uLr6uLreefBgxYYN67dvR1MwbLjGFoi5tGHjKQo9won7+LE1axa/evWisxPLsb8UWkpn7dfOnCkLCXn+EPuuJvyOcQMvBsZU8/rZs1mNjZnNzZhSaCJMTEy+CQkeUVHblixZM306rmM+0HQNFS4PJw8up2Z1ZJnpmMmKy+JSABFnZmKO94mP8YrZdHDTvI3zth8ddOXPq1fvOjsXzp+/6f17LNuQIb7ARdraGmKVevbstZQU9rbj5ct37t59gv98KaxmkipItTmw0LS0nOpqMmovBgYGI13s1zZ++PSpFfV8AYLeU1FQqCkoOLsTyzHBBPUOuIJ3b97B0YA7Zgg5AM8BvgwMDIcO7bayGvJLFVLs7MirvRgYGBQ0NHDF5rz29qNEt/ZY2dj8k5IWnz697ByN1w7ici5txHm4cFZgr969ckp3uvcU+6kLaM5hZmIOdAzcPGHz811Y7p1AU0xnroqKf1/fEjJqLwYGBlVV6FJeNDc/efIKTQSZu3Ej+qEEyLLUYlOtAluzhfCEOdzRaJPJwoKCcCk0Rv+sWcO4O4XmWR1RHThCkxrl4gkBXJPJcC2kjrnBNQ4exs/vRI32YHWwmLQ0VnEGBoZ/f/8W+PouQTqkFJdKZHF1Q+xNcmQ1Q4jNhveI5zuP7xhFkXbGhKgg9n7JAIbJ58/YTx4hxkkyMtjnCC9fvoNH+8aNpE0k4TEKjxRN9oG9fP36xp07Dx4/fvD4MfIBvsjuQNunBd/mRao4spnIbDRzkKVIYtN6Hw8ux4zuA4OEDLX2b1HLHIiriCepm37+/ft37+rVq6dPP7p9+8XDhy+fPDl/+DBWxxz88IEH27wyVsUMDAzRxsapdXUO/v5oCnDtDxuu+8Bw7d9iNGZUk1erTqoOcgpC7rHh2h+Gyxy04CXMHWT7wJDv8Xr79qOkpNvv36Dr95DF4Z5at25fUJATnEsLBtXmwD5++rRhx45dBw8eO3PmARHLc0n1jHtkZGlWloOlJQuhOWdSTR5VPxRD4MKFQTdKQ9Ng3Dhv3oENG87s3//tyxdiLCKp9mJgYLhx7lxxQICEnJyDv7+tj4+agYHQsD7shoxRvlsPb8XXx6e3pntaezqaOOqq6uqpEjhYkpiYGpxqWlqyensJDDkKC/M7O5vt2IFzeaq3N1G381ASAlTrgXEoKPz8hf10FqzuQ+shEeyBQQzh4eY20tUVFxVdvZnAiexo5kO0k0FStwVNvANGe2CQsMLVcyL1pAxc5kBswSRJNR/TBIgItdIPrp4QxBZMktQeEqb5AiIisioql3Fce0Sq+ZguhIjQuIPBQK0eEi5zIL7AJId6D+z//7P37z+1tExAOxQRrac1a9a69PRWyA3OmIFABxGq9cBIqr3I9tiXr1+H/UJ5sgNnSGukZB/YkPb4oHX8hzdvPrzBfiT5IHTzMN6GNVChragovWhRs7s7lh26cCf5+ztkZbX//Qu6BBwuSE8G1Sowejp6JNs1ug+MurF/6dLL27evP3x49/PnT1+/fvny5fO3b19w3dVCXatHTaNiCFCyD4yKzhi0RmlrhwoI8GpoKJib6/j52UtIEDjQGeIRNzcLf38HPOsJxcWFnJxMd+8+CVFPf3LIV2BMTEwEF6HRP1hpZ+PoPjDqhq2IiJiIiJilJYFLRqhrKU1N4+Hnl1dTo6kVo4YPuRCA3LB87NjFefM2Zma2h4e7tbVlKyhgP8IG2XeVlYl4KjAGBoaoKM9hXoGxs7F5OTsHenqa6OtrEbqOCDnsiGG/u3btyKlTZy9dunbr1vXbt5++ePHuw4chtGz63RvC5z0SEw6jaiAhEBbm4uLibWxsqa2tz8GB8/I9iOJhQ3Lx8Nj5+joFB2uZmEjKy1PRXyk1NYc2b7518SIVzRxORi1pWbLrxK6jF47ee3pvqBQ7//79W758x/btRxcubCQYF+bmOsbGmmfPXselMijIKTOzDZcsrcVp3gNLi4lpKC6WFMe+k4By7/Hz8Xm7uHi7uMCN+v3792siTgGGqx9Yho6ozsA6YJjZfuTI3iNH9kI8JSgoLCEhLSQkzMZG/WOwIVYMOMknJJRcXR2amcmO+zgSShyZ2dyc2dz84c2ba2fOXDtz5vGdOy8ePXr1BPstkZRYNEj0zl4/O9EvkYWZ2IIx2jM62jOagYHh87fPV+5cefj84dPXT1+8eTFIvIMHfPjwOSCgGI8CuFRKSgCeCoyPj9vb2xaumM4Mqq1CLKir+/b9O+QkDi5OTk4ODhEhIXkZmbi8PDp7CWLd6CpESDjQnKTWMjscDqXW6kFqmYPDmTiFqRU8UUZGP759+/P7NzsHBzsnJw8/v7iMjISc3JwW0J2EmNZTa5Ug5upEiF3UMn+gViFCfIFJkrp6ENfqRFLNwXQJVITGAcTIaDx5cllODvQ2IqilDCBxOBt0z7CV/tGjoHu64fd7IcviYcNXLf769dvNLfvgwbMQxXBxCJdsktiGBkELJs6ZQ1DNqILREKBWCIy0fWA3z5+nVtARac7///+f3L1LpOIhp4yMfWBofvz87fPNBzfRBIcit6CgR0VF1sPDCo/jjx+/9PTpK2lpMVxqREUFX79+j0uWgYGBjY11w4beyMgqPPvG8GjHJUW1CgyXBaPioyFAixAQE5OghbEj1sxsd3duXl52Ts5vX758/fTp84cPD2/e/P7163ANEAlh0tIPmzkbLxcvPy//////v3z78vX71+8/yT/ca1CF6t+//5KSGm/eXI/raHnwNq//a9bszc+PxOXyzMyQpqbZuGQh4gICvNu2TerqWlhTMw0iQjk5WoFRHoajJlAhBEb3gVEhECkw4sSuXRToHnittN4H9vvP73ef3r37NDyXXD1//qahYWZvbyGeiFy9ejeeCiwrK6yzc+HPnwTOsmBkZCwvT/DyotoJHaMVGJ4oG4xSo/vAqBsrYWHx1DVw1LQBCYHRfWAUgsmTV2Rmhqio4Lw45tixS8+evcZli7i4UEpKwNSpq3ApQBbX1aXa7RCjFRhywA4B9ug+MOpG0oQJC6hrIJ1NM3d15eHjY+fk/Pn9+7cvXz5/+PDo9u1PQ2cVLp2Da9Q6XOD37z8TJiybMqUcl4L///+vX78flywDA0Nzc+aqVbvxz4Th0U6e1GgFRl64UU0X5j4wRkZGZmZmqlkwatCwDoFp2Ib+3r18Oaw9Peo5moTAwoVbWlqyBAR4cZm+YQO+K74EBfk6O/OSkgjvLcNlPhniQ74Cu3X06I8fPyAnMbKxsbGxsnJzcQkJCJARFgOiZXQfGHWDPSkpcBjv+iIyrISot+1SVErqx7dvv3/9Yufk5IAs35eVlZDDfsMhkc4bTsoyQzK///z+6/cvNlY2djZ2bk5uMUExMSGcq/UGyu8NDTMbGtLx2/7ly7dFi7bm5UXgUgZfBI9LQWKi3/79ZxYv3opLAdXFqbYP7PDJk9rq6pg1B/yYeTSnI+/T+v//f0px8bwVK0DLXZ49Q1NJKnfXwYPukZHI5pNqArJ6au3jQTaTGPboafSQUKLW/i1qmQNxFfEktdLPjmXLNI2N5dTU0C6DJXKf1qLu7smVlf/+/sW/f+vb58/LJkxY1NPz9ROBi+fxm0N8+NB4mxPO0+hxuZDg/q1jF4+1zm3ddnQbLhMg4gTNgSgjTNI6gDCAo2PagQNnce3TWr58R2SkB4Ym9H1jmArQRHCZj6aMIJdqPTC7wEAGBgY1JSUrU1NfV1cvZ2cOdmKPP2BkZJzR2Xn20qWL164RdDFBBUvXrSOoZlTBUA+BkbYPrDoadNwDDz+/haurra+vna8vH+57zDEjN660VFlHp8DXF1MKIrJj2bI9a9Yc3b79148fEJHhTWLdB5bXhfPUhWU7lh06d2jbkW2PXz4e3iETHu524AB0uzGmT9ev34+1AsNUSR8RqvXA0HpavDw8Yb6+xRkZuA4/xOwhHTpxwj4oCFOc1IBo7O09d/nyxgXUmZynVguaVF/QtAf2588fqt0LSuMAwtVzIvW+Llzm4IoXUs3HZQ61ggetp8XGweEaGhqekxNnbo7Vaqw9pOm1tZnNzVjVo5mPVQ2yIFbzkRUQyaZ1B4OkkzKu3L2io4z9aDdc5uDy5tDtgb18+U5Kyv3v39NYvcbFZfXy5R7MHWNkn9CB1RbiBanWA0Oz8vOXL3OXL4eMCqJJ4eLaWVjYmJnhkiVevL6YqAO+iDdw+Kk8uu+ovdvgOn99dB8YScns148fWxcv3rp4MUm60urrSVI/hBRTZR8YrtprCIUD5UBcXMjGxgCXOd+//1y5cldKSgAuBWjiISEuGzce+P37D5o4tbi0qsAg7iP1eOaidALTjBBj4eTHT5/4+fjg3JHA2HB4w9cvX9+8enPzys1jB45dOH2BDF9vWbNlsFVgnp6mZHiEci0jah8YMwv2/P5y6B/OO7oPjHjw79+/48cvX758+/LlO1OnVmBqDA52xhSEi0yZsjI52R9tLhYui8ZYvbrz/ftPu3aduHjx1v37zz59+sLAwIBnoSOadoJc7AmaoDYaKXB3cCDJ5D2HDwd7e5OkZagrNrNB6aTeuXGnsbhx7zbo+etE+u7V81dEqhz2yob6PjDKI+j///8NCQlEmsPExGTp4RGWlUWk+uGhbOfxncR7hJ+H38fWh3j19FfJxMSUkFB/5w5oMg9rBeblZY3HVRcv3lq+fGdUFJalHFh1CQryhYe7hYe7YZWlUJCJQv0Etb+4ePH45s0NxcViIiIEFXOReCXE5t27CZo5yBV8+/rt79+/ZDtSRUNl8dbF8ZmkHSexcPNCsm0c1TioQmDStm2hWVnisjgPUMDv2n///vXk55/aS6ABxMzCYuzgUNjbu+nevUlbt9qMpFbjg2cPEuoJVPC8XLxOpk41KTV7Z+x9vff1kpYl+IN9wGXj4vBVsXjO44C4PDu74/LlOxA2AwPD9u1H4Ww6M2i1iAPuDfiijM9fvmSUly9bvx4iBReHcMkg//79K66n9+bqVTL0Eq+FWpPwuGyELNbg4eUREBIQlxKXkZdRUlXS0NVID8M+mvrsP5ZtBr9//2ZlZcVlBW3FqRRA1FpkkZGBfRfLpk0rsYYDtRZrYDWcgYGBSsHDgGuRBWQxxf///w9s2DC7uRl+aD1EHJerIOIf3rypT0g4shXfrp2ivj5tU1N1Q0NObm6ILuqS1FrEQaNFFntO7omojHj78S0uX++dsVddXl1aTBqXAkrFqRVAqODhw+eKir7/QQD7gsOPH7/w8/OgagLx4Is1ODnZ09ODDQzUb99+NGHCsq9fsR9tTK3l8iC7sWGqVWDYDAeJoa1OZGBgUFFQOLV9u5CmJkgaA6+aOTMM20zYgbVrHYKDMZTjFKC8goQYTa0CCGIa8aQUo5S8krybn1toXKiOIWJlFKTCwzSnvre+sRjLHvjcytzJ7ZMx1WOtCDGVERahcQBRq2KjljmEAwRVBY2DB0vFxsTE1LFqVVlICKpDoLyDHz7YU7bNP72hgYqLQWhTPkM9y0D6PrBfJ3+xmbMh9JPFkpOQe7j1IVlaMTTROIDgFRKaxV1d+WVlE9EEGRgY3rzZJyLihClOkoiWltLVq6tJ0oJL8QDMgd158CAyMxOXg9RVsJ/zeOXGDVxahqv4w3sPZ0+YPXvCbAs7i5LGEisHfBf22DpjvxT13IlzwzJ8Rto+MOIj8d+/f/XxOIeUXz19SrxRaCqZmJnzu7piiorQxIcT9+t3Sm+Q0VXR3dS/aaiHiZaWElYvfPjwGas48YK6uiq7dg3x61R2HsB5ppYwju2ZZy5dwhpG6srKdx8+/POHVss0sVpKZ8ETh06EOIaExIa0TMZ+/S4DA4OUrBRWV5G3TBGrUYNKcPQ+MDzRgecer/vXr+PRiEeKT0iofflyCzeaTMXjsZfOUs9eYxmiJ94Nsd6x0yunc3PSZLiVeGcQCfCsbpeVFcdqyIsXOEdTsapHE0xM9Js0qZSHhwtNnGwu1XpgwSkpPXV1ihQfksbDhd1vZy5exOrJG4cP//nz596jRzfv3r155w6IvHv35nC8SXbN4jV4aiNefuxHcH79QmmLEmuwU11wdB8Y/iDN8/bObm1VN8C5QQdNu6iU1Gtsp7LtWol9LhBNOxrXJSSkfMoUKh6xiGY+5VxS94FpKWldu4fl3J/T17Bv4CXoQhVZlSnlU9wt3QmqHEAFjx+/vHz5zuXLty9dAq2hv3kT5zinlJQoVnc+fPgcqzh+QTY2Vl9fu/LyeFNTbfwqSZWlWgW2btu27fv2VefnV+TkUHKYOg+OueLrt2/j8hsLC4uakpKakpKvqysuNcND/M4NxMofNB/9+D60TwAa3QeGFqFo3KPbth3fsSM8Nze7tZWY9RRu4eFL+/vRDGFgYDi0eTOmIB4RLROTrJYWS/dBXS4zMDCQug/M28YbawW2ZBvJCwhV5VQrEirifOJYmKlWnOKJEfKkbG2Tr1y5S/wAIDc3J1aLLl68hVUcl2BNTYqpqZa9vTHWJSG4dBEvTs0Q//7jR01n576jR5dPm0Zw0TwHO/uPnz8xHfodx1FslKw1x7Rl+Il8/oh9bJqXj/fzJ+xSwy8QyPDRENoH9u/fv+UTJx7esqV77Vo1fX38nrXz9cVagZF61OHi02T2SPA7b8BljTSMsLph7ykCOwrQdO2dsdfRxJHIXb1oeunJPXKEtBMPODiwr2TZtesESc5ubsa53IEkc3Appv4+sH1Hjph6et598ACXlRBxJxvst0p/IHQMNkT7KIkWAk8fY5+cv/nx5rkn51bsWtE0oSk2Pdbc1lxQWBBN7yh3CIXAk7t3k6yt9xE6sZoqN54wMVG/fBgkQa2roovVJaQeHuRk6jT4ay88QF5eEqvsv3//sYpfuHATq/hACVKzBwb3w6OnT+2DgvavXauqqAgXRGOYGRhsw7Z98sPHj2gqhzf3ycMnMvIyxPtRQVnhwV0sjYMnD57gMkRCWkJCWsLO1Q6u4O1rimZi4eYMQgaufWCD0KlkO+n716/loaFNixZ5go+ox2qOqBT2RT1YFeMSzGlvxyU11MXFhbEvUhjq/iIVWFvrY53WwrO+g1QraKqe5vvAcLkevj9s88KFPkhzV3BxBgYGdWXlG4cPQ0xAFjfW0zuzYwea+OENG6hyFjDEWDhJ6308cIuIZMD3geVV5VW0Is4xg4szMDCwsLA8+v0IYiCy+JlHZ3AtVoQoJoekcQAh799C3nSMSxyXF3CpxyWOyxxSxWkcPDidA9/4LCEnt/UhYq4eLs7AwMDMwnLq92+IEXDx4PT0qhkzIIJ0IGm8zYnk+8CQvWxraHtoziGICPJG6QklE/Ij8yHiD549UJBSgLBpQtI4gCD7wOzsjA4enI3sfog4RMTT03rbtkkQNrK4kBDf27f70cSNjTXPnEHMI3769JWPj4ZrMmk+RECwS75lzx5IEGCS73H0xuSk0fe9iwoLWxobY5owjEXWLlmLK2yxjmnIKshSv/YauPC9cOE5HA2cKwbe5ts4tpfAXfbi0aMHOPZQYl0M4peYCNc77Bmu5q7Pdz1HRshefvQC2gpEFmRgYPCwQhwDSNvaC81imnEPHz7/6NELXMY/fYr96FSsZ/J6e6PMDdG09mJgYKB5BTZ9IYFj93YdPIgr4HAt6NDA2Ozs7+5OydJHXA4YzOJPHz29dBb73jgePixnwLh4uwxm75DqNjExCTgiVe9wUl8aHPzj2zf8PjqLI4tx8aCnEwMbGx0cF4zht2KIyu4/s//fv38SwhJwhOyRD58/IHMhbC0lLXV5dQh7CJHv3uG7Yvv///+rV+PsSLx69Q6rT0VEBDDFAwMdMQVpJ0LzCqyyvf3pC5x1OwMDw/1Hjx5j27DCwMBAfAUW4oPvbEraBR/tTH54DzHsg8uWU0dOYZXi5cOyJ8wzyBOr4kEiePHiGTgaJE4aEs54fOfO9Npa/E69cQ77aSyYCz0ym5rwGzVoZc9cO4MV4Xfwn79/5m6ci0vNl2+guz/QZLPDstFEhgTXwyMHvzu3bIEOlmIq+/YN+xYdcXFhNMUGBuoGBnSt3WmyiAPZV58+f27s7Z3V3Y0siMa+cPWqLLY5Z1xDZMg9sPc3bty8c8dYTw/NzKHODXYI3nJ8i4S0BB6PXDyDfXO3iBj6wf9SslL4T6LCYwt9pJD3gSHPddHa9mFwH9iyiRP9k5OVtLRwhdUjHHso5dTUkLU4BQWZONK1+YxsO4VsUveBwa1bs2dNbQr2FgAHOwdcGYQhKSIZ74PzmC6ImsFJnj599eTJK+bmiFNV0dx59OjFz5+/YV61zMDA8PMndKIUTYuiIvpCocxM7CdwommkIpfmPTAGBoYFq1Y9xHtj3kUcJ8pzYzuVg52NTQ8prwrw8ZkbGbHguKmPiiFFZ6OePX6W4J/wGzbHjtV2XL00JTX0c8wiEiOG8ZJorIFDpOCECQvgiEgtg03Zv79/ZzViOccZ7s5n9+/D2cgMVV3EUnI+QcGKqVORZUcI+9LtS49fgm7GwvQvLxf6SEZXftdQOSYKE8ycuRZTEC7y+/ef8+exnzf76xf2Cgzt1hU5OYmEBF+4gfRh0KMC+/3796S5OPvpDAwMt+7dw+pbrMdKWZqYcLCzY1U/zAQvnb2E9SB5uDefPcZ+bpuyujJcDQMDAysba1xmHLLIKHuYhcCe1asf38F5SssXHIuhjOzt4eHQvHixsAS+7j5c5fBj7D6B/VpBGXGU/S2+dr4xXjFD1/urVu3+/BnfdOmFC9hP2WBmxl5N6OqqIodGR0cuGxu9L3XC7jJkZ1GFvWTtWjzn7eKaJMN6rJSjFb5D2ani2sFjyNTOqW9evcHlni+fsIzRgy6s0UCc6L/2wNq56+aKSYjhMmSYiWdkRMDRMPMaHu/8//9/0/z5uBRgPduXT1BQw9AQrmVE3VEJ9zWEce4G9jlCTUXElU/KMsqLmhZB1A9R8uvX76tW7cLj+KtX72KVxVotMTMzmZoiRq0DAhwiIxGLM7GaQwvBAdsHRgvP0MLMgdrHQwu/0MTM0QDCG6yjwYM3eBhovM2J5H1g/89iP4ECvy9oKEvrABrigOaLOIZ4+Iw6fzQERkNgGIbA813knKo+DANiiIPRCmyIR+Co80dDYDQESA8BCeEROuE3zMBoBTbMInTUO6MhMBJDgNT7wEZiGA1HMFqBDcdYHfXTaAiMsBAgex/YCAun4QbotApxuAXbqH9GQ2A0BEZDYDQEBhqMVmADHQOj9o+GwGgIjIbAaAiQBUYrMLKCbVTTaAiMhsBoCIyGwECD0TmwgY6BUftHQ2A0BCgOAVz7t5Dv8YJYAlGJSxyiZpQcKmC0AhsqMTXqztEQGA0BqoXA6D6w4QFGK7DhEY+jvhgNgdEQICEERveBDQ8wWoENj3gc9cVoCIzoEMDcB2aiZTKiQ2RkgNEKbGTE86gvR0NgWIcA5j4wyFzXsPb0KGAYXYU4mghGQ2A0BEZDYDQEhiQYrcCGZLSNOno0BEZDYBSMgtEKbDQNjIbAaAiMhsBoCAA2JEMAAHfIfyqIr7leAAAAAElFTkSuQmCC", "text/plain": [] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# split in small patches and transpose each patch\n", "rearrange(ims, '(h1 h2)=height (w1 w2)=width -> (h1 w2) (batch w1 h2) channel', h2=8, w2=8).values" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# stop me someone!\n", "rearrange(\n", " ims, \n", " '(h1 h2 h3)=height (w1 w2 w3)=width -> (h1 w2 h3) (batch w1 h2 w3) channel', \n", " h2=2, w2=2, w3=2, h3=2\n", ").values" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rearrange(\n", " ims, \n", " '(b1 b2)=batch (h1 h2)=height (w1 w2)=width -> (h1 b1 h2) (w1 b2 w2) channel', \n", " h1=3, w1=3, b2=3\n", ").values" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAABgCAIAAAB6y1p+AAA6yUlEQVR4AWL4/+zZs//PRslhGQIHrx1E81d6Ufr/Z8+09LXQxPkE+P4/e8bGzoYmLikj+f/ZMzc/NzTxvrl9/589e/jz4bNn/8/+/z9KjoYAeSEASj3/z46SoyFAXggwMYyCoR8Cv37+QvNEZVYlAwODo44jmvjMvpkMDAzXLl5DE//04RMDAwOmOc+fPGdgYNi1aRea+qLkIgYGBitVKzTxUe5oCIyGwGgI0A2MVmB0C2oaWsTGzoZmevu0dgYGhid/n6CJP/v/jIGBAUIiS0FEICTx4qcfnkZWPMoeDYHREBgNAXoC9Ars6P6j9LR+1K7REBgNgdEQGA2B0RAgD6BXYNaO1uQZNKqLDiFw4fQFBgaGH99/MDAw+Fn7MTAwSDFKDThJB4+PWjEaAqMhMBoCmAC9AsNUMSoyeEJg6eylDAwMxSnFDAwMZ46dGTwOG3XJaAiMhsBoCNAfgCowWRZZBgaGVQtXobXlkV3jZeaFzB1lD0gIdM/qZmBgmLp0KnweCzJrNbDkgATFqKWjITAaAqMAVIH9/fuXgYGhNLUULThOH0VM0UMGr66cv4KmZpQ7GgKjITAaAqMhMBoCAwJAFRik/f7w10O0dr2ptSncTRA1OoY6cJFRBn1CwEoFtFT929dvaP3jwTD7BXEDfcJh1JbREBgNgdEQQAOgCgxNaJQ7qELg6aOnDAwMnFycDAwMLCwsg8pto44ZDYHREBgNgQEEoAoM0o7GRU7rngZv+2dFZQ2gW0em1ZCeMSMjIwMDw6Pfj9B6yZCe8cCSIzNeRn09GgKjITDgAFSB4XfEkweIzbB8/Hz4FY/KjobAaAiMhsBoCIyGAH0AqALD335vm9oGb/V3TO+gj7NGbYGHgLmiOZx99sRZeG8YV4+Z/uJw540yRkNgNARGQ4CeAFSB0dO+UbtIDQEbZxu4FmMLYzgbwvALB21nhrBHydEQGA2B0RAYUQBUgeFvs0/pmMLAwOBu7M7AwPD///8RFTqDwbO9c3rRnIHcY56xYga8f4wsTk82mvNGuaMhMBoCoyFAHwCqwDBtQl7tZutiy8DA0NjfyMDAAFlKgKl+VGQ0BEZDYDQERkNgNAToDEAVGGZrHXm1m76JPgMDg4WdBZ1dNmodrhD4/u07AwODj4UPmgLknjRE6ta1W2hzZvWF9QwMDM76zmjiGgIaDAwM8uzyaOJGMkYMDAzxvvFo4svmLMN6/QrE3lFyNARGQ2A0BOgAQBUYHawZtYKKIQDZE7Zm/xo0M6NToxkYGJiYEHGqpqWGpgbSk957cS+a+I0PNxgYGB7+BG1mR5Y69+QcAwPDws0L4YKSMpIMDAxRKVEMDAyY17jAlY0yRkNgNARGQ4DWAFTYyTDLMDAwrJi3gtaWjZpPxRDg4ORAMw1yUiKt7wA7+xi0EhLN6lHuaAiMhsBoCNAfgCqw5TuXMzAwRCRF0N/6URtHQ2A0BEZDYDQERkOAPACqwCDLNMjTP6prNARGQ2A0BEZDYDQEBgSAKrABsXjU0tEQGA2B0RAYDYHREKAEjFZglITeqN7REBgNgdEQGA2BAQOjFdiABf2oxaMhMBoCoyEwGgKUgNEKjLTQe/7kOXxHFLJOzD1YEFmaiv/790+KUWrhqlUQWyA2MjAwaNnbSzFKMUpJwcV//voF2ocOFoGIHzpxgoGBoWXCBDTxsPR0BgYGQ1dXNHFxPT0GBgZuZWU0cbilowwKQ+DTpw9oJkye3M7AwBAZCToEB1lKTQ10praUFOiCAmRxiAiExCX+8uUzBgaG06ePgpKxFOO9a9ekpBiro6PXrwdt7JsyBXTYqZQUoykLi5QUozEjY0VFJgMDQ0yM19P79yEiENLT03TT/PkODtod2dkQEQhpYaGU5eamry/hp6wMEYGQ6ur8jsLC8vJslhwcEBEIiezOUTYlIfDhM3r6aZnTwsDAYJlgiWYsiynoViZGY/T0AxGBkBAt33+CtpxCRBiNGX///nPx1kUGBoZNBzeBygFjxpkz1zIaM2poBE1bDbq0pGpKFUSckdEYlHoYjePrQVtInTOc79x5DBGBkHrhekuWbFMNUK2qmgIRgZAynjJBQSVCjkKWlgkQEQjJacmppOTHbMosJOQIEYGQoxUYJKbwkYOk0jp5DrQlC1TuMEpBSDMvLwYGhoSCAsgpX1KMUjv275dilLp++zbcPzE5OVKMUiLa2vDKDCJlHxQkxShV29WFJr5682YpRqkLV6+iib9680aKUerb9+9o4hDTRknKQ+D+/TtohrS3g4qDgwd3MTAw/Pv3j4GB4cYN0JXoX758hqtcuXI+AwNDdXUuXATCCAy0Y2Bg0NAQhHC/f/3KwMDQX1xsaCjNwMDg7w89YDMc3C7ZsWxZdnb0swcP2toq5zQ3g6wD39LOwMCwaNGMIHX1ffu2+ykpQYyCkBcvnmlMSrp169rqaaCSCyIIuvHn0f2Tu3e/fv3y6b17cEEGBobPnz99evfu9+/fv37+RBYfZVMrBO48Rk8/tdNrGRgYTlwGNVU/fwOlmV0nQGnp77+/cEub54CiO6gkCC4CYSj7gZqqPDY8EO6ePScZGBh0dcMMIg1A6afIH3KsYEYG6Kj3mzcfZndkHzhwtn1+e2YmqNUF0QVKP1sWycp67Tu9T1U1AC7IwMBw+c7l2NjaO4/vtLeDEjBc6umrp+vX73//6f2JE5fhggwMDD9+/bh//+m/f//ev/+ELM7EIivLwMDAq6oKqjmRWuiQFre2gwOauE9cHAMDQ15NDUT87ImzjFKg8nTxGtC+2rsPHkDE4SSyZRCVEBJZnFkGtBEN0vZHFr968yYyd6DYkK27kPNKkNkQEbqR5kZGaHad2bHj2f9n/589e/b/GSMj47P/zzwcHeEiEPElU6Y8+//s8+3baOIQWcpJOTlWczY2dXV+B0FBSJsaQurrS3jJyTk76yXZ2EBEIGR8vG9DYmJtbf7S/n6ICIRcu3bJjXPnHjy4C+pWgtv+EHHkSIeIQEhkcXl59mRb24qKzJO7dyOLv3nzCpk7yNn6+iZoLnz2DHT0KISE7E/X0ABdiQ4RgZDh4YkMDAytrZNBR2IiqV+//hC4wnsPEefk5n727H9hby9EF5w8/efPs2f/z/7//+zZfykFhWfP/qfU1sJFIOLrbt5EE4GIU4XkseHh4rIScxFjZjaFtKkhpEaQBgeHpXu2u7AwSos7rSVNTs5r2uppmprBEJUQ8vzN86amsX/+/gkJKYOIQEgGBoby8kkMDAyzZq2DiEBIBgaGvXtPMTAwvHz5TjVAlZHReObamYyMKIdl//7zGyICIZFjByLCzo5+PlFgYDEDA8POnceRFUPal2giVOeaaKGnn/9nQekHQvJy8TIwMLhZuIEcgyRemwKq5Nb1rEMTv7vpLgMDw9/ToKru/9n/Li7m/8/+v3FjHcS0/2f/MzIygtLN/7Nw0sHB+P/Z/9OnV8JF/oNlHz/ehiYCEacKyfL3719ImxpCwoMV0uKGtPThggwMDFv37Dl74uzkefMq54L6p3CpuLy8Z7khKlZWkEIWLq5mbX3w3tGazs7sCeVwQQYGhtv37/NIKkJEIK3L1Zs3T2SYCRGBkIZubg9/Paxsa8ubDGqKQgRBtTGoEccO544yBjAE/vz5A2pf//6N5obXr1+CSgeGx2jiu3dvQROBcHNzYyEMfmFhCANC2tlpGrg6KnBL6IagjKQ9f/6EQRLU7mFgYPj9+9eFI0cuHDmyaNGMAHAhDtFrb6+lZ2sd4Rkp720tyQJqqEHER8nBEwJfv4O6ht+/v0Zz0s2HoMYrpMeALDV7/WwGBobsjmxkQQYGBqMo0JlnIk4iH798RJaKr49ftGWRnXRoen4rsvi/f/9cXDL/n82QkACNljMwMGS0ZUAUKCr63l/7ND6+/uzR+wwMDIfOgZoCDAwMy5btiNIwev/+E7RXy8Dw6xd6st+w4QBDLYOHR87/syguXLBgc6I+Su0IsWuUpBCw/H/27Lkkg+RzBpJIkC4GBhApCSYhbGzkraNHnzMwtJSXP0eVVVVUBM0mgZ0PMgcmCxaAEr8ePnzOwNBeVQVXCZHgYKdr7fX8yXNJZkkpRimQO5HYEBGyyXfXr0tJaf5/9kyKUervkydSjDKWxsbHz0LPuWguK6vt6mJmZv4LG8yB+H2wkc+e/Scp5ZCa0pDVo9sFCwtkcQaktHL16hu425DFYfoGnr548YyYJLThDGFLSTGe/f+fSLJ2zpzmlBSI+qVnzxobGzMxMUGagwwMDNKKik/vg4rggfcnbheAWvRG5xjOGTHQjFy4OZ/hnNH//2dRbWECizCASWTbGe7f38xwjmHhwka4erAahqgoD4ZzDIKCfAz3IbqgJLLnICohJLJ4YqIfA3QGAFmYUvaZa2dMjKDTQBA2ozHj//9niSSTkvznzdv49+9pZmPG8vKEzs4FyA4C9bEG/fUjUM8ju3uUTesQ+AHqQTL4xYOmN799B02T+oLZ8NqLgYGhtqsL1IUf3LUXrQNq1HxcIbBzBejgt5bUVAYGhh3LQOsvEq2tQXNX4KkyiK7BX3tB3DlK0jME/vwBjQrOnr2egYFh3ryNoHNNo6oZGBjQai/QiOKgr73IDLfNxzeDBtb/g5YzIbMhg4c0Ik309Z/9f/b47Fk085FncaQlJJ79f3bvxAkazfcg2zXKhoQAmWmI9tq4eEGD/nB7CgpqOlevhszlwAVByRg2A3T2//+JExeG5+RA1IyS9AkB5LgYPGzMe6OqkkCzGJA5IWR3gnqQDAwQ0sXchYGB4duxbzIy4v/P/j98eC7t5n5GTYaEwJDpgZ25CFq+aerpiZx6GBgYbt4FTTZCBJ++eAFaIZMImtaGiEDI7z9+QBij5MgJgW+fQcuu4P6dMKGlPDS0vb1qajWovQkXR2bU1OSunDLl+fMnE8vKkMVH2SMtBCBL7JB93TYPtNzOt8AXWZCBgQGy0BwiuOfkHtCWg5oYHR3QEj4ICZEaJWkEaD4HBpo3gs1vUc5+fuEC2lyaurIyfNYDYv6lvXvhIpBQ4+TgQN8iAZEgjiR7Duz6oUOaUnacHBzff/wI8fFZswX7+gXiXDFIVSHPPyHPVw1mdktOK9a5sZs3P0LE87u66DNnBpn3gkQthA2f/Vp8+rSxqWlwevramdCVTeycnD/BA84Q9cODBPVdaDb7Rbt5NSSTOSEzXmASZS5NQABlDIAW8QWZ94KYDGHDZ79evtwtbsz448dxDmNGQUG+9+8/8fJyff78DaJ42JBDpgc2tEJ86nzQ5ob8WtASVUj/b1jWXkMrUga/a6+Dl/B8+/KFgYGhLCSEgYFh3axZcGcPv9oL7rVRBtVDoLMTdIffvn2nGRgYIHunhl/tRWagIc97IbPRZqdAEwzgebIBEU+LiYHPhEFcYqijAxeBzN/8e/oUTQQiPkoSHwJkpqFBps3PLxzNRc+e/W9cuBAyDxQdDVor8ezZf30rK4gInDz99y+cTZV9USPNNLRgH7rckhLoPhAGBoYzZ5a057bD9zmBF0ScNdEygYtA5m/+nP6DJgIRHyWJD4Fh2wObtWQJAwPD0dOgBggkV5y/AjrFAMKGkFv3gMasIexRciSHwObNq9C8f/36pVbwqVoPb97cuBG05O/7928Xjx1DU7Z10SI0kVHuyAwBHR0V+H3oWlpKNVNBRz2cv3keHhpnrp2BsyGMJdtAZRSEPUqSB5iIb2vDVRpbGP9/BlqC+P/ZM2Q2qKEBEx8kbGtTUzSXIAeTD/jEP2QRUtlbwEc/7DtyBH7yCOSckQEh3715BznnkFFKCpkNPxeRT01NilFq54EDcBF+dXXIBnY4mVRYKMUotWz9ergIZDP7jTt3pBilXr99iyY+PHoMT5/+Q+s/aWrqHQdPOMmrq9+69ens//+cnFxnMRYW+yYkkJpmkNVfvHgmC5wIq6OjL148Y8zICDlnZLCRc+ZMhLvt1asXE0pL9+/fYczIeP36JSsuLmQfvXz5vDws7NOnD3vXrkUW//37192rV3/+/PH5A8p8NPFt7UGuMj7e5//Z/3//nv5/9j8nJ/uf06AN/obqhqDyB+nkC+QwifcBbaRBFiGVjVwpQtiMoB1dkyCnjTAaM+rrR8DZ8PMJ6S8yYdkEuO0v3r7w9y/aemQrI6PxmWtnhIUdkX197+m97OyOV+9erVixE1n8249vZ89e//P3z8uX75DFh20PDNmTtGM39PYyMDBMnjePdlaQbTLyUmBmZmYGBoYlU6YwMDC4g48Hq8jJYWBgeHAKdJoOshXz+vtBW0MCA5EFQafqqYAamKKox2SgqRnlEhkCH9++ZWBguHQcdODQSfAwwF7wSWxEaqe/MvgQq3NwMAMDQ35Xl6Ojh6W7u6am3sY7KEfwiYtLdq5axccnAFEJdyorK5uytjY7OwevgABccJRBC3D5MiJGvn4FbTOlhS0kmRnhHoGsPirKw9vGOzHRz0TL5OHDrchSStJKU6dWiAmJRUSgnLzDxcFlbKzJwswiLi6ErJ7p9+/fUoxSb969Q2tZQ1rca7ZsQRNPKiw8e+KsoIYGxJSzJ6AnRyD3OSBS67dvR+uXcCqCzo5CVkl/tn0Q4thKiO2QE9khbiaVPLNjBwMDw3pwBQbvlYLaXAPRExUSEYL3koVEhP4hzfD9efz42f9nfm5u8PnI9qqqZ/+fCfLzw0UgM4Wkkk+fPvrx7duJE4ceoxZkLS1lZ/bvNzKS6SsqQg5VKSlGD2lpSA8DcmZERATofDaICJw8un078pnocHF4P4A+Inv3boPbGBBga8wIOsDbF5yMf4MP+IeIxII7+sjexM+GHJelZ2mpr28C6dWd+PkTwh6cPVoxMQlID7VrzRoxMQlI22gKOPGLgo9Cxe9fPLLvPr378uXbySsn//4FnVYMV9m9qPv37z/6EfpoSw8YjRmfPXvNaMx45sw1iOLHL0HHlTEaM27YcIDRmLG5eY5qAPhkV/Bp64zGjMHBpYzGjKKizvBT1UHlkjEjvE9AUPzu3SdovZa+viWMxoz29qmMxoyqqgFwExobZ8HZEFvQSPUgddABBeDjdCEqMZfmQ/xFDIl8/iGE/f/s/23bJsF7q3fubISzB3C+TUJYAm67hLBEeDgoy8+bV8/AwMDDg9KDJ8bXyGqYWFlZGRgYRIRQqjV4izvExwdZNWjzNriFfu8k6HBiZKniDNBJYpAjRyHigRh7tqa2oxxUDFFGZxJyjcgd8KHDEKshFS2EPUqSGgLS0nIcXFwWFnay4C4aXHtNTZeJo+PBg9eK+vrgggwMDCEhsVsfPmRgYEipqYGkls7OGRAFTOBuIijDMzJagxNPfmcnRGqgyAMHEOMYt25BS8xn4MSzDTzJCnHYtTPo0xs3zyMmPyBqRkmsISDEJ8TDw2WuY87MjDIaVBpXysrKcnHFRV5elAJuTdcaKSlRMSExExMtiIGy4tBTLgMCQCeP19am7JwKijV+Hn6IgrVruxkYGF69Qp/wPnMGNAVVW5sCUQYndXVBgw1wLgMDg7Iy9NRNuGBRUQwDA8PBg6CDGZH3e9XXp8HVYGXcengLfh0JRMH2o6CGPoQNIV+/Rz8ZEiI+SmICUKIhtQ1ubGEsyA9NHMYW0BMqe+rqQC2LJ0/Q7EDulyRFgDqSyCIDxVZRUID3k87uBCV3NGejcT9+QpzhH50NOqaTA2wCpA83SMh3b96ll5VJMUoFJSe/ewMaKUbrPUNms6hOooUVMpeXF3RzFbLIpEmLmFlYnj37nwm+toOBgUFeHnRPx7Nn/+Enoz99CmqMP3v2P6a4eGB7JM3NEyE9j7P//1+79hbSW4KQ/klJDAwMEDaERPamuiFo8gNZZCO4mw7pdNqCTwkxZmSEzHsxMDDA2fTpWeKxxVFYWEqK0ZaXV0qK8ef371JSjF8+fnz1CnREAOSmMQgb2Wv0ZAc7g8YwX+4GHRWNbC9oPxnsRAwlaVCK+nAQNNkGFwed7Ic0F/X/7H9jY83/Z/83NWXC1YDKhLP/L11aCe+1QEQgJLwPgaZ+/fpeNBGIejxkoCNoiB6iCzJbhuwXUUFRZC4eNmTeC6IAwmY0ZtTWDoX3F5OTm+Bs5B4nndkv3r5obZ0LccmLty8gZ/lDnA0hIUcq79oFuvkFIkIkCarAiFQ6kpVtAI+WQELgGLi5DbkiEiIyGEh2NjYGBoaGYtBtDph938HgwhHuhgMbNjAwMNy7ehV02hB4p9fgDJBk8Ekldr6gIyfYOTlBgzyw1urgdPCoq9AA8gZqc3PQ/TtoCgaE29sL6u8iW33//lM4F7I0w90d1DeACzIwMAQEgAq0kyfRF5DD1YAqMFLb6Wdh816gFigSG24oJsM9MhIuCLmAA7nXAr+NDDR8BB5SR5alBRtyAxmyych9rCbUUS8GBob4sDC4+++Dh08Hqu+Iy94fDx4IiQhJios/+/8sNiRESAQ0Jkxq35o89fCQoYQRFgY6Rw7Sxj97FtQQg7ClpBijjY3hPQZQ91GK0VteHi4Cn6Oij8ibN68g817GjIwrVsyDsxkYGKaD961DAgEi/uHNGwgXdJnkJtAltiq6uqBcA17NePb/f8i8F0QEwh7YHieo11tU9OzZ/9Zly+B3hjEwMIiJSYAmR8FX1UDYcH8NKgbkshVkJ0HmmSDkoi2gPQ8Q9mAjl25fCne2ij/6GCZcCo0BmfeCCELY/8/+P3p0HrwHmZYWBGcj9yDpzJYQlnj3bj/EJZD5MAYGBkVF0N2qEMeDzjFhAJ/uD+HDyA0bQKvk8FTDoAoMppiGdGlWFtx0FhbQhdZwLuguH3CuRhahNRsykoNsyxGk9XjXboHGqZFlR9m0DgEXF2+4Fdra+nA2AwNDKnh0GlnEwd8fmUtP9u3b1+HWff6MGFgGXRy1GXTINVyWgYEBc24MWXaUTfUQSPRDPwdVTV4NbkuQE2gBFwcbB1xk8DCQbz679xR0mTXkDuXB48LBCUAVGKntbvi8F2jsHjYHht97Lra2aAqQexIH14HvAx2IlXugcWqwvd4uoB4AxJErZkCXFYCuZHwNmlCF9NUWrgJtd4WwBxt5/fZt+LwX8j4wUJeFEXRlthSjFHyXGFqfm0JxSKBRSKalFcLb+BwcoJEreA/Awd8f3i+BqCmdNAkuAp+joo+IpaU9ZMbr7P//qakFcDYDA8PyCxfggQARt/LwYGBggMx+Qfpk1VFRoFwDXs0In/eCiEDmw+jTj0SzxV5AQEqKce/atfBeLyjZSIGWXEJEIPNeyGy4TwcVg4UZvXF8cx3oYkzIbBMPFw/o+N3joJXlEJHBQy5sBJ38BAnMf2dAc8CQO5QhIrhIyLwXRBbCZjRmfPHiLaMxI+SGa9CYljHjgwfPIPNPcFJQ0AHOpsN8GGTeC2IjhA1yGPj+a8h8GDGkiQlo4cyMGWuQ9YIqMIj/R0msIXADaXX4g8egBbtYlQ24oJa9PShewQOwyI5BrmhpIY5s5igbawg8un0bLv4SY5UTXGoAGfJqoG6Klgn0as0BdMmo1ZSHgIQE6E5zyFJ1iGkKCqAmLIQNIUHXdTIwQLZDQEQGP3n2LGjwIzMTZSk7qAKDt8eJbInD58AYpaTOnjgLKSKR/Q8RgZC4xMPA5/RA1AwGUt/ZGe5UJmnQ4Ozv36D7wu0tLeG9tHrwEgnkvuOgYqPtA4PvCaPpeY/wQKMKQ1tbBG5OaKgTcj/gxK5dkB4AnESe/XIWFUXrVSDLUpE9YUILpC9lzMhYVZUNZ0N6UQwMDHNaWuDsdCeQF3LBu0cgfbI5h0D300PYg2cObNGpU8+e/ZeUl4f3eiE9XTgJmfeCyELY8GiinPH27Ue4IcgtcbggqGUGbq2zsIAO1kEWd3MDzU0sWIA+ePvp01dkZUEloMFDiMiBswdABsJ2iQ0q9vFLoL3tkPm53iWg6R+Im3GRkHkviCyEDe9TLlvWCmeDSrCz/5Hnvfz87P+f/f/v3xnIvBStSci8F8QWCBvkpP+gPcTIs19ksJmQKw9IQEBIWouvxpgwgNg7UCTkLjGI7ZDbgF6/A61Eh4iMkvQJAQkJUNMBYhcbGzuEASHVDAwgDKwk2i40rGqoIvjlC+Kase/fsVxOgbyh+9Wg7G9RJRyoaIikJGhbq6dnLpqZs2aBZhYg69MgUmibnRkYGHbvBm1ITUxsgCiAk+LioBmBkJAyiIijCfS8onXr9ump6v38+QsiPtjIh89BWyQhrnrxBrR1AcIeJXGBYX4WIvE9pDfg9c2QYILokhIXZ2BgKACvIIBU57G5oDwGYQ9CEvn8Q2Q22uwXcj+bcjYkxKhF7t0LurYUYtrSpaANnpBW/7Nn/4XExOBsSM8AefZrwfHj9JkDq6nphPef+vvnw9mQlYQMDAyNCxbA2evBq4GijIzgfTI/ZdBVh/B+G2TeCyILYdOnHyklxZjl5ga3qzY2Ft6vRe71wtk0nQP79QtUCW3fPhmtVZ6WBuo2QY4OQm6bQ5IHhMQl/v07qCuzZk0XRFluBCjnMjAwBAU5CfEJsbOzofVOQFaj7hIbEBHIkUsQt3UXgPZfQ9yPi4TMe0FkIWxI7w0P2dAwE00WeQ4M0h/dseMYZL4KTkpJucPZyOqJZEPmvSAmQNggi8C9auQ+Nxls0BAixP+jJNYQ+AY+0RWr1KjgaAgQEwI/viE6auwcg2UJHA8fYo/56E1jxMTj8FDT0JCO5pHJk0H9VOSTUDw8rNDU3Ly5noGBAXL+CLIUKyv6qhlkWTqwQUOIpLbQ4fNeyHNgg7BHAqrkwYsaiHfb7fv34brOXAT1BmZ1g9pBkD7Z4sngRiJ41SJEZFCRw2AOLCkJdEIBJN1nZIDObcHTM8h2d0frQ1BxrgtuMpqZBQUJ8P4TMpsBfJoGAwODB3gCFaLGmpsbdCnljRvwPtlqcEcf3m+D7P2CyELY9OlHPnv2v2vNGrhdEDakX4uVhMx7QXrAEDYkjqhCktHuBmVSEtvvYmKgQUW4XWzmbPX1MxiNGV++fKfkp8TIaAzpH2DtnYiJuaCJz5+/CU0E5CSK59Wy2kFTehCTo6ujCQYvZN4LogzChvTeSCJzcsL/n/3/5w/oHH3kfifynBkvL9f/s/97ewsh81hw8tevk3A2sno0NmTeC6ISwgZZRJU5MIjnR0lICPz48QPCGCUHJATQ5r3wu4EbfCATRA3kFmMIe2BJlP4W+CSLgXXPqO2QEHj9+j2EASF5uXibmkAnGcrLe0PmvCHiDAwMOTmgEzghtxhDBNH0MjAwJCU1MjAwxMWBzs+DqIGQv36BVn5B2GSQ33+ClvhDNLKxgs7WgbBHSVxgdA6MAbkXpaupCWoagPtYJvqg7bTpZaD+NaQPBzm3HsIehCTyvNf7t+8pn98ixgRcCYs88RkzQFdHQvRC2JBWP1YS0m+AzIT1rl8P709ARGhETpiwAN5/QmZDelEMDAwH3oMKSoiafeCTOGLAy9MhfbL6eNAVUBD2wO4Dy/HwgPcyIecfwme8MHu9NJ0DQ57Hohv77f63kF7Cjx/H72++D2FDyClTyv+f/S8oyAfpMcBJUMkAmyeDqFy0qAmtr8PGxoomgqyLIHt+w3y4GggbkhdwkZB5L4gshA3pvdGUvHPnMaMxY05OJ5otvLy2uHqxkHkviPoXb188ffoK1GFF6kNPnLicgYHBxgZ0vii8lwy+IBS0tQNZBI09OgcGiX2cJCfSpIW8jAxOdYNMAnIB2CBz1Ah1Dg/SWYIScnKDJBSQL5b8hLHg9t1L9NNyB4mzR50x4CGgogI6/n/KlHI0lzx+vI2BgWHixFI0cSsrUE8Aec+ZtLQYmpr8fNBZg0eOoF+s+OQJaCUXpl0uLuYMDAysrCyjc2AMyH2pS9dBe+UgIo/B/bAJTU2gNhGYHRsSAmcj99sGCRt5DoxPgG8o7gODzHtBEjeEjdkbkJJi/P//v5QUY4azM7wPYcPDA2ejzVpRVxx53guZDZ8D85IFZW9IHysXfCnMjL174f0zyBn8kP7ZwO4DW3jiBFqfFXn2S0hcHLnXC5n3gohA2JA4ogqJ1qZGa5tTXfbzt8+MjMaizqLI816UsB0c0hiNGT98+Azvf0BMA3kENivW2bkA0v/AT2a0gS6lgqjpXAAaycQfwpB5L4gaCJuS/h+FegUEeP+f/Z+XF4FmztGj8ySEJSB7zhgYGCSEQedqggpSpDkwiBcgJHIvXEoKdDB/djboKFpk8d27pzEwMPz6dXK0BwYJNCjJBr4dDcIRGr06FhIQg498cvcuAwMDch/i+1eUjasD6OTB2d8awAAZbFbffAA6XOrrd6olmIMHQRtyIyOr0HyKPLVWUwMqcJHvSkZTDOFyc4JW/UDYYkLo3RSI+CiJDEbnwFDmwDTAtzJCelTcXKCb9A6Dz56H9MkgAaduYwNqW5G4vhFiAu3Il69ff/sKWq4txSjV2Avdw6/GBzoiCH7SCmiSA3YuIhXZkGChCgmZ94IYBWFDWv1opKyKyrNn/5eePYvWh6DRvBeyLcjzXshseB9r1RXQ1Q+QPlb1zJkMDAw7li2D988ghZo9uG00sHNgmP1UyC3YoIQhxeglJwfv6YJvgwRtqoX0hiHzYZA4ogqJ3LKmA9tEy+T//7Pfjn2DzGNRi9y+fTJ8tgxiJvINZL9/n/p/9r+urgpa7wTUEYHNqzEwMPQWgnIuRA3mwcSYoQ2Z94KIQ9iQ3ttgI1+8BaUfiKsgbIibySA/fvyCrGu0B4YcGljY2uqgK8CRJaxIvD8eWS/t2PcfPWLngB5dMW0h6GDQz1++CAgJ0M7GUZOJDAFNY+ilr6B2D/gYXwtXVyL10lPZ4S1b4Na9BB/7CbnDDC44yhgNgQEH/PygE5nhzgBVYKS20E8dOQXXv3rRajh7WDIgA4mQPhnEg/P7+0HtJvCsGER8MJAWxsaQhRvP/j97eekSAwMDLw/PqQegmCL1tgFS1UOChSokZN4LYhSEDWn1S0kx7li2TEqK8dvnz1JSjJacnNSd2SLeNOR5L2Q2vI+1FJw8zMBj0ZCBTXlwGwjSJ4N4rXM1KNcM7BwYZm+1YupUeE8XIusYGAgRgcx7IbMhHqEKuXz5DgYGhrAw9EUBXFyg7bSQOTBkiyAiEBLSo122DGQCRARCCgo6gJsLoKYDI6Pxsh3LIOKMjMZyXnKQOSr6kKGh5Xjmxlau3AXpl0DIfaf3MTAw8Nki9pgjexyTDZn3gohD2JDe22AjIfNeEFdB2BA3U06CKjBSTfn6BTF8fPMKaECZVBNG1Y+GAKkhsGcN6BqFZRMmgCZvB/F2PW1wB90APM7MCd7ITKpPR5r6yEjQpTOrVqGvWXj5cg8DA8Ps2bVoAaKvDxoYhwhC1rZFRYFMgIhAyEOH5jAwMHByQsckDp0DnaF87OIxBgaGxy/peqfExo2gs4MhroKQyDvMLl5EuXpQXR403mOqjX5mMUTjKIkJQBUYqS1uRw/oyZgMDAw1XTWYhg4/kXXbQCtEkf2FPJuVAj6lHllkoNjR2dm+Vr5w27vrukEL9mDzXpB9XQYuLmh97kMnTqCJgCZCYLoIspGDhUI2ZN4LYgiEDWn1P3v2v2fdumfP/qfU1iLPSNGfjTzvhcyGz4FBqq5Z+/dDfAEntywCXQcM50J6bJDzDxkYGOri4iBs4vuCNFIZZWSEZjLyHJgpC8urVy+Obgctbkb2Cy3YvLygSeiUlAA0wy9cAO0ZgsyWIUtBRCCkri7oUuNv30A11v//Z2dUzfj//6yVvhVkdoqeJOZZFZAdZqBRnLP/29pyIP0SCCktBjrMeu8M0LJVZK/hYkPmvSCyEDajMeO/f/8g/TlGY8YZM9bA+3+gLilsVSSk98nEZAJXCZF1dAStqITogohAyJcv36GphIgTSULmvSAmQNgQN1NOgiowyk0Z9iZ4IV22AvEsLw9iKLY4A7z4FTy9AZEdKHLZ+vUy8ojNahq6GpDKFXI1DMRVF69dgzDgpH0Q6NRU2wD0kmI9uJwaPQ0SHlCUMOx8fdG0syFtMQzPyUGTHSjuzfPn0axeBD5NDSL47+9f0AnXGH6ZXgvqJ/398weibJQcwBA4fvwyAwODqiooOyOve2xuBvVKHz58DncbZAAWzgVtwz8AWlGJducWqAkr5c7AwGBvn4qsmIGBYdIk0MkDd+6Q0KnN68pDM+TKXdC6JzRBIrmgCozU1reXmRfcdIjeWO9YuAjdGH/BeQnZul0HDzIwMMTn5yMLgg4Ih63KQxMnnsvBDh2LgGv5BD5oHDL7pamqysDA8O/pU1CraqDnxqYvnw5x1f9nz3xDfef29T37/4yVlRXtVjDQpp//zyAkZMfY4Q0b0PrigZ6ez/4/4+LkRBOH6IKT8DAhmwHPSBkZER/Ap1d05+VlZERAVsrZ8fOj9Qkg4gNCIs97wdl53t4MDAxL+vrwhACfoCCa7PHv3yHnHzIwMGibmUHY9O9TErQxrrQUPgd29v9/MTGJ0xgVFWR/GzPLAB/tysDAUFjY++DZAwYGBhEnkZqaad553pDexuAhIyOrIH0RRmNGb+88AXvQSqva6aAWACSF/P5D7HlUkHkviC4I+//Z/9bW+v/P/r99e8P/s/+nTq2Ar42srU35f/a/vLwkXATSEwWVWrCVkBARCIks/vfv6f9n/x88OBvSU4STkF1fKiqycBFkXXA2ZN4LomZVJ+hee4ibIaSOsg6EQQYJqsBI1XbhNOjq9Ds37sA17t2G3uetzKpkYGBAbvjDFRPP+PjpEwMDw9qtW9G0JBQUMDAwiOvpoYm7R4K2cy8Cz5AjS527fPkPOMsd3AWq4ZClStNA+8bjfUEH/CCLj7LpEwKQG4qzwKvy/v0D3aRen5DAwMCwAnxuMsQNX8HJAMIePCQTEyLvhGWBzmB1Dg4ePM4bOS7ZeXwn3LN7Tu4xMFC3TLDcvv3o249vJ0xYtu0o+uA/XPFAMT59QiwEFxDg9bH1YWBggN9YBjpggoV1oNw29ACk9T1KkhcCQV5eeHo2LeXl+PsutJDFXHmInChTC9AHAZBl4WzMHidkELUBPNsHVwbqhD0DtecItuIhq9pGSbQQ2L79tLWXFyT0tm8/jbxSERLIkRjDCRBxOpMXLiDGnSBs+NykqJQUnA1JD9GFhc+e/Z+5bx+a+MY7d549+3/s2zdkcVDq+X92lCQvBE4vPg3pLf3/D2I/egSqrW1s8F39SruUIy8vycDAgLmgpqsLNCS2ZctENKsvXlyhpaT1+jVK56c0rvTbt2PL25b/+3cGWf2VVVf+/Dn9eu9ryE1vcClEKxIuNMogPgR6wNddIqtHPjuxAjyx4QRekIashqZs5DkwiEXySvIQBgMDQ2hcKJyNh/Hj50802W3g85AaKB6MRTN2lJvd2ooWCMh9O4isDPgaTDRlg4T7GjxmjuwYyEaCdCcnZEEGBgZ/8CkBVuDzAdCkRrlUCQHIjNeVK6BzaqhiIEmGQGbXIFsakDWWlYGqLh8fUDWGLK6vH3Ht3jVRUWdkwe5F3VxcVpFVkUxMoGN84VI6YTosLKaizqKcnJZwQRBjFfiwgIvg4gnEh+En584xMDB8AF9lBBMD0X/AOxw/374N4iDhx2dBs3+X9+1TUFZAEmY4sHZtfW/9lNbWPRdAi2LhUgnh4dfeXtPR0Hj8B2UCkJmZ+fZnkOHnnoAcAFfPwMCw+fhmBgaG6cunIwsyMDDkVoKuW7V2tEYWV1dW5ubhhswGQcRvHjkCGpMF57f/z57x8vFCZOEkcl9qxa4V5PXJRpquZ8/+H/zw4dmz/6uvXkVuWcNvnHIJDUUTZ+PgQBOBtNwZGBj8/MLR2JC4GySkS0hIWFi8lokJpM8UFhaP1qOCiI+SxIfAr5O/3rzZ9/7A+zt3NiLH8tXVV48cmbegccHSpSgVvIu5S1lZPCMjo4EBaMU5spbBz2ZjA40N1tSk7J2x9///s3Pr5n74cJC8vteoLkgIsISlgy7o1MdYZScDvgddQEMDLVmwgM8q5QUvW0CWkgUfN6CL0exygE8MVCMrZ1iwcuWClSsZGBhkWUCHn8Ll/v79q8oLWhNhJAO6iB0uzsDA4GsJWseVGZmJLMjAwDC5HXTP5NH9R5HF7z58+AcM4II376I0TD5/+gyXgjBePH0hyQQ9aPLWtVsMOnYQ8VESfwjYCwg8e/Y/VFsbUi3BFZeFhMQ8+79n9WoGUAsMLszwaxDv4kK4EpXFJyT06d278ilTZueVZ7W0oEqO8sgPATZz7LdeaYdqYzV0z8k9e06CZC5cGGI7UFVkVfTN5C+dfmRqquUo7cjAcD7OJ46FH3TmAMg/o5g8MNJ6DPTx78tLl5D7c8/+P5OTlobPeEHccOvoUbgIqNvx/5mKggKaCEScKqSFnQWaOcgJJiQWdNA+sgiRbOLb2qMqMUMAMu8FEYew4fvJll8ALZWCzIpBSORt0RCRliVL0KIJefgRTYoSLmTeC2IChA1prFBOQtrRoyR5IXB68emOjlyI3tOLT0N2v0GiaYSQo3NgNIloMRERNHP3gddGSktAe3igjRqKimhqToH3Xbk7gE7BQZOinFvSWILHkJbJoF6FigZo+yceZaNSdAsBNfB9qsjWNYG3QiNXUZ7R6LfOd6wCrVFGruqQTRhlD78QuHQJNOHy+zdoB97Nmw+HnwdHtI+6wfsrIUFgaw66Aw0+44U8HwZhx6bHQvpG/589ExQWhLPR+lKj4sghQHkbHNmEAZwDY2JmZmBgSG9ogPeBpu4Erc+G9HXgJPK8FzIb0osaJUkNAUjeHE6kroouvCe0Y8qOU6cWfTny5fPnw5B+0ihJ3RAY5j0w5HkvZDbWDAOa94JJvH8Luhj+7eu3MIFReliFAKQfk9eJOH8vv6uLgYEhrb4e7k8LNzc4e5QxGgIEQ0BOQk5LS2lT/6Zdu6bFescmJvq5W7qbmmpzc3Lz8ICOxSJowqgCkgFya3qUPVAh8O/pU7R+3tS2tmf/n/Hx8qKJI89jQVz74NQptJmzovT0Z/+fiYmIoIkj64Wzj989DmdD1EvJSsGTEUTk4S/0oQnIgCQnFyepLe5R9cghAJn3gohA2PD+H7zPR6TIiosX0VTKgpetQ6IS2TSICIRcffUqAwODaxjoxluICISEHJILYTMwMEDmvSBcCBu530wJm7rt8RFl2tu3+08vPm1qqg3xNWRPGCSO4CTkZEgICRdkYGD49OkwAwPDnDmI4z8gsnZ2oKVzaLEPkaIW6WqOfpcQCzP5B7gM8x4YtQKd1uZgppgs8IEU18CHYyHbngqe9mAF39YBEZeXQRx+CBHpBXcjnoI3QkBEIORm8D1h6bEo537JK8kryslBFEDILcdB90LpGSMOOkG2DqKmqK6IgYHh5H3wgjCI0Cg5oCGginEwDaRKiykCxRSy0yCDpRARJS0tBgaGDvB6YIgIhFwPPiktqQr9lmEJ1KQCUTxKDkgICAmBbl05dQr9kOgTJ0DXASYm+qG5ipubEy4COSg5ORl0XiJckIGB4eDB2QwMDA8egEoAZPGenkIGBgYHB9D1NMjirKwk1z2LmtEd/HArqH3clNmEbDIDA4OeKqIIQpMazlxRYWE076VERcEvxn0P3tkGmQn7/eiRlKzU/2fPiuqKICL/nz1be2Dt/2fPLjy/AOnfjJL4Q4CS1jemXrLnwCBnwM/cB7pOCRL7kLMHkXseE8EXNiKLkMFGnvdCZkN6UaMkqSEAiaxBQqLtLZMUkZw5s3px8+KfP09AXKgsoxwQ4ADp8UDI+5vvf/x4CMIeJekfAug9sLwq0FHB0nKgU/0hcTbgJDsb+k4RByvQTXeNJejL6g5v2MDAwPD8wgVZBZS9ZbN7ehKzE90dHFbtXXXzDuIIRxYWFsjBS5ABMVbwNkPIbWdiEmID7vFRB0AqIeRwCAZvW1x4AlqgwKXmHgYNiZg4gi76cQIfrr8G49B9G/CRu3Ato4xhHwLMzExofjQ21gRdXlOHcqCalpLW+fPLplZMPX9+GVy9nJzE7Q2309KCYrxi2NhYfe18ly1rPbPkzPr1vXA1DAwMClIKfHzcyCKjbHoCJrT2dUVrxf9nz04/PI0mjjYTQ0/ZHw8eoNm+f82aZ/+f1RUVoYnbmJk9+/+MmZn55P2TyC5kYGBonQLaz2/jZGNuZASZ14GQkMl8SIg//Anqybp4u0C4I4F8DD6XBNmnm3fvZmBgaAHfG4ksHpcHatk4Y0yWoM27kNGnQTZhxowVcBNmzFix/907tBZ91YwZz5791zE3RxMHTeM9+w8hu9euffbsv7CEBGYPj3KRCRMWwIMFmQ0XHK6MB+ChC2TfrQUf4tMKblIgi0MOkfLF2CXiKCTEwMBggXqxA03b7H/+nEYz/8yZJf/P/m9szEAWv7r6qoGBelYo6ERmuPjDh1u5ORE106b+TZGRHgK8oJPjkT07sGzIHWAQN0DY8HPuibypiwz1nz9/YzRmPHToHJreSZNWMBozpqe3ool7eeW9ePtCXz8CIg6/D0xSErRIip8f/bwIDg7Lxy8fox0lNW/jPFZWs5zOHG5ulBOX0FsokLAYJUdICMhKIdZrQLzsCz4YvgZ83j9EBEIumjSJgYFhL3ibEURklBxRIaCAcSgPpDdcDa7GkIMCMpC7+f59ZEEGBob9794xMDCcwDhmE03ZKHeQhwBk/gyy3APZqXl5EQwMDDNnoh65xMCwbRuo6Lh4EXRzGLL65893MTAwfPwIuiwbWfzHj+Oy4rJoh/km+Sf9/n1qSvmUr19RTlxi0rC1hVxNAr+TCWIWn5raxTMXWeXkZk8ATetBBBkYGFhkZXNicvjV1X2tQAc7wcWlDQ2NZY3VbWzU+VHOKDPx8JBjlQtKTpZnQxwpy8DAUNXeri2ivWj1agsl0AkRcHNOnT/vY+Hz4+fPvDhQkx8uzsDAMLEVdCTR1rXot6s8ewy61wpZ5SibniFgBl5RYi+A3jj1BK8uSQSP9yK7B3JhyhKMc4GvnQGdPw25MhFZ/Sh7GIeAXYqdsLCjgo+CsjLKogMBewFz8zgWUxY/P9DyAXgI8Njw5Od3S7pJTp6MUiCaxpoeOHA2ri7u69fvcMWgQmM5qNC4+XCInTuF7AU8bMgdYBAFEDbkzq3BRiLfBwZhQ9xMOcly4/Dh5wwMLy9des6IYtqnW7eeSzL8fvTouSQDA+IuBYY/jx8/l2SQfM6AJv70/Hms4md27MAq3lZZmTupUvI5g2teKLL5ZoaGW05s4XjOMGnRJGRxBgaG/Op8hucM3sHeaOKgZd9ILkTxxiiH9iFw6vdvhucMBz98QIuX7U+eMDxnmH/sGJp444IFDM8ZYoqL0cS1TEwYnjMgr5GjvdtHbRjgEDg05xCD0TmGc0ZgEuGYDwc/gEXQxb8c+cJgdG5i/HKwLEL96cWnGYzOOfClMnCjHAKeH5nPwHBOXV6dgQFFHKFzlDWUwegQ4lCOvVG3j4bAaAiM4BCAzHtBAgDChswzDTYSMu8FcRWEDXEz5eRoBUZ5GI6aMBoCoyEwGgKjITAAYLQCG4BAH7VyNARGQ2A0BCgPAci8F8QcCHuwzX5B3AOZ90JmQ9xMOTlagVEehqMmjIbAaAiMhsBoCAwAGK3ABiDQR60cDYHREBgNAcpDADLvBTEHwobMMw02EjLvBXEVhA1xM+XkaAVGeRiOmjAaAqMhMBoCoyEwAGC0AhuAQB+1cjQERkNgNAQoDwHIvBfEHAgbMs802MjROTBIHI2SoyEwGgKjITAaAqMhAAWjPTBoQIxSoyEwGgKjITC0QgAy7wVxM4QNmWcabCRk3gviKggb4mbKydEKjPIwHDVhNARGQ2A0BEZDYADAaAU2AIE+auVoCIyGwGgIUB4CkHkviDkQ9mCb/YK4Z3QODBJHo+RoCIyGwGgIjIbAaAhAwWgPDBoQo9RoCIyGwGgIDK0QgMx7IbsZMs8EIQePOHXnvZD9NVqBIYfGKHs0BEZDYDQERkNgyIDRCmzIRNWoQ0dDYDQERgFyCEDmvZBFIHNOEHLwiEPmwJDdQy32aAVGrZAcNWc0BEZDYDQERkMAMLqGAAAECT91zAeb4wAAAABJRU5ErkJggg==", "text/plain": [] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# patterns can be arbitrarily complicated\n", "ims.einops.reduce(\n", " '(b1 b2)=batch (h1 h2 h3)=height (w1 w2 w3)=width -> (h1 w1 h3) (b1 w2 h2 w3 b2) channel', \n", " 'mean', h2=2, w1=2, w3=2, h3=2, b2=2\n", ").values" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# subtract background in each image individually and normalize\n", "im2 = reduce(ims, 'batch channel', 'max') - ims\n", "im2 /= reduce(im2, 'batch channel', 'max')\n", "rearrange(im2, '(batch width) channel').values" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "##### no repeat yet ####\n", "# pixelate: first downscale by averaging, then upscale back using the same pattern\n", "averaged = reduce(ims, 'b (h h2) (w w2) c -> b h w c', 'mean', h2=6, w2=8)\n", "repeat(averaged, 'b h w c -> (h h2) (b w w2) c', h2=6, w2=8)" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rearrange(ims, '(batch height) channel').values" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# let's bring color dimension as part of horizontal axis\n", "# at the same time horizontal axis is downsampled by 2x\n", "reduce(ims, '(h h2)=height (w w2)=width -> (h w2) (batch w channel)', 'mean', h2=3, w2=3).values" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "## Summary\n", "\n", "- `rearrange` doesn't change number of elements and covers different numpy functions (like `transpose`, `reshape`, `stack`, `concatenate`, `squeeze` and `expand_dims`)\n", "- `reduce` combines same reordering syntax with reductions (`mean`, `min`, `max`, `sum`, `prod`, and any others)\n", "- `repeat` additionally covers repeating and tiling\n", "- composition and decomposition of axes are a corner stone, they can and should be used together" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Last updated: Thu, 19 Feb 2026\n", "\n", "Python implementation: CPython\n", "Python version : 3.13.9\n", "IPython version : 9.7.0\n", "\n", "einops : 0.8.2\n", "xarray_einstats: 0.10.0\n", "\n", "numpy : 2.3.5\n", "xarray : 2025.11.0\n", "xarray_einstats: 0.10.0\n", "\n", "Watermark: 2.6.0\n", "\n" ] } ], "source": [ "%load_ext watermark\n", "%watermark -n -u -v -iv -w -p einops,xarray_einstats" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.13.9" } }, "nbformat": 4, "nbformat_minor": 4 }