summaryrefslogtreecommitdiff
path: root/docs/source/auto_examples/plot_OT_2D_samples.rst
diff options
context:
space:
mode:
Diffstat (limited to 'docs/source/auto_examples/plot_OT_2D_samples.rst')
-rw-r--r--docs/source/auto_examples/plot_OT_2D_samples.rst172
1 files changed, 116 insertions, 56 deletions
diff --git a/docs/source/auto_examples/plot_OT_2D_samples.rst b/docs/source/auto_examples/plot_OT_2D_samples.rst
index e05e591..5565c54 100644
--- a/docs/source/auto_examples/plot_OT_2D_samples.rst
+++ b/docs/source/auto_examples/plot_OT_2D_samples.rst
@@ -7,131 +7,191 @@
2D Optimal transport between empirical distributions
====================================================
-@author: rflamary
+Illustration of 2D optimal transport between discributions that are weighted
+sum of diracs. The OT matrix is plotted with the samples.
-.. rst-class:: sphx-glr-horizontal
+.. code-block:: python
- *
+ # Author: Remi Flamary <remi.flamary@unice.fr>
+ #
+ # License: MIT License
- .. image:: /auto_examples/images/sphx_glr_plot_OT_2D_samples_001.png
- :scale: 47
+ import numpy as np
+ import matplotlib.pylab as pl
+ import ot
- *
- .. image:: /auto_examples/images/sphx_glr_plot_OT_2D_samples_002.png
- :scale: 47
- *
- .. image:: /auto_examples/images/sphx_glr_plot_OT_2D_samples_003.png
- :scale: 47
- *
- .. image:: /auto_examples/images/sphx_glr_plot_OT_2D_samples_004.png
- :scale: 47
- *
+Generate data
+-------------
- .. image:: /auto_examples/images/sphx_glr_plot_OT_2D_samples_005.png
- :scale: 47
- *
- .. image:: /auto_examples/images/sphx_glr_plot_OT_2D_samples_006.png
- :scale: 47
+.. code-block:: python
-.. rst-class:: sphx-glr-script-out
+ #%% parameters and data generation
- Out::
+ n = 50 # nb samples
- ('Warning: numerical errors at iteration', 0)
+ mu_s = np.array([0, 0])
+ cov_s = np.array([[1, 0], [0, 1]])
+ mu_t = np.array([4, 4])
+ cov_t = np.array([[1, -.8], [-.8, 1]])
+ xs = ot.datasets.get_2D_samples_gauss(n, mu_s, cov_s)
+ xt = ot.datasets.get_2D_samples_gauss(n, mu_t, cov_t)
+ a, b = np.ones((n,)) / n, np.ones((n,)) / n # uniform distribution on samples
-|
+ # loss matrix
+ M = ot.dist(xs, xt)
+ M /= M.max()
-.. code-block:: python
- import numpy as np
- import matplotlib.pylab as pl
- import ot
- #%% parameters and data generation
- n=50 # nb samples
- mu_s=np.array([0,0])
- cov_s=np.array([[1,0],[0,1]])
+Plot data
+---------
- mu_t=np.array([4,4])
- cov_t=np.array([[1,-.8],[-.8,1]])
- xs=ot.datasets.get_2D_samples_gauss(n,mu_s,cov_s)
- xt=ot.datasets.get_2D_samples_gauss(n,mu_t,cov_t)
- a,b = ot.unif(n),ot.unif(n) # uniform distribution on samples
+.. code-block:: python
- # loss matrix
- M=ot.dist(xs,xt)
- M/=M.max()
#%% plot samples
pl.figure(1)
- pl.plot(xs[:,0],xs[:,1],'+b',label='Source samples')
- pl.plot(xt[:,0],xt[:,1],'xr',label='Target samples')
+ pl.plot(xs[:, 0], xs[:, 1], '+b', label='Source samples')
+ pl.plot(xt[:, 0], xt[:, 1], 'xr', label='Target samples')
pl.legend(loc=0)
- pl.title('Source and traget distributions')
+ pl.title('Source and target distributions')
pl.figure(2)
- pl.imshow(M,interpolation='nearest')
+ pl.imshow(M, interpolation='nearest')
pl.title('Cost matrix M')
+
+
+.. rst-class:: sphx-glr-horizontal
+
+
+ *
+
+ .. image:: /auto_examples/images/sphx_glr_plot_OT_2D_samples_001.png
+ :scale: 47
+
+ *
+
+ .. image:: /auto_examples/images/sphx_glr_plot_OT_2D_samples_002.png
+ :scale: 47
+
+
+
+
+Compute EMD
+-----------
+
+
+
+.. code-block:: python
+
+
#%% EMD
- G0=ot.emd(a,b,M)
+ G0 = ot.emd(a, b, M)
pl.figure(3)
- pl.imshow(G0,interpolation='nearest')
+ pl.imshow(G0, interpolation='nearest')
pl.title('OT matrix G0')
pl.figure(4)
- ot.plot.plot2D_samples_mat(xs,xt,G0,c=[.5,.5,1])
- pl.plot(xs[:,0],xs[:,1],'+b',label='Source samples')
- pl.plot(xt[:,0],xt[:,1],'xr',label='Target samples')
+ ot.plot.plot2D_samples_mat(xs, xt, G0, c=[.5, .5, 1])
+ pl.plot(xs[:, 0], xs[:, 1], '+b', label='Source samples')
+ pl.plot(xt[:, 0], xt[:, 1], 'xr', label='Target samples')
pl.legend(loc=0)
pl.title('OT matrix with samples')
+
+
+
+.. rst-class:: sphx-glr-horizontal
+
+
+ *
+
+ .. image:: /auto_examples/images/sphx_glr_plot_OT_2D_samples_005.png
+ :scale: 47
+
+ *
+
+ .. image:: /auto_examples/images/sphx_glr_plot_OT_2D_samples_006.png
+ :scale: 47
+
+
+
+
+Compute Sinkhorn
+----------------
+
+
+
+.. code-block:: python
+
+
#%% sinkhorn
# reg term
- lambd=5e-4
+ lambd = 1e-3
- Gs=ot.sinkhorn(a,b,M,lambd)
+ Gs = ot.sinkhorn(a, b, M, lambd)
pl.figure(5)
- pl.imshow(Gs,interpolation='nearest')
+ pl.imshow(Gs, interpolation='nearest')
pl.title('OT matrix sinkhorn')
pl.figure(6)
- ot.plot.plot2D_samples_mat(xs,xt,Gs,color=[.5,.5,1])
- pl.plot(xs[:,0],xs[:,1],'+b',label='Source samples')
- pl.plot(xt[:,0],xt[:,1],'xr',label='Target samples')
+ ot.plot.plot2D_samples_mat(xs, xt, Gs, color=[.5, .5, 1])
+ pl.plot(xs[:, 0], xs[:, 1], '+b', label='Source samples')
+ pl.plot(xt[:, 0], xt[:, 1], 'xr', label='Target samples')
pl.legend(loc=0)
pl.title('OT matrix Sinkhorn with samples')
-**Total running time of the script:** ( 0 minutes 0.623 seconds)
+ pl.show()
+
+
+
+.. rst-class:: sphx-glr-horizontal
+
+
+ *
+
+ .. image:: /auto_examples/images/sphx_glr_plot_OT_2D_samples_009.png
+ :scale: 47
+
+ *
+
+ .. image:: /auto_examples/images/sphx_glr_plot_OT_2D_samples_010.png
+ :scale: 47
+
+
+
+
+**Total running time of the script:** ( 0 minutes 3.380 seconds)