summaryrefslogtreecommitdiff
path: root/notebooks/plot_free_support_barycenter.ipynb
diff options
context:
space:
mode:
authorRémi Flamary <remi.flamary@gmail.com>2020-04-22 11:39:23 +0200
committerRémi Flamary <remi.flamary@gmail.com>2020-04-22 11:39:23 +0200
commit135c011092cb442b0b874b565b6a2ca3f09234c4 (patch)
tree06a1a5209ee090824ae74af76bd2426295edc424 /notebooks/plot_free_support_barycenter.ipynb
parent5f679247f64fa1c8e277f34165850caea311a084 (diff)
remove notebooks and cleanup readme and doc
Diffstat (limited to 'notebooks/plot_free_support_barycenter.ipynb')
-rw-r--r--notebooks/plot_free_support_barycenter.ipynb171
1 files changed, 0 insertions, 171 deletions
diff --git a/notebooks/plot_free_support_barycenter.ipynb b/notebooks/plot_free_support_barycenter.ipynb
deleted file mode 100644
index 018353c..0000000
--- a/notebooks/plot_free_support_barycenter.ipynb
+++ /dev/null
@@ -1,171 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "%matplotlib inline"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "\n",
- "# 2D free support Wasserstein barycenters of distributions\n",
- "\n",
- "\n",
- "Illustration of 2D Wasserstein barycenters if discributions that are weighted\n",
- "sum of diracs.\n",
- "\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "# Author: Vivien Seguy <vivien.seguy@iip.ist.i.kyoto-u.ac.jp>\n",
- "#\n",
- "# License: MIT License\n",
- "\n",
- "import numpy as np\n",
- "import matplotlib.pylab as pl\n",
- "import ot"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Generate data\n",
- " -------------\n",
- "%% parameters and data generation\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "N = 3\n",
- "d = 2\n",
- "measures_locations = []\n",
- "measures_weights = []\n",
- "\n",
- "for i in range(N):\n",
- "\n",
- " n_i = np.random.randint(low=1, high=20) # nb samples\n",
- "\n",
- " mu_i = np.random.normal(0., 4., (d,)) # Gaussian mean\n",
- "\n",
- " A_i = np.random.rand(d, d)\n",
- " cov_i = np.dot(A_i, A_i.transpose()) # Gaussian covariance matrix\n",
- "\n",
- " x_i = ot.datasets.make_2D_samples_gauss(n_i, mu_i, cov_i) # Dirac locations\n",
- " b_i = np.random.uniform(0., 1., (n_i,))\n",
- " b_i = b_i / np.sum(b_i) # Dirac weights\n",
- "\n",
- " measures_locations.append(x_i)\n",
- " measures_weights.append(b_i)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Compute free support barycenter\n",
- "-------------\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "k = 10 # number of Diracs of the barycenter\n",
- "X_init = np.random.normal(0., 1., (k, d)) # initial Dirac locations\n",
- "b = np.ones((k,)) / k # weights of the barycenter (it will not be optimized, only the locations are optimized)\n",
- "\n",
- "X = ot.lp.free_support_barycenter(measures_locations, measures_weights, X_init, b)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Plot data\n",
- "---------\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "image/png": "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xEXHBbR/3qI8nPlO8hYHNl9LXHQcF/e72Odap9HR0Tz11FNs2bKFL774gr/97W9HzTdSZcSIEdXT3brdbvLz88nMzKzevmbNmmaZ19wff9PONiSRN8f0vf6EYprcxiRynb43vDSRtyIiwvS06UzsN7HelrnzoJMDqw6AgQMrD9TbKndEO5jUbxL3pt3rc/vxxx/PaaedBliX1Z966qns2bOn1n7Dhw/n888/B6zpYpOTk2nXrh0HDhygvLycrVu3ctppp1FUVMTZZ5/NaaedxqBBg1i0aBEAxcXF/PKXv2Tw4MEkJydXX+4/Y8YMBg4cSEpKCvfccw/gf/raBx98kKuuuooRI0Zw1VVX+Zy2dsaMGXz//fekpqYybdo0AJ544gnS0tJISUnhD3/4Q/VrCmT63preeustUlNTSU5OZu3atYD/aXVnz57N+PHjOeusszj77LO5+uqrWbhwYXVZkydPZtGiRbhcLu655x6Sk5NJSUmpniZgw4YNjB49mtNPP51x48bx008/AdYvg+nTp5Oenk7//v1ZuXIlFRUVPPDAA7z33nukpqby3nvvUVxczHXXXUd6ejpDhgypfi9qxqXCyBgT8n+nn366UcG1ZcuW6ttut9vM/26+SX873aS+mWqSZyfX+tdhbAdDFAYwRGE6nNXB536pb6aa9LfTzfzv5gccyw8//GB69uxpDh065HN77969zc6dO81LL71kXnzxRXPfffeZDz74wKxatcqMHDnSGGOM0+msfn5eXp7p27evcbvdZu7cueaGG26oLuvgwYMmPz/f9O/f37jdbmOMMQcOHDDGGHP55ZeblStXGmOM2blzpxkwYIAxxpg//OEP5rTTTjMlJSXGGGNuvfVW8/bbbxtjjCkvLzclJSXmhx9+MElJSdX1fPzxx+bGG280brfbuFwu88tf/tJ8+umnxhhj2rRpY4wxZvny5SYhIcHs3r3buFwuc8YZZ1TX72306NHVr+HTTz+trufQoUPG6XQaY4z55JNPzMSJE40xxrzxxhume/fupqCgwBhjzIoVK8yECROqX3/v3r2N0+k0L7zwgpk0aVJ1GQUFBaaiosIMGzbM5ObmGmOMeffdd821115bHcddd91ljDHmgw8+MGeffXZ1fb/97W+r4505c6Z56623qo9tv379TFFRUa24avL+TKrgANYbHzlVLwhqhUSE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\n",
- "text/plain": [
- "<Figure size 432x288 with 1 Axes>"
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "pl.figure(1)\n",
- "for (x_i, b_i) in zip(measures_locations, measures_weights):\n",
- " color = np.random.randint(low=1, high=10 * N)\n",
- " pl.scatter(x_i[:, 0], x_i[:, 1], s=b_i * 1000, label='input measure')\n",
- "pl.scatter(X[:, 0], X[:, 1], s=b * 1000, c='black', marker='^', label='2-Wasserstein barycenter')\n",
- "pl.title('Data measures and their barycenter')\n",
- "pl.legend(loc=0)\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
-}