diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..77382ee2 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,12 @@ +{ + "python.testing.unittestArgs": [ + "-v", + "-s", + ".", + "-p", + "test_*.py" + ], + "python.testing.pytestEnabled": false, + "python.testing.nosetestsEnabled": false, + "python.testing.unittestEnabled": true +} \ No newline at end of file diff --git a/Exercise.02.ipynb b/Exercise.02.ipynb new file mode 100644 index 00000000..a88db68a --- /dev/null +++ b/Exercise.02.ipynb @@ -0,0 +1,32 @@ +{ + "metadata": { + "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 + }, + "orig_nbformat": 2 + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "source": [ + "## congruence class of a modulo\n", + "\n", + "Let a and n be integers with n > 0. The congruence class of a modulo n, denoted\n", + "$[a]n$, is the set of all integers that are congruent to a modulo n; i.e.,\n", + "$[a]n = {z ∈ Z | a − z = kn\\: for\\: some\\: k ∈ Z}$ ." + ], + "cell_type": "markdown", + "metadata": {} + } + ] +} \ No newline at end of file diff --git a/MML Python, Ch.02 Linear Algebra.ipynb b/MML Python, Ch.02 Linear Algebra.ipynb index 378a550a..928f7fd2 100644 --- a/MML Python, Ch.02 Linear Algebra.ipynb +++ b/MML Python, Ch.02 Linear Algebra.ipynb @@ -2,14 +2,18 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import numpy.linalg as npl\n", "import pandas as pd\n", - "from IPython.core.interactiveshell import InteractiveShell" + "from IPython.core.interactiveshell import InteractiveShell\n", + "import matplotlib.pyplot as plt\n", + "from matplotlib.pyplot import figure\n", + "from matplotlib.patches import Rectangle\n", + "from pylab import arrow" ] }, { @@ -96,43 +100,34 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 28, "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[[ 1 1 1 3]\n", - " [ 1 -1 2 2]\n", - " [ 2 0 3 5]]\n" - ] - }, - { - "name": "stderr", "output_type": "stream", + "name": "stdout", "text": [ - "/Users/vb/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:4: FutureWarning: `rcond` parameter will change to the default of machine precision times ``max(M, N)`` where M and N are the input matrix dimensions.\n", - "To use the future default and silence this warning we advise to pass `rcond=None`, to keep using the old, explicitly pass `rcond=-1`.\n", - " after removing the cwd from sys.path.\n" + "[[ 1 1 1 3]\n [ 1 -1 2 2]\n [ 2 0 3 5]]\n" ] }, { + "output_type": "execute_result", "data": { "text/plain": [ - "array([4.45961819e+00, 1.45320528e+00, 3.12145137e-16])" + "array([4.45961819e+00, 1.45320528e+00, 3.26391543e-16])" ] }, - "execution_count": 5, "metadata": {}, - "output_type": "execute_result" + "execution_count": 28 } ], "source": [ "mat = np.vstack([[1,1,1],[1,-1,2],[2,0,3]])\n", "sol = np.vstack([3,2,5])\n", "print(np.hstack([mat,sol]))\n", - "npl.lstsq(mat,sol)[3] #Solution of coefficients multiplied with any # in R. I.e. Infinity of R solutions." + "l=npl.lstsq(mat,sol, rcond=None)\n", + "assert l[0].astype(int).tolist()==[[1],[1],[1]]\n", + "l[3] #Solution of coefficients multiplied with any # in R. I.e. Infinity of R solutions." ] }, { @@ -145,12 +140,11 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ - "import matplotlib.pyplot as plt\n", - "from matplotlib.pyplot import figure\n", + "\n", "vals = np.linspace(-10,10,10000)" ] }, @@ -165,20 +159,19 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 57, "metadata": {}, "outputs": [ { + "output_type": "display_data", "data": { - "image/png": "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nEGzZs1IS1cKvk+fPtSuXZvatWszYcKE/ds//fRT6tevT+3atenWrRu7d+8GYMKECVSvXn1/Ve1rrrmGqlWrMnr0aAB27NjB5ZdfTvXq1WnYsCErVqw4KJ5DVfx+8MEHqVChAnXr1qVu3bpMmzYNgE2bNtG8eXNKlizJTTfddMDx9m0PZBJHtOkrsfIRi1P3smPHDtVLL7UJko8/HnY0LgjZmbr32muvafHixRVbUE0BLV68uL722ms5bj99AYTdu3drtWrVdOnSpbpjxw4944wzdMGCBQd9T6dOnfSVV15RVdVPPvlEu3btqqqq77//vrZq1Up37dqlW7du1TPPPFO3bNmie/bs0YoVK+rixYtVVbV///4HzC1OP9+5W7du+tZbb+1/7tlnn9VevXqpquobb7yhl1122UHxrFmzZn9RiN9++01r1KixP+4HHnhAhwwZctD3bN26VefMmaOjRo3SG2+88aDnmzZtql9//XXU9yw7U/f8DDEPJSfD+PFwxRXQty888kjYEbn81K9fP7Zt23bAtm3bttGvX79Ajv/VV19RvXp1qlWrRnJyMp07d2by5IOXNFq4cCEtW7YE7Gxq3z4LFy6kadOmJCUlUaJECerUqcMHH3zApk2bKFq0KCeffDIArVu35p0sjiebPHky3brZEkudOnXik08+saIJ6Ryq4ndmSpQowTnnnEOxYsWyFEdOeULMY0lJ8M9/wtVXw4ABcP/9EMPTx12Afv7552xtz67Vq1dz4ol/LWZZsWLFqImlTp06+xPapEmT+P3339m0aRN16tRh+vTpbNu2jY0bNzJz5kxWrVrFsccey65du/Zfgr799tusWrXqoOMeLqakpCSOOuooNm3alOn+GSt+A4wcOZIzzjiD7t278+uvv2ap3aB4QswHhQvDyy/DddfBoEHQp48nxYKgUqVK2dqeXRnPvABEDl4CfejQocyePZt69eoxe/ZsKlSoQFJSEm3atKF9+/b87W9/44orrqBx48YkJSUhIowfP57bb7+dBg0aUKpUKZKSslZcP6sxQfSK39dffz1Lly5l3rx5lC9fnjvvvDNL7QbFE2I+KVQInn8ebrgBhgyB22/3pJjoBg0aRPHixQ/YVrx4cQYNGhTI8StWrHjAmVtaWhonnHDCQfudcMIJTJw4kW+//XZ/20cddRRgl/Xz5s1jxowZqCo1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2rnTTo4KTFLcvt3mFz/xhK3e1bAhjBxp4woLzJuQ/zwhuphVuDC88IKdKT7+uJ0sDRuW4Plg61YYNcpe6Lp1NozmlVdsXGFCv/DY4AnRxbRChSw/JCfDk0/ameLTTyfg1eKWLXYG+OSTsGmTjUG6//6ErUwdqzwhupgnAiNG2DrnQ4daUhw9OkGS4ubN8NRTluW3bLGirPvK9bt85wnRxQURu52WnGz3EnfuhBdfjOMO1vXrYfhwePZZu0y+5BI7I6xXL+zICjRPiC5uiMDAgXam+MADNhJl7FjrgIkba9bAkCE2HWfHDht0ed99Ba4ydayKp18l5xCBAQPsTPHee+1M8fXX42BM8sqVMHiwndbu2WMDLe+7zwZWu5jhCdHFpb597UzxjjssKb75pn0dc5YssS7ysWMtm197LfTpU+ArU8cqT4gubt1+u50p3nST1T+dONGm/8WERYvsZue+09feveGee+DEE8OOzB2CJ0QX12680ZJir162JMHkyVYoIjTz59uNzrfftgILt98Od97planjhCdEF/f+/nc7Ceve3arlvPcelCyZz0GkploinDzZijzeey/cdptXpo4znhBdQrjmGjtTvPpqW+Z02rR8qon673/DI49Yldujj7ZJ17fcAqVL50PjLmieEF3CuPJKS4pXXGETPT780HJU4PaV6R840FbLOvZYeOwxuOEGr0wd5xJhrL9z+3XqZLfvvv3Wpv9uCrIMsapl2XPPhRYtDizT37evJ8ME4AnRJZyOHeHdd2HBAstb69fn8oCqMGWKVZxp2xZ+/tnmHS9f7mX6E4wnRJeQ2re3zpWffrI1l9auzcFB9u6Ft96y6XQdO9rp5j/+YWMLb7wxhsb4uKB4QnQJq3Vr61xZuRKaNbOyglmye7dVqK1dGy67DP780wZWL14M111nNypdQvKE6BJas2Z222/tWquktXLlIXbetQteeglq1bKpdYULw/jxdu199dVxNmna5YQnRJfwzj4bZsywK96mTeHJJ8dRpUoVChUqRJUqVRg3dqzVE6tRA3r0sM6RiRPhu++s+ELcltRx2SWxvPhdSkqKpqamhh2GSxBz50LTpuPYtq0nqtv2by8uwhhVujRqBP37Q7t2Xp06wYnIXFVNybjdrwFcgXHmmXDkkf34449tB2zfpkq/446jy7//7YmwgAvkkllE2orIYhFZ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\n", - "text/plain": [ - "
" - ] + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n 2020-10-22T01:57:43.131985\n image/svg+xml\n \n \n Matplotlib v3.3.0, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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7wduy8m+3ocfQStX2gjdeeepFipknbcVK6refLPqt98m7MhdUlKSbtu27aBtR+rDf/755w8atL344otVVTU9PV3PPffcQ/bftWuXVqlSRRcvXrx/0HbOnDmH7Ddt2jStWrWq/pqpQ339+vW6fft2VVVds2aNVqtW7aBB39q1a+uKFSty+Bsf3tq1qj172tujZk3VSZPCclgXQURw0LYdMA8od5h9SgAlM9z/HmiXk+N7wg+zZctUhwxRbd5cVcT+/NWrq/bvrzp5suphBhoTRZ8+fXT8+PH7f27WrJmWLVtWixYtqhUqVNCxY8eqquq9996rH330kaqqbtu2TS+66CI97bTT9KyzztJFixapqurkyZMPGpzN6JNPPtHq1atr1apV9eGHH96/PeNxW7dureXLl9d69eppvXr1tHPnzqqq+t1332nt2rW1bt26Wrt2bX3llVf2P3/lypV61llnhfEVMWPGqJ56qr1tbrpJdfPmsJ/ChUkkE/5CYBk23XIGMCy0/RRgTOh+VWBm6DYXuDunx/eEHwaLF6s++aRq48b25wbVWrVUBwxQnTXLk3wmU6dO1csuuywsx3ruuef2J+9oGTx48EEfAOG0YYPqtdfaW6hKFdUMn4suhhwu4XtphXj0888Hrnbd17dbv/6BWvKnnx5sfDHu1VdfpVevXhTMhyWYX3vtNXr27EmhQpG7iP6bb2xwd8ECG+YZNAhicKw7YR2utIIn/HigasVRRo60JD9vnm1v0sQSfNeuUKVKsDG6uLJtGzz4oE3dLF8eXngBLrww6KgceMKPT6pWFGVfS37hQihQwBYHSU21ujVJflmEi6ypU621P3OmXY7x3HO2+qQLjhdPixd798L331uCf/99mzNXqJDNjf/Xv6yJVb580FG6BNKgAUyebC39Bx6AL76wRckuu8yLscUib+HHut274euvDyT5lSttLnzbtlZmuHNnKF066CidY/58a+1PmmSXbLz0ktXTc9HlLfz8ZudOayqlpVkJg7VroVgx6NDBums6doTjjgs6SucOUqOGDei+8ALceSfUqmULm11zjfU2uuB5Cz9WbNsG48bZwOvHH9s6dCVLWgs+NdWaTMWLBx2lczmyZAn07Wv1eZo1sxo9PjksOryFH6s2b4YxY6wl/8knVqysVCkbcE1NhfPOgwyX0zuXX1SuDJ99Bq+/DjffbGvR338/3HabDTu5YHgLP9r++sta8Glp9j9i+3YbaN2X5Fu2hMKFg47SubBZuRKuu86GoOrXt2JsyclBRxW/vIUftLVrrS8+Lc1Wf9q1CypUgKuusiTfrJktBehcHDrppAOzh6+7zpZZvOMOW3WraNGgo0ss3sKPlBUrrORgWhp89ZUtBVilyoGrXRs29JEsl3DWr4dbb7XirGecYX37Z58ddFTx5XAtfM844fT77zYJuVkza8Ffdx0sXw79+8O0abBokU1YbtzYk71LSKVLw2uvWW/mtm12neA//2nDWS7yvEsnrxYuPPB9dfJk21a3ro1QpabaYt5+BYpzB2nbFubMgbvuguefh1GjYPhw2+4ix5uZR2PePCskUq8eVK9uLXiwSccLFth15gMG2ERkT/bOZenYY+HZZ23uftGicP75cPnl1u3jIsNb+Dmhagt97mvJ//yzJfKmTWHwYCtOVqlS0FE6ly+dfbb993roIRg40FbWHDrUviC78PJB2+zs3Qs//XSgpMHixdbv3rLlgeJkJ58cTGzOxakZM6zk8vTp9t/s+edtlo/LOZ+WmVN79sB33x1oyS9fbnPi27SxzsYuXWxBb+dcRCQnw48/2hfn++6zJZUHD4Zevbx3NBzy1IcvIveLyHIRmRG6dchmv3Yi8ouILBSR/nk5Z9jt2mXXf199ta3e3KKFVX1KSYH//AdWr7arYa+4wpO9c1FQuLDN058504bBLr/c+veXLAk6svwvHC38p1X1qeweFJGCwFDgPCAdmCwio1R1XhjOfXR27LAkn5Zm0wPWr4cSJawoWWqqFSk79tjAwnPOWe2dr76CYcPsA6B2bXjsMZvt7LOaj040XraGwEJVXayqO4F3gC5ROO/Btm61vvgePayUQefOdmFUhw7275o18O67cMklnuydixEFCsC119oUzn1z9s85x0oxu9wLR8K/XkRmicirIlIqi8crYAud75Me2pYlEekrIlNEZMqaNWvyFtnGjfD221Y3vlw5a71/9pktzTNmjHXXvPGGLRxSrFjezuWci5hKley/7H/+Y5PkkpPh0UetR9bl3BETvoh8LiJzsrh1AV4ETgOSgRXAoLwGpKrDVTVFVVPKlSuX+wPs2GEl+i64wFry//iHDcT26mU15leutOu527e3hUScc/mCCPTsaZfBXHgh3H23VSiZNi3oyPKP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\n" }, "metadata": { "needs_background": "light" - }, - "output_type": "display_data" + } } ], "source": [ @@ -192,7 +185,17 @@ "plt.plot(vals,y1,c=\"red\")\n", "idx = np.argwhere(np.diff(np.sign(y0 - y1))).flatten() # finds the intersection between two graphs\n", "plt.plot(vals[idx],y0[idx],'ko')\n", - "plt.legend([\"4$x_1$+4$x_2$ = 5\",\"2$x_1$-4$x_2$ = 1\",str(np.round(vals[idx],3)) + str(np.round(y0[idx],3))]);" + "txt=(np.ceil(vals[idx][0]),np.round(y0[idx],2)[0])\n", + "plt.annotate(\n", + " txt,\n", + " xy=(vals[idx][0],y0[idx][0]),\n", + " xytext=(0, -30), # 30 points vertical offset\n", + " textcoords=\"offset points\",\n", + " ha=\"center\",\n", + " # va=\"bottom\",\n", + " )\n", + "\n", + "plt.legend([\"4$x_1$+4$x_2$ = 5\",\"2$x_1$-4$x_2$ = 1\"]);" ] }, { @@ -275,6 +278,45 @@ "C" ] }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n 2020-10-22T22:00:26.839284\n image/svg+xml\n \n \n Matplotlib v3.3.0, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "\n", + "someX, someY = 0.4, 0.7\n", + "fig,ax = plt.subplots()\n", + "currentAxis = plt.gca()\n", + "for i in range(4):\n", + " currentAxis.add_patch(Rectangle((0, someY - 0.1*i), 0.1, 0.1,\n", + " alpha=1, edgecolor='black',facecolor='#FFDD8E'))\n", + " currentAxis.add_patch(Rectangle((0.1, someY - 0.1*i), 0.1, 0.1,\n", + " alpha=1, edgecolor='black',facecolor='#9F8EFF'))\n", + " currentAxis.add_patch(Rectangle((0.8, someY - 0.1*i), 0.1, 0.1,\n", + " alpha=1, edgecolor='black',facecolor='#FFDD8E'))\n", + " currentAxis.add_patch(Rectangle((0.8, someY-.4 - 0.1*i), 0.1, 0.1,\n", + " alpha=1, edgecolor='black',facecolor='#9F8EFF'))\n", + "arrow( .22, .6, .5, 0, length_includes_head = True, head_width = .05,color='black')\n", + "plt.annotate('reshape',xy=(0.4, 0.62),xytext=(0, 10), textcoords=\"offset points\",ha=\"center\",)\n", + "plt.annotate('A ∈ $R^{4×2}$',xy=(0, 0.82),xytext=(0, 10), textcoords=\"offset points\",ha=\"left\",)\n", + "plt.annotate('a ∈ $R^8$',xy=(0.8, 0.82),xytext=(0, 10), textcoords=\"offset points\",ha=\"left\",)\n", + "ax.set_aspect(\"equal\")\n", + "ax.axison = False" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -364,6 +406,45 @@ "np.dot(B,A)" ] }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\n\n\n\n \n \n \n \n 2020-10-22T23:06:58.054826\n image/svg+xml\n \n \n Matplotlib v3.3.0, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOcAAADnCAYAAADl9EEgAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy86wFpkAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFhElEQVR4nO3cvW4bRxiG0Vk74AwBp03sO3BjwK2L3FUuL10KtwbS5A5CpTbAWQHipEiQxNGPJWOWeuWcA2wjEh+Xy31AQsW3jDEKkOfZY58AcDNxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQihxQqoxxq1Hre1QShmzj1rb1UZzD3e9n38fre2mv7fWdpu8rw3n3vt6bXHUVje6v+pG99dGc1u98XNYxhjlNsuyjF9/O936+Jd6/epZ2WruGGO5z3OXZRnj4/upr7+8eFdmz9x87j2v1xaWZRkffv9l+ty3370pT23uTZ+Dn7UQSpwQSpwQSpwQSpwQSpwQSpwQSpwQSpwQSpwQSpwQSpwQSpwQSpwQSpwQSpwQSpwQSpwQSpwQSpwQ6s4FX63tr9a1Tw+41lbWtc8eW2ptp96Pz+/z3P2+XvV+OfW9tbYrvV/OHLn13NPxuN7rem2htXa1rusG91ct67rOHrvl3FPv/drnYPveRLbvPfD1bd/7e67te/CEfPPYJ8DTsyzLz6WUb2946Mcxxk/nPp+vlTh5sDHGD499Dv8H4uTBfHOehzh5MN+c5+EfQhBKnBBKnBBKnBBKnBBKnBBKnBBKnBBKnBBKnBBKnBBKnBBKnBBKnBDq/7zg69D75fczX7+13Wn20rCN514cj+vL2XPv//oWfP0114Ivsljw9c9cC77gCREnhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhPrc9r3DuvapG+pK+XNL3kZb/S56Pz7aNjkepu3bYe3rBvdXPW201W+bua1e9GO/dt/eGSfwePyshVDihFDihFDihFDihFDihFDihFDihFDihFDihFDihFDihFDihFDihFDihFDihFDihFDihFDihFDihFRjjFuP1naHUsqYfbS2u3oqc1vbHf57XWptm1yXWtv086+1XTv/lKO2utF1rJvcX7XVs17LO7fvLcsyxsf3tz7+pZYX78pTmbu8eFfGGMsnf1uW8etvp6mvU0opr189K7Pnvn717Nr5p1iWZXz4/Zfpc99+96ZsNfec19LPWgglTgglTgglTgglTgglTgglTgglTgglTgglTgglTgglTgglTgglTgglTgglTgglTgglTgglTgj1zWOfAE/Tsiw/l1K+veGhH8cYP537fL5Gdy742u/rVe+X079dW9uV3i9nj91kbmu70/G4Pv/0b/urde3Tr0utraxrnz3z1Pvx+eefeX6ttat1XTe4jrWs6zp7bKm1nnrvZ7uWtu/dZ6bte9fM+Oa0fe9uftbyRcYYPzz2OXzt/EMIQokTQokTQokTQokTQokTQokTQokTQokTQokTQokTQokTQokTQokTQokTQokTQokTQokTQn1uwdeh98vvZ79oa7vTRovDps9tbXdxPK4vP/2bBV8ztH07rH2dfn/VWk+bLA5r9aIf+8vPP3OOO+PkZhZ8cQ5+1kIocUIocUIocUIocUIocUIocUIocUIocUIocUIocUIocUIocUIocUIocUIocUIocUIocUIocUIocUIoC76+QGv7w7r2DbbGtdPsrX61tovej2fbGMc84oRQftZCKHFCKHFCKHFCKHFCKHFCKHFCKHFCKHFCKHFCKHFCKHFCKHFCKHFCKHFCKHFCKHFCKHFCKHFCKHFCKHFCKHFCKHFCKHFCKHFCKHFCKHFCqD8A8qSIWq4rySYAAAAASUVORK5CYII=\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "someX, someY = 0.4, 0.7\n", + "fig,ax = plt.subplots()\n", + "currentAxis = plt.gca()\n", + "for i in range(3):\n", + " for i1 in range(2):\n", + " currentAxis.add_patch(Rectangle((.1*i1, someY - 0.1*i), 0.1, 0.1,alpha=1, edgecolor='black',facecolor='#D8E7FE'))\n", + " currentAxis.add_patch(Rectangle((.32+.1*i1, someY-.4 - 0.1*i), 0.1, 0.1,alpha=1, edgecolor='black',facecolor='#D8E7FE'))\n", + " i0=3 \n", + " while i0:\n", + " if i<2:\n", + " currentAxis.add_patch(Rectangle((0.15+0.1*i0, someY - 0.1*i), 0.1, 0.1,alpha=1,edgecolor='black',facecolor='#FFF4C7',clip_on=False))\n", + " currentAxis.add_patch(Rectangle((0.1*(i0-1), someY-.4 - 0.1*i), 0.1, 0.1,alpha=1,edgecolor='black',facecolor='#FFF4C7',clip_on=False))\n", + " i0>1 and currentAxis.add_patch(Rectangle((0.5+0.1*i0, someY-.4 - 0.1*i), 0.1, 0.1,alpha=1,edgecolor='black',facecolor='#D0EAD3',clip_on=False))\n", + " currentAxis.add_patch(Rectangle((0.6+0.1*i0, someY - 0.1*i), 0.1, 0.1,alpha=1,edgecolor='black',facecolor='#D0EAD3',clip_on=False))\n", + " i0-=1\n", + "plt.annotate('=',xy=(0.63, 0.62),xytext=(0, 10), textcoords=\"offset points\",ha=\"center\",)\n", + "plt.annotate('=',xy=(0.63, 0.28), textcoords=\"offset points\",ha=\"center\",)\n", + "ax.set_aspect(\"equal\")\n", + "ax.axison = False" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -372,6 +453,13 @@ "*Even if both matrix multiplciations $AB$ and $BA$ are defined, the dimensions of the results can be different.*" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "code", "execution_count": 14, @@ -2905,9 +2993,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.4" + "version": "3.8.1-final" } }, "nbformat": 4, "nbformat_minor": 2 -} +} \ No newline at end of file