summaryrefslogtreecommitdiff
path: root/notebooks/plot_OT_1D_smooth.ipynb
diff options
context:
space:
mode:
Diffstat (limited to 'notebooks/plot_OT_1D_smooth.ipynb')
-rw-r--r--notebooks/plot_OT_1D_smooth.ipynb335
1 files changed, 0 insertions, 335 deletions
diff --git a/notebooks/plot_OT_1D_smooth.ipynb b/notebooks/plot_OT_1D_smooth.ipynb
deleted file mode 100644
index 603a18c..0000000
--- a/notebooks/plot_OT_1D_smooth.ipynb
+++ /dev/null
@@ -1,335 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "%matplotlib inline"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "\n",
- "# 1D smooth optimal transport\n",
- "\n",
- "\n",
- "This example illustrates the computation of EMD, Sinkhorn and smooth OT plans\n",
- "and their visualization.\n",
- "\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "# Author: Remi Flamary <remi.flamary@unice.fr>\n",
- "#\n",
- "# License: MIT License\n",
- "\n",
- "import numpy as np\n",
- "import matplotlib.pylab as pl\n",
- "import ot\n",
- "import ot.plot\n",
- "from ot.datasets import make_1D_gauss as gauss"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Generate data\n",
- "-------------\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "n = 100 # nb bins\n",
- "\n",
- "# bin positions\n",
- "x = np.arange(n, dtype=np.float64)\n",
- "\n",
- "# Gaussian distributions\n",
- "a = gauss(n, m=20, s=5) # m= mean, s= std\n",
- "b = gauss(n, m=60, s=10)\n",
- "\n",
- "# loss matrix\n",
- "M = ot.dist(x.reshape((n, 1)), x.reshape((n, 1)))\n",
- "M /= M.max()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Plot distributions and loss matrix\n",
- "----------------------------------\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "<matplotlib.legend.Legend at 0x7f0756b1b6d8>"
- ]
- },
- "execution_count": 4,
- "metadata": {},
- "output_type": "execute_result"
- },
- {
- "data": {
- "image/png": "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yDjudZYtW8aIESMAGDVqVJHHOvvss7nvvvt44IEH+Oabb/KPW1i3bt2K7SLbrVs32rRpQ1RUFCNGjODTTz8t9T0WpbTP65JLLgEgKSmJ7du3l+sYBVkJJMw99RQ0agQXXVT8Pk2aaFXWCy/A/feDr5bAmCKVVFKoTFFRUfTt25e+ffsSHx/Pc889R5cuXYrdPzo6Or+qp3D30xNOOKHEYznniIuL47PPPis1rtJ6J1111VV0796dd999lwsuuIB//etftGlz3GiFEmMqfAz/7YL3B2OQp7+KMCoqipycnAq/npVAwtiePdrjatSo0pPC9dfr/vML958zJgRs3LiRTZs25d9OS0vjjDPOoEOHDmzfvp3NmzcD8MILL3DuuecCWqefmpoKwOuvv17saw8YMIB//etf+T+YP/30Ex06dGDXrl35CSQ7O5t169Yd99xevXoxZ84cAF566aUiX3/r1q20adOGm2++mWHDhvHll19Sv359Dhw4EPD7X7lyJdu2bSMvL4+5c+fSu3dvAE455RQ2bNhAXl4eb775Zv7+xb1+SZ9XZbAEEsZefBGOHi25+sqvf39o0cKqsUxoOnjwIGPGjCE2NpaEhATWr1/PtGnTqFOnDs888wyXX3458fHx1KhRg/HjxwNw1113MXHiRJKTk4mKiir2ta+//npatmxJQkICnTt35uWXX6ZWrVrMmzeP2267jc6dO5OYmMjy5cuPe+6jjz7KzJkziY+PZ+fOwsPf1KuvvkqnTp1ITExk7dq1jB49msaNG9OrVy86derEpEmTSn3/Z511FhMmTKBjx460bt2aiy++GID777+fCy+8kJ49e3Laaafl7z98+HAefPBBunTpwpYtW/LvL+nzqgyivbRCR3JysrP1QErnHCQkQEwMrFwZ2HPuugvuvhu2b4eWLSs1PBNmNmzYQMeOHb0Ow3isqO+BiKQ6544bAA5WAglba9fqdu21gT/nmms08bzySuXFZYypPiyBhKlPPtHLIUMCf06rVjomZNGiSgnJGFPNWAIJU4sWwZlnartGWfTrB59+CtnZlROXMab6sAQShvLyYMkS8A28LZO+feHnn8GamYwxFWUJJAylp8PeveVLIP4efVaNZYypKEsgYWjxYr0sTwJp0gTi4395DWOMKS9LIGFo0SJo2xaaNy/f8/v2hWXLdAyJMaFgz549JCYm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\n",
- "text/plain": [
- "<Figure size 460.8x216 with 1 Axes>"
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "pl.figure(1, figsize=(6.4, 3))\n",
- "pl.plot(x, a, 'b', label='Source distribution')\n",
- "pl.plot(x, b, 'r', label='Target distribution')\n",
- "pl.legend()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWAAAAFgCAYAAACFYaNMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO2deZhcVZmH36+6sydsIUJYQsIORsPSIrhgBFzABXRQNCObYhgUFRBZXEbAZVRUQEF2AXGBAREC4ygCMqAgmCCbIKAsEQwQVpElS/eZP75bXVXdXem6dbdafu/z3KdTp86990sl/fXb557zHQshIIQQIn9KRQcghBDdihKwEEIUhBKwEEIUhBKwEEIUhBKwEEIUhBKwEEIUhBKwEF2Cmb3ZzO4rOg5RQQlYdD1mNs/MFprZv8xsiZn9r5m9KeE1Hzaz3dKKsYH7BTPbdFV9Qgg3hhC2aPL6D5vZcjNbe0j7n6J7z2zmut2OErDoaszsCOBk4OvAOsAM4AfAnkXGlTZm1pvCZR4CPlx1zdcAE1O4bteiBCy6FjNbHTgB+GQI4bIQwoshhBUhhCtDCJ+L+owzs5PN7B/RcbKZjYveW9vMrjKz58zsGTO70cxKZnYhnsivjKz6qBHuPdfMHjWzo8zsyci89zKzPczs/uh6n6/qv4OZ3Rzda4mZnWpmY6P3boi63RHdb5+q6x9tZo8D55XbonM2ie6xXfR6PTNbamZzV/GRXQjsV/V6f+BHTX34AlACFt3NTsB44Ber6PMFYEdgG2AOsAPwxei9zwKPAtNwe/48EEII+wKLgfeEECaHEL5V59rrRvdfH/hP4GzgI8D2wJuBL5nZrKhvP3A4sHYU967AJ/Ab7hz1mRPd7+Kq668FbATMr75xCOFvwNHAj81sInAecEEI4fpVfBZ/AFYzs63MrAf4EPDjVfQXo6AELLqZqcBTIYSVq+jz78AJIYQnQwhLgeOBfaP3VgDTgY0ic74xxCuusgL4WghhBXARnlxPCSG8EEL4M3APnvQJISwKIfwhhLAyhPAwcCbwllGuPwB8OYSwLITw8tA3QwhnA38Fbon+Hl9oIOayBb8NuBd4rIFzRB2UgEU38zSw9ijjo+sBj1S9fiRqAzgRT2BXm9mDZnZM3PuHEPqjP5cT5BNV778MTAYws82j4Y7Hzeyf+Jh1zQOxEVgaQnhllD5nA7OB74cQljUQ84XAPOAANPyQGCVg0c3cDCwD9lpFn3/gv8KXmRG1EZnqZ0MIGwPvBY4ws12jfmmXGTwd+AuwWQhhNXy4w0Y5Z5UxmNlk/AHkucBxZrbWaEGEEB7BH8btAVzWQNxiFSgBi64lhPA8PvZ6WvQAbKKZjTGz3c2sPG77M+CLZjYtmoL1n0Tjnmb2bjPb1MwMeB4fpx2IznsC2DjFcKcA/wT+ZWZbAocMeb+Z+50CLAwhHAT8D3BGg+d9DNglhPBizPuJISgBi64mhPAd4Aj8wdpS4O/AocDlUZevAguBO4G7gNuiNoDNgGuAf+E2/YMQwm+j9/4LT9zPmdmRKYR6JP6r/wv4sMHFQ94/Drggut8HR7uYme0JvJNKIj8C2M7M/n20c0MIfwshLIwRu6iDqSC7EEIUgwxYCCEKQglYCCEKQglYCCEKQglYCCEKIo0CHaIDWHvttcPMmTOLDkOItmLRokVPhRCmNXu+ErAAYObMmSxcqJlFQsTBzB4ZvVd9NAQhhBAFoQQsRLfx4oug+f8tgRKwEN3AAw/AfvvBJpvA5MkwdSq8/e1w2WVKxgWiBCxEJ7NyJRx3HMyeDZdfDttuCyecAHvvDQ89BP/2b/Cud8HixUVH2pXoIZwQncrKlbDvvnDRRfDhD8N3vgPTp9e+f+qp8KUvwZvfDNdfD7Nm1b2cSB8ZsBCdSH+/DzlcdBF84xvw05/WJl+A3l447DC44QZ44QWYO9etWOSGErAQncjxx8PPfubJ9+ijV913223h2ms9Ce+5J7w8bPMMkRFKwEJ0GtddB1/9Khx44OjJt8y227ol33UXHHFEtvGJQZSAhegkli6Fj3wENt8cvv/9eOe+853wuc/BGWfApZdmE5+oQQlYiE7iqKPgqafg4oth0qT453/1q9DXB4ceCs8/n358ogYlYCE6hZtvhvPPh8MPhzlzmrvG2LFw+unw5JM+jiwyRQlYiE6gv9+tdb31fFpZEvr6YP58+N734O6704lPjIgSsBCdwPnnw223+VzfyZOTX+9rX4PVV3ebFpmhBCxEu7Nsma9u22EH2GefdK45dSp84QtwzTXwf/+XzjXFMJSAhWh3zj3XlxJ/5Stglt51DznEF2986UuqF5ERSsBCtDMvv+zDBW96E7ztbelee8IE+Pzn4cYb3YRF6igBC9HOnHMO/OMf6dtvmY9/HDbcEL78ZVlwBigBC9GurFgB3/622+/cudncY9w4X013883w+99nc48uRglYiHblkkt87Peoo7K9z4EH+kO5b30r2/t0IUrAQrQjIXhC3Gorr+ebJRMn+hzjK6+Ee+/N9l5dhhKwEO3Ib34Dd9zhtRtKOXwbf/KT/lDuxBOzv1cXoQQsRDty0kmw7rowb14+95s2zYcifvITX6YsUkEJWIh24/774Ve/8nm648bld99PfQqWL4ezzsrvnh2OErAQ7capp8KYMV6vIU+23NI38jz9dJ+BIRKjBCxEO/HCC173YZ99fAgibz79aZ93fNll+d+7A1ECFqKduOACT8Kf+lQx9999d9/a/nvfK+b+HYYSsBDtQgjwgx/A617nhXeKoFSCT3wCbrrJZ2GIRCgBC9Eu3HCDz8M95JBi4zjgABg/3rcuEolQAhaiXTjjDFhjjfRKTjbLWmt5DD/+sQ+HiKZRAhaiHXjiCfj5z90+J04sOhq38H/9y+cFi6ZRAhaiHfjhD33q18EHFx2Js8MOsM02PiVNVdKaRglYiFZnYADOPtsrnm25ZdHROGbwH/8Bd94Jt9xSdDRtixKwEK3ONdfAQw+1jv2WmTcPJk3SyrgEKAEL0eqcdRasvTa8731FR1LLlCmehC+6CJ57ruho2hIlYCFamccfhyuu8IdvedZ9aJSDD/ZtkfQwrimUgIVoZc47D1au9K2BWpHtt4fttoMzz9TDuCZQAhaiVal++Lb55kVHU5/58+Guu/QwrgmUgIVoVVr14dtQ9DCuaZSAhWhVzjyzNR++DaX6YdzzzxcdTVuhBCxEK7JkCSxY0LoP34Yyf74exjWBErAQrUirP3wbSl+fHsY1gRKwEK1Gf78/fHvrW1v74dtQ5s/3lXF/+EPRkbQNSsBCtBpXXw0PP+xLfduJefNg8mS3YNEQSsBCtBpnnAHrrAN77VV0JPGYMgX23RcuvhieeaboaNoCJWAhWonFi+Gqq+BjH4OxY4uOJj4HHwyvvOJbJ4lRUQIWopU45xx/iNUuD9+GMmcO7LSTW7wexo2KErAQrcLy5f7wbffdYebMoqNpnkMOgfvvh2uvLTqSlkcJWIhW4bLLvPjOoYcWHUkyPvABX0By6qlFR9LyKAEL0Sqceipsuim84x1FR5KM8eN9StqVV/psDlEXJWAhWoE//Ql+/3v45Cd96/d2pzyFTjsnr5IO+JcWogM49VTfbPOAA4qOJB023NCn0Z1zji9RFiOiBCxE0Sxd6jUU9t3Xt53vFD71KXj6adWHWAVKwEIUzemnw7JlcNhhRUeSLm95i++cfNJJmpJWByVgIYrklVfgtNPgXe9qnR2P08IMjjgC7rkHfv3roqNpSZSAhSiSn/wEnnzSE1Unss8+sN568N3vFh1JS6IELERRDAx4YtpmG6981omMHetjwb/5DdxxR9HRtBxKwEIUxVVX+a/nn/2s/7reqRx8sFdJ++Y3i46k5VACFqIIQoCvfQ1mzYIPfajoaLJlzTV9efLFF8Nf/1p0NC2FErAQRXDddXDrrXD00dDbW3Q02XP44TBmDHzrW0VH0lIoAQtRBF//OkyfDvvvX3Qk+TB9Onz0o3D++fDoo0VH0zIoAQuRNzfc4AZ85JFeN6FbOOooH3r5r/8qOpKWQQlYiDwJAb74RTfCQw4pOpp8mTnTC82ffbaK9EQoAQuRJ1dfDTfe6El4woSio8mfL37Riw0df3zRkbQESsBC5EXZfjfaCA46qOhoimGDDeATn4Af/Qj+8peioykcJWAh8uKii2DhQjjuuPbc7y0tjj0WJk3yGSBdjhKwEHnw0kuecLbdFvbbr+hoimXaNPjCF2DBArjmmqKjKRQlYCHy4Nvfhr//HU4+uTMKriflM5/xRSiHHw4rVxYdTWHof4IQWbN4sS/D3Xtv2HnnoqNpDcaPhxNPhLvvhjPPLDqawlACFiJLQqhMNzvxxGJjaTXe/37YbTcfE37ssaKjKQQlYCGy5OKL4Ze/9LoP7bzVfBaY+Z5xK1f6zIguLNquBCxEVjz1FHz60/C613lJRjGcTTbxOcELFsAllxQdTe4oAQuRBSF47YPnn/eNKXt6io6odTn8cOjr852U//73oqPJFSVgIbLgtNPgyiu9+tdrX1t0NK1Nby/89KewfDl85CPQ3190RLmhBCxE2tx2mxfa2WMPH4IQo7PZZv5D64Yb4IQTio4mN5SAhUiTJUtgzz3hVa+C887r7J0u0ma//bw85wknwKWXFh1NLnRBJWghcuKVV+B974NnnoHf/96TsGic8qyI++/3ZLzxxrDddkVHlSkyYCHSYPlyX2hxyy1w4YW+0aaIz/jx8Itf+HLl3Xfv+II9SsBCJGXlSpg3D/7nf+D0032BgWieddbxsp1msOuu8Le/FR1RZigBC5GEF1/0hPvzn8NJJ/lUKpGcLbbwQj3LlsGb3wy33150RJmgBCxEszzxBOyyi5vvaafBYYcVHVFnMXs2XH+9z6HeeWf49a+Ljih1lICFaIZrroE5c+Cuu3zM8hOfKDqizmT2bLj5Zq+ctvvu8J//2VHV05SAhYjDCy/AEUfA298Oa63lD93e+96io+psNtjAZ5Xstx985Sswdy78+c9FR5UKSsBCNEJ/P/z4x7DVVj7We/DB8Mc/wmteU3Rk3cHkyb6l/YUXwr33+iyTI4/0ehttjBKwEKvipZd8QcWrXw377utze2++2Wc7TJpUdHTdx0c+Avfd5/8W3/2uD00ccww88kjRkTWFErAQQ1m5En77W/jkJ2H99b2oztixvjpr4ULYcceiI+xu1l4bfvhDL+b+rnd5neWNN/Y//+hH8NxzRUfYMBa6sAanGE5fX19YuHBh0WEUwwsv+DSnP/7RaxFcf71XMZs40ZcV/8d/+FQoLStuTRYvhrPPhgsu8GpqPT1eAvStb4XXv94rra23Xib/fma2KITQ1/T5SsACOiwB9/fDyy/78MELL/jx7LO+RPjJJ3362OLF/mvr/ffDo49Wzp01yyf/v/OdfmiYoX0IwX+ILlgA110Ht95aqay2+uo+t3jWLJgxA6ZP9wUfU6fCmmv6+1Om+L/3xIleoa2BhK0ELFKhb+LEsHDTTfO74dD/d+XX1e0hDD8GBvzo768cK1f6sWKFT9wfbZqSmX8DzpjhVbi23NJLRvb1wbrrpvv3FMXx0ktwxx2waJEvab7vPv+hu3ix/z9ZFWYwbpwPPY0Z4wm5p6dybLwxXHtt4gSsYjzCGTcO8kzAMNwwyq+r281qj56eytfqY8wYP8aP97/LhAl+TJnix5pr+rSxV73K6wz06r9+xzNxIuy0kx/VhODjxE88AU8/7b8Z/fOf/pvSSy/5b0+vvOJJevly/8G+cmXlB/7AQGqFlvS/UDibbAKXXVZ0FEJkj5n/QF5zzaIj0SwIIYQoCiVgIYQoCD2EEwCY2QvAfUXHMQprA62+9KkdYoT2iLMdYtwihDCl2ZM1BizK3JfkaW4emNlCxZgO7RBnu8SY5HwNQQghREEoAQshREEoAYsyZxUdQAMoxvRohzg7PkY9hBNCiIKQAQshREEoAQshREEoAXc5ZvZOM7vPzP5qZscUHU8ZM9vQzH5rZveY2Z/N7DNR+1pm9hszeyD6Wvh6UjPrMbM/mdlV0etZZnZL9JlebGZjC45vDTO71Mz+Ymb3mtlOrfY5mtnh0b/z3Wb2MzMb3wqfo5n90MyeNLO7q9pG/OzM+V4U751mtt1o11cC7mLMrAc4Ddgd2Br4sJltXWxUg6wEPhtC2BrYEfhkFNsxwLUhhM2Aa6PXRfMZ4N6q198ETgohbAo8C3yskKgqnAL8KoSwJTAHj7VlPkczWx/4NNAXQpgN9AAfojU+x/OBdw5pq/fZ7Q5sFh3zgdNHvXoIQUeXHsBOwK+rXh8LHFt0XHVivQJ4G75ab3rUNh1fQFJkXBtE34S7AFcBhq/e6h3pMy4gvtWBh4geuFe1t8znCKwP/B1YC18cdhXwjlb5HIGZwN2jfXbAmcCHR+pX75ABdzfl//hlHo3aWgozmwlsC9wCrBNCWBK99TiwTkFhlTkZOAoYiF5PBZ4LIZSLEhf9mc4ClgLnRcMk55jZJFrocwwhPAZ8G1gMLAGeBxbRWp9jNfU+u9jfT0rAoqUxs8nAz4HDQgj/rH4vuGYUNo/SzN4NPBlCWFRUDA3QC2wHnB5C2BZ4kSHDDS3wOa4J7In/sFgPmMTwX/tbkqSfnRJwd/MYsGHV6w2itpbAzMbgyfcnIYRyseInzGx69P504Mmi4gPeCLzXzB4GLsKHIU4B1jCzcp2Voj/TR4FHQwi3RK8vxRNyK32OuwEPhRCWhhBWAJfhn20rfY7V1PvsYn8/KQF3N38ENoueNo/FH3wsKDgmwJ8oA+cC94YQvlv11gJg/+jP++Njw4UQQjg2hLBBCGEm/tldF0L4d+C3wN5Rt6JjfBz4u5ltETXtCtxDC32O+NDDjmY2Mfp3L8fYMp/jEOp9dguA/aLZEDsCz1cNVYxMUQPvOlrjAPYA7gf+Bnyh6Hiq4noT/qvdncDt0bEHPsZ6LfAAcA2wVtGxRvHOBa6K/rwxcCvwV+ASYFzBsW0DLIw+y8uBNVvtcwSOB/4C3A1cCIxrhc8R+Bk+Lr0C/23iY/U+O/wB7GnR99Jd+KyOVV5fS5GFEKIgEg1BtOokfiGEaAeaNuBoEv/9+NzMR/HxxA+HEO5JLzwhhOhckuyIsQPw1xDCgwBmdhE+laRuAl577bXDzJkzE9xSJGXpUnj2Wdh889r2NW+bFf9iQ7eVB7DSkJdDt56P3h/SbuVrlUq1145eV96v3rJ+yLVKPTWvB8/p6am95mB7+Xz/GkpDYuipjSWUqv5uPUPaBl9HX6NzQ4+N/H70daB36Hnlr9SeD4ToVgND+gx9Xe5Xeb/2WgO9te8P+1r11xzWtzfUuXaofT/6StRO9Nqi19br06Z7eqKvveVp1DBmjE/9HdPTD8DYXv86rqf81d+f0LsCgPHR10k9y729J3rduwyAiSVvn9LzCgCTo6+rlV4evOfE0rKozd+bMvjVrzXFQvTaP5DJpfEAlNZ9YIRvgsZJkoBHmnT8+qGdzGw+viyPGTNmsHBhoh08REI+9zk47TQY+s/wttIH4l+s+renclIL0TdSlBzDQPQNVxry/kBt8iz/JmYD0fvlxBa9Lic6q3yfQmnIteiPvvZE50Sh9Eft5URcpn+g5qVFI3KB2vZyIh6MDSivYbKob+V1mXLf8jUZ8n70brTMYGDYd2K5ZxjWVoraBuq8Hkr50xmI+pWifgMj9q4TX524Ktce+d5Df7+uvPYz+xmJlHdKS+NyUSJmoLwuJEriSS+b8PxRCSGcFULoCyH0TZs2LevbiVFYuRLGjCk6CiEEJPvZ0NKT+MXILFsGY7OoKVW24ZxM2PtEf8jZhKvjy8+Eh58tE45JBiZcpAG37CR+UZ+XXoKJE4uOQggBCX4mhBBWmtmhwK9x1fhhCOHPqUUmMuFf/4LJkzO8QU4mDCOMC+dlwjBsXDh7E67u3bkmDCPZcAubcEIShRJC+CXwy1QiEbnw9NMwdWrRUQghIPUfLaLVefxxePWrc7hR1iYM9WdIyIRHfD2U1jThytltYcIJUTGeLmJgAB56CGY1MeVXCJE+LfAzQOTFgw/6LIihizAyJSsThtHnCmdkwjD6XOG0TRgamSucrglXR1mPtE24ti0nE87oko0gA+4ifvc7//qGNxQbhxDCkQF3EQsWwKteBVttVcDNUzZhiLFqLmUThsZXzaVlwhBn1Vw6JuxtjY0Ly4SbQwbcJSxZ4gl4//1rn2MJIYpDBtwlHH+8S+jHP16ng1ltbYesSMmE/VIx60fIhEd8Pez6VX+OO0MiqQlXRz/8deeZsFyoC/i//4Mzz4TDDoPNNis6GiFEGSXgDufPf4YPfAA23hhOOKHoaIQQ1WgIooO5+27YZRfo7YVf/hImTRrlhMFhgTYYioDmS1kmHYqApktZNjsUUdsn6pHxUEQlCg1FZIUMuAMZGIAf/AB23NGT7/XXwxZbjHqaECJnZMAdxkMPwUEHwXXXwTveAeecAxts0MCJVqqy0DYwYUhe1L2NTNj7MKRP1EMmPIT2MWEZcIfwwAM+w2GLLeCPf4Szz4b//d8Gk68QohBkwG3O7bfDN74Bl1ziO118/ONwzDGw4YajnzuM8h5r7WDC1X3yNmFIbXujxk0Y0tveqHVNeFX370QTVgJuQx59FC66CH76U/jTn2DKFN/r7bDDYN11i45OCNEoSsBtwjPPwKWXetK94QYXxte9Dk46CQ44ANZYI9n1rWSDltkOJuxNKW/02aAJQwqlLGObMKS/0eeqTbi6bShZmXDttTvfhJWAW5SVK33n4l//Gq6+Gm65Bfr7fYz3uONg3jzYdNOioxRCJEEJuIV45BFPtldfDddcA8895yLY1+fjuu9/P2y7bUUO06ZslO1gwt6U7kafjZqwnxOFk5MJe1uZfEy4XlvNPQYjSsuEK3G1hQknpPUi6hJWroS77oKbbvLj5pt9Chn4zIX3v9+nke26q7YQEqJTUQLOiWefhT/8oZJwb7kFXnzR35s+Hd74RvjMZ+Dtb4ctt8zOcutSNQ+4LUy4Kq78TRiy2vK+ngnXtpXJ1oT9DtlubzTchIfH1ckm3DqRdBDPPeezExYtgttu86/33+/v9fTAnDlw4IFeGP0Nb4AZMwpIuEKIwlECTsgzz1SSbPnr3/5WeX/DDWH77WG//TzZvu51GW8L3ywlq5heXBOG7G14qAnXxJG3CUNmG33WMWE/J1kpy7gm7FfMZ6PPmq2X6sTViSZcfARtQnlDyzvuqD0efrjSZ+ZMT7Yf/ah/3W47mDatqIiFEK2OEvAIvPiiPyCrTrR33QUvvODvl0q+seXrXw+HHOKJdrvtYK21io07MWVzjGvCkN+4cPX1s9ryfjQTrr5WTibsfZqrpNa8CVfaOmPL+3omDEWlwq5OwCH4qrKhVvvAA5Xv89VWg9e+1ocQ5syBbbaBV78aJk4sNnYhRPvTNQl42TK4557hyfaZZyp9Zs3yJDtvnn+dM8eHFbrhAZmZVTa8jGvCVX1aYoZE1iYMqW9vNJoJV8eXnwkPP1smnC4dmYBfesmL1Cxa5KvJbrsN/vIXn3sLMGECvOY18G//Vkm0r32t264QQuRF2yfgl192ky0n24UL3XTLMrPOOv5A7L3vrSTbTTcdubRrV1MqVQwrrgl7Y02fTjZh7xP9IS8Thsw2+qxvwtW9O9eEobgZEm2XgP/xD99k8vrrfTHD3Xd7jQTwGQd9ffC+9/nX7beH9dbrjiEEIUT70fIJeMkST7blo7ygYbXVfMudd7/bE21fny/hVbJtErNB44trwt7UwqvmUjZhiF8/QiZcHUGrmXDl7LxNuOUScAi+o8OPfuQFae67z9tXWw123hnmz4e5c302goYRhBDtTMsk4KeeggsvhB/+0IcVJkzwHX0POqiScHtbJtoOpFSqGF5ME4Y2qR+RlglDdvvM1TFhiF8/IqkJQ3a7a9Qz4eoo65G2Cde25WvCo17VzDYEfgSsg8d5VgjhFDNbC7gYmAk8DHwwhPBs3AAWL4Yjj4TLL4cVK2CHHeDMM2GffWD11eNeTQgh2odG0vpK4LMhhNvMbAqwyMx+AxwAXBtC+IaZHQMcAxwd5+ZPPQVve5uP8x56qC/hnT077l9BpIGZVZ7yxzVhiF8/op1NGFLbXaNRE4b49SOSmjCkt7tGoybsbc1WUms/Ex71aiGEJcCS6M8vmNm9wPrAnsDcqNsFwPXESMDLlvkDtMWLfaz3jW+MGbkQQrQ5sdK5mc0EtgVuAdaJkjPA4/gQxUjnzAfmA8yYMWOw/fHHfc5uX59XCBMFU7JBe4ttwtB8JbU2NGFoon6ETLjm9bDrV/05qx2XV7Xbc1GV1Eqjd3HMbDLwc+CwEMI/q98L/j9zxO+kEMJZIYS+EELftKrSYBttBGed5XN5DzjAhyOEEKKbaCgBm9kYPPn+JIRwWdT8hJlNj96fDjwZ9+Yf/Sh8/evws5/5gokPfhB+9avKwgohhOhkGpkFYcC5wL0hhO9WvbUA2B/4RvT1imYCOPZYeM974NxzfRraJZf4gooDDoC99tJ839yw0uCvy7GHIqD5UpZtOBThl0pa1D3mUARkuOX9yEMRtX2iHhkPRVSiaJehiGQ0YsBvBPYFdjGz26NjDzzxvs3MHgB2i143xezZcNJJ8NhjnoBnz4avfc3Hh6dO9QT9ne94UR3ZsRCiU2hkFsTvGHlcHmDXNIMZNw723tuP8hLk3/7Wv151lfdZfXVfETd3rs+cmDMHxo9PM4oupXpLopgmDI0vW+4IE4bkRd3bwIS9D0P6RD1kwqnQsmvLpk+HD3/YD3A7Lhfhuf56uPJKb+/tdWMu14Po6/NSk+PGFRW5EEI0Rssm4KGsv74XSp83z18/9hjcemulBOUvfuHjyABjxngSLifk7bbzXSxkyqug1MPgz/WYJux94hXwaWsThvS2N2rUhCGzLe/rmzAkL+re+ia8qvs3UsoyCW2TgIey/vpedvJ97/PXIcAjj1QS8qJF8N//7VPdwP/vbrFFpSZweXuhddct7u8ghOhu2jYBD8XMtw+aOdPHkMGT8oMP+sO78hZEv/udT3sr86pX1SblOaJHqlUAABYfSURBVHNgyy3doruKklG2r9gmDE2XsmxLE67uk5MJQ/wCPslNGNLb3qgxE65uG0pWJlx77WZKWTZPxyTgkTCDTTbx4wMfqLQ/8wzceWft3nDf/74vjwYYOxa23np4Yp46tZi/hxCiM+noBFyPtdbyWRRz51baVqzwYu/VSflXv4ILLqj0WX/9ytBFOSlvtlltlcJ2xYvxlF/FNGFoupRlO5qwNzVZyrJJE/ZzonvnZMLeViYfE67XVnOPwYjSMuFKXM0U8ElCVybgkRgzxh/UvfrVlQd9AE88MXwn5auvrmzwOXmyJ+Ttt/eHfdtv72PNql0shBgNpYlRWGcdePvb/ShT3uL+9tvhT3/yB35nn+27MYMXk99mm0pC3n572GqrFh9X7ukZNKu4JuznxCzg08Ym7E0Ji7rHNmHIasv7eiZc21YmWxP2OzRXyrJ5Ex4eV14mrATcBOPGwbbb+nHggd7W3+/bJy1a5A/9Fi3y4YvTTvP3J0zwYvNveIMfO+2kMWUhuh0l4JTo6fEHd1tvDfvu620DA/DAA56Mb70VbroJTjyxMnyxxRaVhPyGN/jsi8LGk80GTSquCUMT9SOSmrBfrPG/XzPUM+GquPIzYchso886JuznxKsfkdSE/YrJirrHNeHavvFXzSVBCThDSiVPsltsURlXfukln6d8001+LFgA553n702dCrvtVhny2GCD4mIXQmSPEnDOTJzotSx23tlfh+CWfPPNXvfi6qvh4ov9va23riTjnXeGSZMyDKzaLOOaMDRfSa1ZE66OOW8Tro4jLxOuvlZOJux94tWPSG7ClbZ22vK+WTpgAlV7Ywabbw777w/nn+9LrO+8E779bTfgM86APfbwqXN77unJufywTwjR3siAWwwzr2PxmtfAZz8LL78MN94Iv/yll+pcsMCnvu21lw9r7LZbSrMrekrDt79p1ISh6UpqTZtwVZ/cTbjmnjmZMCSvpBbThKvjy8+Eh5/dySYsA25xJkzwIYiTT/YNTK+7Dj70IS/PuccevjjkuOPg6aeLjlQIERcl4Daipwfe+lafc/z443D55T6d7fjjfY+9I47wIYymKJXcfHpKbnfVR0+PzxM2w8zc4krmFdQGj6jNSn5EryvnlPwoXzN6Pfj+YBxDrhNhJautxeCNtUZcvnYehFBrxGGgZnw6DISalXOD7w8EPwYvE9yGBwb8KF83el1+3/tEx9BrDfRHh78e7N/f70f5muWjf8CP6B42ELCBqhj6q47oHBsYcBvuD9A/0uvo6B+IjoBF79W8Hx2llX5Uzqs+iI7o9YD/JlDqD5Sq3h/6utyv8r4f5euUVrrhVq4/wlG+19C+K82PIddOihJwmzJunI8JX3EF3HWXV4X73vdg1ixPxBonFqL1UQLuAGbP9v30HnjAH+addJKvxLvppsavEUpVlhrbhC13E66x4S4w4Wobzs2EBwow4YH2MuGkKAF3ELNm+fDEddd5caE3vcnHh/NYvSuEiI9mQXQgb32rT2U79FAfH37pJfjmN0eRwlJp8Gm4Df25PMrsCIhfPyLp7AhoYK5wC9WPSDw7AhLXFI47OwLi149IOjsCktcUjjs7ojrKeqy6klrzKAF3KFOm+LziSZN8+fPYsfDVrxYdlRCiGiXgDsbMiwG98gp8/euw++6+k/SI9Ay3nkZNGBqYK5y2CUP8+hHtbMKQoJJacyYMo88VTtuEoflKas2asLclqaTWPBoD7nDMfHbEjBlw0EGwfHnREQkhysiAu4DJk+GUU3z13OWXwwc/OEInsxoLhhgmDE1XUmvahKuv1QUmDCOMC8uEa143a8Lep/lKakmQAXcJ73mPL9Y488yiIxFClFEC7hJKJdhvP6+49vzzRUcjhAAl4K7iLW/x34xvvnn4e6F6cUR5IUa0SCKUrLGFGg0tW05poQY0vmy5AxZq+KUaW7ac2kKNOMuWU1qoEW/ZcjoLNZparDFQNeSTACXgLmKHHfzrbbcVG4cQwtFDuC5iyhTfZPShh0Z4s8cqD0zKD3safSgHzZeybPKhHIy+WKOjHsrB6Is1snooB6lveV/voZz3YUifqEfGD+Wqo2imlGUzyIC7jI028rKWQojikQF3GVOnwtKlw9tDqTTcUlrYhKvj6woThuRF3eOaMGS25X19E4ZGly13ggnLgLuMNdeEZ58tOgohBMQwYDPrARYCj4UQ3m1ms4CLgKnAImDfEILWWbU4EyfWqRVcPQYc04T9nMaWLadmwhC7gE9bm3B1n5xMGBpfrJGeCUPcAj5JTbi6bShZm3AcA/4McG/V628CJ4UQNgWeBT6WUkwiQyZM8H3mhBDF05ABm9kGwLuArwFHmE/I3AWYF3W5ADgOOD2DGEWKjBkDK0dYRhlKVuUN8UzY+zS4bDktE4amS1m2owl7U5OlLJs0YT8nundOJuxtZfIx4XptNfcYjGh4KcskNGrAJwNHUflEpgLPhRDK38qPAuunEpHIlN5eL9YuhCieUQ3YzN4NPBlCWGRmc+PewMzmA/MBZsyYETtAkS49PbXDqGVCTwkGLTZqa2ET9nNWPVe4k0zYmxIWdY9twpDVlvf1TLi2rUy2Jux3aL6UZRIaMeA3Au81s4fxh267AKcAa5hZ+a+6ATDifrwhhLNCCH0hhL5p06alELJIQqnkq06FEMUzqgGHEI4FjgWIDPjIEMK/m9klwN54Ut4fuCLDOEVKmI0sdKHHqP75DjFMGJovZdmkCfv9o3t1gwlXxZWfCUNa2xs1asJ+TmOr5tIyYb9i86Usk5DkOkfjD+T+io8Jn5tOSCJL6iVgIUT+xFoJF0K4Hrg++vODwA7phySypG4RsB6r2aDFacyEoYlVc0lNGJIXdW/WhP1iZMpQE66JIycTrr5WTibsfRpdNZeWCVfamlk1lwSthBNCiIJQLYguo54B184DLtOYCde05WXCkP5Gn42aMOQ3Llx9/ay2vK9nwpC8klpME66OLz8THn52XiYsAxZCiIKQAQvADbhMXBP2tsbmCqdnwpDZlvejmXBVn5aYIZGRCXuf6A95mTBkttFnfROu7p2vCcuAhRCiIGTAAoCBXhu21XajJux94q2aS27CkNmW96OZsDfW9OlEE4Y4q+a604STIgMWQoiCkAELwMeAy0YQ14Rr++Rjwh7z4Jvlk6KwsjVhb2rhVXNpmTBkt89cHROGxlfNpWXCkKySWhJkwEIIURAyYAEQ1YJw4pswJK2kFteEIcaquZRNGGKsmmtnE4b095kbxYSh8VVzaZkwJKuklgQZsBBCFIQMWAAQemCoGzRuwtB0JbVmTRgy23F5VBOGxlfNtbEJQ4xVc11qwkmRAQshREHIgAVQHgMe+af7aCYM1J0h0ZEmXH2tDjZhv1Q2Oy7XNWHIcMflkU24tk/UI1YlteaRAQshREEoAQshREFoCEIA5V8NV/2god5QxEhnZj4UAdlteT/aUAS09/ZGjQ5FQAYbfbbeUIT3YUifqEdDpSybRwYshBAFIQMWAAz0WNXkcpmwvz+yCUPjy5bb2oQhwy3v65gwZLblfX0ThmQFfJpHBiyEEAUhAxaAL8QYXmqvMROG+AV8kpqwn9PYsuW0Tbg6vo424eo+OZkwNL5YIz0ThnRKWcZHBiyEEAUhAxZA7RhwXBOGZgr4JDNh79PgYo20TRjS3+izBU3Ym9LZ3qhRE/ZzonvnZMLeViaeCSdFBiyEEAUhAxbAyGPAMuE6JgzZbXnfQibsTRlteV/XhCGrLe/rmXBtW5nGTDgpMmAhhCgIGbAAap9Cxzfh6rboGlmbMGS45f2qTdjPaXDVXDubcFVc+ZkwZLbRZx0T9nMaWzWXtgnLgIUQoiBkwAIgKsheS+MmDHFXzSU1YWhi1VxKJuz3ju6Vlwn7xciUoSZcE0dOJlx9rZxM2Ps0umqu1oSTIgMWQoiCkAELAAZ66v80Ht2EodFVc2mZcE1b3iYMqW/0OaoJQ37jwtXXz2rL+3omDKlvbzSaCVfH10wltSTIgIUQoiBkwAKA0GMMRB4a14Sr2/IyYW9rbK5w6iYMmW15X9eEq/q0xAyJjEzY+0R/yMuEIWElteZpyIDNbA0zu9TM/mJm95rZTma2lpn9xsweiL6umUpEQgjRJTRqwKcAvwoh7G1mY4GJwOeBa0MI3zCzY4BjgKMzilNkzEAvlKKf73FNeOS2bE3Y+8RbNZeeCUNmW97XM2FvrOnTiSYMcVbNtYIJJ2NUAzaz1YGdgXMBQgjLQwjPAXsCF0TdLgD2SikmIYToChox4FnAUuA8M5sDLAI+A6wTQlgS9XkcWGekk81sPjAfYMaMGYkDFtngtSCcuCbsfZqrH9GsCdf2yduEIbMt7+uYsDe18Kq5tEwYsttnro4JQ+Or5kaaj56ERq7SC2wHnB5C2BZ4ER9uGCT4pzniv34I4awQQl8IoW/atGlJ4xVCiI6hEQN+FHg0hHBL9PpSPAE/YWbTQwhLzGw68GRWQYrsqV4JF9eEvU+ySmrxTbgSad4mDI2vmkvLhCHGqrl2NmFIf5+5UUwYGl81N9J89CSMasAhhMeBv5vZFlHTrsA9wAJg/6htf+CKVCISQoguodFZEJ8CfhLNgHgQOBBP3v9tZh8DHgE+mE2IIg9GrgXhtKYJV0eSrwlDjFVzaZkwNL5qro1NGGKsmmsBE05KQwk4hHA70DfCW7umEoUQQnQhWgkngKFP+GtpRROuPjN3E4bMdlyua8LV1+pgE/ZLZbPjcl0ThkSV1JKQjkcLIYSIjRKwEEIUhIYgBBAtRR5lq+16QxHeVu+cbIYiRjqzo4cioL23N2p0KAJS3N4o+6GIpMiAhRCiIGTAAhiyFDmmCXtbc6Us29KEIbst7+uYMDS+bLmtTRgy2OhzFBOGZAV8EiADFkKIgpABCwBCb4DBsV2nUROG5ktZNmvCI8XXySZcHV9Hm3B1n5xMGOIX8EnLhGXAQghREDJgAZSXItdaZ6MmXNM3JxOG9Df6bNSE/Zx4BXwSmzCkt71RC5uwN6WzvVGjJuznRPduopRlEmTAQghREDJgATBkW3qZMNQ3Ye8Tr4BPYhOG9Df6bEET9qaMtryva8KQpIBPEmTAQghREDJgAUDoCVX2OdgafW1FE65ui67RwSbs58Qs4NOOJlwVV34mDGmUsmwGGbAQQhSEDFgA5XnATnuY8PC4Bq+RtQlDhlvej2zCfv/oXnmZsF+MTBlqwjVx5GTC1ddqpn5EAmTAQghREDJgAdQacJlGTRiar6TWvAlX4sjbhKGJVXNJTRiSF3WPa8KQ37hw9fWz2vK+nglDOpXUmkAGLIQQBSEDFk5PoJ7jjGbC3sfJy4Sr2/I24Zq2vEwY0tveqFETrurTEjMkMjJh7xP9oZlKagmQAQshREHIgIVTNQYc34Qh7gyJpCY8cls+Juxt8epHJDdhyGzL+3om7I01fTrRhCF+/YhVbWIbBxmwEEIUhAxYAGAjjAE3bsLVvfMxYe+T7u4ajZqw94m3ai65CUNmW97XMWFvauFVc2mZMCSqpJYEGbAQQhSEDFgAYL0DlH8exzVhGGlcOFsTrr5/3iZc2ycfE4b49SOSmjC0Sf2IpCYMCSupNY8MWAghCkIGLADo6Rmo+pkez4QhvfoR7WHClUjzMmGIXz8isQlD/PoRbWjC0ET9iIF03FUGLIQQBSEDFgD09FbMSyZce92RKhGnVVO4YROGzHZcrmvC1dfqYBP2SyWopJYAGbAQQhSEErAQQhREQ0MQZnY4cBD+W9hdwIHAdOAiYCqwCNg3hLA8ozhFxowZs5Kh/x1aeSii9tr17p3NUET1mR09FAHJi7q3w1AEJCtlmYBRDdjM1gc+DfSFEGbj/8ofAr4JnBRC2BR4FvhYOiEJIUR30OhDuF5ggpmtACYCS4BdgHnR+xcAxwGnpx2gyIcxPdUTy+OZcL02yM6EvS2t7Y3imfBIZ2ZuwpDdlvd1TBiaKODTjiYMiUpZJmHUq4QQHgO+DSzGE+/z+JDDcyGE8n/NR4H1RzrfzOab2UIzW7h06dJUghZCiE5gVAM2szWBPYFZwHPAJcA7G71BCOEs4CyAvr6+HH4MimYY2zvS0srWNWG/VrKi7jLh6F51TLg6vo424eo+TZSyTEIjHr0b8FAIYWkIYQVwGfBGYA0zK3+HbgA8lkpEQgjRJTQyBrwY2NHMJgIvA7sCC4HfAnvjMyH2B67IKkiRPeN6VlVcZNUmDPEL+CQ14Zq+OZvwSPFlbcJ+TrwCPolNGJIXdW8DE/amBKUsE9DIGPAtwKXAbfgUtBI+pHA0cISZ/RWfinZuKhEJIUSX0NAsiBDCl4EvD2l+ENgh9YhEIYzraUA565owNFvKsh1NGNLb3qhRE/Y+zZWybNqEIb3tjVrYhL0pQSnLBGglnBBCFISK8QgAJvSuiNF7+H+bZlfNyYRb14T9nJgFfNrRhKviaqaUZRJkwEIIURAyYAHA+FgGXKZbTbi6LbpG1iYMGW55P7IJ+/2je+Vlwn4xMmWoCdfEEc+EkyIDFkKIgpABCwAm9SQtZJdOJbVGTRjSL+reuAkPj2vwGhmZMKRQSS2uCUPyou5xTRjyGxeuvn6SSmoJkAELIURByIAFABN6mhkDHol8TNj7RFfO3YSr48jHhGva8jJhSH+jz9FMuKpPS8yQaKSSWgJkwEIIURAyYAHApN5lKV8xaxOGZiupJTXh6ra8TNjbElZSi23CkNmW9/VM2Btr+rS0CSdEBiyEEAUhAxYATCwtz+h/Q1YmXN07XxMeuS1bE/Y+zVVSa96EIbMt7+uYsDe18Kq5ESqpJUEGLIQQBSEDFgBM6Xml8qINTLhyZnXvfEzY+6S7u8ZoJlzbJx8Thvj1I5KaMLRJ/QhLx11lwEIIURAyYAHA5GoDLtPCJgzp7zPXqAnX3jsvE65EmpcJQ/OV1Jo2YYhfP6LoSmoJkAELIURByIAFAKuVXq7/pky4gXtnbcLVkeRkwpDZjst1Tbj6Wu1gwgmRAQshREEoAQshREFoCEIAMLHUwFJkDUU0cO9shiKqz+zooQhor+2NEiIDFkKIgpABCwBWK40wDa0eLWDC9dogexOuvXa9e6drwiOdmbkJQ3Zb3tcxYUhQyrIIE06IDFgIIQpCBiwAmBLHgMt0qQl7W9obfcqEB/9+7bjlfZPIgIUQoiBkwAKAKaWEWxKl/j9p1SYMSUpZJjNhv1Za2xs1ZsIjxZe1Cfs5SYu6xzRhSG97ozYwYRmwEEIUhAxYADDFAiS1YMjRhCG97Y3imXBN35xMGLLb8r6eCXuftLY3atCEIbst71vQhGXAQghREDJgAcCUUi8MRGrVBiYM2W15LxMuzoT9nGRF3dvJhGXAQghREDJgAcDk0nggmgssE47ej67aEiZc3RZdI2sThgy3vB/ZhP3+0b3yMmG/GEUgAxZCiIKwkGPmN7OlwCO53VDEYaMQwrSigxCim8g1AQshhKigIQghhCgIJWAhhCgIJWAhhCgIJWAhhCgIJWAhhCgIJWAhhCgIJWAhhCgIJWAhhCgIJWAhhCiI/wenKlFkVpAEFwAAAABJRU5ErkJggg==\n",
- "text/plain": [
- "<Figure size 360x360 with 3 Axes>"
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "pl.figure(2, figsize=(5, 5))\n",
- "ot.plot.plot1D_mat(a, b, M, 'Cost matrix M')"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Solve EMD\n",
- "---------\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- "<Figure size 360x360 with 3 Axes>"
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "G0 = ot.emd(a, b, M)\n",
- "\n",
- "pl.figure(3, figsize=(5, 5))\n",
- "ot.plot.plot1D_mat(a, b, G0, 'OT matrix G0')"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Solve Sinkhorn\n",
- "--------------\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "It. |Err \n",
- "-------------------\n",
- " 0|2.821142e-01|\n",
- " 10|7.695268e-02|\n",
- " 20|1.112774e-02|\n",
- " 30|1.571553e-03|\n",
- " 40|2.218100e-04|\n",
- " 50|3.130527e-05|\n",
- " 60|4.418267e-06|\n",
- " 70|6.235716e-07|\n",
- " 80|8.800770e-08|\n",
- " 90|1.242095e-08|\n",
- " 100|1.753030e-09|\n",
- " 110|2.474136e-10|\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- "<Figure size 360x360 with 3 Axes>"
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "lambd = 2e-3\n",
- "Gs = ot.sinkhorn(a, b, M, lambd, verbose=True)\n",
- "\n",
- "pl.figure(4, figsize=(5, 5))\n",
- "ot.plot.plot1D_mat(a, b, Gs, 'OT matrix Sinkhorn')\n",
- "\n",
- "pl.show()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Solve Smooth OT\n",
- "--------------\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWAAAAFgCAYAAACFYaNMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3deXxcVf3/8dcnW9s0pTulC6VlKyBalrCqiGyCG6goy1c2xSIKyqKAX/Un8BW/IiiiIPtSUKGCfKXw5YtsIii12rKWHVlKoaWlG93bJOf3x+fcZDpNSJpkcmYm7+fjcR+TmXvn3s/MJJ985txzzrUQAiIi0vMqUgcgItJbKQGLiCSiBCwikogSsIhIIkrAIiKJKAGLiCSiBCwSmdlHzezF1HF0JzM73sz+ljoOaZ0SsHSb+Mf+jJmtNLN5ZnaFmQ2K6640s+VxWWtm63Lu/18PxBbMbOv32yaE8GgIYUIn9/8RM3vMzJaa2SIz+7uZ7da5aDvHzMbF11nVxf102+doZvua2Zyc+zVmdkd8fzYxs3PN7LddibeUKQFLtzCzM4ELge8CA4E9gS2A+82sJoTw9RBCXQihDvgJMCW7H0I4JF3kritJy8w2Ae4Gfg0MAUYD5wFruie6nlPIz9HM+gB3AIOAg0II73Uhzi79kykWSsDSZTEBnQecGkK4N4SwLoTwOvAlYBzw5U7sc18zm2NmZ5nZfDOba2aHmdknzeylWGX+Z872u5vZNDNbEre9zMxq4rpH4mZPxUrtiJz9n21m84Abcqs1M9sqHmOXeH+UmS0ws31bCXdbgBDCLSGExhDCqhDCfSGEp+Nzj48V3yUxvlfNbO/4+Jvx9R2X81oGmtlN8XhvmNkPzKwirquI99+Iz7vJzAbGp2avc0l8nXvl7PNiM1tsZq+ZWauJshCfY86+a4G7gCrgUyGEFZ3YRzCzb5rZy8DL8bHtzOz++Fm9aGZfytl+qJndZWbvmdm/zOzHVmTNMUrA0h32Bvri1U2zEMJy4B7gwE7ud7O439HA/wOuwZPArsBHgR+a2fi4bSNwOjAM2AvYH/hGjGOfuM3EWKlNydn/ELzCm5QX+7+Bs4HfxuRxAzA5hPBwK3G+BDSa2WQzO8TMBreyzR7A08BQ4PfArcBuwNbxNV1mZnVx21/j1eeWwMeAY4ET4rrj4/LxuL4OuCyuy17noPg6p+Uc+8X43vwMuM7MrJUYC/U59gH+D1gNHBpCWNXJ/QAchr+eHcysP3A//n5uChwJ/MbMdojbXg6swD/n4+JSVJSApTsMA94NITS0sm5uXN8Z64ALQgjr8IQ1DLg0hLAshPAs8BwwESCEMDOE8I8QQkOs2q7Ck9f7aQJ+FEJY01pSCCFcA7wCTAdGAt9vbSfxq/RHgID/k1hgZlPNbETOZq+FEG4IITQCU4DNgfPjse8D1gJbm1klnki+F1/n68DPgWPifv4D+EUI4dWYGL8HHNnOV/I3QgjXxGNPjq9lRCvbFepzHID/U5wcQuhqs8x/hxAWxc/r08Dr8X1tCCE8AfwR+GJ8H7+Af74rQwjP4a+9qCgBS3d4FxjWRhIYGdd3xsKYNACyBPlOzvpVeAWImW1rZnfHk0bv4e2T7SWMBSGE1e1scw2wI/Dr90seIYTnQwjHhxDGxO1HAb/M2SQ/bkIIrb2WYUA18EbOujfwbwHE/eavq6L1hJqZlxPnyvhjXSvbFepzfBf/pzLZzD7RyX1k3sz5eQtgj9iss8TMluD/oDYDhuPvy5ttPLcoKAFLd5iGn3D6fO6D8Sv1IcCDPRDDFcALwDYhhE2A/wRa+5qd632nAozx/xK4DjjXzIZ0JJAQwgvAjXgi3ljv4pX/FjmPjQXeij+/3cq6BjzBd3Vqw4J9jiGEO4CvAbeb2ce7EGPua3wT+GsIYVDOUhdCOBlYgL8vY3K237wLxy0IJWDpshDCUvzkza/N7GAzqzazccAfgDnAzT0QxgDgPWC5mW0HnJy3/h28zXRjXArMCCGcCPwvcGVrG8UTQWea2Zh4f3PgKOAfG3k8YsX/B+ACMxtgZlsAZwBZV61bgNPNbHxMjFlPhAY86TSx8a8zO3ZBP8cQwi3AKcCdZvbhnFUVZtY3Z+nTwV3eDWxrZsfEWKvNbDcz2z6+j3fg/zhr4+/EsV2JvxCUgKVbhBB+hledF+OJcDpeoezfDe1+HfEd4GhgGd5sMCVv/bn4V+AluWfK22JmhwIH05LIzwB2MbP/aGXzZfiJoelmtgJPvLOAMzvxOgBOxU8evQr8DT/JdH1cdz2eCB8BXsNPbJ0Kzc0LFwB/j69zz409cKE/xxDCZPx9+V8z2z0+fBTeBJMt/+7gvpYBB+HNG2/jTS0X4if9wJP9wPj4zfg/r+bXYGbPtvF59hjThOwi0huY2YXAZiGEoukNoQpYRMpSbBr6kLndga8C/5M6rlxlMZpERKQVA/Bmh1H4OYCfA3cmjSiPmiBERBJRE4SISCJqghAAhg0bFsaNG5c6DJGSMnPmzHdDCMM7+3wlYAFg3LhxzJgxI3UYIiXFzN5of6u2qQlCRCQRJWCR3mbFCtDJ96KgBCzSG7z8Mhx7LGy1FdTVwdChcNBBcMcdSsYJKQGLlLOGBjj3XNhxR/jTn2DnneH88+Hww+G11+ALX4BPfQpmz04daa+kk3Ai5aqhAY45Bm69FY46Cn7+cxg5cv31l10GP/whfPSj8PDDMH58m7uT7qcKWKQcNTZ6k8Ott8JPfwq///36yRegqgpOOw0eeQSWLYN99/WqWHqMErBIOTrvPLjlFk++Z5/9/tvuvDM8+KAn4UMPhVVduWKQbAwlYJFy89BD8OMfwwkntJ98Mzvv7FXyM8/AGWcUNj5ppgQsUk4WLIAvfxm23RZ+/euNe+7BB8N3vwtXXgm3316Y+GQ9SsAi5eSss+Ddd2HKFOjff+Of/+MfQ309nHIKLF3a/fHJepSARcrFtGlw441w+ukwcWLn9lFTA1dcAfPnezuyFJQSsEg5aGz0qnXUKO9W1hX19TBpEvzqVzBrVvfEJ61SAhYpBzfeCI8/7n1961q74vxGuuACGDjQq2kpGCVgkVK3Zo2Pbtt9dzjiiO7Z59Ch8P3vwwMPwF//2j37lA0oAYuUuuuu86HE//VfYNZ9+z35ZB+88cMfar6IAlECFillq1Z5c8FHPgIHHti9++7XD/7zP+HRR70Slm6nBCxSyq69Ft5+u/ur38zXvgabbw4/+pGq4AJQAhYpVevWwcUXe/W7776FOUafPj6abto0+PvfC3OMXkwJWKRU3Xabt/2edVZhj3PCCX5S7mc/K+xxeiElYJFSFIInxO239/l8C6m21vsY33UXPP98YY/VyygBi5Si+++Hp57yuRsqeuDP+Jvf9JNyF11U+GP1IkrAIqXokktgs83g6KN75njDh3tTxO9+58OUpVsoAYuUmpdegnvv9X66ffr03HFPPRXWroWrr+65Y5Y5JWCRUnPZZVBd7fM19KTttvMLeV5xhffAkC5TAhYpJcuW+bwPRxzhTRA97Vvf8n7Hd9zR88cuQ0rAIqVk8mRPwqeemub4hxzil7b/1a/SHL/MKAGLlIoQ4De/gd1284l3UqiogG98Ax57zHthSJcoAYuUikce8X64J5+cNo7jj4e+ff3SRdIlSsAipeLKK2HQoO6bcrKzhgzxGH77W28OkU5TAhYpBe+8A3/8o1eftbWpo/EqfPly7xcsnaYELFIKrr/eu36ddFLqSNzuu8NOO3mXNM2S1mlKwCLFrqkJrrnGZzzbbrvU0Tgz+PrX4emnYfr01NGULCVgkWL3wAPw2mvFU/1mjj4a+vfXyLguUAIWKXZXXw3DhsHnPpc6kvUNGOBJ+NZbYcmS1NGUJCVgkWI2bx7ceaeffOvJeR866qST/LJIOhnXKUrAIsXshhugocEvDVSMdt0VdtkFrrpKJ+M6QQlYpFjlnnzbdtvU0bRt0iR45hmdjOsEJWCRYlWsJ9/y6WRcpykBixSrq64qzpNv+XJPxi1dmjqakqIELFKM5s6FqVOL9+RbvkmTdDKuE5SARYpRsZ98y1dfr5NxnaAELFJsGhv95NvHP17cJ9/yTZrkI+P+8Y/UkZQMJWCRYnPfffD66z7Ut5QcfTTU1XkVLB2iBCxSbK68EkaMgMMOSx3JxhkwAI45BqZMgUWLUkdTEpSARYrJ7Nlw993w1a9CTU3qaDbeSSfB6tV+6SRplxKwSDG59lo/iVUqJ9/yTZwIe+3lVbxOxrVLCVikWKxd6yffDjkExo1LHU3nnXwyvPQSPPhg6kiKnhKwSLG44w6ffOeUU1JH0jVf/KIPILnsstSRFD0lYJFicdllsPXW8IlPpI6ka/r29S5pd93lvTmkTUrAIsXgiSfg73+Hb37TL/1e6rIudLpy8vsqg09apAxcdplfbPP441NH0j0239y70V17rQ9RllYpAYuktmCBz6FwzDF+2flyceqpsHCh5od4H0rAIqldcQWsWQOnnZY6ku71sY/5lZMvuURd0tqgBCyS0urVcPnl8KlPFc8Vj7uLGZxxBjz3HPz5z6mjKUpKwCIp/e53MH++J6pydMQRMGoU/OIXqSMpSkrAIqk0NXli2mknn/msHNXUeFvw/ffDU0+ljqboKAGLpHL33f71/Mwz/et6uTrpJJ8l7cILU0dSdJSARVIIAS64AMaPhyOPTB1NYQ0e7MOTp0yBV15JHU1RUQIWSeGhh+Cf/4Szz4aqqtTRFN7pp0N1NfzsZ6kjKSpKwCIp/OQnMHIkHHdc6kh6xsiR8JWvwI03wpw5qaMpGkrAIj3tkUe8Av7Od3zehN7irLO86eW//zt1JEVDCVikJ4UAP/iBV4Qnn5w6mp41bpxPNH/NNZqkJ1ICFulJ990Hjz7qSbhfv9TR9Lwf/MAnGzrvvNSRFAUlYJGeklW/W2wBJ56YOpo0xoyBb3wDbroJXnghdTTJKQGL9JRbb4UZM+Dcc0vzem/d5Xvfg/79vQdIL6cELNITVq70hLPzznDssamjSWv4cPj+92HqVHjggdTRJKUELNITLr4Y3nwTfvnL8phwvau+/W0fhHL66dDQkDqaZPSbIFJos2f7MNzDD4d99kkdTXHo2xcuughmzYKrrkodTTJKwCKFFEJLd7OLLkobS7H5/OfhgAO8Tfitt1JHk4QSsEghTZkC99zj8z6U8qXmC8HMrxnX0OA9I3rhpO1KwCKF8u678K1vwW67+ZSMsqGttvI+wVOnwm23pY6mxykBixRCCD73wdKlfmHKysrUERWv00+H+nq/kvKbb6aOpkcpAYsUwuWXw113+exfH/pQ6miKW1UV/P73sHYtfPnL0NiYOqIeowQs0t0ef9wn2vnkJ70JQtq3zTb+T+uRR+D881NH02OUgEW609y5cOihsOmmcMMN5X2li+527LE+Pef558Ptt6eOpkf0gpmgRXrI6tXwuc/BokXw9797EpaOy3pFvPSSJ+Mtt4RddkkdVUGpAhbpDmvX+kCL6dPh5pv9Qpuy8fr2hf/5Hx+ufMghZT9hjxKwSFc1NMDRR8P//i9ccYUPMJDOGzHCp+00g/33h3//O3VEBaMELNIVK1Z4wv3jH+GSS7wrlXTdhAk+Uc+aNfDRj8KTT6aOqCCUgEU66513YL/9vPK9/HI47bTUEZWXHXeEhx/2PtT77AN//nPqiLqdErBIZzzwAEycCM88422W3/hG6ojK0447wrRpPnPaIYfA//t/ZTV7mhKwyMZYtgzOOAMOOgiGDPGTbp/9bOqoytuYMd6r5Nhj4b/+C/bdF559NnVU3UIJWKQjGhvht7+F7bf3tt6TToJ//Qs++MHUkfUOdXV+Sfubb4bnn/deJt/5js+3UcKUgEXez8qVPqDiAx+AY47xvr3Tpnlvh/79U0fX+3z5y/Dii/5Z/OIX3jRxzjnwxhupI+sUJWCRfA0N8Je/wDe/CaNH+6Q6NTU+OmvGDNhzz9QR9m7DhsH11/tk7p/6lM+zvOWW/vNNN8GSJakj7DALvXAOTtlQfX19mDFjRuow0li2zLs5/etfPhfBww/7LGa1tT6s+Otf965QGlZcnGbPhmuugcmTfTa1ykqfAvTjH4c99vCZ1kaNKsjnZ2YzQwj1nX6+ErBAmSXgxkZYtcqbD5Yt82XxYh8iPH++dx+bPdu/tr70EsyZ0/Lc8eO98//BB/uiZobSEYL/E506FR56CP75z5aZ1QYO9L7F48fD2LEwcqQP+Bg6FAYP9vUDBvjnXVvrM7R1IGErAUu3qK+tDTO23rrnDpj/e5fdz308hA2XpiZfGhtbloYGX9at84777XVTMvM/wLFjfRau7bbzKSPr62Gzzbr3dUo6K1fCU0/BzJk+pPnFF/2f7uzZ/nvyfsygTx9veqqu9oRcWdmybLklPPhglxOwJuMR16cP9GQChg0rjOx+7uNm6y+VlS23uUt1tS99+/pr6dfPlwEDfBk82LuNbbqpzzNQpV/9sldbC3vt5UuuELyd+J13YOFC/2b03nv+TWnlSv/2tHq1J+m1a/0fe0NDyz/8pqZum2hJv4XittoK7rgjdRQihWfm/5AHD04diXpBiIikogQsIpKITsIJAGa2DHgxdRztGAYU+9CnUogRSiPOUohxQghhQGefrDZgybzYlbO5PcHMZijG7lEKcZZKjF15vpogREQSUQIWEUlECVgyV6cOoAMUY/cphTjLPkadhBMRSUQVsIhIIkrAIiKJKAH3cmZ2sJm9aGavmNk5qePJmNnmZvYXM3vOzJ41s2/Hx4eY2f1m9nK8TT6e1MwqzewJM7s73h9vZtPjezrFzGoSxzfIzG43sxfM7Hkz26vY3kczOz1+zrPM7BYz61sM76OZXW9m881sVs5jrb535n4V433azHZpb/9KwL2YmVUClwOHADsAR5nZDmmjatYAnBlC2AHYE/hmjO0c4MEQwjbAg/F+at8Gns+5fyFwSQhha2Ax8NUkUbW4FLg3hLAdMBGPtWjeRzMbDXwLqA8h7AhUAkdSHO/jjcDBeY+19d4dAmwTl0nAFe3uPYSgpZcuwF7An3Pufw/4Xuq42oj1TuBAfLTeyPjYSHwAScq4xsQ/wv2AuwHDR29VtfYeJ4hvIPAa8YR7zuNF8z4Co4E3gSH44LC7gU8Uy/sIjANmtffeAVcBR7W2XVuLKuDeLfvFz8yJjxUVMxsH7AxMB0aEEObGVfOAEYnCyvwSOAtoiveHAktCCNmkxKnf0/HAAuCG2ExyrZn1p4jexxDCW8DFwGxgLrAUmElxvY+52nrvNvrvSQlYipqZ1QF/BE4LIbyXuy54mZGsH6WZfRqYH0KYmSqGDqgCdgGuCCHsDKwgr7mhCN7HwcCh+D+LUUB/NvzaX5S6+t4pAfdubwGb59wfEx8rCmZWjSff34UQssmK3zGzkXH9SGB+qviADwOfNbPXgVvxZohLgUFmls2zkvo9nQPMCSFMj/dvxxNyMb2PBwCvhRAWhBDWAXfg720xvY+52nrvNvrvSQm4d/sXsE0821yDn/iYmjgmwM8oA9cBz4cQfpGzaipwXPz5OLxtOIkQwvdCCGNCCOPw9+6hEMJ/AH8BDo+bpY5xHvCmmU2ID+0PPEcRvY9408OeZlYbP/csxqJ5H/O09d5NBY6NvSH2BJbmNFW0LlXDu5biWIBPAi8B/wa+nzqenLg+gn+1exp4Mi6fxNtYHwReBh4AhqSONca7L3B3/HlL4J/AK8BtQJ/Ese0EzIjv5Z+AwcX2PgLnAS8As4CbgT7F8D4Ct+Dt0uvwbxNfbeu9w0/AXh7/lp7Be3W87/41FFlEJJEuNUEUayd+EZFS0OkKOHbifwnvmzkHb088KoTwXPeFJyJSvrpyRYzdgVdCCK8CmNmteFeSNhPwsGHDwrhx47pwSOmqBQtg8WLYdtv1Hx/8+Pg0AYmUsPubbrOuPL8rCbi1Tsd75G9kZpPwYXmMHTuWGTO6dAUP6aLvfhcuvxzyP4YDK76YJiCRXqzg3dBCCFeHEOpDCPXDhw8v9OGkHQ0NUF2dOgoRga4l4KLuxC+tW7MGapLOzSUima4k4KLtxC9tW7kSamtTRyEi0IU24BBCg5mdAvwZnz7u+hDCs90WmRTE8uVQV5c6iiJh8fyJ+sJLIl05CUcI4R7gnm6KRXrAwoUwdGjqKEQENBdErzNvHmy6aeooEjHLWyrikv943iJSIErAvUhTE7z2GoxXl1+RotClJggpLa++6r0g8gdh9FZW4dVtaNxghd+GOMf6+1XBaj+WLlAF3Iv87W9+u/feaeMQEacKuBeZOtXbf7ffPnUkidj69YZVtfHrX1npt02xuo2VcvN9aKmOm++GVh9XhSzvRxVwLzF3rifg446DCn3qIkVBFXAvcd55Xox97WupIykeG8wEGCtkyyrgyuzxVtqA855rTU3r7zOvIt6gQlZlLKgC7hX++le46io47TTYZpvU0YhIRgm4zD37LHzxi7DllnD++amjEZFcaoIoY7NmwX77QVUV3HMP9O+fOqLE8k+QNbXRDJDX5GDV8c/EWqlXKvK2bWxcb98h3s8eD41ZE4SaJkQVcFlqaoLf/Ab23NOT78MPw4QJ7T5NRHqYKuAy89prcOKJ8NBD8IlPwLXXwpgxqaMqEll1adkAjPVHYFhFU6vbNVe+lTn1SjxRZ9nkyvkT+8T71tDgD8eTdM33167z+82VcYwlu99atzZVx2VHFXCZePll7+EwYQL8619wzTXwf/+n5CtSzFQBl7gnn4Sf/hRuu82vdPG1r8E558Dmm7f/3F6ruZLMH0wR65Gs3ba5qs22a6lXmtdVeSUcatavhEOfqvUOkXVTo8H3XREr4Ox+WLPW769Z4/ezSnldQ0t8WZWs9uKyoQRcgubMgVtvhd//Hp54AgYM8Gu9nXYabLZZ6uhEpKOUgEvEokVw++2edB95xIuf3XaDSy6B44+HQYNSR1iCNqggY8+ErOrMBmRk7bU5vSaynyzE6zvlVb6N/fv4/SqvmkNlbBOOx7R1Tevts2JVPMaqtfF+rIRXr2kJL6uO1/o2WY8KVcalSwm4SDU0+JWL//xnuO8+mD7dvxlPmADnngtHHw1bb506ShHpCiXgIvLGG55s77sPHngAlizxwqq+3tt1P/952HlnzRFeMHltw6Ehv99wKz0Sst4Q2YeS1y+4qcYr4IZ+vl1jn7z11X6/co3vr3K1H6N6pVfhlcvXNm9bsWy1367027Bqld+ubqPdWBVx0VMCTqShAZ55Bh57zJdp07wLGXjPhc9/3ruR7b+/LiEkUq6UgHvI4sXwj3+0JNzp02HFCl83ciR8+MPw7W/DQQfBdtupyk0qr2IMDbHHQqhsc5ts5JvFdtnK6rhtrIgb+3gl3FQdK+K+/vjaTWLbcdbluMmfV7nW/zSrVvZtPkSfZT6UsWaJV7hVS73yrVi20m+X+21YGSvjrK04q4yb24pVERcLJeACWLLEeyfMnAmPP+63L73k6yorYeJEOOEEnxh9771h7FglXJHeSAm4ixYtakmy2e2//92yfvPNYddd4dhjPdnutpsuC19ywvrzOgAt80hkt9m6WG1mPYatuR251vcRK+Kmqqwi9vvr4jwdjf3isWIBbTnNzpWr/M+15j2/7bPYe1r0XexP7vuuV7xVi2NF/J5/xWpuK14V247X5VfEaitORQm4g7ILWj711PrL66+3bDNunCfbr3zFb3fZBYYPTxWxiBQ7JeBWrFjhJ8hyE+0zz8CyZb6+osIvbLnHHnDyyZ5od9kFhgxJG7cUWG6FGK/kGULe7GaxqqzIRtOt8/bjqlh1Wix1Kxq8bbch9orI+gk3xEq4YVDsBdG/ZSQcca6K5Q1ePb+33Eff1SzycrnvAq+ya+f7vvvNH+DrF3rlW7lkuR9rWbzNKuLYz3mDijj/NUu369UJOAQfVZZf1b78csvv3SabwIc+5E0IEyfCTjvBBz4AtbVpYxeR0tdrEvCaNfDccxsm20WLWrYZP96T7NFH++3Eid6soBNk0qb89uHYJtyU9YpoyCrfWAnHarNitZe61uQnBFauiX+KwavbVXGOCXIq4KGDvHIdXuttu1Xmx1y6th8A85Z6xTtvfmwTnuttxP3n1sTb+Pj8TQCoXOT7s2WxrTiv9wSoT3GhlWUCXrnSJ6mZOdNHkz3+OLzwQvP5Efr1gw9+EL7whZZE+6EPebUrItJTSj4Br1rllWyWbGfM8Eo3G7Q0YoSfEPvsZ1uS7dZbtwzzF+kWWWWY1zacf0UMy+aViKPX+q6JfXqXe3VaHfv9Vq3yX9Dl61r6AS+It5vU+HMnDH4HgLF94te4kX4ze7yfjHhmySgAXpnnZ4KXzvZKuW6OV8p1b3s7Wr953hZc9a5XxBXvLW8+ZtOK2Lc461OsirhblVwCfvttv8jkww/7YIZZs1p6AA0f7sN2P/c5v911Vxg1Sk0IIlKcij4Bz53ryTZbsgENm2zil9z59Kc90dbX+xBeJVspCvkV8dpYMWbVQmwTziri6hXe/lr5Xuy5sDSOenuvpnmXy9/zCvalFV7qrhjr66pH+D73rHsFgI/W+h/J6kH+5/3CKN/+0S23BWD621sA8PbrsRKe7ccaMMer7dq5A5qPWbXAu/5kVbEq4u5VdAk4BL+iw003+YQ0L77oj2+yCeyzD0yaBPvu670R1IwgIqWsaBLwu+/CzTfD9dd7s0K/fn5F3xNPbEm4VUUTrchGynpL5M3LkM0dYXGuX4uj1vqu8Cq0emlLNdp3kbfZLlvkfwjzF44A4Pbx3pNi9lhv+/300KcA2KPvmwB8qG4OAJ+ofRWAp4b57E73bvFBAP46x+c1nfuaTypd93pLH8sBb3pPitq5foysIrZYETf3nMhmZNPouo3Sbkozs82Bm4AR+DzUV4cQLjWzIcAUYBzwOvClEMLijQ1g9mz4znfgT3/yb2W77w5XXQVHHAEDB27s3kRESkdHasoG4MwQwuNmNgCYaWb3A8cDD4YQfmpm5wDnAGdvzMHffRcOPNDbeU85xYfw7rjjxr4EkRLUXBGvPwrNshFzsaLMZjgD6L/Eq9A+C72/ZP844u29ef74tGxC1YwAABAwSURBVLnbAfDsln5dqv3GeFvwZwY9CcDOffwYB9f6vvfo8wgA0wc+A8Ddo3YC4OGxLTP9z3vVK/ABr2ftxF4R93vb71e96xVxaO5LnLURtzG6ThXxetpNwCGEucDc+PMyM3seGA0cCuwbN5sMPMxGJOA1a/wE2uzZ3tb74Q9vZOQiIiVuo1pVzWwcsDMwHRgRkzPAPLyJorXnTAImAYwdO7b58XnzvM9ufb3PECbSK7XXf7ihZSScrY79dWO1OWChV6f93olV6ltenS6b7W3Bf9pidwAeGDcBgI+N8V4SBwx8FoAP1Hg77sSahQAMH/YoABNq5zUf8/6h2wMwa1PvU7xqUz9G3dC6eEyvwvvO83bjisWxIl6ezcSWzTeRXcdOcxLnqmh/E2dmdcAfgdNCCO/lrgshBFquU0jeuqtDCPUhhPrhOVODbbEFXH219+U9/nhvjhAR6U06lIDNrBpPvr8LIdwRH37HzEbG9SOB+Rt78K98BX7yE7jlFh8w8aUvwb33tnSVFBEpZxba+SpgfrXBycCiEMJpOY9fBCzMOQk3JIRw1vvtq76+PsyYMWODx2fNguuu825oCxf6gIrjj4fDDlN/355yYMUXU4cgrckdWWReL1m1txxW9PHmAKv1ARphoDdFrBseJ/gZ5c0Dy8b481aM9eaN/uOWArDbZt5Nbe+B3jSxTR9veqikZTrKN9d5l7XHlvmJuWnzxgPw7mzvstZ/tscyYHbc91xvaqiZ700QtiQ2ScTrb21wAdESb5K4v+m2Lg396kgF/GHgGGA/M3syLp8EfgocaGYvAwfE+52y445wySXw1ltw221+/4ILvH146FD4zGfg5z/3SXVUHYtIuWi3Au5ObVXArcmGIP/lL3778sv++MCBPiJu332958TEidC37/vsSDpEFXAJyariDlbEDcNiRTzS1y8f5V8pV4yJf/tjfDDFVpv5dD8fGJidW4fRfZYA0Igf841VwwCYtdiHN8+e6yf8qmP3tP4+5oO6t71S6jc3DrGOU1+SP/Vl/gAOKKkua12tgIt2bNnIkXDUUb6AV8fZJDwPPwx33eWPV1V5xZzNB1Ff71NNxt9FEZGiVbQVcHveegv++c+WKShnzGiZXL262pNwlpB32cWvYqFKuW2qgEtYGxWx1fhkPVlFzCZeCTfGLmSrRvgfxIoRXhGvHOn7WT2ypetb7XCvWDfdxCvYgTXerWxtkz9nwQrf18JFfls5Lw7UmOf7qnvbq9nad7xtuHphvGDo4jiUefn6Fw6F0mofLtsKuD2jR/u0k5/7nN8PAd54oyUZz5wJf/iDd3UDP5E3YULLnMDZ5YU22yzdaxCR3q1kE3A+M7980LhxcPjh/lgI8OqrfvIuuwTR3/7m3d4ym266flKeOBG2286raJGS0MbUl9lUkRYHQVhsd62MPRMGxEsX1c7x2zXDvFJeNbwlLazc1CdkeWuYD39+fUi86Gh/H2pcWRUnE6rwGBo28fWrY4WcVeWNNbEy7hcvIFqTtVv7H5otzUlFccAJvWDKy7JJwK0xg6228uWLOd+wFy2Cp59e/9pwv/61D48GqKmBHXbYMDEPHZrmdYhIeSrrBNyWIUO8F8W++7Y8tm6dT/aem5TvvRcmT27ZZvTolqaLLClvs41fpl6kaLRXEceeBxYnzqlY6gNba+f7cOK+A+uadzVgsFfFa4Z6pbpqiFewawZ76lgXZ8sMfeNFSLM++zGEhnjeZc0gbyoNlqUc329NtT+hKqezf8VyP1Zz32HL6zscL3hKU+n3Se2VCbg11dV+ou4DH/CrImfeeWfDKynfd1/LBT7r6jwh77qrn+zbdVdva9bcxSLSHqWJdowYAQcd5Esmu8T9k0/CE0/4Cb9rrvGrMYNPJr/TTi0JedddYfvt1a4sibQ34U82GXy83JAtW9b81JqFXqlWx8l2ajfx++sGemm7Nl72aM0A/xrYEOdyb6xZv3OAxWK1KV5haV1drHhD7KmR065bWeHPteyrZWxHbm4jjJV88zNKuG1YCbgT+vSBnXf25YQT/LHGRr980syZftJv5kxvvrj8cl/fr59PNr/33r7stZfalEV6OyXgblJZ6SfudtgBjjnGH2tq8hF8M2d6n+XHHoOLLmppvpgwoSUh7723975Qe7IUXH5FnBWQrUyBSZxO0mJ/3YrFXrH27eeVcJ86v+1f5xVxQ51/zWuo9Qq3oa//QjdVxTbgrKhtjBPSV/rjjX1bUpE1eI+J7E/BmmKAlVkl7L0jsl4S2fwEpdBvOJ8ScAFVVHiSnTChpV155Urvp/zYY75MnQo33ODrhg6FAw5oafIYMyZd7CJSeErAPay21uey2Gcfvx+CV8nTpvm8F/fdB1Om+LoddmhJxvvsA/37p4tbeoG8C4cCLdXlBj0ovE+xLfOKN5uHok9fv62Jt6GfV8yN/Xy7pj6tT21Ysa5lBrZsZF+IPSSsJvYVzn9SVhnb+mtKqRLWF97EzGDbbeG44+DGG32I9dNPw8UXewV85ZXwyU9617lDD/XkvHJlu7sVkRKgCrjImPk8Fh/8IJx5JqxaBY8+Cvfc41N1Tp3qXd8OO8ybNQ44QL0rpIDa6kERLyaajbJrbiuuypuHIlav1fF+6Bu7QVR5dRuy/r+5pWBW2OZXuPE51hR/4Rvj+qxKj7Fm9XDIn7u2CCtiVcBFrl8/b4L45S/9AqYPPQRHHgl33+2V8ejRcO65PpG9iJSWkp0Nrbdbs8ZH6l1/vVfF/fvDpEleNY8evfH702xo0iX5M7LFvrzZ5WyaK+M4U1s2Uil7fL2RS9m+sn005vXzjZVxdqFP4si4sGb9uYWb55DIFKC/cE9cEUOKUJ8+3iZ8553wzDM+K9yvfgXjx8MZZ6idWKQUqA24DOy4o19P7/zz/SKnl1ziTRQ33uj9i0UKboO24qx6zetFsTZr842j3bI24Jy5ICzr75t/Mci83g5tXZ/M8ivoLMTG5g3WjzkhVcBlZPx4HxL90EM+udBHPuLtw0XweyYirVAFXIY+/nHvynbKKXDeed4cceGFGxYQIgWT/18/rxdF88P5bca5j1Xm1YfNc0PkVbDZ/axtuK2Kw/L2F9LPpqYEXKYGDPAmiP79ffhzTQ38+MepoxKRXErAZczMJwNavdrbhg85xK8kLZJMm5Vx7tezbG6H9SvW5io5r5LNKuXQuH51XQrUBlzmzLx3xNixcOKJLfOXiEh6SsC9QF0dXHopvPAC/OlPqaMRaUUIGy5NjestoTEuDevWW5rW+tK8PluawnoLoamlL3CRUALuJT7zGdhiC7jqqtSRiEhGCbiXqKiAY4/1GdeWLk0djYiAEnCv8rGP+Te7adNSRyLSCVnTxEayCvMTeFYBVtFyvwgoAfciu+/ut48/njYOEXHqhtaLDBjgFxl97bXUkYh0QRtd2drcvOn976ekCriX2WILn9ZSRNJTAu5lhg6FRYtSRyEioATc6wweDIsXp45CRGAjErCZVZrZE2Z2d7w/3symm9krZjbFzGoKF6Z0l9pazRUsUiw2pgL+NvB8zv0LgUtCCFsDi4GvdmdgUhj9+vl15kQkvQ4lYDMbA3wKuDbeN2A/4Pa4yWTgsEIEKN2ruhoaGtrfTkQKr6MV8C+Bs2i+XilDgSUhhOxPeQ7QiSuRSU+rqvLJ2kUkvXYTsJl9GpgfQpjZmQOY2SQzm2FmMxYsWNCZXUg3qqxsnrdaRBLrSAX8YeCzZvY6cCve9HApMMjMsoEcY4C3WntyCOHqEEJ9CKF++PDh3RCydEVFRZuX0hKRHtZuAg4hfC+EMCaEMA44EngohPAfwF+Aw+NmxwF3FixK6TZmukacSLHoSj/gs4EzzOwVvE34uu4JSQpJCVikeGzUXBAhhIeBh+PPrwK7d39IUki6MKdI8dBIOBGRRJSAexlVwCLFQwlYRCQRJWARkUSUgEVEElECFhFJRAlYRCQRJWARkUSUgEVEElECFhFJRAlYRCQRJWARkUSUgEVEElECFhFJRAlYRCQRJWARkUSUgEVEElECFhFJRAlYRCQRJWARkUSUgEVEElECFhFJRAlYRCQRJWARkUSUgEVEElECFhFJRAlYRCQRJWARkUSUgEVEElECFhFJRAlYRCQRJWARkUSUgEVEEulQAjazQWZ2u5m9YGbPm9leZjbEzO43s5fj7eBCBysiUk46WgFfCtwbQtgOmAg8D5wDPBhC2AZ4MN4XEZEOajcBm9lAYB/gOoAQwtoQwhLgUGBy3GwycFihghQRKUcdqYDHAwuAG8zsCTO71sz6AyNCCHPjNvOAEa092cwmmdkMM5uxYMGC7olaRKQMdCQBVwG7AFeEEHYGVpDX3BBCCEBo7ckhhKtDCPUhhPrhw4d3NV4RkbLRkQQ8B5gTQpge79+OJ+R3zGwkQLydX5gQRUTKU7sJOIQwD3jTzCbEh/YHngOmAsfFx44D7ixIhCIiZaqqg9udCvzOzGqAV4ET8OT9BzP7KvAG8KXChCgiUp46lIBDCE8C9a2s2r97wxER6T00Ek5EJBElYBGRRJSARUQSUQIWEUlECVhEJBElYBGRRJSARUQSUQIWEUlECVhEJBElYBGRRJSARUQSUQIWEUlECVhEJBElYBGRRJSARUQSUQIWEUlECVhEJBElYBGRRJSARUQSUQIWEUlECVhEJBElYBGRRJSARUQSUQIWEUlECVhEJBElYBGRRJSARUQSUQIWEUlECVhEJBElYBGRRJSARUQSUQIWEUmkQwnYzE43s2fNbJaZ3WJmfc1svJlNN7NXzGyKmdUUOlgRkXLSbgI2s9HAt4D6EMKOQCVwJHAhcEkIYWtgMfDVQgYqIlJuOtoEUQX0M7MqoBaYC+wH3B7XTwYO6/7wRETKV7sJOITwFnAxMBtPvEuBmcCSEEJD3GwOMLq155vZJDObYWYzFixY0D1Ri4iUgY40QQwGDgXGA6OA/sDBHT1ACOHqEEJ9CKF++PDhnQ5URKTcdKQJ4gDgtRDCghDCOuAO4MPAoNgkATAGeKtAMYqIlKWOJODZwJ5mVmtmBuwPPAf8BTg8bnMccGdhQhQRKU8daQOejp9sexx4Jj7nauBs4AwzewUYClxXwDhFRMpOVfubQAjhR8CP8h5+Fdi92yMSEeklNBJORCQRJWARkUSUgEVEElECFhFJRAlYRCQRJWARkUSUgEVEElECFhFJRAlYRCQRJWARkUSUgEVEElECFhFJRAlYRCQRJWARkUSUgEVEEunQfMAiImXHrOXnEJKEoApYRCQRVcAi0jslqnpzqQIWEUlECVhEJBElYBGRRJSARUQSUQIWEUlECVhEJBElYBGRRJSARUQSUQIWEUlECVhEJBENRRaR3qmisuXnpsY0ISQ5qoiIqAIWkV4qUdWbSxWwiEgiSsAiIokoAYuIJGKhByclNrMFwBs9dkDZGFuEEIanDkKkN+nRBCwiIi3UBCEikogSsIhIIkrAIiKJKAGLiCSiBCwikogSsIhIIkrAIiKJKAGLiCSiBCwiksj/B+yLRFH1yPu5AAAAAElFTkSuQmCC\n",
- "text/plain": [
- "<Figure size 360x360 with 3 Axes>"
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "lambd = 2e-3\n",
- "Gsm = ot.smooth.smooth_ot_dual(a, b, M, lambd, reg_type='kl')\n",
- "\n",
- "pl.figure(5, figsize=(5, 5))\n",
- "ot.plot.plot1D_mat(a, b, Gsm, 'OT matrix Smooth OT KL reg.')\n",
- "\n",
- "pl.show()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- "<Figure size 360x360 with 3 Axes>"
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "lambd = 1e-1\n",
- "Gsm = ot.smooth.smooth_ot_dual(a, b, M, lambd, reg_type='l2')\n",
- "\n",
- "pl.figure(6, figsize=(5, 5))\n",
- "ot.plot.plot1D_mat(a, b, Gsm, 'OT matrix Smooth OT l2 reg.')\n",
- "\n",
- "pl.show()"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.6.9"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 0
-}