summaryrefslogtreecommitdiff
path: root/docs/source/auto_examples/auto_examples_python.zip
blob: aa06bb641b83ae9a56a82d983ca9b9b95677edd1 (plain)
ofshex dumpascii
0000 50 4b 03 04 14 00 00 00 00 00 09 6f 2f 4b fc f7 6b 6f da 09 00 00 da 09 00 00 1c 00 00 00 61 75 PK.........o/K..ko............au
0020 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 67 72 6f 6d 6f 76 2e 70 79 23 20 2d 2a 2d 20 to_examples/plot_gromov.py#.-*-.
0040 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0d 0a 22 22 22 0d 0a 3d 3d 3d 3d 3d 3d 3d 3d coding:.utf-8.-*-.."""..========
0060 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 47 72 6f 6d 6f 76 2d 57 61 73 73 65 ==================..Gromov-Wasse
0080 72 73 74 65 69 6e 20 65 78 61 6d 70 6c 65 0d 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d rstein.example..================
00a0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 0d 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 73 20 64 65 ==========....This.example.is.de
00c0 73 69 67 6e 65 64 20 74 6f 20 73 68 6f 77 20 68 6f 77 20 74 6f 20 75 73 65 20 74 68 65 20 47 72 signed.to.show.how.to.use.the.Gr
00e0 6f 6d 6f 76 2d 57 61 73 73 65 72 74 73 65 69 6e 20 64 69 73 74 61 6e 63 65 0d 0a 63 6f 6d 70 75 omov-Wassertsein.distance..compu
0100 74 61 74 69 6f 6e 20 69 6e 20 50 4f 54 2e 0d 0a 22 22 22 0d 0a 0d 0a 23 20 41 75 74 68 6f 72 3a tation.in.POT..."""....#.Author:
0120 20 45 72 77 61 6e 20 56 61 75 74 69 65 72 20 3c 65 72 77 61 6e 2e 76 61 75 74 69 65 72 40 67 6d .Erwan.Vautier.<erwan.vautier@gm
0140 61 69 6c 2e 63 6f 6d 3e 0d 0a 23 20 20 20 20 20 20 20 20 20 4e 69 63 6f 6c 61 73 20 43 6f 75 72 ail.com>..#.........Nicolas.Cour
0160 74 79 20 3c 6e 63 6f 75 72 74 79 40 69 72 69 73 61 2e 66 72 3e 0d 0a 23 0d 0a 23 20 4c 69 63 65 ty.<ncourty@irisa.fr>..#..#.Lice
0180 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0d 0a 0d 0a 69 6d 70 6f 72 74 20 73 63 69 70 79 nse:.MIT.License....import.scipy
01a0 20 61 73 20 73 70 0d 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0d 0a 69 6d 70 6f .as.sp..import.numpy.as.np..impo
01c0 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0d 0a 66 72 6f 6d 20 rt.matplotlib.pylab.as.pl..from.
01e0 6d 70 6c 5f 74 6f 6f 6c 6b 69 74 73 2e 6d 70 6c 6f 74 33 64 20 69 6d 70 6f 72 74 20 41 78 65 73 mpl_toolkits.mplot3d.import.Axes
0200 33 44 20 20 23 20 6e 6f 71 61 0d 0a 69 6d 70 6f 72 74 20 6f 74 0d 0a 0d 0a 0d 0a 23 23 23 23 23 3D..#.noqa..import.ot......#####
0220 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
0240 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
0260 23 23 23 23 23 23 23 23 23 0d 0a 23 20 53 61 6d 70 6c 65 20 74 77 6f 20 47 61 75 73 73 69 61 6e #########..#.Sample.two.Gaussian
0280 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 28 32 44 20 61 6e 64 20 33 44 29 0d 0a 23 20 2d 2d .distributions.(2D.and.3D)..#.--
02a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d --------------------------------
02c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 0d 0a 23 20 54 68 65 20 47 72 6f 6d 6f 76 2d 57 61 73 -----------..#..#.The.Gromov-Was
02e0 73 65 72 73 74 65 69 6e 20 64 69 73 74 61 6e 63 65 20 61 6c 6c 6f 77 73 20 74 6f 20 63 6f 6d 70 serstein.distance.allows.to.comp
0300 75 74 65 20 64 69 73 74 61 6e 63 65 73 20 77 69 74 68 20 73 61 6d 70 6c 65 73 20 74 68 61 74 0d ute.distances.with.samples.that.
0320 0a 23 20 64 6f 20 6e 6f 74 20 62 65 6c 6f 6e 67 20 74 6f 20 74 68 65 20 73 61 6d 65 20 6d 65 74 .#.do.not.belong.to.the.same.met
0340 72 69 63 20 73 70 61 63 65 2e 20 46 6f 72 20 64 65 6d 6f 6e 73 74 72 61 74 69 6f 6e 20 70 75 72 ric.space..For.demonstration.pur
0360 70 6f 73 65 2c 20 77 65 20 73 61 6d 70 6c 65 0d 0a 23 20 74 77 6f 20 47 61 75 73 73 69 61 6e 20 pose,.we.sample..#.two.Gaussian.
0380 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 69 6e 20 32 2d 20 61 6e 64 20 33 2d 64 69 6d 65 6e 73 distributions.in.2-.and.3-dimens
03a0 69 6f 6e 61 6c 20 73 70 61 63 65 73 2e 0d 0a 0d 0a 0d 0a 6e 5f 73 61 6d 70 6c 65 73 20 3d 20 33 ional.spaces.......n_samples.=.3
03c0 30 20 20 23 20 6e 62 20 73 61 6d 70 6c 65 73 0d 0a 0d 0a 6d 75 5f 73 20 3d 20 6e 70 2e 61 72 72 0..#.nb.samples....mu_s.=.np.arr
03e0 61 79 28 5b 30 2c 20 30 5d 29 0d 0a 63 6f 76 5f 73 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 5b 31 ay([0,.0])..cov_s.=.np.array([[1
0400 2c 20 30 5d 2c 20 5b 30 2c 20 31 5d 5d 29 0d 0a 0d 0a 6d 75 5f 74 20 3d 20 6e 70 2e 61 72 72 61 ,.0],.[0,.1]])....mu_t.=.np.arra
0420 79 28 5b 34 2c 20 34 2c 20 34 5d 29 0d 0a 63 6f 76 5f 74 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b y([4,.4,.4])..cov_t.=.np.array([
0440 5b 31 2c 20 30 2c 20 30 5d 2c 20 5b 30 2c 20 31 2c 20 30 5d 2c 20 5b 30 2c 20 30 2c 20 31 5d 5d [1,.0,.0],.[0,.1,.0],.[0,.0,.1]]
0460 29 0d 0a 0d 0a 0d 0a 78 73 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 32 44 5f 73 )......xs.=.ot.datasets.get_2D_s
0480 61 6d 70 6c 65 73 5f 67 61 75 73 73 28 6e 5f 73 61 6d 70 6c 65 73 2c 20 6d 75 5f 73 2c 20 63 6f amples_gauss(n_samples,.mu_s,.co
04a0 76 5f 73 29 0d 0a 50 20 3d 20 73 70 2e 6c 69 6e 61 6c 67 2e 73 71 72 74 6d 28 63 6f 76 5f 74 29 v_s)..P.=.sp.linalg.sqrtm(cov_t)
04c0 0d 0a 78 74 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 6e 28 6e 5f 73 61 6d 70 6c 65 73 ..xt.=.np.random.randn(n_samples
04e0 2c 20 33 29 2e 64 6f 74 28 50 29 20 2b 20 6d 75 5f 74 0d 0a 0d 0a 0d 0a 23 23 23 23 23 23 23 23 ,.3).dot(P).+.mu_t......########
0500 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
0520 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
0540 23 23 23 23 23 23 0d 0a 23 20 50 6c 6f 74 74 69 6e 67 20 74 68 65 20 64 69 73 74 72 69 62 75 74 ######..#.Plotting.the.distribut
0560 69 6f 6e 73 0d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ions..#.------------------------
0580 2d 2d 0d 0a 0d 0a 0d 0a 66 69 67 20 3d 20 70 6c 2e 66 69 67 75 72 65 28 29 0d 0a 61 78 31 20 3d --......fig.=.pl.figure()..ax1.=
05a0 20 66 69 67 2e 61 64 64 5f 73 75 62 70 6c 6f 74 28 31 32 31 29 0d 0a 61 78 31 2e 70 6c 6f 74 28 .fig.add_subplot(121)..ax1.plot(
05c0 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d xs[:,.0],.xs[:,.1],.'+b',.label=
05e0 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0d 0a 61 78 32 20 3d 20 66 69 67 2e 61 64 64 'Source.samples')..ax2.=.fig.add
0600 5f 73 75 62 70 6c 6f 74 28 31 32 32 2c 20 70 72 6f 6a 65 63 74 69 6f 6e 3d 27 33 64 27 29 0d 0a _subplot(122,.projection='3d')..
0620 61 78 32 2e 73 63 61 74 74 65 72 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 ax2.scatter(xt[:,.0],.xt[:,.1],.
0640 78 74 5b 3a 2c 20 32 5d 2c 20 63 6f 6c 6f 72 3d 27 72 27 29 0d 0a 70 6c 2e 73 68 6f 77 28 29 0d xt[:,.2],.color='r')..pl.show().
0660 0a 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 .....###########################
0680 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
06a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 23 20 43 6f 6d 70 75 74 65 20 64 ###################..#.Compute.d
06c0 69 73 74 61 6e 63 65 20 6b 65 72 6e 65 6c 73 2c 20 6e 6f 72 6d 61 6c 69 7a 65 20 74 68 65 6d 20 istance.kernels,.normalize.them.
06e0 61 6e 64 20 74 68 65 6e 20 64 69 73 70 6c 61 79 0d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d and.then.display..#.------------
0700 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d --------------------------------
0720 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 0d 0a 43 31 20 3d 20 73 70 2e 73 70 61 74 69 -------------......C1.=.sp.spati
0740 61 6c 2e 64 69 73 74 61 6e 63 65 2e 63 64 69 73 74 28 78 73 2c 20 78 73 29 0d 0a 43 32 20 3d 20 al.distance.cdist(xs,.xs)..C2.=.
0760 73 70 2e 73 70 61 74 69 61 6c 2e 64 69 73 74 61 6e 63 65 2e 63 64 69 73 74 28 78 74 2c 20 78 74 sp.spatial.distance.cdist(xt,.xt
0780 29 0d 0a 0d 0a 43 31 20 2f 3d 20 43 31 2e 6d 61 78 28 29 0d 0a 43 32 20 2f 3d 20 43 32 2e 6d 61 )....C1./=.C1.max()..C2./=.C2.ma
07a0 78 28 29 0d 0a 0d 0a 70 6c 2e 66 69 67 75 72 65 28 29 0d 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 x()....pl.figure()..pl.subplot(1
07c0 32 31 29 0d 0a 70 6c 2e 69 6d 73 68 6f 77 28 43 31 29 0d 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 21)..pl.imshow(C1)..pl.subplot(1
07e0 32 32 29 0d 0a 70 6c 2e 69 6d 73 68 6f 77 28 43 32 29 0d 0a 70 6c 2e 73 68 6f 77 28 29 0d 0a 0d 22)..pl.imshow(C2)..pl.show()...
0800 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 .###############################
0820 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
0840 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 23 20 43 6f 6d 70 75 74 65 20 47 72 6f 6d 6f ###############..#.Compute.Gromo
0860 76 2d 57 61 73 73 65 72 73 74 65 69 6e 20 70 6c 61 6e 73 20 61 6e 64 20 64 69 73 74 61 6e 63 65 v-Wasserstein.plans.and.distance
0880 0d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ..#.----------------------------
08a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 0d 0a 70 20 3d 20 6f 74 2e 75 6e -----------------......p.=.ot.un
08c0 69 66 28 6e 5f 73 61 6d 70 6c 65 73 29 0d 0a 71 20 3d 20 6f 74 2e 75 6e 69 66 28 6e 5f 73 61 6d if(n_samples)..q.=.ot.unif(n_sam
08e0 70 6c 65 73 29 0d 0a 0d 0a 67 77 20 3d 20 6f 74 2e 67 72 6f 6d 6f 76 5f 77 61 73 73 65 72 73 74 ples)....gw.=.ot.gromov_wasserst
0900 65 69 6e 28 43 31 2c 20 43 32 2c 20 70 2c 20 71 2c 20 27 73 71 75 61 72 65 5f 6c 6f 73 73 27 2c ein(C1,.C2,.p,.q,.'square_loss',
0920 20 65 70 73 69 6c 6f 6e 3d 35 65 2d 34 29 0d 0a 67 77 5f 64 69 73 74 20 3d 20 6f 74 2e 67 72 6f .epsilon=5e-4)..gw_dist.=.ot.gro
0940 6d 6f 76 5f 77 61 73 73 65 72 73 74 65 69 6e 32 28 43 31 2c 20 43 32 2c 20 70 2c 20 71 2c 20 27 mov_wasserstein2(C1,.C2,.p,.q,.'
0960 73 71 75 61 72 65 5f 6c 6f 73 73 27 2c 20 65 70 73 69 6c 6f 6e 3d 35 65 2d 34 29 0d 0a 0d 0a 70 square_loss',.epsilon=5e-4)....p
0980 72 69 6e 74 28 27 47 72 6f 6d 6f 76 2d 57 61 73 73 65 72 73 74 65 69 6e 20 64 69 73 74 61 6e 63 rint('Gromov-Wasserstein.distanc
09a0 65 73 20 62 65 74 77 65 65 6e 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 3a 20 27 20 2b es.between.the.distribution:.'.+
09c0 20 73 74 72 28 67 77 5f 64 69 73 74 29 29 0d 0a 0d 0a 70 6c 2e 66 69 67 75 72 65 28 29 0d 0a 70 .str(gw_dist))....pl.figure()..p
09e0 6c 2e 69 6d 73 68 6f 77 28 67 77 2c 20 63 6d 61 70 3d 27 6a 65 74 27 29 0d 0a 70 6c 2e 63 6f 6c l.imshow(gw,.cmap='jet')..pl.col
0a00 6f 72 62 61 72 28 29 0d 0a 70 6c 2e 73 68 6f 77 28 29 0d 0a 50 4b 03 04 14 00 00 00 00 00 09 6f orbar()..pl.show()..PK.........o
0a20 2f 4b a4 4f 47 3f 0c 0c 00 00 0c 0c 00 00 19 00 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f /K.OG?............auto_examples/
0a40 70 6c 6f 74 5f 57 44 41 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d plot_WDA.py#.-*-.coding:.utf-8.-
0a60 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d *-.""".=========================
0a80 3d 3d 3d 3d 3d 3d 3d 3d 0a 57 61 73 73 65 72 73 74 65 69 6e 20 44 69 73 63 72 69 6d 69 6e 61 6e ========.Wasserstein.Discriminan
0aa0 74 20 41 6e 61 6c 79 73 69 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d t.Analysis.=====================
0ac0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 6c 6c 75 73 ============..This.example.illus
0ae0 74 72 61 74 65 20 74 68 65 20 75 73 65 20 6f 66 20 57 44 41 20 61 73 20 70 72 6f 70 6f 73 65 64 trate.the.use.of.WDA.as.proposed
0b00 20 69 6e 20 5b 31 31 5d 2e 0a 0a 0a 5b 31 31 5d 20 46 6c 61 6d 61 72 79 2c 20 52 2e 2c 20 43 75 .in.[11]....[11].Flamary,.R.,.Cu
0b20 74 75 72 69 2c 20 4d 2e 2c 20 43 6f 75 72 74 79 2c 20 4e 2e 2c 20 26 20 52 61 6b 6f 74 6f 6d 61 turi,.M.,.Courty,.N.,.&.Rakotoma
0b40 6d 6f 6e 6a 79 2c 20 41 2e 20 28 32 30 31 36 29 2e 0a 57 61 73 73 65 72 73 74 65 69 6e 20 44 69 monjy,.A..(2016)..Wasserstein.Di
0b60 73 63 72 69 6d 69 6e 61 6e 74 20 41 6e 61 6c 79 73 69 73 2e 0a 0a 22 22 22 0a 0a 23 20 41 75 74 scriminant.Analysis..."""..#.Aut
0b80 68 6f 72 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 hor:.Remi.Flamary.<remi.flamary@
0ba0 75 6e 69 63 65 2e 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e unice.fr>.#.#.License:.MIT.Licen
0bc0 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 se..import.numpy.as.np.import.ma
0be0 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 0a 66 72 6f 6d 20 6f 74 2e 64 72 tplotlib.pylab.as.pl..from.ot.dr
0c00 20 69 6d 70 6f 72 74 20 77 64 61 2c 20 66 64 61 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 .import.wda,.fda...#############
0c20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
0c40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
0c60 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d #.#.Generate.data.#.------------
0c80 2d 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 6e 20 3d 20 31 30 30 30 20 20 23 20 6e -..#%%.parameters..n.=.1000..#.n
0ca0 62 20 73 61 6d 70 6c 65 73 20 69 6e 20 73 6f 75 72 63 65 20 61 6e 64 20 74 61 72 67 65 74 20 64 b.samples.in.source.and.target.d
0cc0 61 74 61 73 65 74 73 0a 6e 7a 20 3d 20 30 2e 32 0a 0a 23 20 67 65 6e 65 72 61 74 65 20 63 69 72 atasets.nz.=.0.2..#.generate.cir
0ce0 63 6c 65 20 64 61 74 61 73 65 74 0a 74 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 28 6e cle.dataset.t.=.np.random.rand(n
0d00 29 20 2a 20 32 20 2a 20 6e 70 2e 70 69 0a 79 73 20 3d 20 6e 70 2e 66 6c 6f 6f 72 28 28 6e 70 2e ).*.2.*.np.pi.ys.=.np.floor((np.
0d20 61 72 61 6e 67 65 28 6e 29 20 2a 20 31 2e 30 20 2f 20 6e 20 2a 20 33 29 29 20 2b 20 31 0a 78 73 arange(n).*.1.0./.n.*.3)).+.1.xs
0d40 20 3d 20 6e 70 2e 63 6f 6e 63 61 74 65 6e 61 74 65 28 0a 20 20 20 20 28 6e 70 2e 63 6f 73 28 74 .=.np.concatenate(.....(np.cos(t
0d60 29 2e 72 65 73 68 61 70 65 28 28 2d 31 2c 20 31 29 29 2c 20 6e 70 2e 73 69 6e 28 74 29 2e 72 65 ).reshape((-1,.1)),.np.sin(t).re
0d80 73 68 61 70 65 28 28 2d 31 2c 20 31 29 29 29 2c 20 31 29 0a 78 73 20 3d 20 78 73 20 2a 20 79 73 shape((-1,.1))),.1).xs.=.xs.*.ys
0da0 2e 72 65 73 68 61 70 65 28 2d 31 2c 20 31 29 20 2b 20 6e 7a 20 2a 20 6e 70 2e 72 61 6e 64 6f 6d .reshape(-1,.1).+.nz.*.np.random
0dc0 2e 72 61 6e 64 6e 28 6e 2c 20 32 29 0a 0a 74 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 .randn(n,.2)..t.=.np.random.rand
0de0 28 6e 29 20 2a 20 32 20 2a 20 6e 70 2e 70 69 0a 79 74 20 3d 20 6e 70 2e 66 6c 6f 6f 72 28 28 6e (n).*.2.*.np.pi.yt.=.np.floor((n
0e00 70 2e 61 72 61 6e 67 65 28 6e 29 20 2a 20 31 2e 30 20 2f 20 6e 20 2a 20 33 29 29 20 2b 20 31 0a p.arange(n).*.1.0./.n.*.3)).+.1.
0e20 78 74 20 3d 20 6e 70 2e 63 6f 6e 63 61 74 65 6e 61 74 65 28 0a 20 20 20 20 28 6e 70 2e 63 6f 73 xt.=.np.concatenate(.....(np.cos
0e40 28 74 29 2e 72 65 73 68 61 70 65 28 28 2d 31 2c 20 31 29 29 2c 20 6e 70 2e 73 69 6e 28 74 29 2e (t).reshape((-1,.1)),.np.sin(t).
0e60 72 65 73 68 61 70 65 28 28 2d 31 2c 20 31 29 29 29 2c 20 31 29 0a 78 74 20 3d 20 78 74 20 2a 20 reshape((-1,.1))),.1).xt.=.xt.*.
0e80 79 74 2e 72 65 73 68 61 70 65 28 2d 31 2c 20 31 29 20 2b 20 6e 7a 20 2a 20 6e 70 2e 72 61 6e 64 yt.reshape(-1,.1).+.nz.*.np.rand
0ea0 6f 6d 2e 72 61 6e 64 6e 28 6e 2c 20 32 29 0a 0a 6e 62 6e 6f 69 73 65 20 3d 20 38 0a 0a 78 73 20 om.randn(n,.2)..nbnoise.=.8..xs.
0ec0 3d 20 6e 70 2e 68 73 74 61 63 6b 28 28 78 73 2c 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 6e =.np.hstack((xs,.np.random.randn
0ee0 28 6e 2c 20 6e 62 6e 6f 69 73 65 29 29 29 0a 78 74 20 3d 20 6e 70 2e 68 73 74 61 63 6b 28 28 78 (n,.nbnoise))).xt.=.np.hstack((x
0f00 74 2c 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 6e 28 6e 2c 20 6e 62 6e 6f 69 73 65 29 29 29 t,.np.random.randn(n,.nbnoise)))
0f20 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ..##############################
0f40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
0f60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 64 61 74 61 0a 23 20 2d ################.#.Plot.data.#.-
0f80 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 6c 6f 74 20 73 61 6d 70 6c 65 73 0a 70 6c 2e 66 69 --------..#%%.plot.samples.pl.fi
0fa0 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 2e 35 29 29 0a 0a 70 6c 2e gure(1,.figsize=(6.4,.3.5))..pl.
0fc0 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 74 5b 3a subplot(1,.2,.1).pl.scatter(xt[:
0fe0 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 ,.0],.xt[:,.1],.c=ys,.marker='+'
1000 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 ,.label='Source.samples').pl.leg
1020 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 44 69 73 63 72 69 6d 69 6e 61 6e end(loc=0).pl.title('Discriminan
1040 74 20 64 69 6d 65 6e 73 69 6f 6e 73 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c t.dimensions')..pl.subplot(1,.2,
1060 20 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 74 5b 3a 2c 20 32 5d 2c 20 78 74 5b 3a 2c 20 33 .2).pl.scatter(xt[:,.2],.xt[:,.3
1080 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 ],.c=ys,.marker='+',.label='Sour
10a0 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c ce.samples').pl.legend(loc=0).pl
10c0 2e 74 69 74 6c 65 28 27 4f 74 68 65 72 20 64 69 6d 65 6e 73 69 6f 6e 73 27 29 0a 70 6c 2e 74 69 .title('Other.dimensions').pl.ti
10e0 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ght_layout()..##################
1100 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
1120 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 43 ############################.#.C
1140 6f 6d 70 75 74 65 20 46 69 73 68 65 72 20 44 69 73 63 72 69 6d 69 6e 61 6e 74 20 41 6e 61 6c 79 ompute.Fisher.Discriminant.Analy
1160 73 69 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d sis.#.--------------------------
1180 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 43 6f 6d 70 75 74 65 20 46 44 41 0a 70 20 3d 20 ----------..#%%.Compute.FDA.p.=.
11a0 32 0a 0a 50 66 64 61 2c 20 70 72 6f 6a 66 64 61 20 3d 20 66 64 61 28 78 73 2c 20 79 73 2c 20 70 2..Pfda,.projfda.=.fda(xs,.ys,.p
11c0 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 )..#############################
11e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
1200 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 43 6f 6d 70 75 74 65 20 57 61 73 73 #################.#.Compute.Wass
1220 65 72 73 74 65 69 6e 20 44 69 73 63 72 69 6d 69 6e 61 6e 74 20 41 6e 61 6c 79 73 69 73 0a 23 20 erstein.Discriminant.Analysis.#.
1240 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d --------------------------------
1260 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 43 6f 6d 70 75 74 65 20 57 44 41 0a 70 20 3d 20 32 ---------..#%%.Compute.WDA.p.=.2
1280 0a 72 65 67 20 3d 20 31 65 30 0a 6b 20 3d 20 31 30 0a 6d 61 78 69 74 65 72 20 3d 20 31 30 30 0a .reg.=.1e0.k.=.10.maxiter.=.100.
12a0 0a 50 77 64 61 2c 20 70 72 6f 6a 77 64 61 20 3d 20 77 64 61 28 78 73 2c 20 79 73 2c 20 70 2c 20 .Pwda,.projwda.=.wda(xs,.ys,.p,.
12c0 72 65 67 2c 20 6b 2c 20 6d 61 78 69 74 65 72 3d 6d 61 78 69 74 65 72 29 0a 0a 0a 23 23 23 23 23 reg,.k,.maxiter=maxiter)...#####
12e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
1300 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
1320 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 32 44 20 70 72 6f 6a 65 63 74 69 6f 6e 73 0a #########.#.Plot.2D.projections.
1340 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 6c 6f 74 20 #.-------------------..#%%.plot.
1360 73 61 6d 70 6c 65 73 0a 0a 78 73 70 20 3d 20 70 72 6f 6a 66 64 61 28 78 73 29 0a 78 74 70 20 3d samples..xsp.=.projfda(xs).xtp.=
1380 20 70 72 6f 6a 66 64 61 28 78 74 29 0a 0a 78 73 70 77 20 3d 20 70 72 6f 6a 77 64 61 28 78 73 29 .projfda(xt)..xspw.=.projwda(xs)
13a0 0a 78 74 70 77 20 3d 20 70 72 6f 6a 77 64 61 28 78 74 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 .xtpw.=.projwda(xt)..pl.figure(2
13c0 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 63 61 74 74 65 )..pl.subplot(2,.2,.1).pl.scatte
13e0 72 28 78 73 70 5b 3a 2c 20 30 5d 2c 20 78 73 70 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 r(xsp[:,.0],.xsp[:,.1],.c=ys,.ma
1400 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 50 72 6f 6a 65 63 74 65 64 20 73 61 6d 70 6c rker='+',.label='Projected.sampl
1420 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 es').pl.legend(loc=0).pl.title('
1440 50 72 6f 6a 65 63 74 65 64 20 74 72 61 69 6e 69 6e 67 20 73 61 6d 70 6c 65 73 20 46 44 41 27 29 Projected.training.samples.FDA')
1460 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 ..pl.subplot(2,.2,.2).pl.scatter
1480 28 78 74 70 5b 3a 2c 20 30 5d 2c 20 78 74 70 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 (xtp[:,.0],.xtp[:,.1],.c=ys,.mar
14a0 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 50 72 6f 6a 65 63 74 65 64 20 73 61 6d 70 6c 65 ker='+',.label='Projected.sample
14c0 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 50 s').pl.legend(loc=0).pl.title('P
14e0 72 6f 6a 65 63 74 65 64 20 74 65 73 74 20 73 61 6d 70 6c 65 73 20 46 44 41 27 29 0a 0a 70 6c 2e rojected.test.samples.FDA')..pl.
1500 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 33 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 73 70 77 subplot(2,.2,.3).pl.scatter(xspw
1520 5b 3a 2c 20 30 5d 2c 20 78 73 70 77 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 [:,.0],.xspw[:,.1],.c=ys,.marker
1540 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 50 72 6f 6a 65 63 74 65 64 20 73 61 6d 70 6c 65 73 27 29 ='+',.label='Projected.samples')
1560 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 50 72 6f 6a .pl.legend(loc=0).pl.title('Proj
1580 65 63 74 65 64 20 74 72 61 69 6e 69 6e 67 20 73 61 6d 70 6c 65 73 20 57 44 41 27 29 0a 0a 70 6c ected.training.samples.WDA')..pl
15a0 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 34 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 74 70 .subplot(2,.2,.4).pl.scatter(xtp
15c0 77 5b 3a 2c 20 30 5d 2c 20 78 74 70 77 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 w[:,.0],.xtpw[:,.1],.c=ys,.marke
15e0 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 50 72 6f 6a 65 63 74 65 64 20 73 61 6d 70 6c 65 73 27 r='+',.label='Projected.samples'
1600 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 50 72 6f ).pl.legend(loc=0).pl.title('Pro
1620 6a 65 63 74 65 64 20 74 65 73 74 20 73 61 6d 70 6c 65 73 20 57 44 41 27 29 0a 70 6c 2e 74 69 67 jected.test.samples.WDA').pl.tig
1640 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 ht_layout()..pl.show().PK.......
1660 00 09 6f 2f 4b 8b 89 17 b5 91 1c 00 00 91 1c 00 00 27 00 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c ..o/K............'...auto_exampl
1680 65 73 2f 70 6c 6f 74 5f 67 72 6f 6d 6f 76 5f 62 61 72 79 63 65 6e 74 65 72 2e 70 79 23 20 2d 2a es/plot_gromov_barycenter.py#.-*
16a0 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0d 0a 22 22 22 0d 0a 3d 3d 3d 3d 3d 3d -.coding:.utf-8.-*-.."""..======
16c0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d ===============================.
16e0 0a 47 72 6f 6d 6f 76 2d 57 61 73 73 65 72 73 74 65 69 6e 20 42 61 72 79 63 65 6e 74 65 72 20 65 .Gromov-Wasserstein.Barycenter.e
1700 78 61 6d 70 6c 65 0d 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d xample..========================
1720 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 0d 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 73 =============....This.example.is
1740 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73 68 6f 77 20 68 6f 77 20 74 6f 20 75 73 65 20 74 68 65 .designed.to.show.how.to.use.the
1760 20 47 72 6f 6d 6f 76 2d 57 61 73 73 65 72 73 74 65 69 6e 20 64 69 73 74 61 6e 63 65 0d 0a 63 6f .Gromov-Wasserstein.distance..co
1780 6d 70 75 74 61 74 69 6f 6e 20 69 6e 20 50 4f 54 2e 0d 0a 22 22 22 0d 0a 0d 0a 23 20 41 75 74 68 mputation.in.POT..."""....#.Auth
17a0 6f 72 3a 20 45 72 77 61 6e 20 56 61 75 74 69 65 72 20 3c 65 72 77 61 6e 2e 76 61 75 74 69 65 72 or:.Erwan.Vautier.<erwan.vautier
17c0 40 67 6d 61 69 6c 2e 63 6f 6d 3e 0d 0a 23 20 20 20 20 20 20 20 20 20 4e 69 63 6f 6c 61 73 20 43 @gmail.com>..#.........Nicolas.C
17e0 6f 75 72 74 79 20 3c 6e 63 6f 75 72 74 79 40 69 72 69 73 61 2e 66 72 3e 0d 0a 23 0d 0a 23 20 4c ourty.<ncourty@irisa.fr>..#..#.L
1800 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0d 0a 0d 0a 0d 0a 69 6d 70 6f 72 74 20 icense:.MIT.License......import.
1820 6e 75 6d 70 79 20 61 73 20 6e 70 0d 0a 69 6d 70 6f 72 74 20 73 63 69 70 79 20 61 73 20 73 70 0d numpy.as.np..import.scipy.as.sp.
1840 0a 0d 0a 69 6d 70 6f 72 74 20 73 63 69 70 79 2e 6e 64 69 6d 61 67 65 20 61 73 20 73 70 69 0d 0a ...import.scipy.ndimage.as.spi..
1860 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0d 0a 66 import.matplotlib.pylab.as.pl..f
1880 72 6f 6d 20 73 6b 6c 65 61 72 6e 20 69 6d 70 6f 72 74 20 6d 61 6e 69 66 6f 6c 64 0d 0a 66 72 6f rom.sklearn.import.manifold..fro
18a0 6d 20 73 6b 6c 65 61 72 6e 2e 64 65 63 6f 6d 70 6f 73 69 74 69 6f 6e 20 69 6d 70 6f 72 74 20 50 m.sklearn.decomposition.import.P
18c0 43 41 0d 0a 0d 0a 69 6d 70 6f 72 74 20 6f 74 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 CA....import.ot....#############
18e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
1900 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
1920 23 0d 0a 23 20 53 6d 61 63 6f 66 20 4d 44 53 0d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 #..#.Smacof.MDS..#.----------..#
1940 0d 0a 23 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 74 6f 20 66 69 6e 64 ..#.This.function.allows.to.find
1960 20 61 6e 20 65 6d 62 65 64 64 69 6e 67 20 6f 66 20 70 6f 69 6e 74 73 20 67 69 76 65 6e 20 61 20 .an.embedding.of.points.given.a.
1980 64 69 73 73 69 6d 69 6c 61 72 69 74 79 20 6d 61 74 72 69 78 0d 0a 23 20 74 68 61 74 20 77 69 6c dissimilarity.matrix..#.that.wil
19a0 6c 20 62 65 20 67 69 76 65 6e 20 62 79 20 74 68 65 20 6f 75 74 70 75 74 20 6f 66 20 74 68 65 20 l.be.given.by.the.output.of.the.
19c0 61 6c 67 6f 72 69 74 68 6d 0d 0a 0d 0a 0d 0a 64 65 66 20 73 6d 61 63 6f 66 5f 6d 64 73 28 43 2c algorithm......def.smacof_mds(C,
19e0 20 64 69 6d 2c 20 6d 61 78 5f 69 74 65 72 3d 33 30 30 30 2c 20 65 70 73 3d 31 65 2d 39 29 3a 0d .dim,.max_iter=3000,.eps=1e-9):.
1a00 0a 20 20 20 20 22 22 22 0d 0a 20 20 20 20 52 65 74 75 72 6e 73 20 61 6e 20 69 6e 74 65 72 70 6f ....."""......Returns.an.interpo
1a20 6c 61 74 65 64 20 70 6f 69 6e 74 20 63 6c 6f 75 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 lated.point.cloud.following.the.
1a40 64 69 73 73 69 6d 69 6c 61 72 69 74 79 20 6d 61 74 72 69 78 20 43 0d 0a 20 20 20 20 75 73 69 6e dissimilarity.matrix.C......usin
1a60 67 20 53 4d 41 43 4f 46 20 6d 75 6c 74 69 64 69 6d 65 6e 73 69 6f 6e 61 6c 20 73 63 61 6c 69 6e g.SMACOF.multidimensional.scalin
1a80 67 20 28 4d 44 53 29 20 69 6e 20 73 70 65 63 69 66 69 63 20 64 69 6d 65 6e 73 69 6f 6e 6e 65 64 g.(MDS).in.specific.dimensionned
1aa0 0d 0a 20 20 20 20 74 61 72 67 65 74 20 73 70 61 63 65 0d 0a 0d 0a 20 20 20 20 50 61 72 61 6d 65 ......target.space........Parame
1ac0 74 65 72 73 0d 0a 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 20 20 20 20 43 20 3a 20 6e 64 ters......----------......C.:.nd
1ae0 61 72 72 61 79 2c 20 73 68 61 70 65 20 28 6e 73 2c 20 6e 73 29 0d 0a 20 20 20 20 20 20 20 20 64 array,.shape.(ns,.ns)..........d
1b00 69 73 73 69 6d 69 6c 61 72 69 74 79 20 6d 61 74 72 69 78 0d 0a 20 20 20 20 64 69 6d 20 3a 20 69 issimilarity.matrix......dim.:.i
1b20 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 64 69 6d 65 6e 73 69 6f 6e 20 6f 66 20 74 68 65 20 74 nt............dimension.of.the.t
1b40 61 72 67 65 74 65 64 20 73 70 61 63 65 0d 0a 20 20 20 20 6d 61 78 5f 69 74 65 72 20 3a 20 20 69 argeted.space......max_iter.:..i
1b60 6e 74 0d 0a 20 20 20 20 20 20 20 20 4d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 nt..........Maximum.number.of.it
1b80 65 72 61 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 53 4d 41 43 4f 46 20 61 6c 67 6f 72 69 74 68 6d erations.of.the.SMACOF.algorithm
1ba0 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 75 6e 0d 0a 20 20 20 20 65 70 73 20 3a 20 66 6c 6f .for.a.single.run......eps.:.flo
1bc0 61 74 0d 0a 20 20 20 20 20 20 20 20 72 65 6c 61 74 69 76 65 20 74 6f 6c 65 72 61 6e 63 65 20 77 at..........relative.tolerance.w
1be0 2e 72 2e 74 20 73 74 72 65 73 73 20 74 6f 20 64 65 63 6c 61 72 65 20 63 6f 6e 76 65 72 67 65 0d .r.t.stress.to.declare.converge.
1c00 0a 0d 0a 20 20 20 20 52 65 74 75 72 6e 73 0d 0a 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 0d 0a 20 20 20 .......Returns......-------.....
1c20 20 6e 70 6f 73 20 3a 20 6e 64 61 72 72 61 79 2c 20 73 68 61 70 65 20 28 52 2c 20 64 69 6d 29 0d .npos.:.ndarray,.shape.(R,.dim).
1c40 0a 20 20 20 20 20 20 20 20 20 20 20 45 6d 62 65 64 64 65 64 20 63 6f 6f 72 64 69 6e 61 74 65 73 ............Embedded.coordinates
1c60 20 6f 66 20 74 68 65 20 69 6e 74 65 72 70 6f 6c 61 74 65 64 20 70 6f 69 6e 74 20 63 6c 6f 75 64 .of.the.interpolated.point.cloud
1c80 20 28 64 65 66 69 6e 65 64 20 77 69 74 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 6f 6e 65 20 69 .(defined.with.............one.i
1ca0 73 6f 6d 65 74 72 79 29 0d 0a 20 20 20 20 22 22 22 0d 0a 0d 0a 20 20 20 20 72 6e 67 20 3d 20 6e sometry)......"""........rng.=.n
1cc0 70 2e 72 61 6e 64 6f 6d 2e 52 61 6e 64 6f 6d 53 74 61 74 65 28 73 65 65 64 3d 33 29 0d 0a 0d 0a p.random.RandomState(seed=3)....
1ce0 20 20 20 20 6d 64 73 20 3d 20 6d 61 6e 69 66 6f 6c 64 2e 4d 44 53 28 0d 0a 20 20 20 20 20 20 20 ....mds.=.manifold.MDS(.........
1d00 20 64 69 6d 2c 0d 0a 20 20 20 20 20 20 20 20 6d 61 78 5f 69 74 65 72 3d 6d 61 78 5f 69 74 65 72 .dim,..........max_iter=max_iter
1d20 2c 0d 0a 20 20 20 20 20 20 20 20 65 70 73 3d 31 65 2d 39 2c 0d 0a 20 20 20 20 20 20 20 20 64 69 ,..........eps=1e-9,..........di
1d40 73 73 69 6d 69 6c 61 72 69 74 79 3d 27 70 72 65 63 6f 6d 70 75 74 65 64 27 2c 0d 0a 20 20 20 20 ssimilarity='precomputed',......
1d60 20 20 20 20 6e 5f 69 6e 69 74 3d 31 29 0d 0a 20 20 20 20 70 6f 73 20 3d 20 6d 64 73 2e 66 69 74 ....n_init=1)......pos.=.mds.fit
1d80 28 43 29 2e 65 6d 62 65 64 64 69 6e 67 5f 0d 0a 0d 0a 20 20 20 20 6e 6d 64 73 20 3d 20 6d 61 6e (C).embedding_........nmds.=.man
1da0 69 66 6f 6c 64 2e 4d 44 53 28 0d 0a 20 20 20 20 20 20 20 20 32 2c 0d 0a 20 20 20 20 20 20 20 20 ifold.MDS(..........2,..........
1dc0 6d 61 78 5f 69 74 65 72 3d 6d 61 78 5f 69 74 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 65 70 73 3d max_iter=max_iter,..........eps=
1de0 31 65 2d 39 2c 0d 0a 20 20 20 20 20 20 20 20 64 69 73 73 69 6d 69 6c 61 72 69 74 79 3d 22 70 72 1e-9,..........dissimilarity="pr
1e00 65 63 6f 6d 70 75 74 65 64 22 2c 0d 0a 20 20 20 20 20 20 20 20 72 61 6e 64 6f 6d 5f 73 74 61 74 ecomputed",..........random_stat
1e20 65 3d 72 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 6e 5f 69 6e 69 74 3d 31 29 0d 0a 20 20 20 20 6e e=rng,..........n_init=1)......n
1e40 70 6f 73 20 3d 20 6e 6d 64 73 2e 66 69 74 5f 74 72 61 6e 73 66 6f 72 6d 28 43 2c 20 69 6e 69 74 pos.=.nmds.fit_transform(C,.init
1e60 3d 70 6f 73 29 0d 0a 0d 0a 20 20 20 20 72 65 74 75 72 6e 20 6e 70 6f 73 0d 0a 0d 0a 0d 0a 23 23 =pos)........return.npos......##
1e80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
1ea0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
1ec0 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 23 20 44 61 74 61 20 70 72 65 70 61 72 61 74 69 6f 6e ############..#.Data.preparation
1ee0 0d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 0d 0a 23 20 54 68 65 20 66 ..#.----------------..#..#.The.f
1f00 6f 75 72 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 61 72 65 20 63 6f 6e 73 74 72 75 63 74 65 our.distributions.are.constructe
1f20 64 20 66 72 6f 6d 20 34 20 73 69 6d 70 6c 65 20 69 6d 61 67 65 73 0d 0a 0d 0a 0d 0a 64 65 66 20 d.from.4.simple.images......def.
1f40 69 6d 32 6d 61 74 28 49 29 3a 0d 0a 20 20 20 20 22 22 22 43 6f 6e 76 65 72 74 73 20 61 6e 64 20 im2mat(I):......"""Converts.and.
1f60 69 6d 61 67 65 20 74 6f 20 6d 61 74 72 69 78 20 28 6f 6e 65 20 70 69 78 65 6c 20 70 65 72 20 6c image.to.matrix.(one.pixel.per.l
1f80 69 6e 65 29 22 22 22 0d 0a 20 20 20 20 72 65 74 75 72 6e 20 49 2e 72 65 73 68 61 70 65 28 28 49 ine)"""......return.I.reshape((I
1fa0 2e 73 68 61 70 65 5b 30 5d 20 2a 20 49 2e 73 68 61 70 65 5b 31 5d 2c 20 49 2e 73 68 61 70 65 5b .shape[0].*.I.shape[1],.I.shape[
1fc0 32 5d 29 29 0d 0a 0d 0a 0d 0a 73 71 75 61 72 65 20 3d 20 73 70 69 2e 69 6d 72 65 61 64 28 27 2e 2]))......square.=.spi.imread('.
1fe0 2e 2f 64 61 74 61 2f 73 71 75 61 72 65 2e 70 6e 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c ./data/square.png').astype(np.fl
2000 6f 61 74 36 34 29 5b 3a 2c 20 3a 2c 20 32 5d 20 2f 20 32 35 36 0d 0a 63 72 6f 73 73 20 3d 20 73 oat64)[:,.:,.2]./.256..cross.=.s
2020 70 69 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 63 72 6f 73 73 2e 70 6e 67 27 29 2e 61 pi.imread('../data/cross.png').a
2040 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 5b 3a 2c 20 3a 2c 20 32 5d 20 2f 20 32 35 36 stype(np.float64)[:,.:,.2]./.256
2060 0d 0a 74 72 69 61 6e 67 6c 65 20 3d 20 73 70 69 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 ..triangle.=.spi.imread('../data
2080 2f 74 72 69 61 6e 67 6c 65 2e 70 6e 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 /triangle.png').astype(np.float6
20a0 34 29 5b 3a 2c 20 3a 2c 20 32 5d 20 2f 20 32 35 36 0d 0a 73 74 61 72 20 3d 20 73 70 69 2e 69 6d 4)[:,.:,.2]./.256..star.=.spi.im
20c0 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 73 74 61 72 2e 70 6e 67 27 29 2e 61 73 74 79 70 65 28 read('../data/star.png').astype(
20e0 6e 70 2e 66 6c 6f 61 74 36 34 29 5b 3a 2c 20 3a 2c 20 32 5d 20 2f 20 32 35 36 0d 0a 0d 0a 73 68 np.float64)[:,.:,.2]./.256....sh
2100 61 70 65 73 20 3d 20 5b 73 71 75 61 72 65 2c 20 63 72 6f 73 73 2c 20 74 72 69 61 6e 67 6c 65 2c apes.=.[square,.cross,.triangle,
2120 20 73 74 61 72 5d 0d 0a 0d 0a 53 20 3d 20 34 0d 0a 78 73 20 3d 20 5b 5b 5d 20 66 6f 72 20 69 20 .star]....S.=.4..xs.=.[[].for.i.
2140 69 6e 20 72 61 6e 67 65 28 53 29 5d 0d 0a 0d 0a 0d 0a 66 6f 72 20 6e 62 20 69 6e 20 72 61 6e 67 in.range(S)]......for.nb.in.rang
2160 65 28 34 29 3a 0d 0a 20 20 20 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 38 29 3a 0d 0a 20 e(4):......for.i.in.range(8):...
2180 20 20 20 20 20 20 20 66 6f 72 20 6a 20 69 6e 20 72 61 6e 67 65 28 38 29 3a 0d 0a 20 20 20 20 20 .......for.j.in.range(8):.......
21a0 20 20 20 20 20 20 20 69 66 20 73 68 61 70 65 73 5b 6e 62 5d 5b 69 2c 20 6a 5d 20 3c 20 30 2e 39 .......if.shapes[nb][i,.j].<.0.9
21c0 35 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78 73 5b 6e 62 5d 2e 61 70 70 65 6e 5:..................xs[nb].appen
21e0 64 28 5b 6a 2c 20 38 20 2d 20 69 5d 29 0d 0a 0d 0a 78 73 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b d([j,.8.-.i])....xs.=.np.array([
2200 6e 70 2e 61 72 72 61 79 28 78 73 5b 30 5d 29 2c 20 6e 70 2e 61 72 72 61 79 28 78 73 5b 31 5d 29 np.array(xs[0]),.np.array(xs[1])
2220 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 70 2e 61 72 72 61 79 28 78 73 5b 32 5d ,.................np.array(xs[2]
2240 29 2c 20 6e 70 2e 61 72 72 61 79 28 78 73 5b 33 5d 29 5d 29 0d 0a 0d 0a 23 23 23 23 23 23 23 23 ),.np.array(xs[3])])....########
2260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
2280 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
22a0 23 23 23 23 23 23 0d 0a 23 20 42 61 72 79 63 65 6e 74 65 72 20 63 6f 6d 70 75 74 61 74 69 6f 6e ######..#.Barycenter.computation
22c0 0d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 0d 0a ..#.----------------------......
22e0 6e 73 20 3d 20 5b 6c 65 6e 28 78 73 5b 73 5d 29 20 66 6f 72 20 73 20 69 6e 20 72 61 6e 67 65 28 ns.=.[len(xs[s]).for.s.in.range(
2300 53 29 5d 0d 0a 6e 5f 73 61 6d 70 6c 65 73 20 3d 20 33 30 0d 0a 0d 0a 22 22 22 43 6f 6d 70 75 74 S)]..n_samples.=.30...."""Comput
2320 65 20 61 6c 6c 20 64 69 73 74 61 6e 63 65 73 20 6d 61 74 72 69 63 65 73 20 66 6f 72 20 74 68 65 e.all.distances.matrices.for.the
2340 20 66 6f 75 72 20 73 68 61 70 65 73 22 22 22 0d 0a 43 73 20 3d 20 5b 73 70 2e 73 70 61 74 69 61 .four.shapes"""..Cs.=.[sp.spatia
2360 6c 2e 64 69 73 74 61 6e 63 65 2e 63 64 69 73 74 28 78 73 5b 73 5d 2c 20 78 73 5b 73 5d 29 20 66 l.distance.cdist(xs[s],.xs[s]).f
2380 6f 72 20 73 20 69 6e 20 72 61 6e 67 65 28 53 29 5d 0d 0a 43 73 20 3d 20 5b 63 73 20 2f 20 63 73 or.s.in.range(S)]..Cs.=.[cs./.cs
23a0 2e 6d 61 78 28 29 20 66 6f 72 20 63 73 20 69 6e 20 43 73 5d 0d 0a 0d 0a 70 73 20 3d 20 5b 6f 74 .max().for.cs.in.Cs]....ps.=.[ot
23c0 2e 75 6e 69 66 28 6e 73 5b 73 5d 29 20 66 6f 72 20 73 20 69 6e 20 72 61 6e 67 65 28 53 29 5d 0d .unif(ns[s]).for.s.in.range(S)].
23e0 0a 70 20 3d 20 6f 74 2e 75 6e 69 66 28 6e 5f 73 61 6d 70 6c 65 73 29 0d 0a 0d 0a 0d 0a 6c 61 6d .p.=.ot.unif(n_samples)......lam
2400 62 64 61 73 74 20 3d 20 5b 5b 66 6c 6f 61 74 28 69 29 20 2f 20 33 2c 20 66 6c 6f 61 74 28 33 20 bdast.=.[[float(i)./.3,.float(3.
2420 2d 20 69 29 20 2f 20 33 5d 20 66 6f 72 20 69 20 69 6e 20 5b 31 2c 20 32 5d 5d 0d 0a 0d 0a 43 74 -.i)./.3].for.i.in.[1,.2]]....Ct
2440 30 31 20 3d 20 5b 30 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 32 29 5d 0d 0a 66 6f 72 20 01.=.[0.for.i.in.range(2)]..for.
2460 69 20 69 6e 20 72 61 6e 67 65 28 32 29 3a 0d 0a 20 20 20 20 43 74 30 31 5b 69 5d 20 3d 20 6f 74 i.in.range(2):......Ct01[i].=.ot
2480 2e 67 72 6f 6d 6f 76 2e 67 72 6f 6d 6f 76 5f 62 61 72 79 63 65 6e 74 65 72 73 28 6e 5f 73 61 6d .gromov.gromov_barycenters(n_sam
24a0 70 6c 65 73 2c 20 5b 43 73 5b 30 5d 2c 20 43 73 5b 31 5d 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 ples,.[Cs[0],.Cs[1]],...........
24c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
24e0 20 20 5b 70 73 5b 30 5d 2c 20 70 73 5b 31 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..[ps[0],.ps[1].................
2500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5d 2c 20 .............................],.
2520 70 2c 20 6c 61 6d 62 64 61 73 74 5b 69 5d 2c 20 27 73 71 75 61 72 65 5f 6c 6f 73 73 27 2c 20 35 p,.lambdast[i],.'square_loss',.5
2540 65 2d 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e-4,............................
2560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 78 5f 69 74 65 72 3d 31 30 30 2c 20 74 .................max_iter=100,.t
2580 6f 6c 3d 31 65 2d 33 29 0d 0a 0d 0a 43 74 30 32 20 3d 20 5b 30 20 66 6f 72 20 69 20 69 6e 20 72 ol=1e-3)....Ct02.=.[0.for.i.in.r
25a0 61 6e 67 65 28 32 29 5d 0d 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 32 29 3a 0d 0a 20 20 ange(2)]..for.i.in.range(2):....
25c0 20 20 43 74 30 32 5b 69 5d 20 3d 20 6f 74 2e 67 72 6f 6d 6f 76 2e 67 72 6f 6d 6f 76 5f 62 61 72 ..Ct02[i].=.ot.gromov.gromov_bar
25e0 79 63 65 6e 74 65 72 73 28 6e 5f 73 61 6d 70 6c 65 73 2c 20 5b 43 73 5b 30 5d 2c 20 43 73 5b 32 ycenters(n_samples,.[Cs[0],.Cs[2
2600 5d 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ]],.............................
2620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 70 73 5b 30 5d 2c 20 70 73 5b 32 5d 0d 0a 20 ................[ps[0],.ps[2]...
2640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
2660 20 20 20 20 20 20 20 20 20 20 20 5d 2c 20 70 2c 20 6c 61 6d 62 64 61 73 74 5b 69 5d 2c 20 27 73 ...........],.p,.lambdast[i],.'s
2680 71 75 61 72 65 5f 6c 6f 73 73 27 2c 20 35 65 2d 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 quare_loss',.5e-4,..............
26a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d ...............................m
26c0 61 78 5f 69 74 65 72 3d 31 30 30 2c 20 74 6f 6c 3d 31 65 2d 33 29 0d 0a 0d 0a 43 74 31 33 20 3d ax_iter=100,.tol=1e-3)....Ct13.=
26e0 20 5b 30 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 32 29 5d 0d 0a 66 6f 72 20 69 20 69 6e .[0.for.i.in.range(2)]..for.i.in
2700 20 72 61 6e 67 65 28 32 29 3a 0d 0a 20 20 20 20 43 74 31 33 5b 69 5d 20 3d 20 6f 74 2e 67 72 6f .range(2):......Ct13[i].=.ot.gro
2720 6d 6f 76 2e 67 72 6f 6d 6f 76 5f 62 61 72 79 63 65 6e 74 65 72 73 28 6e 5f 73 61 6d 70 6c 65 73 mov.gromov_barycenters(n_samples
2740 2c 20 5b 43 73 5b 31 5d 2c 20 43 73 5b 33 5d 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.[Cs[1],.Cs[3]],...............
2760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 70 ..............................[p
2780 73 5b 31 5d 2c 20 70 73 5b 33 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 s[1],.ps[3].....................
27a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5d 2c 20 70 2c 20 6c .........................],.p,.l
27c0 61 6d 62 64 61 73 74 5b 69 5d 2c 20 27 73 71 75 61 72 65 5f 6c 6f 73 73 27 2c 20 35 65 2d 34 2c ambdast[i],.'square_loss',.5e-4,
27e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
2800 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 78 5f 69 74 65 72 3d 31 30 30 2c 20 74 6f 6c 3d 31 .............max_iter=100,.tol=1
2820 65 2d 33 29 0d 0a 0d 0a 43 74 32 33 20 3d 20 5b 30 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 e-3)....Ct23.=.[0.for.i.in.range
2840 28 32 29 5d 0d 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 32 29 3a 0d 0a 20 20 20 20 43 74 (2)]..for.i.in.range(2):......Ct
2860 32 33 5b 69 5d 20 3d 20 6f 74 2e 67 72 6f 6d 6f 76 2e 67 72 6f 6d 6f 76 5f 62 61 72 79 63 65 6e 23[i].=.ot.gromov.gromov_barycen
2880 74 65 72 73 28 6e 5f 73 61 6d 70 6c 65 73 2c 20 5b 43 73 5b 32 5d 2c 20 43 73 5b 33 5d 5d 2c 0d ters(n_samples,.[Cs[2],.Cs[3]],.
28a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
28c0 20 20 20 20 20 20 20 20 20 20 20 20 5b 70 73 5b 32 5d 2c 20 70 73 5b 33 5d 0d 0a 20 20 20 20 20 ............[ps[2],.ps[3].......
28e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
2900 20 20 20 20 20 20 20 5d 2c 20 70 2c 20 6c 61 6d 62 64 61 73 74 5b 69 5d 2c 20 27 73 71 75 61 72 .......],.p,.lambdast[i],.'squar
2920 65 5f 6c 6f 73 73 27 2c 20 35 65 2d 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e_loss',.5e-4,..................
2940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 78 5f 69 ...........................max_i
2960 74 65 72 3d 31 30 30 2c 20 74 6f 6c 3d 31 65 2d 33 29 0d 0a 0d 0a 0d 0a 23 23 23 23 23 23 23 23 ter=100,.tol=1e-3)......########
2980 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
29a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
29c0 23 23 23 23 23 23 0d 0a 23 20 56 69 73 75 61 6c 69 7a 61 74 69 6f 6e 0d 0a 23 20 2d 2d 2d 2d 2d ######..#.Visualization..#.-----
29e0 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 0d 0a 23 20 54 68 65 20 50 43 41 20 68 65 6c 70 73 20 69 6e 20 --------..#..#.The.PCA.helps.in.
2a00 67 65 74 74 69 6e 67 20 63 6f 6e 73 69 73 74 65 6e 63 79 20 62 65 74 77 65 65 6e 20 74 68 65 20 getting.consistency.between.the.
2a20 72 6f 74 61 74 69 6f 6e 73 0d 0a 0d 0a 0d 0a 63 6c 66 20 3d 20 50 43 41 28 6e 5f 63 6f 6d 70 6f rotations......clf.=.PCA(n_compo
2a40 6e 65 6e 74 73 3d 32 29 0d 0a 6e 70 6f 73 20 3d 20 5b 30 2c 20 30 2c 20 30 2c 20 30 5d 0d 0a 6e nents=2)..npos.=.[0,.0,.0,.0]..n
2a60 70 6f 73 20 3d 20 5b 73 6d 61 63 6f 66 5f 6d 64 73 28 43 73 5b 73 5d 2c 20 32 29 20 66 6f 72 20 pos.=.[smacof_mds(Cs[s],.2).for.
2a80 73 20 69 6e 20 72 61 6e 67 65 28 53 29 5d 0d 0a 0d 0a 6e 70 6f 73 74 30 31 20 3d 20 5b 30 2c 20 s.in.range(S)]....npost01.=.[0,.
2aa0 30 5d 0d 0a 6e 70 6f 73 74 30 31 20 3d 20 5b 73 6d 61 63 6f 66 5f 6d 64 73 28 43 74 30 31 5b 73 0]..npost01.=.[smacof_mds(Ct01[s
2ac0 5d 2c 20 32 29 20 66 6f 72 20 73 20 69 6e 20 72 61 6e 67 65 28 32 29 5d 0d 0a 6e 70 6f 73 74 30 ],.2).for.s.in.range(2)]..npost0
2ae0 31 20 3d 20 5b 63 6c 66 2e 66 69 74 5f 74 72 61 6e 73 66 6f 72 6d 28 6e 70 6f 73 74 30 31 5b 73 1.=.[clf.fit_transform(npost01[s
2b00 5d 29 20 66 6f 72 20 73 20 69 6e 20 72 61 6e 67 65 28 32 29 5d 0d 0a 0d 0a 6e 70 6f 73 74 30 32 ]).for.s.in.range(2)]....npost02
2b20 20 3d 20 5b 30 2c 20 30 5d 0d 0a 6e 70 6f 73 74 30 32 20 3d 20 5b 73 6d 61 63 6f 66 5f 6d 64 73 .=.[0,.0]..npost02.=.[smacof_mds
2b40 28 43 74 30 32 5b 73 5d 2c 20 32 29 20 66 6f 72 20 73 20 69 6e 20 72 61 6e 67 65 28 32 29 5d 0d (Ct02[s],.2).for.s.in.range(2)].
2b60 0a 6e 70 6f 73 74 30 32 20 3d 20 5b 63 6c 66 2e 66 69 74 5f 74 72 61 6e 73 66 6f 72 6d 28 6e 70 .npost02.=.[clf.fit_transform(np
2b80 6f 73 74 30 32 5b 73 5d 29 20 66 6f 72 20 73 20 69 6e 20 72 61 6e 67 65 28 32 29 5d 0d 0a 0d 0a ost02[s]).for.s.in.range(2)]....
2ba0 6e 70 6f 73 74 31 33 20 3d 20 5b 30 2c 20 30 5d 0d 0a 6e 70 6f 73 74 31 33 20 3d 20 5b 73 6d 61 npost13.=.[0,.0]..npost13.=.[sma
2bc0 63 6f 66 5f 6d 64 73 28 43 74 31 33 5b 73 5d 2c 20 32 29 20 66 6f 72 20 73 20 69 6e 20 72 61 6e cof_mds(Ct13[s],.2).for.s.in.ran
2be0 67 65 28 32 29 5d 0d 0a 6e 70 6f 73 74 31 33 20 3d 20 5b 63 6c 66 2e 66 69 74 5f 74 72 61 6e 73 ge(2)]..npost13.=.[clf.fit_trans
2c00 66 6f 72 6d 28 6e 70 6f 73 74 31 33 5b 73 5d 29 20 66 6f 72 20 73 20 69 6e 20 72 61 6e 67 65 28 form(npost13[s]).for.s.in.range(
2c20 32 29 5d 0d 0a 0d 0a 6e 70 6f 73 74 32 33 20 3d 20 5b 30 2c 20 30 5d 0d 0a 6e 70 6f 73 74 32 33 2)]....npost23.=.[0,.0]..npost23
2c40 20 3d 20 5b 73 6d 61 63 6f 66 5f 6d 64 73 28 43 74 32 33 5b 73 5d 2c 20 32 29 20 66 6f 72 20 73 .=.[smacof_mds(Ct23[s],.2).for.s
2c60 20 69 6e 20 72 61 6e 67 65 28 32 29 5d 0d 0a 6e 70 6f 73 74 32 33 20 3d 20 5b 63 6c 66 2e 66 69 .in.range(2)]..npost23.=.[clf.fi
2c80 74 5f 74 72 61 6e 73 66 6f 72 6d 28 6e 70 6f 73 74 32 33 5b 73 5d 29 20 66 6f 72 20 73 20 69 6e t_transform(npost23[s]).for.s.in
2ca0 20 72 61 6e 67 65 28 32 29 5d 0d 0a 0d 0a 0d 0a 66 69 67 20 3d 20 70 6c 2e 66 69 67 75 72 65 28 .range(2)]......fig.=.pl.figure(
2cc0 66 69 67 73 69 7a 65 3d 28 31 30 2c 20 31 30 29 29 0d 0a 0d 0a 61 78 31 20 3d 20 70 6c 2e 73 75 figsize=(10,.10))....ax1.=.pl.su
2ce0 62 70 6c 6f 74 32 67 72 69 64 28 28 34 2c 20 34 29 2c 20 28 30 2c 20 30 29 29 0d 0a 70 6c 2e 78 bplot2grid((4,.4),.(0,.0))..pl.x
2d00 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 70 6c 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a lim((-1,.1))..pl.ylim((-1,.1))..
2d20 61 78 31 2e 73 63 61 74 74 65 72 28 6e 70 6f 73 5b 30 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 5b ax1.scatter(npos[0][:,.0],.npos[
2d40 30 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 72 27 29 0d 0a 0d 0a 61 78 32 20 3d 20 70 6c 0][:,.1],.color='r')....ax2.=.pl
2d60 2e 73 75 62 70 6c 6f 74 32 67 72 69 64 28 28 34 2c 20 34 29 2c 20 28 30 2c 20 31 29 29 0d 0a 70 .subplot2grid((4,.4),.(0,.1))..p
2d80 6c 2e 78 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 70 6c 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 29 l.xlim((-1,.1))..pl.ylim((-1,.1)
2da0 29 0d 0a 61 78 32 2e 73 63 61 74 74 65 72 28 6e 70 6f 73 74 30 31 5b 31 5d 5b 3a 2c 20 30 5d 2c )..ax2.scatter(npost01[1][:,.0],
2dc0 20 6e 70 6f 73 74 30 31 5b 31 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 62 27 29 0d 0a 0d .npost01[1][:,.1],.color='b')...
2de0 0a 61 78 33 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 32 67 72 69 64 28 28 34 2c 20 34 29 2c 20 28 .ax3.=.pl.subplot2grid((4,.4),.(
2e00 30 2c 20 32 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 70 6c 2e 79 6c 69 0,.2))..pl.xlim((-1,.1))..pl.yli
2e20 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 33 2e 73 63 61 74 74 65 72 28 6e 70 6f 73 74 30 31 5b m((-1,.1))..ax3.scatter(npost01[
2e40 30 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 74 30 31 5b 30 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 0][:,.0],.npost01[0][:,.1],.colo
2e60 72 3d 27 62 27 29 0d 0a 0d 0a 61 78 34 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 32 67 72 69 64 28 r='b')....ax4.=.pl.subplot2grid(
2e80 28 34 2c 20 34 29 2c 20 28 30 2c 20 33 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 2d 31 2c 20 31 29 (4,.4),.(0,.3))..pl.xlim((-1,.1)
2ea0 29 0d 0a 70 6c 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 34 2e 73 63 61 74 74 65 72 )..pl.ylim((-1,.1))..ax4.scatter
2ec0 28 6e 70 6f 73 5b 31 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 5b 31 5d 5b 3a 2c 20 31 5d 2c 20 63 (npos[1][:,.0],.npos[1][:,.1],.c
2ee0 6f 6c 6f 72 3d 27 72 27 29 0d 0a 0d 0a 61 78 35 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 32 67 72 olor='r')....ax5.=.pl.subplot2gr
2f00 69 64 28 28 34 2c 20 34 29 2c 20 28 31 2c 20 30 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 2d 31 2c id((4,.4),.(1,.0))..pl.xlim((-1,
2f20 20 31 29 29 0d 0a 70 6c 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 35 2e 73 63 61 74 .1))..pl.ylim((-1,.1))..ax5.scat
2f40 74 65 72 28 6e 70 6f 73 74 30 32 5b 31 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 74 30 32 5b 31 5d ter(npost02[1][:,.0],.npost02[1]
2f60 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 62 27 29 0d 0a 0d 0a 61 78 36 20 3d 20 70 6c 2e 73 [:,.1],.color='b')....ax6.=.pl.s
2f80 75 62 70 6c 6f 74 32 67 72 69 64 28 28 34 2c 20 34 29 2c 20 28 31 2c 20 33 29 29 0d 0a 70 6c 2e ubplot2grid((4,.4),.(1,.3))..pl.
2fa0 78 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 70 6c 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d xlim((-1,.1))..pl.ylim((-1,.1)).
2fc0 0a 61 78 36 2e 73 63 61 74 74 65 72 28 6e 70 6f 73 74 31 33 5b 31 5d 5b 3a 2c 20 30 5d 2c 20 6e .ax6.scatter(npost13[1][:,.0],.n
2fe0 70 6f 73 74 31 33 5b 31 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 62 27 29 0d 0a 0d 0a 61 post13[1][:,.1],.color='b')....a
3000 78 37 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 32 67 72 69 64 28 28 34 2c 20 34 29 2c 20 28 32 2c x7.=.pl.subplot2grid((4,.4),.(2,
3020 20 30 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 70 6c 2e 79 6c 69 6d 28 .0))..pl.xlim((-1,.1))..pl.ylim(
3040 28 2d 31 2c 20 31 29 29 0d 0a 61 78 37 2e 73 63 61 74 74 65 72 28 6e 70 6f 73 74 30 32 5b 30 5d (-1,.1))..ax7.scatter(npost02[0]
3060 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 74 30 32 5b 30 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d [:,.0],.npost02[0][:,.1],.color=
3080 27 62 27 29 0d 0a 0d 0a 61 78 38 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 32 67 72 69 64 28 28 34 'b')....ax8.=.pl.subplot2grid((4
30a0 2c 20 34 29 2c 20 28 32 2c 20 33 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d ,.4),.(2,.3))..pl.xlim((-1,.1)).
30c0 0a 70 6c 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 38 2e 73 63 61 74 74 65 72 28 6e .pl.ylim((-1,.1))..ax8.scatter(n
30e0 70 6f 73 74 31 33 5b 30 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 74 31 33 5b 30 5d 5b 3a 2c 20 31 post13[0][:,.0],.npost13[0][:,.1
3100 5d 2c 20 63 6f 6c 6f 72 3d 27 62 27 29 0d 0a 0d 0a 61 78 39 20 3d 20 70 6c 2e 73 75 62 70 6c 6f ],.color='b')....ax9.=.pl.subplo
3120 74 32 67 72 69 64 28 28 34 2c 20 34 29 2c 20 28 33 2c 20 30 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 t2grid((4,.4),.(3,.0))..pl.xlim(
3140 28 2d 31 2c 20 31 29 29 0d 0a 70 6c 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 39 2e (-1,.1))..pl.ylim((-1,.1))..ax9.
3160 73 63 61 74 74 65 72 28 6e 70 6f 73 5b 32 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 5b 32 5d 5b 3a scatter(npos[2][:,.0],.npos[2][:
3180 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 72 27 29 0d 0a 0d 0a 61 78 31 30 20 3d 20 70 6c 2e 73 75 ,.1],.color='r')....ax10.=.pl.su
31a0 62 70 6c 6f 74 32 67 72 69 64 28 28 34 2c 20 34 29 2c 20 28 33 2c 20 31 29 29 0d 0a 70 6c 2e 78 bplot2grid((4,.4),.(3,.1))..pl.x
31c0 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 70 6c 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a lim((-1,.1))..pl.ylim((-1,.1))..
31e0 61 78 31 30 2e 73 63 61 74 74 65 72 28 6e 70 6f 73 74 32 33 5b 31 5d 5b 3a 2c 20 30 5d 2c 20 6e ax10.scatter(npost23[1][:,.0],.n
3200 70 6f 73 74 32 33 5b 31 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 62 27 29 0d 0a 0d 0a 61 post23[1][:,.1],.color='b')....a
3220 78 31 31 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 32 67 72 69 64 28 28 34 2c 20 34 29 2c 20 28 33 x11.=.pl.subplot2grid((4,.4),.(3
3240 2c 20 32 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 70 6c 2e 79 6c 69 6d ,.2))..pl.xlim((-1,.1))..pl.ylim
3260 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 31 31 2e 73 63 61 74 74 65 72 28 6e 70 6f 73 74 32 33 5b ((-1,.1))..ax11.scatter(npost23[
3280 30 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 74 32 33 5b 30 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 0][:,.0],.npost23[0][:,.1],.colo
32a0 72 3d 27 62 27 29 0d 0a 0d 0a 61 78 31 32 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 32 67 72 69 64 r='b')....ax12.=.pl.subplot2grid
32c0 28 28 34 2c 20 34 29 2c 20 28 33 2c 20 33 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 2d 31 2c 20 31 ((4,.4),.(3,.3))..pl.xlim((-1,.1
32e0 29 29 0d 0a 70 6c 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 31 32 2e 73 63 61 74 74 ))..pl.ylim((-1,.1))..ax12.scatt
3300 65 72 28 6e 70 6f 73 5b 33 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 5b 33 5d 5b 3a 2c 20 31 5d 2c er(npos[3][:,.0],.npos[3][:,.1],
3320 20 63 6f 6c 6f 72 3d 27 72 27 29 0d 0a 50 4b 03 04 14 00 00 00 00 00 09 6f 2f 4b 7e 83 d4 f9 6e .color='r')..PK.........o/K~...n
3340 0b 00 00 6e 0b 00 00 21 00 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 6f 70 ...n...!...auto_examples/plot_op
3360 74 69 6d 5f 4f 54 72 65 67 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 tim_OTreg.py#.-*-.coding:.utf-8.
3380 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d -*-.""".========================
33a0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 65 67 75 6c 61 72 69 7a 65 64 20 4f 54 20 77 69 74 68 20 67 ==========.Regularized.OT.with.g
33c0 65 6e 65 72 69 63 20 73 6f 6c 76 65 72 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d eneric.solver.==================
33e0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 49 6c 6c 75 73 74 72 61 74 65 73 20 74 68 ================..Illustrates.th
3400 65 20 75 73 65 20 6f 66 20 74 68 65 20 67 65 6e 65 72 69 63 20 73 6f 6c 76 65 72 20 66 6f 72 20 e.use.of.the.generic.solver.for.
3420 72 65 67 75 6c 61 72 69 7a 65 64 20 4f 54 20 77 69 74 68 0a 75 73 65 72 2d 64 65 73 69 67 6e 65 regularized.OT.with.user-designe
3440 64 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 20 74 65 72 6d 2e 20 49 74 20 75 73 65 73 20 43 d.regularization.term..It.uses.C
3460 6f 6e 64 69 74 69 6f 6e 61 6c 20 67 72 61 64 69 65 6e 74 20 61 73 20 69 6e 20 5b 36 5d 20 61 6e onditional.gradient.as.in.[6].an
3480 64 0a 67 65 6e 65 72 61 6c 69 7a 65 64 20 43 6f 6e 64 69 74 69 6f 6e 61 6c 20 47 72 61 64 69 65 d.generalized.Conditional.Gradie
34a0 6e 74 20 61 73 20 70 72 6f 70 6f 73 65 64 20 69 6e 20 5b 35 5d 5b 37 5d 2e 0a 0a 0a 5b 35 5d 20 nt.as.proposed.in.[5][7]....[5].
34c0 4e 2e 20 43 6f 75 72 74 79 3b 20 52 2e 20 46 6c 61 6d 61 72 79 3b 20 44 2e 20 54 75 69 61 3b 20 N..Courty;.R..Flamary;.D..Tuia;.
34e0 41 2e 20 52 61 6b 6f 74 6f 6d 61 6d 6f 6e 6a 79 2c 20 4f 70 74 69 6d 61 6c 20 54 72 61 6e 73 70 A..Rakotomamonjy,.Optimal.Transp
3500 6f 72 74 20 66 6f 72 0a 44 6f 6d 61 69 6e 20 41 64 61 70 74 61 74 69 6f 6e 2c 20 69 6e 20 49 45 ort.for.Domain.Adaptation,.in.IE
3520 45 45 20 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 6f 6e 20 50 61 74 74 65 72 6e 20 41 6e 61 6c 79 EE.Transactions.on.Pattern.Analy
3540 73 69 73 20 61 6e 64 20 4d 61 63 68 69 6e 65 0a 49 6e 74 65 6c 6c 69 67 65 6e 63 65 20 2c 20 76 sis.and.Machine.Intelligence.,.v
3560 6f 6c 2e 50 50 2c 20 6e 6f 2e 39 39 2c 20 70 70 2e 31 2d 31 2e 0a 0a 5b 36 5d 20 46 65 72 72 61 ol.PP,.no.99,.pp.1-1...[6].Ferra
3580 64 61 6e 73 2c 20 53 2e 2c 20 50 61 70 61 64 61 6b 69 73 2c 20 4e 2e 2c 20 50 65 79 72 c3 a9 2c dans,.S.,.Papadakis,.N.,.Peyr..,
35a0 20 47 2e 2c 20 26 20 41 75 6a 6f 6c 2c 20 4a 2e 20 46 2e 20 28 32 30 31 34 29 2e 0a 52 65 67 75 .G.,.&.Aujol,.J..F..(2014)..Regu
35c0 6c 61 72 69 7a 65 64 20 64 69 73 63 72 65 74 65 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f larized.discrete.optimal.transpo
35e0 72 74 2e 20 53 49 41 4d 20 4a 6f 75 72 6e 61 6c 20 6f 6e 20 49 6d 61 67 69 6e 67 20 53 63 69 65 rt..SIAM.Journal.on.Imaging.Scie
3600 6e 63 65 73 2c 0a 37 28 33 29 2c 20 31 38 35 33 2d 31 38 38 32 2e 0a 0a 5b 37 5d 20 52 61 6b 6f nces,.7(3),.1853-1882...[7].Rako
3620 74 6f 6d 61 6d 6f 6e 6a 79 2c 20 41 2e 2c 20 46 6c 61 6d 61 72 79 2c 20 52 2e 2c 20 26 20 43 6f tomamonjy,.A.,.Flamary,.R.,.&.Co
3640 75 72 74 79 2c 20 4e 2e 20 28 32 30 31 35 29 2e 20 47 65 6e 65 72 61 6c 69 7a 65 64 0a 63 6f 6e urty,.N..(2015)..Generalized.con
3660 64 69 74 69 6f 6e 61 6c 20 67 72 61 64 69 65 6e 74 3a 20 61 6e 61 6c 79 73 69 73 20 6f 66 20 63 ditional.gradient:.analysis.of.c
3680 6f 6e 76 65 72 67 65 6e 63 65 20 61 6e 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 2e 0a 61 72 58 onvergence.and.applications..arX
36a0 69 76 20 70 72 65 70 72 69 6e 74 20 61 72 58 69 76 3a 31 35 31 30 2e 30 36 35 36 37 2e 0a 0a 0a iv.preprint.arXiv:1510.06567....
36c0 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 ."""..import.numpy.as.np.import.
36e0 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 matplotlib.pylab.as.pl.import.ot
3700 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ...#############################
3720 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
3740 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 #################.#.Generate.dat
3760 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 a.#.-------------..#%%.parameter
3780 73 0a 0a 6e 20 3d 20 31 30 30 20 20 23 20 6e 62 20 62 69 6e 73 0a 0a 23 20 62 69 6e 20 70 6f 73 s..n.=.100..#.nb.bins..#.bin.pos
37a0 69 74 69 6f 6e 73 0a 78 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 2c 20 64 74 79 70 65 3d 6e 70 itions.x.=.np.arange(n,.dtype=np
37c0 2e 66 6c 6f 61 74 36 34 29 0a 0a 23 20 47 61 75 73 73 69 61 6e 20 64 69 73 74 72 69 62 75 74 69 .float64)..#.Gaussian.distributi
37e0 6f 6e 73 0a 61 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 31 44 5f 67 61 75 73 73 ons.a.=.ot.datasets.get_1D_gauss
3800 28 6e 2c 20 6d 3d 32 30 2c 20 73 3d 35 29 20 20 23 20 6d 3d 20 6d 65 61 6e 2c 20 73 3d 20 73 74 (n,.m=20,.s=5)..#.m=.mean,.s=.st
3820 64 0a 62 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 31 44 5f 67 61 75 73 73 28 6e d.b.=.ot.datasets.get_1D_gauss(n
3840 2c 20 6d 3d 36 30 2c 20 73 3d 31 30 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 20 3d ,.m=60,.s=10)..#.loss.matrix.M.=
3860 20 6f 74 2e 64 69 73 74 28 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 2c 20 78 2e 72 65 .ot.dist(x.reshape((n,.1)),.x.re
3880 73 68 61 70 65 28 28 6e 2c 20 31 29 29 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 29 0a 0a 23 23 23 shape((n,.1))).M./=.M.max()..###
38a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
38c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
38e0 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 53 6f 6c 76 65 20 45 4d 44 0a 23 20 2d 2d 2d 2d 2d 2d ###########.#.Solve.EMD.#.------
3900 2d 2d 2d 0a 0a 23 25 25 20 45 4d 44 0a 0a 47 30 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 ---..#%%.EMD..G0.=.ot.emd(a,.b,.
3920 4d 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 33 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 29 M)..pl.figure(3,.figsize=(5,.5))
3940 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 47 30 2c 20 27 4f .ot.plot.plot1D_mat(a,.b,.G0,.'O
3960 54 20 6d 61 74 72 69 78 20 47 30 27 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 T.matrix.G0')..#################
3980 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
39a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 #############################.#.
39c0 53 6f 6c 76 65 20 45 4d 44 20 77 69 74 68 20 46 72 6f 62 65 6e 69 75 73 20 6e 6f 72 6d 20 72 65 Solve.EMD.with.Frobenius.norm.re
39e0 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d gularization.#.-----------------
3a00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 ---------------------------..#%%
3a20 20 45 78 61 6d 70 6c 65 20 77 69 74 68 20 46 72 6f 62 65 6e 69 75 73 20 6e 6f 72 6d 20 72 65 67 .Example.with.Frobenius.norm.reg
3a40 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 0a 0a 64 65 66 20 66 28 47 29 3a 0a 20 20 20 20 72 65 74 75 ularization...def.f(G):.....retu
3a60 72 6e 20 30 2e 35 20 2a 20 6e 70 2e 73 75 6d 28 47 2a 2a 32 29 0a 0a 0a 64 65 66 20 64 66 28 47 rn.0.5.*.np.sum(G**2)...def.df(G
3a80 29 3a 0a 20 20 20 20 72 65 74 75 72 6e 20 47 0a 0a 0a 72 65 67 20 3d 20 31 65 2d 31 0a 0a 47 6c ):.....return.G...reg.=.1e-1..Gl
3aa0 32 20 3d 20 6f 74 2e 6f 70 74 69 6d 2e 63 67 28 61 2c 20 62 2c 20 4d 2c 20 72 65 67 2c 20 66 2c 2.=.ot.optim.cg(a,.b,.M,.reg,.f,
3ac0 20 64 66 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 33 29 .df,.verbose=True)..pl.figure(3)
3ae0 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 47 6c 32 2c 20 27 .ot.plot.plot1D_mat(a,.b,.Gl2,.'
3b00 4f 54 20 6d 61 74 72 69 78 20 46 72 6f 62 2e 20 72 65 67 27 29 0a 0a 23 23 23 23 23 23 23 23 23 OT.matrix.Frob..reg')..#########
3b20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
3b40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
3b60 23 23 23 23 23 0a 23 20 53 6f 6c 76 65 20 45 4d 44 20 77 69 74 68 20 65 6e 74 72 6f 70 69 63 20 #####.#.Solve.EMD.with.entropic.
3b80 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d regularization.#.---------------
3ba0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 45 78 61 -----------------------..#%%.Exa
3bc0 6d 70 6c 65 20 77 69 74 68 20 65 6e 74 72 6f 70 69 63 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f mple.with.entropic.regularizatio
3be0 6e 0a 0a 0a 64 65 66 20 66 28 47 29 3a 0a 20 20 20 20 72 65 74 75 72 6e 20 6e 70 2e 73 75 6d 28 n...def.f(G):.....return.np.sum(
3c00 47 20 2a 20 6e 70 2e 6c 6f 67 28 47 29 29 0a 0a 0a 64 65 66 20 64 66 28 47 29 3a 0a 20 20 20 20 G.*.np.log(G))...def.df(G):.....
3c20 72 65 74 75 72 6e 20 6e 70 2e 6c 6f 67 28 47 29 20 2b 20 31 2e 0a 0a 0a 72 65 67 20 3d 20 31 65 return.np.log(G).+.1....reg.=.1e
3c40 2d 33 0a 0a 47 65 20 3d 20 6f 74 2e 6f 70 74 69 6d 2e 63 67 28 61 2c 20 62 2c 20 4d 2c 20 72 65 -3..Ge.=.ot.optim.cg(a,.b,.M,.re
3c60 67 2c 20 66 2c 20 64 66 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 0a 70 6c 2e 66 69 67 75 g,.f,.df,.verbose=True)..pl.figu
3c80 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c re(4,.figsize=(5,.5)).ot.plot.pl
3ca0 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 47 65 2c 20 27 4f 54 20 6d 61 74 72 69 78 20 45 6e ot1D_mat(a,.b,.Ge,.'OT.matrix.En
3cc0 74 72 6f 70 2e 20 72 65 67 27 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 trop..reg')..###################
3ce0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
3d00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 53 6f ###########################.#.So
3d20 6c 76 65 20 45 4d 44 20 77 69 74 68 20 46 72 6f 62 65 6e 69 75 73 20 6e 6f 72 6d 20 2b 20 65 6e lve.EMD.with.Frobenius.norm.+.en
3d40 74 72 6f 70 69 63 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d tropic.regularization.#.--------
3d60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d --------------------------------
3d80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 45 78 61 6d 70 6c 65 20 77 69 74 ---------------..#%%.Example.wit
3da0 68 20 46 72 6f 62 65 6e 69 75 73 20 6e 6f 72 6d 20 2b 20 65 6e 74 72 6f 70 69 63 20 72 65 67 75 h.Frobenius.norm.+.entropic.regu
3dc0 6c 61 72 69 7a 61 74 69 6f 6e 20 77 69 74 68 20 67 63 67 0a 0a 0a 64 65 66 20 66 28 47 29 3a 0a larization.with.gcg...def.f(G):.
3de0 20 20 20 20 72 65 74 75 72 6e 20 30 2e 35 20 2a 20 6e 70 2e 73 75 6d 28 47 2a 2a 32 29 0a 0a 0a ....return.0.5.*.np.sum(G**2)...
3e00 64 65 66 20 64 66 28 47 29 3a 0a 20 20 20 20 72 65 74 75 72 6e 20 47 0a 0a 0a 72 65 67 31 20 3d def.df(G):.....return.G...reg1.=
3e20 20 31 65 2d 33 0a 72 65 67 32 20 3d 20 31 65 2d 31 0a 0a 47 65 6c 32 20 3d 20 6f 74 2e 6f 70 74 .1e-3.reg2.=.1e-1..Gel2.=.ot.opt
3e40 69 6d 2e 67 63 67 28 61 2c 20 62 2c 20 4d 2c 20 72 65 67 31 2c 20 72 65 67 32 2c 20 66 2c 20 64 im.gcg(a,.b,.M,.reg1,.reg2,.f,.d
3e60 66 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 35 2c 20 66 f,.verbose=True)..pl.figure(5,.f
3e80 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 igsize=(5,.5)).ot.plot.plot1D_ma
3ea0 74 28 61 2c 20 62 2c 20 47 65 6c 32 2c 20 27 4f 54 20 65 6e 74 72 6f 70 69 63 20 2b 20 6d 61 74 t(a,.b,.Gel2,.'OT.entropic.+.mat
3ec0 72 69 78 20 46 72 6f 62 2e 20 72 65 67 27 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 rix.Frob..reg').pl.show().PK....
3ee0 00 00 00 00 09 6f 2f 4b 3b 5a 71 cf fc 14 00 00 fc 14 00 00 1d 00 00 00 61 75 74 6f 5f 65 78 61 .....o/K;Zq.............auto_exa
3f00 6d 70 6c 65 73 2f 70 6c 6f 74 5f 6f 74 64 61 5f 64 32 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e mples/plot_otda_d2.py#.-*-.codin
3f20 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d g:.utf-8.-*-.""".===============
3f40 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================================
3f60 3d 3d 3d 3d 0a 4f 54 20 66 6f 72 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 20 6f 6e ====.OT.for.domain.adaptation.on
3f80 20 65 6d 70 69 72 69 63 61 6c 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 3d 3d 3d 3d 3d 3d 3d .empirical.distributions.=======
3fa0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================================
3fc0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 6e 74 72 6f ============..This.example.intro
3fe0 64 75 63 65 73 20 61 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 20 69 6e 20 61 20 32 duces.a.domain.adaptation.in.a.2
4000 44 20 73 65 74 74 69 6e 67 2e 20 49 74 20 65 78 70 6c 69 63 69 74 73 0a 74 68 65 20 70 72 6f 62 D.setting..It.explicits.the.prob
4020 6c 65 6d 20 6f 66 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 20 61 6e 64 20 69 6e 74 lem.of.domain.adaptation.and.int
4040 72 6f 64 75 63 65 73 20 73 6f 6d 65 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 0a 61 roduces.some.optimal.transport.a
4060 70 70 72 6f 61 63 68 65 73 20 74 6f 20 73 6f 6c 76 65 20 69 74 2e 0a 0a 51 75 61 6e 74 69 74 69 pproaches.to.solve.it...Quantiti
4080 65 73 20 73 75 63 68 20 61 73 20 6f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 73 2c 20 67 72 es.such.as.optimal.couplings,.gr
40a0 65 61 74 65 72 20 63 6f 75 70 6c 69 6e 67 20 63 6f 65 66 66 69 63 69 65 6e 74 73 20 61 6e 64 0a eater.coupling.coefficients.and.
40c0 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 20 61 72 65 20 72 65 70 72 65 73 65 6e transported.samples.are.represen
40e0 74 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 67 69 76 65 20 61 20 76 69 73 75 61 6c 20 75 6e ted.in.order.to.give.a.visual.un
4100 64 65 72 73 74 61 6e 64 69 6e 67 0a 6f 66 20 77 68 61 74 20 74 68 65 20 74 72 61 6e 73 70 6f 72 derstanding.of.what.the.transpor
4120 74 20 6d 65 74 68 6f 64 73 20 61 72 65 20 64 6f 69 6e 67 2e 0a 22 22 22 0a 0a 23 20 41 75 74 68 t.methods.are.doing.."""..#.Auth
4140 6f 72 73 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 ors:.Remi.Flamary.<remi.flamary@
4160 75 6e 69 63 65 2e 66 72 3e 0a 23 20 20 20 20 20 20 20 20 20 20 53 74 61 6e 69 73 6c 61 73 20 43 unice.fr>.#..........Stanislas.C
4180 68 61 6d 62 6f 6e 20 3c 73 74 61 6e 2e 63 68 61 6d 62 6f 6e 40 67 6d 61 69 6c 2e 63 6f 6d 3e 0a hambon.<stan.chambon@gmail.com>.
41a0 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 #.#.License:.MIT.License..import
41c0 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f .matplotlib.pylab.as.pl.import.o
41e0 74 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 t...############################
4200 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
4220 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 67 65 6e 65 72 61 74 65 20 64 61 ##################.#.generate.da
4240 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 6e 5f 73 61 6d 70 6c 65 73 5f 73 6f ta.#.-------------..n_samples_so
4260 75 72 63 65 20 3d 20 31 35 30 0a 6e 5f 73 61 6d 70 6c 65 73 5f 74 61 72 67 65 74 20 3d 20 31 35 urce.=.150.n_samples_target.=.15
4280 30 0a 0a 58 73 2c 20 79 73 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 64 61 74 61 0..Xs,.ys.=.ot.datasets.get_data
42a0 5f 63 6c 61 73 73 69 66 28 27 33 67 61 75 73 73 27 2c 20 6e 5f 73 61 6d 70 6c 65 73 5f 73 6f 75 _classif('3gauss',.n_samples_sou
42c0 72 63 65 29 0a 58 74 2c 20 79 74 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 64 61 rce).Xt,.yt.=.ot.datasets.get_da
42e0 74 61 5f 63 6c 61 73 73 69 66 28 27 33 67 61 75 73 73 32 27 2c 20 6e 5f 73 61 6d 70 6c 65 73 5f ta_classif('3gauss2',.n_samples_
4300 74 61 72 67 65 74 29 0a 0a 23 20 43 6f 73 74 20 6d 61 74 72 69 78 0a 4d 20 3d 20 6f 74 2e 64 69 target)..#.Cost.matrix.M.=.ot.di
4320 73 74 28 58 73 2c 20 58 74 2c 20 6d 65 74 72 69 63 3d 27 73 71 65 75 63 6c 69 64 65 61 6e 27 29 st(Xs,.Xt,.metric='sqeuclidean')
4340 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ...#############################
4360 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
4380 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 49 6e 73 74 61 6e 74 69 61 74 65 20 #################.#.Instantiate.
43a0 74 68 65 20 64 69 66 66 65 72 65 6e 74 20 74 72 61 6e 73 70 6f 72 74 20 61 6c 67 6f 72 69 74 68 the.different.transport.algorith
43c0 6d 73 20 61 6e 64 20 66 69 74 20 74 68 65 6d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ms.and.fit.them.#.--------------
43e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d --------------------------------
4400 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 20 45 4d 44 20 54 72 61 6e 73 70 6f 72 74 0a 6f -------------..#.EMD.Transport.o
4420 74 5f 65 6d 64 20 3d 20 6f 74 2e 64 61 2e 45 4d 44 54 72 61 6e 73 70 6f 72 74 28 29 0a 6f 74 5f t_emd.=.ot.da.EMDTransport().ot_
4440 65 6d 64 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 53 69 6e 6b 68 6f 72 emd.fit(Xs=Xs,.Xt=Xt)..#.Sinkhor
4460 6e 20 54 72 61 6e 73 70 6f 72 74 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 2e 64 61 2e n.Transport.ot_sinkhorn.=.ot.da.
4480 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 28 72 65 67 5f 65 3d 31 65 2d 31 29 0a 6f 74 SinkhornTransport(reg_e=1e-1).ot
44a0 5f 73 69 6e 6b 68 6f 72 6e 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 53 _sinkhorn.fit(Xs=Xs,.Xt=Xt)..#.S
44c0 69 6e 6b 68 6f 72 6e 20 54 72 61 6e 73 70 6f 72 74 20 77 69 74 68 20 47 72 6f 75 70 20 6c 61 73 inkhorn.Transport.with.Group.las
44e0 73 6f 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 6f 74 5f 6c 70 6c 31 20 3d 20 6f 74 2e 64 so.regularization.ot_lpl1.=.ot.d
4500 61 2e 53 69 6e 6b 68 6f 72 6e 4c 70 6c 31 54 72 61 6e 73 70 6f 72 74 28 72 65 67 5f 65 3d 31 65 a.SinkhornLpl1Transport(reg_e=1e
4520 2d 31 2c 20 72 65 67 5f 63 6c 3d 31 65 30 29 0a 6f 74 5f 6c 70 6c 31 2e 66 69 74 28 58 73 3d 58 -1,.reg_cl=1e0).ot_lpl1.fit(Xs=X
4540 73 2c 20 79 73 3d 79 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 74 72 61 6e 73 70 6f 72 74 20 73 6f s,.ys=ys,.Xt=Xt)..#.transport.so
4560 75 72 63 65 20 73 61 6d 70 6c 65 73 20 6f 6e 74 6f 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 urce.samples.onto.target.samples
4580 0a 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 20 3d 20 6f 74 5f 65 6d 64 2e 74 72 61 6e 73 66 6f 72 .transp_Xs_emd.=.ot_emd.transfor
45a0 6d 28 58 73 3d 58 73 29 0a 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 m(Xs=Xs).transp_Xs_sinkhorn.=.ot
45c0 5f 73 69 6e 6b 68 6f 72 6e 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 74 72 61 6e 73 _sinkhorn.transform(Xs=Xs).trans
45e0 70 5f 58 73 5f 6c 70 6c 31 20 3d 20 6f 74 5f 6c 70 6c 31 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 p_Xs_lpl1.=.ot_lpl1.transform(Xs
4600 3d 58 73 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 =Xs)...#########################
4620 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
4640 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 67 20 31 20 3a 20 #####################.#.Fig.1.:.
4660 70 6c 6f 74 73 20 73 6f 75 72 63 65 20 61 6e 64 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 20 plots.source.and.target.samples.
4680 2b 20 6d 61 74 72 69 78 20 6f 66 20 70 61 69 72 77 69 73 65 20 64 69 73 74 61 6e 63 65 0a 23 20 +.matrix.of.pairwise.distance.#.
46a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d --------------------------------
46c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d --------------------------------
46e0 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 31 30 2c -----..pl.figure(1,.figsize=(10,
4700 20 31 30 29 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 63 61 .10)).pl.subplot(2,.2,.1).pl.sca
4720 74 74 65 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 58 73 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d tter(Xs[:,.0],.Xs[:,.1],.c=ys,.m
4740 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 arker='+',.label='Source.samples
4760 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 ').pl.xticks([]).pl.yticks([]).p
4780 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 l.legend(loc=0).pl.title('Source
47a0 20 20 73 61 6d 70 6c 65 73 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 32 29 ..samples')..pl.subplot(2,.2,.2)
47c0 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 .pl.scatter(Xt[:,.0],.Xt[:,.1],.
47e0 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 c=yt,.marker='o',.label='Target.
4800 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b samples').pl.xticks([]).pl.ytick
4820 73 28 5b 5d 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 s([]).pl.legend(loc=0).pl.title(
4840 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 'Target.samples')..pl.subplot(2,
4860 20 32 2c 20 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 4d 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f .2,.3).pl.imshow(M,.interpolatio
4880 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 n='nearest').pl.xticks([]).pl.yt
48a0 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4d 61 74 72 69 78 20 6f 66 20 70 61 69 icks([]).pl.title('Matrix.of.pai
48c0 72 77 69 73 65 20 64 69 73 74 61 6e 63 65 73 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 rwise.distances').pl.tight_layou
48e0 74 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 t()...##########################
4900 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
4920 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 67 20 32 20 3a 20 70 ####################.#.Fig.2.:.p
4940 6c 6f 74 73 20 6f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 73 20 66 6f 72 20 74 68 65 20 64 lots.optimal.couplings.for.the.d
4960 69 66 66 65 72 65 6e 74 20 6d 65 74 68 6f 64 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ifferent.methods.#.-------------
4980 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d --------------------------------
49a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a ------------.pl.figure(2,.figsiz
49c0 65 3d 28 31 30 2c 20 36 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 31 29 0a e=(10,.6))..pl.subplot(2,.3,.1).
49e0 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 65 6d 64 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 69 6e 74 65 pl.imshow(ot_emd.coupling_,.inte
4a00 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b rpolation='nearest').pl.xticks([
4a20 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 70 74 69 6d ]).pl.yticks([]).pl.title('Optim
4a40 61 6c 20 63 6f 75 70 6c 69 6e 67 5c 6e 45 4d 44 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e al.coupling\nEMDTransport')..pl.
4a60 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 73 69 subplot(2,.3,.2).pl.imshow(ot_si
4a80 6e 6b 68 6f 72 6e 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d nkhorn.coupling_,.interpolation=
4aa0 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 'nearest').pl.xticks([]).pl.ytic
4ac0 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e ks([]).pl.title('Optimal.couplin
4ae0 67 5c 6e 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c g\nSinkhornTransport')..pl.subpl
4b00 6f 74 28 32 2c 20 33 2c 20 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 6c 70 6c 31 2e 63 6f ot(2,.3,.3).pl.imshow(ot_lpl1.co
4b20 75 70 6c 69 6e 67 5f 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 upling_,.interpolation='nearest'
4b40 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c ).pl.xticks([]).pl.yticks([]).pl
4b60 2e 74 69 74 6c 65 28 27 4f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 5c 6e 53 69 6e 6b 68 6f .title('Optimal.coupling\nSinkho
4b80 72 6e 4c 70 6c 31 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c rnLpl1Transport')..pl.subplot(2,
4ba0 20 33 2c 20 34 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 .3,.4).ot.plot.plot2D_samples_ma
4bc0 74 28 58 73 2c 20 58 74 2c 20 6f 74 5f 65 6d 64 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 63 3d 5b 2e t(Xs,.Xt,.ot_emd.coupling_,.c=[.
4be0 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 5,..5,.1]).pl.scatter(Xs[:,.0],.
4c00 58 73 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 Xs[:,.1],.c=ys,.marker='+',.labe
4c20 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 l='Source.samples').pl.scatter(X
4c40 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d t[:,.0],.Xt[:,.1],.c=yt,.marker=
4c60 27 6f 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 'o',.label='Target.samples').pl.
4c80 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c xticks([]).pl.yticks([]).pl.titl
4ca0 65 28 27 4d 61 69 6e 20 63 6f 75 70 6c 69 6e 67 20 63 6f 65 66 66 69 63 69 65 6e 74 73 5c 6e 45 e('Main.coupling.coefficients\nE
4cc0 4d 44 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 MDTransport')..pl.subplot(2,.3,.
4ce0 35 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 58 73 5).ot.plot.plot2D_samples_mat(Xs
4d00 2c 20 58 74 2c 20 6f 74 5f 73 69 6e 6b 68 6f 72 6e 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 63 3d 5b ,.Xt,.ot_sinkhorn.coupling_,.c=[
4d20 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 73 5b 3a 2c 20 30 5d 2c .5,..5,.1]).pl.scatter(Xs[:,.0],
4d40 20 58 73 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 .Xs[:,.1],.c=ys,.marker='+',.lab
4d60 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 el='Source.samples').pl.scatter(
4d80 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 Xt[:,.0],.Xt[:,.1],.c=yt,.marker
4da0 3d 27 6f 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c ='o',.label='Target.samples').pl
4dc0 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 .xticks([]).pl.yticks([]).pl.tit
4de0 6c 65 28 27 4d 61 69 6e 20 63 6f 75 70 6c 69 6e 67 20 63 6f 65 66 66 69 63 69 65 6e 74 73 5c 6e le('Main.coupling.coefficients\n
4e00 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 SinkhornTransport')..pl.subplot(
4e20 32 2c 20 33 2c 20 36 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 2,.3,.6).ot.plot.plot2D_samples_
4e40 6d 61 74 28 58 73 2c 20 58 74 2c 20 6f 74 5f 6c 70 6c 31 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 63 mat(Xs,.Xt,.ot_lpl1.coupling_,.c
4e60 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 73 5b 3a 2c 20 30 =[.5,..5,.1]).pl.scatter(Xs[:,.0
4e80 5d 2c 20 58 73 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c ],.Xs[:,.1],.c=ys,.marker='+',.l
4ea0 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 73 63 61 74 74 65 abel='Source.samples').pl.scatte
4ec0 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b r(Xt[:,.0],.Xt[:,.1],.c=yt,.mark
4ee0 65 72 3d 27 6f 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a er='o',.label='Target.samples').
4f00 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 pl.xticks([]).pl.yticks([]).pl.t
4f20 69 74 6c 65 28 27 4d 61 69 6e 20 63 6f 75 70 6c 69 6e 67 20 63 6f 65 66 66 69 63 69 65 6e 74 73 itle('Main.coupling.coefficients
4f40 5c 6e 53 69 6e 6b 68 6f 72 6e 4c 70 6c 31 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 6c 2e 74 69 67 \nSinkhornLpl1Transport').pl.tig
4f60 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ht_layout()...##################
4f80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
4fa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 ############################.#.F
4fc0 69 67 20 33 20 3a 20 70 6c 6f 74 20 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 0a ig.3.:.plot.transported.samples.
4fe0 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d #.------------------------------
5000 2d 2d 0a 0a 23 20 64 69 73 70 6c 61 79 20 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 --..#.display.transported.sample
5020 73 0a 70 6c 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 31 30 2c 20 34 29 29 0a s.pl.figure(4,.figsize=(10,.4)).
5040 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 pl.subplot(1,.3,.1).pl.scatter(X
5060 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d t[:,.0],.Xt[:,.1],.c=yt,.marker=
5080 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 'o',............label='Target.sa
50a0 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 30 2e 35 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 mples',.alpha=0.5).pl.scatter(tr
50c0 61 6e 73 70 5f 58 73 5f 65 6d 64 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 ansp_Xs_emd[:,.0],.transp_Xs_emd
50e0 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d [:,.1],.c=ys,............marker=
5100 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 20 73 3d 33 '+',.label='Transp.samples',.s=3
5120 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 0).pl.title('Transported.samples
5140 5c 6e 45 6d 64 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 \nEmdTransport').pl.legend(loc=0
5160 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 0a 70 ).pl.xticks([]).pl.yticks([])..p
5180 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 l.subplot(1,.3,.2).pl.scatter(Xt
51a0 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 [:,.0],.Xt[:,.1],.c=yt,.marker='
51c0 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d o',............label='Target.sam
51e0 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 30 2e 35 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 ples',.alpha=0.5).pl.scatter(tra
5200 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 nsp_Xs_sinkhorn[:,.0],.transp_Xs
5220 5f 73 69 6e 6b 68 6f 72 6e 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 _sinkhorn[:,.1],.c=ys,..........
5240 20 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d 70 ..marker='+',.label='Transp.samp
5260 6c 65 73 27 2c 20 73 3d 33 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 72 61 6e 73 70 6f 72 74 65 les',.s=30).pl.title('Transporte
5280 64 20 73 61 6d 70 6c 65 73 5c 6e 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 d.samples\nSinkhornTransport').p
52a0 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 0a 70 6c 2e 73 l.xticks([]).pl.yticks([])..pl.s
52c0 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 33 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c ubplot(1,.3,.3).pl.scatter(Xt[:,
52e0 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c .0],.Xt[:,.1],.c=yt,.marker='o',
5300 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 ............label='Target.sample
5320 73 27 2c 20 61 6c 70 68 61 3d 30 2e 35 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 s',.alpha=0.5).pl.scatter(transp
5340 5f 58 73 5f 6c 70 6c 31 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 6c 70 6c 31 5b 3a _Xs_lpl1[:,.0],.transp_Xs_lpl1[:
5360 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b ,.1],.c=ys,............marker='+
5380 27 2c 20 6c 61 62 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 20 73 3d 33 30 29 ',.label='Transp.samples',.s=30)
53a0 0a 70 6c 2e 74 69 74 6c 65 28 27 54 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 5c 6e .pl.title('Transported.samples\n
53c0 53 69 6e 6b 68 6f 72 6e 4c 70 6c 31 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 6c 2e 78 74 69 63 6b SinkhornLpl1Transport').pl.xtick
53e0 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 s([]).pl.yticks([])..pl.tight_la
5400 79 6f 75 74 28 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 09 6f 2f 4b 0a yout().pl.show().PK.........o/K.
5420 ea dc a4 21 12 00 00 21 12 00 00 2a 00 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f ...!...!...*...auto_examples/plo
5440 74 5f 6f 74 64 61 5f 73 65 6d 69 5f 73 75 70 65 72 76 69 73 65 64 2e 70 79 23 20 2d 2a 2d 20 63 t_otda_semi_supervised.py#.-*-.c
5460 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d oding:.utf-8.-*-.""".===========
5480 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================================
54a0 3d 0a 4f 54 44 41 20 75 6e 73 75 70 65 72 76 69 73 65 64 20 76 73 20 73 65 6d 69 2d 73 75 70 65 =.OTDA.unsupervised.vs.semi-supe
54c0 72 76 69 73 65 64 20 73 65 74 74 69 6e 67 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d rvised.setting.=================
54e0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 ===========================..Thi
5500 73 20 65 78 61 6d 70 6c 65 20 69 6e 74 72 6f 64 75 63 65 73 20 61 20 73 65 6d 69 20 73 75 70 65 s.example.introduces.a.semi.supe
5520 72 76 69 73 65 64 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 20 69 6e 20 61 20 32 44 rvised.domain.adaptation.in.a.2D
5540 20 73 65 74 74 69 6e 67 2e 0a 49 74 20 65 78 70 6c 69 63 69 74 73 20 74 68 65 20 70 72 6f 62 6c .setting..It.explicits.the.probl
5560 65 6d 20 6f 66 20 73 65 6d 69 20 73 75 70 65 72 76 69 73 65 64 20 64 6f 6d 61 69 6e 20 61 64 61 em.of.semi.supervised.domain.ada
5580 70 74 61 74 69 6f 6e 20 61 6e 64 20 69 6e 74 72 6f 64 75 63 65 73 0a 73 6f 6d 65 20 6f 70 74 69 ptation.and.introduces.some.opti
55a0 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 20 61 70 70 72 6f 61 63 68 65 73 20 74 6f 20 73 6f 6c 76 mal.transport.approaches.to.solv
55c0 65 20 69 74 2e 0a 0a 51 75 61 6e 74 69 74 69 65 73 20 73 75 63 68 20 61 73 20 6f 70 74 69 6d 61 e.it...Quantities.such.as.optima
55e0 6c 20 63 6f 75 70 6c 69 6e 67 73 2c 20 67 72 65 61 74 65 72 20 63 6f 75 70 6c 69 6e 67 20 63 6f l.couplings,.greater.coupling.co
5600 65 66 66 69 63 69 65 6e 74 73 20 61 6e 64 0a 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c efficients.and.transported.sampl
5620 65 73 20 61 72 65 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 67 es.are.represented.in.order.to.g
5640 69 76 65 20 61 20 76 69 73 75 61 6c 20 75 6e 64 65 72 73 74 61 6e 64 69 6e 67 0a 6f 66 20 77 68 ive.a.visual.understanding.of.wh
5660 61 74 20 74 68 65 20 74 72 61 6e 73 70 6f 72 74 20 6d 65 74 68 6f 64 73 20 61 72 65 20 64 6f 69 at.the.transport.methods.are.doi
5680 6e 67 2e 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 73 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 ng.."""..#.Authors:.Remi.Flamary
56a0 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 20 20 20 20 20 20 .<remi.flamary@unice.fr>.#......
56c0 20 20 20 20 53 74 61 6e 69 73 6c 61 73 20 43 68 61 6d 62 6f 6e 20 3c 73 74 61 6e 2e 63 68 61 6d ....Stanislas.Chambon.<stan.cham
56e0 62 6f 6e 40 67 6d 61 69 6c 2e 63 6f 6d 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 bon@gmail.com>.#.#.License:.MIT.
5700 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 License..import.matplotlib.pylab
5720 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 .as.pl.import.ot...#############
5740 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
5760 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
5780 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d #.#.Generate.data.#.------------
57a0 2d 0a 0a 6e 5f 73 61 6d 70 6c 65 73 5f 73 6f 75 72 63 65 20 3d 20 31 35 30 0a 6e 5f 73 61 6d 70 -..n_samples_source.=.150.n_samp
57c0 6c 65 73 5f 74 61 72 67 65 74 20 3d 20 31 35 30 0a 0a 58 73 2c 20 79 73 20 3d 20 6f 74 2e 64 61 les_target.=.150..Xs,.ys.=.ot.da
57e0 74 61 73 65 74 73 2e 67 65 74 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 27 33 67 61 75 73 73 27 tasets.get_data_classif('3gauss'
5800 2c 20 6e 5f 73 61 6d 70 6c 65 73 5f 73 6f 75 72 63 65 29 0a 58 74 2c 20 79 74 20 3d 20 6f 74 2e ,.n_samples_source).Xt,.yt.=.ot.
5820 64 61 74 61 73 65 74 73 2e 67 65 74 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 27 33 67 61 75 73 datasets.get_data_classif('3gaus
5840 73 32 27 2c 20 6e 5f 73 61 6d 70 6c 65 73 5f 74 61 72 67 65 74 29 0a 0a 0a 23 23 23 23 23 23 23 s2',.n_samples_target)...#######
5860 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
5880 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
58a0 23 23 23 23 23 23 23 0a 23 20 54 72 61 6e 73 70 6f 72 74 20 73 6f 75 72 63 65 20 73 61 6d 70 6c #######.#.Transport.source.sampl
58c0 65 73 20 6f 6e 74 6f 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d es.onto.target.samples.#.-------
58e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d --------------------------------
5900 2d 2d 2d 2d 2d 0a 0a 0a 23 20 75 6e 73 75 70 65 72 76 69 73 65 64 20 64 6f 6d 61 69 6e 20 61 64 -----...#.unsupervised.domain.ad
5920 61 70 74 61 74 69 6f 6e 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f 75 6e 20 3d 20 6f 74 2e 64 61 2e aptation.ot_sinkhorn_un.=.ot.da.
5940 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 28 72 65 67 5f 65 3d 31 65 2d 31 29 0a 6f 74 SinkhornTransport(reg_e=1e-1).ot
5960 5f 73 69 6e 6b 68 6f 72 6e 5f 75 6e 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 74 _sinkhorn_un.fit(Xs=Xs,.Xt=Xt).t
5980 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 5f 75 6e 20 3d 20 6f 74 5f 73 69 6e 6b 68 6f ransp_Xs_sinkhorn_un.=.ot_sinkho
59a0 72 6e 5f 75 6e 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 0a 23 20 73 65 6d 69 2d 73 rn_un.transform(Xs=Xs)..#.semi-s
59c0 75 70 65 72 76 69 73 65 64 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 0a 6f 74 5f 73 upervised.domain.adaptation.ot_s
59e0 69 6e 6b 68 6f 72 6e 5f 73 65 6d 69 20 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b 68 6f 72 6e 54 72 61 inkhorn_semi.=.ot.da.SinkhornTra
5a00 6e 73 70 6f 72 74 28 72 65 67 5f 65 3d 31 65 2d 31 29 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f 73 nsport(reg_e=1e-1).ot_sinkhorn_s
5a20 65 6d 69 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 2c 20 79 73 3d 79 73 2c 20 79 74 3d emi.fit(Xs=Xs,.Xt=Xt,.ys=ys,.yt=
5a40 79 74 29 0a 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 5f 73 65 6d 69 20 3d 20 6f 74 yt).transp_Xs_sinkhorn_semi.=.ot
5a60 5f 73 69 6e 6b 68 6f 72 6e 5f 73 65 6d 69 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a _sinkhorn_semi.transform(Xs=Xs).
5a80 0a 23 20 73 65 6d 69 20 73 75 70 65 72 76 69 73 65 64 20 44 41 20 75 73 65 73 20 61 76 61 69 6c .#.semi.supervised.DA.uses.avail
5aa0 61 62 6c 65 20 6c 61 62 61 6c 65 64 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 20 74 6f 20 6d able.labaled.target.samples.to.m
5ac0 6f 64 69 66 79 20 74 68 65 20 63 6f 73 74 0a 23 20 6d 61 74 72 69 78 20 69 6e 76 6f 6c 76 65 64 odify.the.cost.#.matrix.involved
5ae0 20 69 6e 20 74 68 65 20 4f 54 20 70 72 6f 62 6c 65 6d 2e 20 54 68 65 20 63 6f 73 74 20 6f 66 20 .in.the.OT.problem..The.cost.of.
5b00 74 72 61 6e 73 70 6f 72 74 69 6e 67 20 61 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 0a 23 20 6f transporting.a.source.sample.#.o
5b20 66 20 63 6c 61 73 73 20 41 20 6f 6e 74 6f 20 61 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 20 6f f.class.A.onto.a.target.sample.o
5b40 66 20 63 6c 61 73 73 20 42 20 21 3d 20 41 20 69 73 20 73 65 74 20 74 6f 20 69 6e 66 69 6e 69 74 f.class.B.!=.A.is.set.to.infinit
5b60 65 2c 20 6f 72 20 61 0a 23 20 76 65 72 79 20 6c 61 72 67 65 20 76 61 6c 75 65 0a 0a 23 20 6e 6f e,.or.a.#.very.large.value..#.no
5b80 74 65 20 74 68 61 74 20 69 6e 20 74 68 65 20 70 72 65 73 65 6e 74 20 63 61 73 65 20 77 65 20 63 te.that.in.the.present.case.we.c
5ba0 6f 6e 73 69 64 65 72 20 74 68 61 74 20 61 6c 6c 20 74 68 65 20 74 61 72 67 65 74 20 73 61 6d 70 onsider.that.all.the.target.samp
5bc0 6c 65 73 20 61 72 65 0a 23 20 6c 61 62 65 6c 65 64 2e 20 46 6f 72 20 64 61 69 6c 79 20 61 70 70 les.are.#.labeled..For.daily.app
5be0 6c 69 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 20 6d 69 lications,.some.target.sample.mi
5c00 67 68 74 20 6e 6f 74 20 68 61 76 65 20 6c 61 62 65 6c 73 2c 0a 23 20 69 6e 20 74 68 69 73 20 63 ght.not.have.labels,.#.in.this.c
5c20 61 73 65 20 74 68 65 20 65 6c 65 6d 65 6e 74 20 6f 66 20 79 74 20 63 6f 72 72 65 73 70 6f 6e 64 ase.the.element.of.yt.correspond
5c40 69 6e 67 20 74 6f 20 74 68 65 73 65 20 73 61 6d 70 6c 65 73 20 73 68 6f 75 6c 64 20 62 65 0a 23 ing.to.these.samples.should.be.#
5c60 20 66 69 6c 6c 65 64 20 77 69 74 68 20 2d 31 2e 0a 0a 23 20 57 61 72 6e 69 6e 67 3a 20 77 65 20 .filled.with.-1...#.Warning:.we.
5c80 72 65 63 61 6c 6c 20 74 68 61 74 20 2d 31 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 61 73 recall.that.-1.cannot.be.used.as
5ca0 20 61 20 63 6c 61 73 73 20 6c 61 62 65 6c 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 .a.class.label...###############
5cc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
5ce0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a ###############################.
5d00 23 20 46 69 67 20 31 20 3a 20 70 6c 6f 74 73 20 73 6f 75 72 63 65 20 61 6e 64 20 74 61 72 67 65 #.Fig.1.:.plots.source.and.targe
5d20 74 20 73 61 6d 70 6c 65 73 20 2b 20 6d 61 74 72 69 78 20 6f 66 20 70 61 69 72 77 69 73 65 20 64 t.samples.+.matrix.of.pairwise.d
5d40 69 73 74 61 6e 63 65 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d istance.#.----------------------
5d60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d --------------------------------
5d80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 ---------------..pl.figure(1,.fi
5da0 67 73 69 7a 65 3d 28 31 30 2c 20 31 30 29 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c gsize=(10,.10)).pl.subplot(2,.2,
5dc0 20 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 58 73 5b 3a 2c 20 31 .1).pl.scatter(Xs[:,.0],.Xs[:,.1
5de0 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 ],.c=ys,.marker='+',.label='Sour
5e00 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 ce.samples').pl.xticks([]).pl.yt
5e20 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 icks([]).pl.legend(loc=0).pl.tit
5e40 6c 65 28 27 53 6f 75 72 63 65 20 20 73 61 6d 70 6c 65 73 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f le('Source..samples')..pl.subplo
5e60 74 28 32 2c 20 32 2c 20 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 t(2,.2,.2).pl.scatter(Xt[:,.0],.
5e80 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 20 6c 61 62 65 Xt[:,.1],.c=yt,.marker='o',.labe
5ea0 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d l='Target.samples').pl.xticks([]
5ec0 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 ).pl.yticks([]).pl.legend(loc=0)
5ee0 0a 70 6c 2e 74 69 74 6c 65 28 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 0a 70 6c 2e .pl.title('Target.samples')..pl.
5f00 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 73 69 subplot(2,.2,.3).pl.imshow(ot_si
5f20 6e 6b 68 6f 72 6e 5f 75 6e 2e 63 6f 73 74 5f 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 nkhorn_un.cost_,.interpolation='
5f40 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b nearest').pl.xticks([]).pl.ytick
5f60 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 43 6f 73 74 20 6d 61 74 72 69 78 20 2d 20 75 6e s([]).pl.title('Cost.matrix.-.un
5f80 73 75 70 65 72 76 69 73 65 64 20 44 41 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 supervised.DA')..pl.subplot(2,.2
5fa0 2c 20 34 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f 73 65 6d 69 2e ,.4).pl.imshow(ot_sinkhorn_semi.
5fc0 63 6f 73 74 5f 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a cost_,.interpolation='nearest').
5fe0 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 pl.xticks([]).pl.yticks([]).pl.t
6000 69 74 6c 65 28 27 43 6f 73 74 20 6d 61 74 72 69 78 20 2d 20 73 65 6d 69 73 75 70 65 72 76 69 73 itle('Cost.matrix.-.semisupervis
6020 65 64 20 44 41 27 29 0a 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 23 20 74 68 ed.DA')..pl.tight_layout()..#.th
6040 65 20 6f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 20 69 6e 20 74 68 65 20 73 65 6d 69 2d 73 e.optimal.coupling.in.the.semi-s
6060 75 70 65 72 76 69 73 65 64 20 44 41 20 63 61 73 65 20 77 69 6c 6c 20 65 78 68 69 62 69 74 20 22 upervised.DA.case.will.exhibit."
6080 20 73 68 61 70 65 0a 23 20 73 69 6d 69 6c 61 72 22 20 74 6f 20 74 68 65 20 63 6f 73 74 20 6d 61 .shape.#.similar".to.the.cost.ma
60a0 74 72 69 78 2c 20 28 62 6c 6f 63 6b 20 64 69 61 67 6f 6e 61 6c 20 6d 61 74 72 69 78 29 0a 0a 0a trix,.(block.diagonal.matrix)...
60c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
60e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
6100 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 67 20 32 20 3a 20 70 6c 6f 74 73 20 6f ##############.#.Fig.2.:.plots.o
6120 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 73 20 66 6f 72 20 74 68 65 20 64 69 66 66 65 72 65 ptimal.couplings.for.the.differe
6140 6e 74 20 6d 65 74 68 6f 64 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d nt.methods.#.-------------------
6160 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d --------------------------------
6180 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 38 2c ------..pl.figure(2,.figsize=(8,
61a0 20 34 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0a 70 6c 2e 69 6d 73 .4))..pl.subplot(1,.2,.1).pl.ims
61c0 68 6f 77 28 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f 75 6e 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 69 6e how(ot_sinkhorn_un.coupling_,.in
61e0 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 terpolation='nearest').pl.xticks
6200 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 70 74 ([]).pl.yticks([]).pl.title('Opt
6220 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 5c 6e 55 6e 73 75 70 65 72 76 69 73 65 64 20 44 41 27 29 imal.coupling\nUnsupervised.DA')
6240 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 ..pl.subplot(1,.2,.2).pl.imshow(
6260 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f 73 65 6d 69 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 69 6e 74 65 ot_sinkhorn_semi.coupling_,.inte
6280 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b rpolation='nearest').pl.xticks([
62a0 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 70 74 69 6d ]).pl.yticks([]).pl.title('Optim
62c0 61 6c 20 63 6f 75 70 6c 69 6e 67 5c 6e 53 65 6d 69 2d 73 75 70 65 72 76 69 73 65 64 20 44 41 27 al.coupling\nSemi-supervised.DA'
62e0 29 0a 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 )..pl.tight_layout()...#########
6300 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
6320 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
6340 23 23 23 23 23 0a 23 20 46 69 67 20 33 20 3a 20 70 6c 6f 74 20 74 72 61 6e 73 70 6f 72 74 65 64 #####.#.Fig.3.:.plot.transported
6360 20 73 61 6d 70 6c 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .samples.#.---------------------
6380 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 20 64 69 73 70 6c 61 79 20 74 72 61 6e 73 70 6f 72 74 -----------..#.display.transport
63a0 65 64 20 73 61 6d 70 6c 65 73 0a 70 6c 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d ed.samples.pl.figure(4,.figsize=
63c0 28 38 2c 20 34 29 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 (8,.4)).pl.subplot(1,.2,.1).pl.s
63e0 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c catter(Xt[:,.0],.Xt[:,.1],.c=yt,
6400 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 .marker='o',............label='T
6420 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 30 2e 35 29 0a 70 6c 2e 73 63 arget.samples',.alpha=0.5).pl.sc
6440 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 5f 75 6e 5b 3a 2c 20 30 atter(transp_Xs_sinkhorn_un[:,.0
6460 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 5f 75 6e 5b 3a 2c 20 31 5d 2c 20 ],.transp_Xs_sinkhorn_un[:,.1],.
6480 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 c=ys,............marker='+',.lab
64a0 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 20 73 3d 33 30 29 0a 70 6c 2e 74 69 el='Transp.samples',.s=30).pl.ti
64c0 74 6c 65 28 27 54 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 5c 6e 45 6d 64 54 72 61 tle('Transported.samples\nEmdTra
64e0 6e 73 70 6f 72 74 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 78 74 69 nsport').pl.legend(loc=0).pl.xti
6500 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f cks([]).pl.yticks([])..pl.subplo
6520 74 28 31 2c 20 32 2c 20 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 t(1,.2,.2).pl.scatter(Xt[:,.0],.
6540 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 Xt[:,.1],.c=yt,.marker='o',.....
6560 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 .......label='Target.samples',.a
6580 6c 70 68 61 3d 30 2e 35 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 73 lpha=0.5).pl.scatter(transp_Xs_s
65a0 69 6e 6b 68 6f 72 6e 5f 73 65 6d 69 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 73 69 inkhorn_semi[:,.0],.transp_Xs_si
65c0 6e 6b 68 6f 72 6e 5f 73 65 6d 69 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 nkhorn_semi[:,.1],.c=ys,........
65e0 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 ....marker='+',.label='Transp.sa
6600 6d 70 6c 65 73 27 2c 20 73 3d 33 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 72 61 6e 73 70 6f 72 mples',.s=30).pl.title('Transpor
6620 74 65 64 20 73 61 6d 70 6c 65 73 5c 6e 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 27 29 ted.samples\nSinkhornTransport')
6640 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 0a 70 6c .pl.xticks([]).pl.yticks([])..pl
6660 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 .tight_layout().pl.show().PK....
6680 00 00 00 00 09 6f 2f 4b ad 47 e9 fa 92 06 00 00 92 06 00 00 1b 00 00 00 61 75 74 6f 5f 65 78 61 .....o/K.G..............auto_exa
66a0 6d 70 6c 65 73 2f 70 6c 6f 74 5f 4f 54 5f 31 44 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a mples/plot_OT_1D.py#.-*-.coding:
66c0 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d .utf-8.-*-.""".=================
66e0 3d 3d 3d 0a 31 44 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 0a 3d 3d 3d 3d 3d 3d 3d ===.1D.optimal.transport.=======
6700 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 6c 6c 75 =============..This.example.illu
6720 73 74 72 61 74 65 73 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66 20 45 4d 44 20 61 strates.the.computation.of.EMD.a
6740 6e 64 20 53 69 6e 6b 68 6f 72 6e 20 74 72 61 6e 73 70 6f 72 74 20 70 6c 61 6e 73 0a 61 6e 64 20 nd.Sinkhorn.transport.plans.and.
6760 74 68 65 69 72 20 76 69 73 75 61 6c 69 7a 61 74 69 6f 6e 2e 0a 0a 22 22 22 0a 0a 23 20 41 75 74 their.visualization..."""..#.Aut
6780 68 6f 72 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 hor:.Remi.Flamary.<remi.flamary@
67a0 75 6e 69 63 65 2e 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e unice.fr>.#.#.License:.MIT.Licen
67c0 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 se..import.numpy.as.np.import.ma
67e0 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 66 tplotlib.pylab.as.pl.import.ot.f
6800 72 6f 6d 20 6f 74 2e 64 61 74 61 73 65 74 73 20 69 6d 70 6f 72 74 20 67 65 74 5f 31 44 5f 67 61 rom.ot.datasets.import.get_1D_ga
6820 75 73 73 20 61 73 20 67 61 75 73 73 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 uss.as.gauss..##################
6840 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
6860 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 47 ############################.#.G
6880 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 enerate.data.#.-------------...#
68a0 25 25 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 6e 20 3d 20 31 30 30 20 20 23 20 6e 62 20 62 69 6e %%.parameters..n.=.100..#.nb.bin
68c0 73 0a 0a 23 20 62 69 6e 20 70 6f 73 69 74 69 6f 6e 73 0a 78 20 3d 20 6e 70 2e 61 72 61 6e 67 65 s..#.bin.positions.x.=.np.arange
68e0 28 6e 2c 20 64 74 79 70 65 3d 6e 70 2e 66 6c 6f 61 74 36 34 29 0a 0a 23 20 47 61 75 73 73 69 61 (n,.dtype=np.float64)..#.Gaussia
6900 6e 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 61 20 3d 20 67 61 75 73 73 28 6e 2c 20 6d 3d 32 n.distributions.a.=.gauss(n,.m=2
6920 30 2c 20 73 3d 35 29 20 20 23 20 6d 3d 20 6d 65 61 6e 2c 20 73 3d 20 73 74 64 0a 62 20 3d 20 67 0,.s=5)..#.m=.mean,.s=.std.b.=.g
6940 61 75 73 73 28 6e 2c 20 6d 3d 36 30 2c 20 73 3d 31 30 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 auss(n,.m=60,.s=10)..#.loss.matr
6960 69 78 0a 4d 20 3d 20 6f 74 2e 64 69 73 74 28 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 ix.M.=.ot.dist(x.reshape((n,.1))
6980 2c 20 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 ,.x.reshape((n,.1))).M./=.M.max(
69a0 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 )...############################
69c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
69e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 64 69 73 74 72 69 ##################.#.Plot.distri
6a00 62 75 74 69 6f 6e 73 20 61 6e 64 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 23 20 2d 2d 2d 2d 2d 2d butions.and.loss.matrix.#.------
6a20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 ----------------------------..#%
6a40 25 20 70 6c 6f 74 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 70 6c 2e 66 69 67 %.plot.the.distributions..pl.fig
6a60 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 29 29 0a 70 6c 2e 70 6c 6f 74 ure(1,.figsize=(6.4,.3)).pl.plot
6a80 28 78 2c 20 61 2c 20 27 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 64 69 73 74 72 69 (x,.a,.'b',.label='Source.distri
6aa0 62 75 74 69 6f 6e 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 2c 20 27 72 27 2c 20 6c 61 62 65 bution').pl.plot(x,.b,.'r',.labe
6ac0 6c 3d 27 54 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 27 29 0a 70 6c 2e 6c 65 67 65 l='Target.distribution').pl.lege
6ae0 6e 64 28 29 0a 0a 23 25 25 20 70 6c 6f 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 61 6e 64 nd()..#%%.plot.distributions.and
6b00 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 73 69 .loss.matrix..pl.figure(2,.figsi
6b20 7a 65 3d 28 35 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c ze=(5,.5)).ot.plot.plot1D_mat(a,
6b40 20 62 2c 20 4d 2c 20 27 43 6f 73 74 20 6d 61 74 72 69 78 20 4d 27 29 0a 0a 23 23 23 23 23 23 23 .b,.M,.'Cost.matrix.M')..#######
6b60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
6b80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
6ba0 23 23 23 23 23 23 23 0a 23 20 53 6f 6c 76 65 20 45 4d 44 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a #######.#.Solve.EMD.#.---------.
6bc0 0a 0a 23 25 25 20 45 4d 44 0a 0a 47 30 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 29 0a ..#%%.EMD..G0.=.ot.emd(a,.b,.M).
6be0 0a 70 6c 2e 66 69 67 75 72 65 28 33 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 29 0a 6f 74 .pl.figure(3,.figsize=(5,.5)).ot
6c00 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 47 30 2c 20 27 4f 54 20 6d .plot.plot1D_mat(a,.b,.G0,.'OT.m
6c20 61 74 72 69 78 20 47 30 27 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 atrix.G0')..####################
6c40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
6c60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 53 6f 6c ##########################.#.Sol
6c80 76 65 20 53 69 6e 6b 68 6f 72 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 ve.Sinkhorn.#.--------------...#
6ca0 25 25 20 53 69 6e 6b 68 6f 72 6e 0a 0a 6c 61 6d 62 64 20 3d 20 31 65 2d 33 0a 47 73 20 3d 20 6f %%.Sinkhorn..lambd.=.1e-3.Gs.=.o
6cc0 74 2e 73 69 6e 6b 68 6f 72 6e 28 61 2c 20 62 2c 20 4d 2c 20 6c 61 6d 62 64 2c 20 76 65 72 62 6f t.sinkhorn(a,.b,.M,.lambd,.verbo
6ce0 73 65 3d 54 72 75 65 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 se=True)..pl.figure(4,.figsize=(
6d00 35 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 5,.5)).ot.plot.plot1D_mat(a,.b,.
6d20 47 73 2c 20 27 4f 54 20 6d 61 74 72 69 78 20 53 69 6e 6b 68 6f 72 6e 27 29 0a 0a 70 6c 2e 73 68 Gs,.'OT.matrix.Sinkhorn')..pl.sh
6d40 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 09 6f 2f 4b 0c f2 34 0e 5a 0e 00 00 5a 0e 00 00 23 ow().PK.........o/K..4.Z...Z...#
6d60 00 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 62 61 72 79 63 65 6e 74 65 72 ...auto_examples/plot_barycenter
6d80 5f 31 44 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 _1D.py#.-*-.coding:.utf-8.-*-.""
6da0 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ".==============================
6dc0 0a 31 44 20 57 61 73 73 65 72 73 74 65 69 6e 20 62 61 72 79 63 65 6e 74 65 72 20 64 65 6d 6f 0a .1D.Wasserstein.barycenter.demo.
6de0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a ==============================..
6e00 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 6c 6c 75 73 74 72 61 74 65 73 20 74 68 65 20 63 6f 6d This.example.illustrates.the.com
6e20 70 75 74 61 74 69 6f 6e 20 6f 66 20 72 65 67 75 6c 61 72 69 7a 65 64 20 57 61 73 73 65 72 73 79 putation.of.regularized.Wassersy
6e40 65 69 6e 20 42 61 72 79 63 65 6e 74 65 72 0a 61 73 20 70 72 6f 70 6f 73 65 64 20 69 6e 20 5b 33 ein.Barycenter.as.proposed.in.[3
6e60 5d 2e 0a 0a 0a 5b 33 5d 20 42 65 6e 61 6d 6f 75 2c 20 4a 2e 20 44 2e 2c 20 43 61 72 6c 69 65 72 ]....[3].Benamou,.J..D.,.Carlier
6e80 2c 20 47 2e 2c 20 43 75 74 75 72 69 2c 20 4d 2e 2c 20 4e 65 6e 6e 61 2c 20 4c 2e 2c 20 26 20 50 ,.G.,.Cuturi,.M.,.Nenna,.L.,.&.P
6ea0 65 79 72 c3 a9 2c 20 47 2e 20 28 32 30 31 35 29 2e 0a 49 74 65 72 61 74 69 76 65 20 42 72 65 67 eyr..,.G..(2015)..Iterative.Breg
6ec0 6d 61 6e 20 70 72 6f 6a 65 63 74 69 6f 6e 73 20 66 6f 72 20 72 65 67 75 6c 61 72 69 7a 65 64 20 man.projections.for.regularized.
6ee0 74 72 61 6e 73 70 6f 72 74 61 74 69 6f 6e 20 70 72 6f 62 6c 65 6d 73 0a 53 49 41 4d 20 4a 6f 75 transportation.problems.SIAM.Jou
6f00 72 6e 61 6c 20 6f 6e 20 53 63 69 65 6e 74 69 66 69 63 20 43 6f 6d 70 75 74 69 6e 67 2c 20 33 37 rnal.on.Scientific.Computing,.37
6f20 28 32 29 2c 20 41 31 31 31 31 2d 41 31 31 33 38 2e 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 (2),.A1111-A1138..."""..#.Author
6f40 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 :.Remi.Flamary.<remi.flamary@uni
6f60 63 65 2e 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a ce.fr>.#.#.License:.MIT.License.
6f80 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c .import.numpy.as.np.import.matpl
6fa0 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 23 20 6e 65 otlib.pylab.as.pl.import.ot.#.ne
6fc0 63 65 73 73 61 72 79 20 66 6f 72 20 33 64 20 70 6c 6f 74 20 65 76 65 6e 20 69 66 20 6e 6f 74 20 cessary.for.3d.plot.even.if.not.
6fe0 75 73 65 64 0a 66 72 6f 6d 20 6d 70 6c 5f 74 6f 6f 6c 6b 69 74 73 2e 6d 70 6c 6f 74 33 64 20 69 used.from.mpl_toolkits.mplot3d.i
7000 6d 70 6f 72 74 20 41 78 65 73 33 44 20 20 23 20 6e 6f 71 61 0a 66 72 6f 6d 20 6d 61 74 70 6c 6f mport.Axes3D..#.noqa.from.matplo
7020 74 6c 69 62 2e 63 6f 6c 6c 65 63 74 69 6f 6e 73 20 69 6d 70 6f 72 74 20 50 6f 6c 79 43 6f 6c 6c tlib.collections.import.PolyColl
7040 65 63 74 69 6f 6e 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ection..########################
7060 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7080 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 47 65 6e 65 72 61 74 ######################.#.Generat
70a0 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 61 72 61 e.data.#.-------------..#%%.para
70c0 6d 65 74 65 72 73 0a 0a 6e 20 3d 20 31 30 30 20 20 23 20 6e 62 20 62 69 6e 73 0a 0a 23 20 62 69 meters..n.=.100..#.nb.bins..#.bi
70e0 6e 20 70 6f 73 69 74 69 6f 6e 73 0a 78 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 2c 20 64 74 79 n.positions.x.=.np.arange(n,.dty
7100 70 65 3d 6e 70 2e 66 6c 6f 61 74 36 34 29 0a 0a 23 20 47 61 75 73 73 69 61 6e 20 64 69 73 74 72 pe=np.float64)..#.Gaussian.distr
7120 69 62 75 74 69 6f 6e 73 0a 61 31 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 31 44 ibutions.a1.=.ot.datasets.get_1D
7140 5f 67 61 75 73 73 28 6e 2c 20 6d 3d 32 30 2c 20 73 3d 35 29 20 20 23 20 6d 3d 20 6d 65 61 6e 2c _gauss(n,.m=20,.s=5)..#.m=.mean,
7160 20 73 3d 20 73 74 64 0a 61 32 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 31 44 5f .s=.std.a2.=.ot.datasets.get_1D_
7180 67 61 75 73 73 28 6e 2c 20 6d 3d 36 30 2c 20 73 3d 38 29 0a 0a 23 20 63 72 65 61 74 69 6e 67 20 gauss(n,.m=60,.s=8)..#.creating.
71a0 6d 61 74 72 69 78 20 41 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61 6c 6c 20 64 69 73 74 72 69 62 75 matrix.A.containing.all.distribu
71c0 74 69 6f 6e 73 0a 41 20 3d 20 6e 70 2e 76 73 74 61 63 6b 28 28 61 31 2c 20 61 32 29 29 2e 54 0a tions.A.=.np.vstack((a1,.a2)).T.
71e0 6e 5f 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 3d 20 41 2e 73 68 61 70 65 5b 31 5d 0a 0a 23 20 n_distributions.=.A.shape[1]..#.
7200 6c 6f 73 73 20 6d 61 74 72 69 78 20 2b 20 6e 6f 72 6d 61 6c 69 7a 61 74 69 6f 6e 0a 4d 20 3d 20 loss.matrix.+.normalization.M.=.
7220 6f 74 2e 75 74 69 6c 73 2e 64 69 73 74 30 28 6e 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 29 0a 0a ot.utils.dist0(n).M./=.M.max()..
7240 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7280 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 64 61 74 61 0a 23 20 2d 2d 2d ##############.#.Plot.data.#.---
72a0 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 6c 6f 74 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f ------..#%%.plot.the.distributio
72c0 6e 73 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 ns..pl.figure(1,.figsize=(6.4,.3
72e0 29 29 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6e 5f 64 69 73 74 72 69 62 75 74 69 6f 6e )).for.i.in.range(n_distribution
7300 73 29 3a 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 2c 20 41 5b 3a 2c 20 69 5d 29 0a 70 6c 2e 74 s):.....pl.plot(x,.A[:,.i]).pl.t
7320 69 74 6c 65 28 27 44 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c itle('Distributions').pl.tight_l
7340 61 79 6f 75 74 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ayout()..#######################
7360 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7380 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 42 61 72 79 63 65 #######################.#.Baryce
73a0 6e 74 65 72 20 63 6f 6d 70 75 74 61 74 69 6f 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d nter.computation.#.-------------
73c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 62 61 72 79 63 65 6e 74 65 72 20 63 6f 6d 70 75 74 ---------..#%%.barycenter.comput
73e0 61 74 69 6f 6e 0a 0a 61 6c 70 68 61 20 3d 20 30 2e 32 20 20 23 20 30 3c 3d 61 6c 70 68 61 3c 3d ation..alpha.=.0.2..#.0<=alpha<=
7400 31 0a 77 65 69 67 68 74 73 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 31 20 2d 20 61 6c 70 68 61 2c 1.weights.=.np.array([1.-.alpha,
7420 20 61 6c 70 68 61 5d 29 0a 0a 23 20 6c 32 62 61 72 79 0a 62 61 72 79 5f 6c 32 20 3d 20 41 2e 64 .alpha])..#.l2bary.bary_l2.=.A.d
7440 6f 74 28 77 65 69 67 68 74 73 29 0a 0a 23 20 77 61 73 73 65 72 73 74 65 69 6e 0a 72 65 67 20 3d ot(weights)..#.wasserstein.reg.=
7460 20 31 65 2d 33 0a 62 61 72 79 5f 77 61 73 73 20 3d 20 6f 74 2e 62 72 65 67 6d 61 6e 2e 62 61 72 .1e-3.bary_wass.=.ot.bregman.bar
7480 79 63 65 6e 74 65 72 28 41 2c 20 4d 2c 20 72 65 67 2c 20 77 65 69 67 68 74 73 29 0a 0a 70 6c 2e ycenter(A,.M,.reg,.weights)..pl.
74a0 66 69 67 75 72 65 28 32 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c figure(2).pl.clf().pl.subplot(2,
74c0 20 31 2c 20 31 29 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6e 5f 64 69 73 74 72 69 62 75 .1,.1).for.i.in.range(n_distribu
74e0 74 69 6f 6e 73 29 3a 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 2c 20 41 5b 3a 2c 20 69 5d 29 0a tions):.....pl.plot(x,.A[:,.i]).
7500 70 6c 2e 74 69 74 6c 65 28 27 44 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 70 6c 2e 73 75 pl.title('Distributions')..pl.su
7520 62 70 6c 6f 74 28 32 2c 20 31 2c 20 32 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 61 72 79 5f 6c bplot(2,.1,.2).pl.plot(x,.bary_l
7540 32 2c 20 27 72 27 2c 20 6c 61 62 65 6c 3d 27 6c 32 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 2,.'r',.label='l2').pl.plot(x,.b
7560 61 72 79 5f 77 61 73 73 2c 20 27 67 27 2c 20 6c 61 62 65 6c 3d 27 57 61 73 73 65 72 73 74 65 69 ary_wass,.'g',.label='Wasserstei
7580 6e 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 29 0a 70 6c 2e 74 69 74 6c 65 28 27 42 61 72 79 63 65 n').pl.legend().pl.title('Baryce
75a0 6e 74 65 72 73 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 23 23 23 23 23 nters').pl.tight_layout()..#####
75c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
75e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7600 23 23 23 23 23 23 23 23 23 0a 23 20 42 61 72 79 63 65 6e 74 72 69 63 20 69 6e 74 65 72 70 6f 6c #########.#.Barycentric.interpol
7620 61 74 69 6f 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ation.#.------------------------
7640 2d 0a 0a 23 25 25 20 62 61 72 79 63 65 6e 74 65 72 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 0a -..#%%.barycenter.interpolation.
7660 0a 6e 5f 61 6c 70 68 61 20 3d 20 31 31 0a 61 6c 70 68 61 5f 6c 69 73 74 20 3d 20 6e 70 2e 6c 69 .n_alpha.=.11.alpha_list.=.np.li
7680 6e 73 70 61 63 65 28 30 2c 20 31 2c 20 6e 5f 61 6c 70 68 61 29 0a 0a 0a 42 5f 6c 32 20 3d 20 6e nspace(0,.1,.n_alpha)...B_l2.=.n
76a0 70 2e 7a 65 72 6f 73 28 28 6e 2c 20 6e 5f 61 6c 70 68 61 29 29 0a 0a 42 5f 77 61 73 73 20 3d 20 p.zeros((n,.n_alpha))..B_wass.=.
76c0 6e 70 2e 63 6f 70 79 28 42 5f 6c 32 29 0a 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 30 2c np.copy(B_l2)..for.i.in.range(0,
76e0 20 6e 5f 61 6c 70 68 61 29 3a 0a 20 20 20 20 61 6c 70 68 61 20 3d 20 61 6c 70 68 61 5f 6c 69 73 .n_alpha):.....alpha.=.alpha_lis
7700 74 5b 69 5d 0a 20 20 20 20 77 65 69 67 68 74 73 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 31 20 2d t[i].....weights.=.np.array([1.-
7720 20 61 6c 70 68 61 2c 20 61 6c 70 68 61 5d 29 0a 20 20 20 20 42 5f 6c 32 5b 3a 2c 20 69 5d 20 3d .alpha,.alpha]).....B_l2[:,.i].=
7740 20 41 2e 64 6f 74 28 77 65 69 67 68 74 73 29 0a 20 20 20 20 42 5f 77 61 73 73 5b 3a 2c 20 69 5d .A.dot(weights).....B_wass[:,.i]
7760 20 3d 20 6f 74 2e 62 72 65 67 6d 61 6e 2e 62 61 72 79 63 65 6e 74 65 72 28 41 2c 20 4d 2c 20 72 .=.ot.bregman.barycenter(A,.M,.r
7780 65 67 2c 20 77 65 69 67 68 74 73 29 0a 0a 23 25 25 20 70 6c 6f 74 20 69 6e 74 65 72 70 6f 6c 61 eg,.weights)..#%%.plot.interpola
77a0 74 69 6f 6e 0a 0a 70 6c 2e 66 69 67 75 72 65 28 33 29 0a 0a 63 6d 61 70 20 3d 20 70 6c 2e 63 6d tion..pl.figure(3)..cmap.=.pl.cm
77c0 2e 67 65 74 5f 63 6d 61 70 28 27 76 69 72 69 64 69 73 27 29 0a 76 65 72 74 73 20 3d 20 5b 5d 0a .get_cmap('viridis').verts.=.[].
77e0 7a 73 20 3d 20 61 6c 70 68 61 5f 6c 69 73 74 0a 66 6f 72 20 69 2c 20 7a 20 69 6e 20 65 6e 75 6d zs.=.alpha_list.for.i,.z.in.enum
7800 65 72 61 74 65 28 7a 73 29 3a 0a 20 20 20 20 79 73 20 3d 20 42 5f 6c 32 5b 3a 2c 20 69 5d 0a 20 erate(zs):.....ys.=.B_l2[:,.i]..
7820 20 20 20 76 65 72 74 73 2e 61 70 70 65 6e 64 28 6c 69 73 74 28 7a 69 70 28 78 2c 20 79 73 29 29 ...verts.append(list(zip(x,.ys))
7840 29 0a 0a 61 78 20 3d 20 70 6c 2e 67 63 66 28 29 2e 67 63 61 28 70 72 6f 6a 65 63 74 69 6f 6e 3d )..ax.=.pl.gcf().gca(projection=
7860 27 33 64 27 29 0a 0a 70 6f 6c 79 20 3d 20 50 6f 6c 79 43 6f 6c 6c 65 63 74 69 6f 6e 28 76 65 72 '3d')..poly.=.PolyCollection(ver
7880 74 73 2c 20 66 61 63 65 63 6f 6c 6f 72 73 3d 5b 63 6d 61 70 28 61 29 20 66 6f 72 20 61 20 69 6e ts,.facecolors=[cmap(a).for.a.in
78a0 20 61 6c 70 68 61 5f 6c 69 73 74 5d 29 0a 70 6f 6c 79 2e 73 65 74 5f 61 6c 70 68 61 28 30 2e 37 .alpha_list]).poly.set_alpha(0.7
78c0 29 0a 61 78 2e 61 64 64 5f 63 6f 6c 6c 65 63 74 69 6f 6e 33 64 28 70 6f 6c 79 2c 20 7a 73 3d 7a ).ax.add_collection3d(poly,.zs=z
78e0 73 2c 20 7a 64 69 72 3d 27 79 27 29 0a 61 78 2e 73 65 74 5f 78 6c 61 62 65 6c 28 27 78 27 29 0a s,.zdir='y').ax.set_xlabel('x').
7900 61 78 2e 73 65 74 5f 78 6c 69 6d 33 64 28 30 2c 20 6e 29 0a 61 78 2e 73 65 74 5f 79 6c 61 62 65 ax.set_xlim3d(0,.n).ax.set_ylabe
7920 6c 28 27 24 5c 5c 61 6c 70 68 61 24 27 29 0a 61 78 2e 73 65 74 5f 79 6c 69 6d 33 64 28 30 2c 20 l('$\\alpha$').ax.set_ylim3d(0,.
7940 31 29 0a 61 78 2e 73 65 74 5f 7a 6c 61 62 65 6c 28 27 27 29 0a 61 78 2e 73 65 74 5f 7a 6c 69 6d 1).ax.set_zlabel('').ax.set_zlim
7960 33 64 28 30 2c 20 42 5f 6c 32 2e 6d 61 78 28 29 20 2a 20 31 2e 30 31 29 0a 70 6c 2e 74 69 74 6c 3d(0,.B_l2.max().*.1.01).pl.titl
7980 65 28 27 42 61 72 79 63 65 6e 74 65 72 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 20 77 69 74 68 e('Barycenter.interpolation.with
79a0 20 6c 32 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 66 69 67 75 .l2').pl.tight_layout()..pl.figu
79c0 72 65 28 34 29 0a 63 6d 61 70 20 3d 20 70 6c 2e 63 6d 2e 67 65 74 5f 63 6d 61 70 28 27 76 69 72 re(4).cmap.=.pl.cm.get_cmap('vir
79e0 69 64 69 73 27 29 0a 76 65 72 74 73 20 3d 20 5b 5d 0a 7a 73 20 3d 20 61 6c 70 68 61 5f 6c 69 73 idis').verts.=.[].zs.=.alpha_lis
7a00 74 0a 66 6f 72 20 69 2c 20 7a 20 69 6e 20 65 6e 75 6d 65 72 61 74 65 28 7a 73 29 3a 0a 20 20 20 t.for.i,.z.in.enumerate(zs):....
7a20 20 79 73 20 3d 20 42 5f 77 61 73 73 5b 3a 2c 20 69 5d 0a 20 20 20 20 76 65 72 74 73 2e 61 70 70 .ys.=.B_wass[:,.i].....verts.app
7a40 65 6e 64 28 6c 69 73 74 28 7a 69 70 28 78 2c 20 79 73 29 29 29 0a 0a 61 78 20 3d 20 70 6c 2e 67 end(list(zip(x,.ys)))..ax.=.pl.g
7a60 63 66 28 29 2e 67 63 61 28 70 72 6f 6a 65 63 74 69 6f 6e 3d 27 33 64 27 29 0a 0a 70 6f 6c 79 20 cf().gca(projection='3d')..poly.
7a80 3d 20 50 6f 6c 79 43 6f 6c 6c 65 63 74 69 6f 6e 28 76 65 72 74 73 2c 20 66 61 63 65 63 6f 6c 6f =.PolyCollection(verts,.facecolo
7aa0 72 73 3d 5b 63 6d 61 70 28 61 29 20 66 6f 72 20 61 20 69 6e 20 61 6c 70 68 61 5f 6c 69 73 74 5d rs=[cmap(a).for.a.in.alpha_list]
7ac0 29 0a 70 6f 6c 79 2e 73 65 74 5f 61 6c 70 68 61 28 30 2e 37 29 0a 61 78 2e 61 64 64 5f 63 6f 6c ).poly.set_alpha(0.7).ax.add_col
7ae0 6c 65 63 74 69 6f 6e 33 64 28 70 6f 6c 79 2c 20 7a 73 3d 7a 73 2c 20 7a 64 69 72 3d 27 79 27 29 lection3d(poly,.zs=zs,.zdir='y')
7b00 0a 61 78 2e 73 65 74 5f 78 6c 61 62 65 6c 28 27 78 27 29 0a 61 78 2e 73 65 74 5f 78 6c 69 6d 33 .ax.set_xlabel('x').ax.set_xlim3
7b20 64 28 30 2c 20 6e 29 0a 61 78 2e 73 65 74 5f 79 6c 61 62 65 6c 28 27 24 5c 5c 61 6c 70 68 61 24 d(0,.n).ax.set_ylabel('$\\alpha$
7b40 27 29 0a 61 78 2e 73 65 74 5f 79 6c 69 6d 33 64 28 30 2c 20 31 29 0a 61 78 2e 73 65 74 5f 7a 6c ').ax.set_ylim3d(0,.1).ax.set_zl
7b60 61 62 65 6c 28 27 27 29 0a 61 78 2e 73 65 74 5f 7a 6c 69 6d 33 64 28 30 2c 20 42 5f 6c 32 2e 6d abel('').ax.set_zlim3d(0,.B_l2.m
7b80 61 78 28 29 20 2a 20 31 2e 30 31 29 0a 70 6c 2e 74 69 74 6c 65 28 27 42 61 72 79 63 65 6e 74 65 ax().*.1.01).pl.title('Barycente
7ba0 72 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 20 77 69 74 68 20 57 61 73 73 65 72 73 74 65 69 6e r.interpolation.with.Wasserstein
7bc0 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a ').pl.tight_layout()..pl.show().
7be0 50 4b 03 04 14 00 00 00 00 00 09 6f 2f 4b 60 f3 2a fb 00 11 00 00 00 11 00 00 22 00 00 00 61 75 PK.........o/K`.*........."...au
7c00 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 6f 74 64 61 5f 63 6c 61 73 73 65 73 2e 70 79 to_examples/plot_otda_classes.py
7c20 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d #.-*-.coding:.utf-8.-*-.""".====
7c40 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4f 54 20 66 6f 72 20 64 6f 6d 61 ====================.OT.for.doma
7c60 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d in.adaptation.==================
7c80 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 6e 74 72 6f 64 75 63 65 73 20 ======..This.example.introduces.
7ca0 61 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 20 69 6e 20 61 20 32 44 20 73 65 74 74 a.domain.adaptation.in.a.2D.sett
7cc0 69 6e 67 20 61 6e 64 20 74 68 65 20 34 20 4f 54 44 41 0a 61 70 70 72 6f 61 63 68 65 73 20 63 75 ing.and.the.4.OTDA.approaches.cu
7ce0 72 72 65 6e 74 6c 79 20 73 75 70 70 6f 72 74 65 64 20 69 6e 20 50 4f 54 2e 0a 0a 22 22 22 0a 0a rrently.supported.in.POT..."""..
7d00 23 20 41 75 74 68 6f 72 73 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c #.Authors:.Remi.Flamary.<remi.fl
7d20 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 20 20 20 20 20 20 20 20 20 20 53 74 61 6e 69 amary@unice.fr>.#..........Stani
7d40 73 6c 61 73 20 43 68 61 6d 62 6f 6e 20 3c 73 74 61 6e 2e 63 68 61 6d 62 6f 6e 40 67 6d 61 69 6c slas.Chambon.<stan.chambon@gmail
7d60 2e 63 6f 6d 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a .com>.#.#.License:.MIT.License..
7d80 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d import.matplotlib.pylab.as.pl.im
7da0 70 6f 72 74 20 6f 74 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 port.ot...######################
7dc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7de0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 47 65 6e 65 72 ########################.#.Gener
7e00 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 6e 5f 73 6f 75 72 ate.data.#.-------------..n_sour
7e20 63 65 5f 73 61 6d 70 6c 65 73 20 3d 20 31 35 30 0a 6e 5f 74 61 72 67 65 74 5f 73 61 6d 70 6c 65 ce_samples.=.150.n_target_sample
7e40 73 20 3d 20 31 35 30 0a 0a 58 73 2c 20 79 73 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 s.=.150..Xs,.ys.=.ot.datasets.ge
7e60 74 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 27 33 67 61 75 73 73 27 2c 20 6e 5f 73 6f 75 72 63 t_data_classif('3gauss',.n_sourc
7e80 65 5f 73 61 6d 70 6c 65 73 29 0a 58 74 2c 20 79 74 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e e_samples).Xt,.yt.=.ot.datasets.
7ea0 67 65 74 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 27 33 67 61 75 73 73 32 27 2c 20 6e 5f 74 61 get_data_classif('3gauss2',.n_ta
7ec0 72 67 65 74 5f 73 61 6d 70 6c 65 73 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 rget_samples)...################
7ee0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7f00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 ##############################.#
7f20 20 49 6e 73 74 61 6e 74 69 61 74 65 20 74 68 65 20 64 69 66 66 65 72 65 6e 74 20 74 72 61 6e 73 .Instantiate.the.different.trans
7f40 70 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d 73 20 61 6e 64 20 66 69 74 20 74 68 65 6d 0a 23 20 2d port.algorithms.and.fit.them.#.-
7f60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d --------------------------------
7f80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 20 45 4d --------------------------..#.EM
7fa0 44 20 54 72 61 6e 73 70 6f 72 74 0a 6f 74 5f 65 6d 64 20 3d 20 6f 74 2e 64 61 2e 45 4d 44 54 72 D.Transport.ot_emd.=.ot.da.EMDTr
7fc0 61 6e 73 70 6f 72 74 28 29 0a 6f 74 5f 65 6d 64 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 ansport().ot_emd.fit(Xs=Xs,.Xt=X
7fe0 74 29 0a 0a 23 20 53 69 6e 6b 68 6f 72 6e 20 54 72 61 6e 73 70 6f 72 74 0a 6f 74 5f 73 69 6e 6b t)..#.Sinkhorn.Transport.ot_sink
8000 68 6f 72 6e 20 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 28 72 horn.=.ot.da.SinkhornTransport(r
8020 65 67 5f 65 3d 31 65 2d 31 29 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 2e 66 69 74 28 58 73 3d 58 73 eg_e=1e-1).ot_sinkhorn.fit(Xs=Xs
8040 2c 20 58 74 3d 58 74 29 0a 0a 23 20 53 69 6e 6b 68 6f 72 6e 20 54 72 61 6e 73 70 6f 72 74 20 77 ,.Xt=Xt)..#.Sinkhorn.Transport.w
8060 69 74 68 20 47 72 6f 75 70 20 6c 61 73 73 6f 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 6f ith.Group.lasso.regularization.o
8080 74 5f 6c 70 6c 31 20 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b 68 6f 72 6e 4c 70 6c 31 54 72 61 6e 73 t_lpl1.=.ot.da.SinkhornLpl1Trans
80a0 70 6f 72 74 28 72 65 67 5f 65 3d 31 65 2d 31 2c 20 72 65 67 5f 63 6c 3d 31 65 30 29 0a 6f 74 5f port(reg_e=1e-1,.reg_cl=1e0).ot_
80c0 6c 70 6c 31 2e 66 69 74 28 58 73 3d 58 73 2c 20 79 73 3d 79 73 2c 20 58 74 3d 58 74 29 0a 0a 23 lpl1.fit(Xs=Xs,.ys=ys,.Xt=Xt)..#
80e0 20 53 69 6e 6b 68 6f 72 6e 20 54 72 61 6e 73 70 6f 72 74 20 77 69 74 68 20 47 72 6f 75 70 20 6c .Sinkhorn.Transport.with.Group.l
8100 61 73 73 6f 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 20 6c 31 6c 32 0a 6f 74 5f 6c 31 6c 32 asso.regularization.l1l2.ot_l1l2
8120 20 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b 68 6f 72 6e 4c 31 6c 32 54 72 61 6e 73 70 6f 72 74 28 72 .=.ot.da.SinkhornL1l2Transport(r
8140 65 67 5f 65 3d 31 65 2d 31 2c 20 72 65 67 5f 63 6c 3d 32 65 30 2c 20 6d 61 78 5f 69 74 65 72 3d eg_e=1e-1,.reg_cl=2e0,.max_iter=
8160 32 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20,.............................
8180 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 6f 74 5f 6c 31 6c 32 2e ..........verbose=True).ot_l1l2.
81a0 66 69 74 28 58 73 3d 58 73 2c 20 79 73 3d 79 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 74 72 61 6e fit(Xs=Xs,.ys=ys,.Xt=Xt)..#.tran
81c0 73 70 6f 72 74 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 20 6f 6e 74 6f 20 74 61 72 67 65 74 sport.source.samples.onto.target
81e0 20 73 61 6d 70 6c 65 73 0a 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 20 3d 20 6f 74 5f 65 6d 64 2e .samples.transp_Xs_emd.=.ot_emd.
8200 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 transform(Xs=Xs).transp_Xs_sinkh
8220 6f 72 6e 20 3d 20 6f 74 5f 73 69 6e 6b 68 6f 72 6e 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 orn.=.ot_sinkhorn.transform(Xs=X
8240 73 29 0a 74 72 61 6e 73 70 5f 58 73 5f 6c 70 6c 31 20 3d 20 6f 74 5f 6c 70 6c 31 2e 74 72 61 6e s).transp_Xs_lpl1.=.ot_lpl1.tran
8260 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 74 72 61 6e 73 70 5f 58 73 5f 6c 31 6c 32 20 3d 20 6f 74 sform(Xs=Xs).transp_Xs_l1l2.=.ot
8280 5f 6c 31 6c 32 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 0a 0a 23 23 23 23 23 23 23 _l1l2.transform(Xs=Xs)...#######
82a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
82c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
82e0 23 23 23 23 23 23 23 0a 23 20 46 69 67 20 31 20 3a 20 70 6c 6f 74 73 20 73 6f 75 72 63 65 20 61 #######.#.Fig.1.:.plots.source.a
8300 6e 64 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d nd.target.samples.#.------------
8320 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e ---------------------------..pl.
8340 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 31 30 2c 20 35 29 29 0a 70 6c 2e 73 75 figure(1,.figsize=(10,.5)).pl.su
8360 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 73 5b 3a 2c 20 bplot(1,.2,.1).pl.scatter(Xs[:,.
8380 30 5d 2c 20 58 73 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 0],.Xs[:,.1],.c=ys,.marker='+',.
83a0 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 78 74 69 63 6b label='Source.samples').pl.xtick
83c0 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f s([]).pl.yticks([]).pl.legend(lo
83e0 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 20 20 73 61 6d 70 6c 65 73 27 29 c=0).pl.title('Source..samples')
8400 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 ..pl.subplot(1,.2,.2).pl.scatter
8420 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 (Xt[:,.0],.Xt[:,.1],.c=yt,.marke
8440 72 3d 27 6f 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 r='o',.label='Target.samples').p
8460 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 6c 65 l.xticks([]).pl.yticks([]).pl.le
8480 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 61 72 67 65 74 20 73 61 6d gend(loc=0).pl.title('Target.sam
84a0 70 6c 65 73 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 0a 23 23 23 23 23 ples').pl.tight_layout()...#####
84c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
84e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
8500 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 67 20 32 20 3a 20 70 6c 6f 74 20 6f 70 74 69 6d 61 6c #########.#.Fig.2.:.plot.optimal
8520 20 63 6f 75 70 6c 69 6e 67 73 20 61 6e 64 20 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c .couplings.and.transported.sampl
8540 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d es.#.---------------------------
8560 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 61 72 ---------------------------..par
8580 61 6d 5f 69 6d 67 20 3d 20 7b 27 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 27 3a 20 27 6e 65 61 72 am_img.=.{'interpolation':.'near
85a0 65 73 74 27 2c 20 27 63 6d 61 70 27 3a 20 27 73 70 65 63 74 72 61 6c 27 7d 0a 0a 70 6c 2e 66 69 est',.'cmap':.'spectral'}..pl.fi
85c0 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 31 35 2c 20 38 29 29 0a 70 6c 2e 73 75 62 70 gure(2,.figsize=(15,.8)).pl.subp
85e0 6c 6f 74 28 32 2c 20 34 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 65 6d 64 2e 63 6f lot(2,.4,.1).pl.imshow(ot_emd.co
8600 75 70 6c 69 6e 67 5f 2c 20 2a 2a 70 61 72 61 6d 5f 69 6d 67 29 0a 70 6c 2e 78 74 69 63 6b 73 28 upling_,.**param_img).pl.xticks(
8620 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 70 74 69 []).pl.yticks([]).pl.title('Opti
8640 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 5c 6e 45 4d 44 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c mal.coupling\nEMDTransport')..pl
8660 2e 73 75 62 70 6c 6f 74 28 32 2c 20 34 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 73 .subplot(2,.4,.2).pl.imshow(ot_s
8680 69 6e 6b 68 6f 72 6e 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 2a 2a 70 61 72 61 6d 5f 69 6d 67 29 0a inkhorn.coupling_,.**param_img).
86a0 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 pl.xticks([]).pl.yticks([]).pl.t
86c0 69 74 6c 65 28 27 4f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 5c 6e 53 69 6e 6b 68 6f 72 6e itle('Optimal.coupling\nSinkhorn
86e0 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 34 2c 20 33 29 Transport')..pl.subplot(2,.4,.3)
8700 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 6c 70 6c 31 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 2a 2a .pl.imshow(ot_lpl1.coupling_,.**
8720 70 61 72 61 6d 5f 69 6d 67 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 param_img).pl.xticks([]).pl.ytic
8740 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e ks([]).pl.title('Optimal.couplin
8760 67 5c 6e 53 69 6e 6b 68 6f 72 6e 4c 70 6c 31 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 g\nSinkhornLpl1Transport')..pl.s
8780 75 62 70 6c 6f 74 28 32 2c 20 34 2c 20 34 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 6c 31 6c ubplot(2,.4,.4).pl.imshow(ot_l1l
87a0 32 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 2a 2a 70 61 72 61 6d 5f 69 6d 67 29 0a 70 6c 2e 78 74 69 2.coupling_,.**param_img).pl.xti
87c0 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 cks([]).pl.yticks([]).pl.title('
87e0 4f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 5c 6e 53 69 6e 6b 68 6f 72 6e 4c 31 6c 32 54 72 Optimal.coupling\nSinkhornL1l2Tr
8800 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 34 2c 20 35 29 0a 70 ansport')..pl.subplot(2,.4,.5).p
8820 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d l.scatter(Xt[:,.0],.Xt[:,.1],.c=
8840 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c yt,.marker='o',............label
8860 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 30 2e 33 29 0a 70 6c ='Target.samples',.alpha=0.3).pl
8880 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 5b 3a 2c 20 30 5d 2c 20 74 72 .scatter(transp_Xs_emd[:,.0],.tr
88a0 61 6e 73 70 5f 58 73 5f 65 6d 64 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 ansp_Xs_emd[:,.1],.c=ys,........
88c0 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 ....marker='+',.label='Transp.sa
88e0 6d 70 6c 65 73 27 2c 20 73 3d 33 30 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 mples',.s=30).pl.xticks([]).pl.y
8900 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 72 61 6e 73 70 6f 72 74 65 64 20 ticks([]).pl.title('Transported.
8920 73 61 6d 70 6c 65 73 5c 6e 45 6d 64 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 6c 2e 6c 65 67 65 6e samples\nEmdTransport').pl.legen
8940 64 28 6c 6f 63 3d 22 6c 6f 77 65 72 20 6c 65 66 74 22 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 d(loc="lower.left")..pl.subplot(
8960 32 2c 20 34 2c 20 36 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 2,.4,.6).pl.scatter(Xt[:,.0],.Xt
8980 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 [:,.1],.c=yt,.marker='o',.......
89a0 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 .....label='Target.samples',.alp
89c0 68 61 3d 30 2e 33 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e ha=0.3).pl.scatter(transp_Xs_sin
89e0 6b 68 6f 72 6e 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 5b khorn[:,.0],.transp_Xs_sinkhorn[
8a00 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 :,.1],.c=ys,............marker='
8a20 2b 27 2c 20 6c 61 62 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 20 73 3d 33 30 +',.label='Transp.samples',.s=30
8a40 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c ).pl.xticks([]).pl.yticks([]).pl
8a60 2e 74 69 74 6c 65 28 27 54 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 5c 6e 53 69 6e .title('Transported.samples\nSin
8a80 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 khornTransport')..pl.subplot(2,.
8aa0 34 2c 20 37 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 4,.7).pl.scatter(Xt[:,.0],.Xt[:,
8ac0 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 .1],.c=yt,.marker='o',..........
8ae0 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d ..label='Target.samples',.alpha=
8b00 30 2e 33 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 6c 70 6c 31 5b 3a 0.3).pl.scatter(transp_Xs_lpl1[:
8b20 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 6c 70 6c 31 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 ,.0],.transp_Xs_lpl1[:,.1],.c=ys
8b40 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 ,............marker='+',.label='
8b60 54 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 20 73 3d 33 30 29 0a 70 6c 2e 78 74 69 63 6b 73 Transp.samples',.s=30).pl.xticks
8b80 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 72 61 ([]).pl.yticks([]).pl.title('Tra
8ba0 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 5c 6e 53 69 6e 6b 68 6f 72 6e 4c 70 6c 31 54 72 nsported.samples\nSinkhornLpl1Tr
8bc0 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 34 2c 20 38 29 0a 70 ansport')..pl.subplot(2,.4,.8).p
8be0 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d l.scatter(Xt[:,.0],.Xt[:,.1],.c=
8c00 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c yt,.marker='o',............label
8c20 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 30 2e 33 29 0a 70 6c ='Target.samples',.alpha=0.3).pl
8c40 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 6c 31 6c 32 5b 3a 2c 20 30 5d 2c 20 74 .scatter(transp_Xs_l1l2[:,.0],.t
8c60 72 61 6e 73 70 5f 58 73 5f 6c 31 6c 32 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 ransp_Xs_l1l2[:,.1],.c=ys,......
8c80 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 54 72 61 6e 73 70 20 ......marker='+',.label='Transp.
8ca0 73 61 6d 70 6c 65 73 27 2c 20 73 3d 33 30 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c samples',.s=30).pl.xticks([]).pl
8cc0 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 72 61 6e 73 70 6f 72 74 65 .yticks([]).pl.title('Transporte
8ce0 64 20 73 61 6d 70 6c 65 73 5c 6e 53 69 6e 6b 68 6f 72 6e 4c 31 6c 32 54 72 61 6e 73 70 6f 72 74 d.samples\nSinkhornL1l2Transport
8d00 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a ').pl.tight_layout()..pl.show().
8d20 50 4b 03 04 14 00 00 00 00 00 09 6f 2f 4b 1a d1 23 82 4f 10 00 00 4f 10 00 00 30 00 00 00 61 75 PK.........o/K..#.O...O...0...au
8d40 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 6f 74 64 61 5f 6d 61 70 70 69 6e 67 5f 63 6f to_examples/plot_otda_mapping_co
8d60 6c 6f 72 73 5f 69 6d 61 67 65 73 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d lors_images.py#.-*-.coding:.utf-
8d80 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 8.-*-.""".======================
8da0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a ===============================.
8dc0 4f 54 20 66 6f 72 20 69 6d 61 67 65 20 63 6f 6c 6f 72 20 61 64 61 70 74 61 74 69 6f 6e 20 77 69 OT.for.image.color.adaptation.wi
8de0 74 68 20 6d 61 70 70 69 6e 67 20 65 73 74 69 6d 61 74 69 6f 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d th.mapping.estimation.==========
8e00 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================================
8e20 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 4f 54 20 66 6f 72 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 ===========..OT.for.domain.adapt
8e40 61 74 69 6f 6e 20 77 69 74 68 20 69 6d 61 67 65 20 63 6f 6c 6f 72 20 61 64 61 70 74 61 74 69 6f ation.with.image.color.adaptatio
8e60 6e 20 5b 36 5d 20 77 69 74 68 20 6d 61 70 70 69 6e 67 0a 65 73 74 69 6d 61 74 69 6f 6e 20 5b 38 n.[6].with.mapping.estimation.[8
8e80 5d 2e 0a 0a 5b 36 5d 20 46 65 72 72 61 64 61 6e 73 2c 20 53 2e 2c 20 50 61 70 61 64 61 6b 69 73 ]...[6].Ferradans,.S.,.Papadakis
8ea0 2c 20 4e 2e 2c 20 50 65 79 72 65 2c 20 47 2e 2c 20 26 20 41 75 6a 6f 6c 2c 20 4a 2e 20 46 2e 20 ,.N.,.Peyre,.G.,.&.Aujol,.J..F..
8ec0 28 32 30 31 34 29 2e 20 52 65 67 75 6c 61 72 69 7a 65 64 0a 20 20 20 20 64 69 73 63 72 65 74 65 (2014)..Regularized.....discrete
8ee0 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 2e 20 53 49 41 4d 20 4a 6f 75 72 6e 61 6c .optimal.transport..SIAM.Journal
8f00 20 6f 6e 20 49 6d 61 67 69 6e 67 20 53 63 69 65 6e 63 65 73 2c 20 37 28 33 29 2c 0a 20 20 20 20 .on.Imaging.Sciences,.7(3),.....
8f20 31 38 35 33 2d 31 38 38 32 2e 0a 5b 38 5d 20 4d 2e 20 50 65 72 72 6f 74 2c 20 4e 2e 20 43 6f 75 1853-1882..[8].M..Perrot,.N..Cou
8f40 72 74 79 2c 20 52 2e 20 46 6c 61 6d 61 72 79 2c 20 41 2e 20 48 61 62 72 61 72 64 2c 20 22 4d 61 rty,.R..Flamary,.A..Habrard,."Ma
8f60 70 70 69 6e 67 20 65 73 74 69 6d 61 74 69 6f 6e 20 66 6f 72 0a 20 20 20 20 64 69 73 63 72 65 74 pping.estimation.for.....discret
8f80 65 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 22 2c 20 4e 65 75 72 61 6c 20 49 6e 66 e.optimal.transport",.Neural.Inf
8fa0 6f 72 6d 61 74 69 6f 6e 20 50 72 6f 63 65 73 73 69 6e 67 20 53 79 73 74 65 6d 73 20 28 4e 49 50 ormation.Processing.Systems.(NIP
8fc0 53 29 2c 0a 20 20 20 20 32 30 31 36 2e 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 73 3a 20 52 S),.....2016..."""..#.Authors:.R
8fe0 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e emi.Flamary.<remi.flamary@unice.
9000 66 72 3e 0a 23 20 20 20 20 20 20 20 20 20 20 53 74 61 6e 69 73 6c 61 73 20 43 68 61 6d 62 6f 6e fr>.#..........Stanislas.Chambon
9020 20 3c 73 74 61 6e 2e 63 68 61 6d 62 6f 6e 40 67 6d 61 69 6c 2e 63 6f 6d 3e 0a 23 0a 23 20 4c 69 .<stan.chambon@gmail.com>.#.#.Li
9040 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 cense:.MIT.License..import.numpy
9060 20 61 73 20 6e 70 0a 66 72 6f 6d 20 73 63 69 70 79 20 69 6d 70 6f 72 74 20 6e 64 69 6d 61 67 65 .as.np.from.scipy.import.ndimage
9080 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 .import.matplotlib.pylab.as.pl.i
90a0 6d 70 6f 72 74 20 6f 74 0a 0a 72 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 52 61 6e 64 6f 6d 53 74 mport.ot..r.=.np.random.RandomSt
90c0 61 74 65 28 34 32 29 0a 0a 0a 64 65 66 20 69 6d 32 6d 61 74 28 49 29 3a 0a 20 20 20 20 22 22 22 ate(42)...def.im2mat(I):....."""
90e0 43 6f 6e 76 65 72 74 73 20 61 6e 64 20 69 6d 61 67 65 20 74 6f 20 6d 61 74 72 69 78 20 28 6f 6e Converts.and.image.to.matrix.(on
9100 65 20 70 69 78 65 6c 20 70 65 72 20 6c 69 6e 65 29 22 22 22 0a 20 20 20 20 72 65 74 75 72 6e 20 e.pixel.per.line)""".....return.
9120 49 2e 72 65 73 68 61 70 65 28 28 49 2e 73 68 61 70 65 5b 30 5d 20 2a 20 49 2e 73 68 61 70 65 5b I.reshape((I.shape[0].*.I.shape[
9140 31 5d 2c 20 49 2e 73 68 61 70 65 5b 32 5d 29 29 0a 0a 0a 64 65 66 20 6d 61 74 32 69 6d 28 58 2c 1],.I.shape[2]))...def.mat2im(X,
9160 20 73 68 61 70 65 29 3a 0a 20 20 20 20 22 22 22 43 6f 6e 76 65 72 74 73 20 62 61 63 6b 20 61 20 .shape):....."""Converts.back.a.
9180 6d 61 74 72 69 78 20 74 6f 20 61 6e 20 69 6d 61 67 65 22 22 22 0a 20 20 20 20 72 65 74 75 72 6e matrix.to.an.image""".....return
91a0 20 58 2e 72 65 73 68 61 70 65 28 73 68 61 70 65 29 0a 0a 0a 64 65 66 20 6d 69 6e 6d 61 78 28 49 .X.reshape(shape)...def.minmax(I
91c0 29 3a 0a 20 20 20 20 72 65 74 75 72 6e 20 6e 70 2e 63 6c 69 70 28 49 2c 20 30 2c 20 31 29 0a 0a ):.....return.np.clip(I,.0,.1)..
91e0 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 .###############################
9200 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
9220 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a ###############.#.Generate.data.
9240 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 20 4c 6f 61 64 69 6e 67 20 69 6d 61 67 65 #.-------------..#.Loading.image
9260 73 0a 49 31 20 3d 20 6e 64 69 6d 61 67 65 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 6f s.I1.=.ndimage.imread('../data/o
9280 63 65 61 6e 5f 64 61 79 2e 6a 70 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 cean_day.jpg').astype(np.float64
92a0 29 20 2f 20 32 35 36 0a 49 32 20 3d 20 6e 64 69 6d 61 67 65 2e 69 6d 72 65 61 64 28 27 2e 2e 2f )./.256.I2.=.ndimage.imread('../
92c0 64 61 74 61 2f 6f 63 65 61 6e 5f 73 75 6e 73 65 74 2e 6a 70 67 27 29 2e 61 73 74 79 70 65 28 6e data/ocean_sunset.jpg').astype(n
92e0 70 2e 66 6c 6f 61 74 36 34 29 20 2f 20 32 35 36 0a 0a 0a 58 31 20 3d 20 69 6d 32 6d 61 74 28 49 p.float64)./.256...X1.=.im2mat(I
9300 31 29 0a 58 32 20 3d 20 69 6d 32 6d 61 74 28 49 32 29 0a 0a 23 20 74 72 61 69 6e 69 6e 67 20 73 1).X2.=.im2mat(I2)..#.training.s
9320 61 6d 70 6c 65 73 0a 6e 62 20 3d 20 31 30 30 30 0a 69 64 78 31 20 3d 20 72 2e 72 61 6e 64 69 6e amples.nb.=.1000.idx1.=.r.randin
9340 74 28 58 31 2e 73 68 61 70 65 5b 30 5d 2c 20 73 69 7a 65 3d 28 6e 62 2c 29 29 0a 69 64 78 32 20 t(X1.shape[0],.size=(nb,)).idx2.
9360 3d 20 72 2e 72 61 6e 64 69 6e 74 28 58 32 2e 73 68 61 70 65 5b 30 5d 2c 20 73 69 7a 65 3d 28 6e =.r.randint(X2.shape[0],.size=(n
9380 62 2c 29 29 0a 0a 58 73 20 3d 20 58 31 5b 69 64 78 31 2c 20 3a 5d 0a 58 74 20 3d 20 58 32 5b 69 b,))..Xs.=.X1[idx1,.:].Xt.=.X2[i
93a0 64 78 32 2c 20 3a 5d 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 dx2,.:]...######################
93c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
93e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 44 6f 6d 61 69 ########################.#.Domai
9400 6e 20 61 64 61 70 74 61 74 69 6f 6e 20 66 6f 72 20 70 69 78 65 6c 20 64 69 73 74 72 69 62 75 74 n.adaptation.for.pixel.distribut
9420 69 6f 6e 20 74 72 61 6e 73 66 65 72 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ion.transfer.#.-----------------
9440 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d --------------------------------
9460 0a 0a 23 20 45 4d 44 54 72 61 6e 73 70 6f 72 74 0a 6f 74 5f 65 6d 64 20 3d 20 6f 74 2e 64 61 2e ..#.EMDTransport.ot_emd.=.ot.da.
9480 45 4d 44 54 72 61 6e 73 70 6f 72 74 28 29 0a 6f 74 5f 65 6d 64 2e 66 69 74 28 58 73 3d 58 73 2c EMDTransport().ot_emd.fit(Xs=Xs,
94a0 20 58 74 3d 58 74 29 0a 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 20 3d 20 6f 74 5f 65 6d 64 2e 74 .Xt=Xt).transp_Xs_emd.=.ot_emd.t
94c0 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 31 29 0a 49 6d 61 67 65 5f 65 6d 64 20 3d 20 6d 69 6e 6d ransform(Xs=X1).Image_emd.=.minm
94e0 61 78 28 6d 61 74 32 69 6d 28 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 2c 20 49 31 2e 73 68 61 70 ax(mat2im(transp_Xs_emd,.I1.shap
9500 65 29 29 0a 0a 23 20 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 0a 6f 74 5f 73 69 6e 6b e))..#.SinkhornTransport.ot_sink
9520 68 6f 72 6e 20 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 28 72 horn.=.ot.da.SinkhornTransport(r
9540 65 67 5f 65 3d 31 65 2d 31 29 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 2e 66 69 74 28 58 73 3d 58 73 eg_e=1e-1).ot_sinkhorn.fit(Xs=Xs
9560 2c 20 58 74 3d 58 74 29 0a 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 ,.Xt=Xt).transp_Xs_sinkhorn.=.ot
9580 5f 65 6d 64 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 31 29 0a 49 6d 61 67 65 5f 73 69 6e 6b _emd.transform(Xs=X1).Image_sink
95a0 68 6f 72 6e 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 74 72 61 6e 73 70 5f 58 73 5f 73 horn.=.minmax(mat2im(transp_Xs_s
95c0 69 6e 6b 68 6f 72 6e 2c 20 49 31 2e 73 68 61 70 65 29 29 0a 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f inkhorn,.I1.shape))..ot_mapping_
95e0 6c 69 6e 65 61 72 20 3d 20 6f 74 2e 64 61 2e 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 28 linear.=.ot.da.MappingTransport(
9600 0a 20 20 20 20 6d 75 3d 31 65 30 2c 20 65 74 61 3d 31 65 2d 38 2c 20 62 69 61 73 3d 54 72 75 65 .....mu=1e0,.eta=1e-8,.bias=True
9620 2c 20 6d 61 78 5f 69 74 65 72 3d 32 30 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 6f 74 5f ,.max_iter=20,.verbose=True).ot_
9640 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 mapping_linear.fit(Xs=Xs,.Xt=Xt)
9660 0a 0a 58 31 74 6c 20 3d 20 6f 74 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 2e 74 72 61 6e 73 ..X1tl.=.ot_mapping_linear.trans
9680 66 6f 72 6d 28 58 73 3d 58 31 29 0a 49 6d 61 67 65 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 form(Xs=X1).Image_mapping_linear
96a0 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 58 31 74 6c 2c 20 49 31 2e 73 68 61 70 65 29 .=.minmax(mat2im(X1tl,.I1.shape)
96c0 29 0a 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 67 61 75 73 73 69 61 6e 20 3d 20 6f 74 2e 64 61 2e 4d )..ot_mapping_gaussian.=.ot.da.M
96e0 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 28 0a 20 20 20 20 6d 75 3d 31 65 30 2c 20 65 74 61 appingTransport(.....mu=1e0,.eta
9700 3d 31 65 2d 32 2c 20 73 69 67 6d 61 3d 31 2c 20 62 69 61 73 3d 46 61 6c 73 65 2c 20 6d 61 78 5f =1e-2,.sigma=1,.bias=False,.max_
9720 69 74 65 72 3d 31 30 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 6f 74 5f 6d 61 70 70 69 6e iter=10,.verbose=True).ot_mappin
9740 67 5f 67 61 75 73 73 69 61 6e 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 58 31 g_gaussian.fit(Xs=Xs,.Xt=Xt)..X1
9760 74 6e 20 3d 20 6f 74 5f 6d 61 70 70 69 6e 67 5f 67 61 75 73 73 69 61 6e 2e 74 72 61 6e 73 66 6f tn.=.ot_mapping_gaussian.transfo
9780 72 6d 28 58 73 3d 58 31 29 20 20 23 20 75 73 65 20 74 68 65 20 65 73 74 69 6d 61 74 65 64 20 6d rm(Xs=X1)..#.use.the.estimated.m
97a0 61 70 70 69 6e 67 0a 49 6d 61 67 65 5f 6d 61 70 70 69 6e 67 5f 67 61 75 73 73 69 61 6e 20 3d 20 apping.Image_mapping_gaussian.=.
97c0 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 58 31 74 6e 2c 20 49 31 2e 73 68 61 70 65 29 29 0a 0a minmax(mat2im(X1tn,.I1.shape))..
97e0 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 .###############################
9800 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
9820 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 6f 72 69 67 69 6e 61 6c 20 ###############.#.Plot.original.
9840 69 6d 61 67 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 images.#.--------------------..p
9860 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 29 29 0a 70 6c l.figure(1,.figsize=(6.4,.3)).pl
9880 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 29 0a .subplot(1,.2,.1).pl.imshow(I1).
98a0 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 31 pl.axis('off').pl.title('Image.1
98c0 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f ')..pl.subplot(1,.2,.2).pl.imsho
98e0 77 28 49 32 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 w(I2).pl.axis('off').pl.title('I
9900 6d 61 67 65 20 32 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 0a 23 23 23 mage.2').pl.tight_layout()...###
9920 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
9940 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
9960 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 70 69 78 65 6c 20 76 61 6c 75 65 73 20 ###########.#.Plot.pixel.values.
9980 64 69 73 74 72 69 62 75 74 69 6f 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d distribution.#.-----------------
99a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 73 -------------..pl.figure(2,.figs
99c0 69 7a 65 3d 28 36 2e 34 2c 20 35 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 ize=(6.4,.5))..pl.subplot(1,.2,.
99e0 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 58 73 5b 3a 2c 20 32 5d 1).pl.scatter(Xs[:,.0],.Xs[:,.2]
9a00 2c 20 63 3d 58 73 29 0a 70 6c 2e 61 78 69 73 28 5b 30 2c 20 31 2c 20 30 2c 20 31 5d 29 0a 70 6c ,.c=Xs).pl.axis([0,.1,.0,.1]).pl
9a20 2e 78 6c 61 62 65 6c 28 27 52 65 64 27 29 0a 70 6c 2e 79 6c 61 62 65 6c 28 27 42 6c 75 65 27 29 .xlabel('Red').pl.ylabel('Blue')
9a40 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 31 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 .pl.title('Image.1')..pl.subplot
9a60 28 31 2c 20 32 2c 20 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 (1,.2,.2).pl.scatter(Xt[:,.0],.X
9a80 74 5b 3a 2c 20 32 5d 2c 20 63 3d 58 74 29 0a 70 6c 2e 61 78 69 73 28 5b 30 2c 20 31 2c 20 30 2c t[:,.2],.c=Xt).pl.axis([0,.1,.0,
9aa0 20 31 5d 29 0a 70 6c 2e 78 6c 61 62 65 6c 28 27 52 65 64 27 29 0a 70 6c 2e 79 6c 61 62 65 6c 28 .1]).pl.xlabel('Red').pl.ylabel(
9ac0 27 42 6c 75 65 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 32 27 29 0a 70 6c 2e 74 'Blue').pl.title('Image.2').pl.t
9ae0 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ight_layout()...################
9b00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
9b20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 ##############################.#
9b40 20 50 6c 6f 74 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 69 6d 61 67 65 73 0a 23 20 2d 2d 2d 2d 2d .Plot.transformed.images.#.-----
9b60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c ------------------..pl.figure(2,
9b80 20 66 69 67 73 69 7a 65 3d 28 31 30 2c 20 35 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c .figsize=(10,.5))..pl.subplot(2,
9ba0 20 33 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 .3,.1).pl.imshow(I1).pl.axis('of
9bc0 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 2e 20 31 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f f').pl.title('Im..1')..pl.subplo
9be0 74 28 32 2c 20 33 2c 20 34 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 29 0a 70 6c 2e 61 78 69 73 t(2,.3,.4).pl.imshow(I2).pl.axis
9c00 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 2e 20 32 27 29 0a 0a 70 6c 2e 73 75 ('off').pl.title('Im..2')..pl.su
9c20 62 70 6c 6f 74 28 32 2c 20 33 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 6d 61 67 65 5f 65 bplot(2,.3,.2).pl.imshow(Image_e
9c40 6d 64 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 45 6d 64 md).pl.axis('off').pl.title('Emd
9c60 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 35 29 Transport')..pl.subplot(2,.3,.5)
9c80 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 6d 61 67 65 5f 73 69 6e 6b 68 6f 72 6e 29 0a 70 6c 2e 61 78 .pl.imshow(Image_sinkhorn).pl.ax
9ca0 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 69 6e 6b 68 6f 72 6e 54 72 61 6e is('off').pl.title('SinkhornTran
9cc0 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 33 29 0a 70 6c 2e sport')..pl.subplot(2,.3,.3).pl.
9ce0 69 6d 73 68 6f 77 28 49 6d 61 67 65 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 29 0a 70 6c 2e imshow(Image_mapping_linear).pl.
9d00 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4d 61 70 70 69 6e 67 54 72 61 axis('off').pl.title('MappingTra
9d20 6e 73 70 6f 72 74 20 28 6c 69 6e 65 61 72 29 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c nsport.(linear)')..pl.subplot(2,
9d40 20 33 2c 20 36 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 6d 61 67 65 5f 6d 61 70 70 69 6e 67 5f 67 .3,.6).pl.imshow(Image_mapping_g
9d60 61 75 73 73 69 61 6e 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 aussian).pl.axis('off').pl.title
9d80 28 27 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 20 28 67 61 75 73 73 69 61 6e 29 27 29 0a ('MappingTransport.(gaussian)').
9da0 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 pl.tight_layout()..pl.show().PK.
9dc0 04 14 00 00 00 00 00 09 6f 2f 4b 37 2c 8d 0c 79 13 00 00 79 13 00 00 21 00 00 00 61 75 74 6f 5f ........o/K7,..y...y...!...auto_
9de0 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 4f 54 5f 4c 31 5f 76 73 5f 4c 32 2e 70 79 23 20 2d 2a examples/plot_OT_L1_vs_L2.py#.-*
9e00 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d -.coding:.utf-8.-*-.""".========
9e20 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================================
9e40 3d 3d 0a 32 44 20 4f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 20 66 6f 72 20 64 69 66 66 ==.2D.Optimal.transport.for.diff
9e60 65 72 65 6e 74 20 6d 65 74 72 69 63 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d erent.metrics.==================
9e80 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 32 44 20 4f 54 20 ========================..2D.OT.
9ea0 6f 6e 20 65 6d 70 69 72 69 63 61 6c 20 64 69 73 74 72 69 62 75 74 69 6f 20 20 77 69 74 68 20 64 on.empirical.distributio..with.d
9ec0 69 66 66 65 72 65 6e 74 20 67 6f 75 6e 64 20 6d 65 74 72 69 63 2e 0a 0a 53 74 6f 6c 65 20 74 68 ifferent.gound.metric...Stole.th
9ee0 65 20 66 69 67 75 72 65 20 69 64 65 61 20 66 72 6f 6d 20 46 69 67 2e 20 31 20 61 6e 64 20 32 20 e.figure.idea.from.Fig..1.and.2.
9f00 69 6e 0a 68 74 74 70 73 3a 2f 2f 61 72 78 69 76 2e 6f 72 67 2f 70 64 66 2f 31 37 30 36 2e 30 37 in.https://arxiv.org/pdf/1706.07
9f20 36 35 30 2e 70 64 66 0a 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a 20 52 65 6d 69 20 46 6c 650.pdf..."""..#.Author:.Remi.Fl
9f40 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 0a amary.<remi.flamary@unice.fr>.#.
9f60 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e #.License:.MIT.License..import.n
9f80 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c umpy.as.np.import.matplotlib.pyl
9fa0 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 ab.as.pl.import.ot..############
9fc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
9fe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
a000 23 23 0a 23 20 44 61 74 61 73 65 74 20 31 20 3a 20 75 6e 69 66 6f 72 6d 20 73 61 6d 70 6c 69 6e ##.#.Dataset.1.:.uniform.samplin
a020 67 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d g.#.----------------------------
a040 0a 0a 6e 20 3d 20 32 30 20 20 23 20 6e 62 20 73 61 6d 70 6c 65 73 0a 78 73 20 3d 20 6e 70 2e 7a ..n.=.20..#.nb.samples.xs.=.np.z
a060 65 72 6f 73 28 28 6e 2c 20 32 29 29 0a 78 73 5b 3a 2c 20 30 5d 20 3d 20 6e 70 2e 61 72 61 6e 67 eros((n,.2)).xs[:,.0].=.np.arang
a080 65 28 6e 29 20 2b 20 31 0a 78 73 5b 3a 2c 20 31 5d 20 3d 20 28 6e 70 2e 61 72 61 6e 67 65 28 6e e(n).+.1.xs[:,.1].=.(np.arange(n
a0a0 29 20 2b 20 31 29 20 2a 20 2d 30 2e 30 30 31 20 20 23 20 74 6f 20 6d 61 6b 65 20 69 74 20 73 74 ).+.1).*.-0.001..#.to.make.it.st
a0c0 72 69 63 74 6c 79 20 63 6f 6e 76 65 78 2e 2e 2e 0a 0a 78 74 20 3d 20 6e 70 2e 7a 65 72 6f 73 28 rictly.convex.....xt.=.np.zeros(
a0e0 28 6e 2c 20 32 29 29 0a 78 74 5b 3a 2c 20 31 5d 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 29 20 (n,.2)).xt[:,.1].=.np.arange(n).
a100 2b 20 31 0a 0a 61 2c 20 62 20 3d 20 6f 74 2e 75 6e 69 66 28 6e 29 2c 20 6f 74 2e 75 6e 69 66 28 +.1..a,.b.=.ot.unif(n),.ot.unif(
a120 6e 29 20 20 23 20 75 6e 69 66 6f 72 6d 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6f 6e 20 73 61 n)..#.uniform.distribution.on.sa
a140 6d 70 6c 65 73 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 31 20 3d 20 6f 74 2e 64 69 73 mples..#.loss.matrix.M1.=.ot.dis
a160 74 28 78 73 2c 20 78 74 2c 20 6d 65 74 72 69 63 3d 27 65 75 63 6c 69 64 65 61 6e 27 29 0a 4d 31 t(xs,.xt,.metric='euclidean').M1
a180 20 2f 3d 20 4d 31 2e 6d 61 78 28 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 32 20 3d ./=.M1.max()..#.loss.matrix.M2.=
a1a0 20 6f 74 2e 64 69 73 74 28 78 73 2c 20 78 74 2c 20 6d 65 74 72 69 63 3d 27 73 71 65 75 63 6c 69 .ot.dist(xs,.xt,.metric='sqeucli
a1c0 64 65 61 6e 27 29 0a 4d 32 20 2f 3d 20 4d 32 2e 6d 61 78 28 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 dean').M2./=.M2.max()..#.loss.ma
a1e0 74 72 69 78 0a 4d 70 20 3d 20 6e 70 2e 73 71 72 74 28 6f 74 2e 64 69 73 74 28 78 73 2c 20 78 74 trix.Mp.=.np.sqrt(ot.dist(xs,.xt
a200 2c 20 6d 65 74 72 69 63 3d 27 65 75 63 6c 69 64 65 61 6e 27 29 29 0a 4d 70 20 2f 3d 20 4d 70 2e ,.metric='euclidean')).Mp./=.Mp.
a220 6d 61 78 28 29 0a 0a 23 20 44 61 74 61 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 max()..#.Data.pl.figure(1,.figsi
a240 7a 65 3d 28 37 2c 20 33 29 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a ze=(7,.3)).pl.clf().pl.plot(xs[:
a260 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 ,.0],.xs[:,.1],.'+b',.label='Sou
a280 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 rce.samples').pl.plot(xt[:,.0],.
a2a0 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 xt[:,.1],.'xr',.label='Target.sa
a2c0 6d 70 6c 65 73 27 29 0a 70 6c 2e 61 78 69 73 28 27 65 71 75 61 6c 27 29 0a 70 6c 2e 74 69 74 6c mples').pl.axis('equal').pl.titl
a2e0 65 28 27 53 6f 75 72 63 65 20 61 6e 64 20 74 72 61 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f e('Source.and.traget.distributio
a300 6e 73 27 29 0a 0a 0a 23 20 43 6f 73 74 20 6d 61 74 72 69 63 65 73 0a 70 6c 2e 66 69 67 75 72 65 ns')...#.Cost.matrices.pl.figure
a320 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 37 2c 20 33 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 (2,.figsize=(7,.3))..pl.subplot(
a340 31 2c 20 33 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 4d 31 2c 20 69 6e 74 65 72 70 6f 6c 61 1,.3,.1).pl.imshow(M1,.interpola
a360 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 45 75 63 6c 69 64 tion='nearest').pl.title('Euclid
a380 65 61 6e 20 63 6f 73 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 32 29 0a ean.cost')..pl.subplot(1,.3,.2).
a3a0 70 6c 2e 69 6d 73 68 6f 77 28 4d 32 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 pl.imshow(M2,.interpolation='nea
a3c0 72 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 71 75 61 72 65 64 20 45 75 63 6c 69 64 65 rest').pl.title('Squared.Euclide
a3e0 61 6e 20 63 6f 73 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 33 29 0a 70 an.cost')..pl.subplot(1,.3,.3).p
a400 6c 2e 69 6d 73 68 6f 77 28 4d 70 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 l.imshow(Mp,.interpolation='near
a420 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 71 72 74 20 45 75 63 6c 69 64 65 61 6e 20 63 est').pl.title('Sqrt.Euclidean.c
a440 6f 73 74 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 23 23 23 23 23 23 23 ost').pl.tight_layout()..#######
a460 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
a480 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
a4a0 23 23 23 23 23 23 23 0a 23 20 44 61 74 61 73 65 74 20 31 20 3a 20 50 6c 6f 74 20 4f 54 20 4d 61 #######.#.Dataset.1.:.Plot.OT.Ma
a4c0 74 72 69 63 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d trices.#.-----------------------
a4e0 2d 2d 2d 2d 2d 0a 0a 0a 23 25 25 20 45 4d 44 0a 47 31 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 -----...#%%.EMD.G1.=.ot.emd(a,.b
a500 2c 20 4d 31 29 0a 47 32 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 32 29 0a 47 70 20 3d ,.M1).G2.=.ot.emd(a,.b,.M2).Gp.=
a520 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 70 29 0a 0a 23 20 4f 54 20 6d 61 74 72 69 63 65 73 .ot.emd(a,.b,.Mp)..#.OT.matrices
a540 0a 70 6c 2e 66 69 67 75 72 65 28 33 2c 20 66 69 67 73 69 7a 65 3d 28 37 2c 20 33 29 29 0a 0a 70 .pl.figure(3,.figsize=(7,.3))..p
a560 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 31 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 l.subplot(1,.3,.1).ot.plot.plot2
a580 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 78 73 2c 20 78 74 2c 20 47 31 2c 20 63 3d 5b 2e 35 2c D_samples_mat(xs,.xt,.G1,.c=[.5,
a5a0 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c ..5,.1]).pl.plot(xs[:,.0],.xs[:,
a5c0 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 .1],.'+b',.label='Source.samples
a5e0 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 ').pl.plot(xt[:,.0],.xt[:,.1],.'
a600 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e xr',.label='Target.samples').pl.
a620 61 78 69 73 28 27 65 71 75 61 6c 27 29 0a 23 20 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 axis('equal').#.pl.legend(loc=0)
a640 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 45 75 63 6c 69 64 65 61 6e 27 29 0a 0a 70 6c 2e 73 75 .pl.title('OT.Euclidean')..pl.su
a660 62 70 6c 6f 74 28 31 2c 20 33 2c 20 32 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 bplot(1,.3,.2).ot.plot.plot2D_sa
a680 6d 70 6c 65 73 5f 6d 61 74 28 78 73 2c 20 78 74 2c 20 47 32 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c mples_mat(xs,.xt,.G2,.c=[.5,..5,
a6a0 20 31 5d 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c .1]).pl.plot(xs[:,.0],.xs[:,.1],
a6c0 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 .'+b',.label='Source.samples').p
a6e0 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c l.plot(xt[:,.0],.xt[:,.1],.'xr',
a700 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 61 78 69 73 .label='Target.samples').pl.axis
a720 28 27 65 71 75 61 6c 27 29 0a 23 20 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e ('equal').#.pl.legend(loc=0).pl.
a740 74 69 74 6c 65 28 27 4f 54 20 73 71 75 61 72 65 64 20 45 75 63 6c 69 64 65 61 6e 27 29 0a 0a 70 title('OT.squared.Euclidean')..p
a760 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 33 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 l.subplot(1,.3,.3).ot.plot.plot2
a780 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 78 73 2c 20 78 74 2c 20 47 70 2c 20 63 3d 5b 2e 35 2c D_samples_mat(xs,.xt,.Gp,.c=[.5,
a7a0 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c ..5,.1]).pl.plot(xs[:,.0],.xs[:,
a7c0 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 .1],.'+b',.label='Source.samples
a7e0 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 ').pl.plot(xt[:,.0],.xt[:,.1],.'
a800 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e xr',.label='Target.samples').pl.
a820 61 78 69 73 28 27 65 71 75 61 6c 27 29 0a 23 20 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 axis('equal').#.pl.legend(loc=0)
a840 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 73 71 72 74 20 45 75 63 6c 69 64 65 61 6e 27 29 0a 70 .pl.title('OT.sqrt.Euclidean').p
a860 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 0a 0a 23 23 l.tight_layout()..pl.show()...##
a880 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
a8a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
a8c0 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 44 61 74 61 73 65 74 20 32 20 3a 20 50 61 72 74 69 ############.#.Dataset.2.:.Parti
a8e0 61 6c 20 63 69 72 63 6c 65 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d al.circle.#.--------------------
a900 2d 2d 2d 2d 2d 2d 0a 0a 6e 20 3d 20 35 30 20 20 23 20 6e 62 20 73 61 6d 70 6c 65 73 0a 78 74 6f ------..n.=.50..#.nb.samples.xto
a920 74 20 3d 20 6e 70 2e 7a 65 72 6f 73 28 28 6e 20 2b 20 31 2c 20 32 29 29 0a 78 74 6f 74 5b 3a 2c t.=.np.zeros((n.+.1,.2)).xtot[:,
a940 20 30 5d 20 3d 20 6e 70 2e 63 6f 73 28 0a 20 20 20 20 28 6e 70 2e 61 72 61 6e 67 65 28 6e 20 2b .0].=.np.cos(.....(np.arange(n.+
a960 20 31 29 20 2b 20 31 2e 30 29 20 2a 20 30 2e 39 20 2f 20 28 6e 20 2b 20 32 29 20 2a 20 32 20 2a .1).+.1.0).*.0.9./.(n.+.2).*.2.*
a980 20 6e 70 2e 70 69 29 0a 78 74 6f 74 5b 3a 2c 20 31 5d 20 3d 20 6e 70 2e 73 69 6e 28 0a 20 20 20 .np.pi).xtot[:,.1].=.np.sin(....
a9a0 20 28 6e 70 2e 61 72 61 6e 67 65 28 6e 20 2b 20 31 29 20 2b 20 31 2e 30 29 20 2a 20 30 2e 39 20 .(np.arange(n.+.1).+.1.0).*.0.9.
a9c0 2f 20 28 6e 20 2b 20 32 29 20 2a 20 32 20 2a 20 6e 70 2e 70 69 29 0a 0a 78 73 20 3d 20 78 74 6f /.(n.+.2).*.2.*.np.pi)..xs.=.xto
a9e0 74 5b 3a 6e 2c 20 3a 5d 0a 78 74 20 3d 20 78 74 6f 74 5b 31 3a 2c 20 3a 5d 0a 0a 61 2c 20 62 20 t[:n,.:].xt.=.xtot[1:,.:]..a,.b.
aa00 3d 20 6f 74 2e 75 6e 69 66 28 6e 29 2c 20 6f 74 2e 75 6e 69 66 28 6e 29 20 20 23 20 75 6e 69 66 =.ot.unif(n),.ot.unif(n)..#.unif
aa20 6f 72 6d 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6f 6e 20 73 61 6d 70 6c 65 73 0a 0a 23 20 6c orm.distribution.on.samples..#.l
aa40 6f 73 73 20 6d 61 74 72 69 78 0a 4d 31 20 3d 20 6f 74 2e 64 69 73 74 28 78 73 2c 20 78 74 2c 20 oss.matrix.M1.=.ot.dist(xs,.xt,.
aa60 6d 65 74 72 69 63 3d 27 65 75 63 6c 69 64 65 61 6e 27 29 0a 4d 31 20 2f 3d 20 4d 31 2e 6d 61 78 metric='euclidean').M1./=.M1.max
aa80 28 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 32 20 3d 20 6f 74 2e 64 69 73 74 28 78 ()..#.loss.matrix.M2.=.ot.dist(x
aaa0 73 2c 20 78 74 2c 20 6d 65 74 72 69 63 3d 27 73 71 65 75 63 6c 69 64 65 61 6e 27 29 0a 4d 32 20 s,.xt,.metric='sqeuclidean').M2.
aac0 2f 3d 20 4d 32 2e 6d 61 78 28 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 70 20 3d 20 /=.M2.max()..#.loss.matrix.Mp.=.
aae0 6e 70 2e 73 71 72 74 28 6f 74 2e 64 69 73 74 28 78 73 2c 20 78 74 2c 20 6d 65 74 72 69 63 3d 27 np.sqrt(ot.dist(xs,.xt,.metric='
ab00 65 75 63 6c 69 64 65 61 6e 27 29 29 0a 4d 70 20 2f 3d 20 4d 70 2e 6d 61 78 28 29 0a 0a 0a 23 20 euclidean')).Mp./=.Mp.max()...#.
ab20 44 61 74 61 0a 70 6c 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 37 2c 20 33 29 Data.pl.figure(4,.figsize=(7,.3)
ab40 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b ).pl.clf().pl.plot(xs[:,.0],.xs[
ab60 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c :,.1],.'+b',.label='Source.sampl
ab80 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c es').pl.plot(xt[:,.0],.xt[:,.1],
aba0 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 .'xr',.label='Target.samples').p
abc0 6c 2e 61 78 69 73 28 27 65 71 75 61 6c 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 l.axis('equal').pl.title('Source
abe0 20 61 6e 64 20 74 72 61 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 0a 23 20 .and.traget.distributions')...#.
ac00 43 6f 73 74 20 6d 61 74 72 69 63 65 73 0a 70 6c 2e 66 69 67 75 72 65 28 35 2c 20 66 69 67 73 69 Cost.matrices.pl.figure(5,.figsi
ac20 7a 65 3d 28 37 2c 20 33 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 31 29 0a ze=(7,.3))..pl.subplot(1,.3,.1).
ac40 70 6c 2e 69 6d 73 68 6f 77 28 4d 31 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 pl.imshow(M1,.interpolation='nea
ac60 72 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 45 75 63 6c 69 64 65 61 6e 20 63 6f 73 74 27 rest').pl.title('Euclidean.cost'
ac80 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 )..pl.subplot(1,.3,.2).pl.imshow
aca0 28 4d 32 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c (M2,.interpolation='nearest').pl
acc0 2e 74 69 74 6c 65 28 27 53 71 75 61 72 65 64 20 45 75 63 6c 69 64 65 61 6e 20 63 6f 73 74 27 29 .title('Squared.Euclidean.cost')
ace0 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 ..pl.subplot(1,.3,.3).pl.imshow(
ad00 4d 70 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e Mp,.interpolation='nearest').pl.
ad20 74 69 74 6c 65 28 27 53 71 72 74 20 45 75 63 6c 69 64 65 61 6e 20 63 6f 73 74 27 29 0a 70 6c 2e title('Sqrt.Euclidean.cost').pl.
ad40 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 tight_layout()..################
ad60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
ad80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 ##############################.#
ada0 20 44 61 74 61 73 65 74 20 32 20 3a 20 50 6c 6f 74 20 20 4f 54 20 4d 61 74 72 69 63 65 73 0a 23 .Dataset.2.:.Plot..OT.Matrices.#
adc0 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a .-----------------------------..
ade0 0a 23 25 25 20 45 4d 44 0a 47 31 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 31 29 0a 47 .#%%.EMD.G1.=.ot.emd(a,.b,.M1).G
ae00 32 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 32 29 0a 47 70 20 3d 20 6f 74 2e 65 6d 64 2.=.ot.emd(a,.b,.M2).Gp.=.ot.emd
ae20 28 61 2c 20 62 2c 20 4d 70 29 0a 0a 23 20 4f 54 20 6d 61 74 72 69 63 65 73 0a 70 6c 2e 66 69 67 (a,.b,.Mp)..#.OT.matrices.pl.fig
ae40 75 72 65 28 36 2c 20 66 69 67 73 69 7a 65 3d 28 37 2c 20 33 29 29 0a 0a 70 6c 2e 73 75 62 70 6c ure(6,.figsize=(7,.3))..pl.subpl
ae60 6f 74 28 31 2c 20 33 2c 20 31 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c ot(1,.3,.1).ot.plot.plot2D_sampl
ae80 65 73 5f 6d 61 74 28 78 73 2c 20 78 74 2c 20 47 31 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d es_mat(xs,.xt,.G1,.c=[.5,..5,.1]
aea0 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b ).pl.plot(xs[:,.0],.xs[:,.1],.'+
aec0 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 b',.label='Source.samples').pl.p
aee0 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 lot(xt[:,.0],.xt[:,.1],.'xr',.la
af00 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 61 78 69 73 28 27 65 bel='Target.samples').pl.axis('e
af20 71 75 61 6c 27 29 0a 23 20 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 qual').#.pl.legend(loc=0).pl.tit
af40 6c 65 28 27 4f 54 20 45 75 63 6c 69 64 65 61 6e 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 le('OT.Euclidean')..pl.subplot(1
af60 2c 20 33 2c 20 32 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d ,.3,.2).ot.plot.plot2D_samples_m
af80 61 74 28 78 73 2c 20 78 74 2c 20 47 32 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c at(xs,.xt,.G2,.c=[.5,..5,.1]).pl
afa0 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 .plot(xs[:,.0],.xs[:,.1],.'+b',.
afc0 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 label='Source.samples').pl.plot(
afe0 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d xt[:,.0],.xt[:,.1],.'xr',.label=
b000 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 61 78 69 73 28 27 65 71 75 61 6c 'Target.samples').pl.axis('equal
b020 27 29 0a 23 20 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 ').#.pl.legend(loc=0).pl.title('
b040 4f 54 20 73 71 75 61 72 65 64 20 45 75 63 6c 69 64 65 61 6e 27 29 0a 0a 70 6c 2e 73 75 62 70 6c OT.squared.Euclidean')..pl.subpl
b060 6f 74 28 31 2c 20 33 2c 20 33 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c ot(1,.3,.3).ot.plot.plot2D_sampl
b080 65 73 5f 6d 61 74 28 78 73 2c 20 78 74 2c 20 47 70 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d es_mat(xs,.xt,.Gp,.c=[.5,..5,.1]
b0a0 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b ).pl.plot(xs[:,.0],.xs[:,.1],.'+
b0c0 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 b',.label='Source.samples').pl.p
b0e0 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 lot(xt[:,.0],.xt[:,.1],.'xr',.la
b100 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 61 78 69 73 28 27 65 bel='Target.samples').pl.axis('e
b120 71 75 61 6c 27 29 0a 23 20 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 qual').#.pl.legend(loc=0).pl.tit
b140 6c 65 28 27 4f 54 20 73 71 72 74 20 45 75 63 6c 69 64 65 61 6e 27 29 0a 70 6c 2e 74 69 67 68 74 le('OT.sqrt.Euclidean').pl.tight
b160 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 09 _layout()..pl.show().PK.........
b180 6f 2f 4b 8c 4d bd 60 44 09 00 00 44 09 00 00 23 00 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 o/K.M.`D...D...#...auto_examples
b1a0 2f 70 6c 6f 74 5f 4f 54 5f 32 44 5f 73 61 6d 70 6c 65 73 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 /plot_OT_2D_samples.py#.-*-.codi
b1c0 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ng:.utf-8.-*-.""".==============
b1e0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================================
b200 3d 3d 3d 3d 3d 3d 0a 32 44 20 4f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 20 62 65 74 77 ======.2D.Optimal.transport.betw
b220 65 65 6e 20 65 6d 70 69 72 69 63 61 6c 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 3d 3d 3d 3d een.empirical.distributions.====
b240 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================================
b260 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 49 6c 6c 75 73 74 72 61 74 69 6f 6e 20 6f ================..Illustration.o
b280 66 20 32 44 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 20 62 65 74 77 65 65 6e 20 64 f.2D.optimal.transport.between.d
b2a0 69 73 63 72 69 62 75 74 69 6f 6e 73 20 74 68 61 74 20 61 72 65 20 77 65 69 67 68 74 65 64 0a 73 iscributions.that.are.weighted.s
b2c0 75 6d 20 6f 66 20 64 69 72 61 63 73 2e 20 54 68 65 20 4f 54 20 6d 61 74 72 69 78 20 69 73 20 70 um.of.diracs..The.OT.matrix.is.p
b2e0 6c 6f 74 74 65 64 20 77 69 74 68 20 74 68 65 20 73 61 6d 70 6c 65 73 2e 0a 0a 22 22 22 0a 0a 23 lotted.with.the.samples..."""..#
b300 20 41 75 74 68 6f 72 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d .Author:.Remi.Flamary.<remi.flam
b320 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c ary@unice.fr>.#.#.License:.MIT.L
b340 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 icense..import.numpy.as.np.impor
b360 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 t.matplotlib.pylab.as.pl.import.
b380 6f 74 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ot..############################
b3a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
b3c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 ##################.#.Generate.da
b3e0 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 65 ta.#.-------------..#%%.paramete
b400 72 73 20 61 6e 64 20 64 61 74 61 20 67 65 6e 65 72 61 74 69 6f 6e 0a 0a 6e 20 3d 20 35 30 20 20 rs.and.data.generation..n.=.50..
b420 23 20 6e 62 20 73 61 6d 70 6c 65 73 0a 0a 6d 75 5f 73 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 30 #.nb.samples..mu_s.=.np.array([0
b440 2c 20 30 5d 29 0a 63 6f 76 5f 73 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 5b 31 2c 20 30 5d 2c 20 ,.0]).cov_s.=.np.array([[1,.0],.
b460 5b 30 2c 20 31 5d 5d 29 0a 0a 6d 75 5f 74 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 34 2c 20 34 5d [0,.1]])..mu_t.=.np.array([4,.4]
b480 29 0a 63 6f 76 5f 74 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 5b 31 2c 20 2d 2e 38 5d 2c 20 5b 2d ).cov_t.=.np.array([[1,.-.8],.[-
b4a0 2e 38 2c 20 31 5d 5d 29 0a 0a 78 73 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 32 .8,.1]])..xs.=.ot.datasets.get_2
b4c0 44 5f 73 61 6d 70 6c 65 73 5f 67 61 75 73 73 28 6e 2c 20 6d 75 5f 73 2c 20 63 6f 76 5f 73 29 0a D_samples_gauss(n,.mu_s,.cov_s).
b4e0 78 74 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 32 44 5f 73 61 6d 70 6c 65 73 5f xt.=.ot.datasets.get_2D_samples_
b500 67 61 75 73 73 28 6e 2c 20 6d 75 5f 74 2c 20 63 6f 76 5f 74 29 0a 0a 61 2c 20 62 20 3d 20 6e 70 gauss(n,.mu_t,.cov_t)..a,.b.=.np
b520 2e 6f 6e 65 73 28 28 6e 2c 29 29 20 2f 20 6e 2c 20 6e 70 2e 6f 6e 65 73 28 28 6e 2c 29 29 20 2f .ones((n,))./.n,.np.ones((n,))./
b540 20 6e 20 20 23 20 75 6e 69 66 6f 72 6d 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6f 6e 20 73 61 .n..#.uniform.distribution.on.sa
b560 6d 70 6c 65 73 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 20 3d 20 6f 74 2e 64 69 73 74 mples..#.loss.matrix.M.=.ot.dist
b580 28 78 73 2c 20 78 74 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 29 0a 0a 23 23 23 23 23 23 23 23 23 (xs,.xt).M./=.M.max()..#########
b5a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
b5c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
b5e0 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 #####.#.Plot.data.#.---------..#
b600 25 25 20 70 6c 6f 74 20 73 61 6d 70 6c 65 73 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 29 0a 70 6c %%.plot.samples..pl.figure(1).pl
b620 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 .plot(xs[:,.0],.xs[:,.1],.'+b',.
b640 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 label='Source.samples').pl.plot(
b660 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d xt[:,.0],.xt[:,.1],.'xr',.label=
b680 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 'Target.samples').pl.legend(loc=
b6a0 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 20 61 6e 64 20 74 61 72 67 65 74 20 64 0).pl.title('Source.and.target.d
b6c0 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 29 0a 70 6c 2e istributions')..pl.figure(2).pl.
b6e0 69 6d 73 68 6f 77 28 4d 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 imshow(M,.interpolation='nearest
b700 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 43 6f 73 74 20 6d 61 74 72 69 78 20 4d 27 29 0a 0a 23 23 ').pl.title('Cost.matrix.M')..##
b720 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
b740 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
b760 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 43 6f 6d 70 75 74 65 20 45 4d 44 0a 23 20 2d 2d 2d ############.#.Compute.EMD.#.---
b780 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 45 4d 44 0a 0a 47 30 20 3d 20 6f 74 2e 65 6d 64 28 61 --------..#%%.EMD..G0.=.ot.emd(a
b7a0 2c 20 62 2c 20 4d 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 ,.b,.M)..pl.figure(3).pl.imshow(
b7c0 47 30 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e G0,.interpolation='nearest').pl.
b7e0 74 69 74 6c 65 28 27 4f 54 20 6d 61 74 72 69 78 20 47 30 27 29 0a 0a 70 6c 2e 66 69 67 75 72 65 title('OT.matrix.G0')..pl.figure
b800 28 34 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 78 (4).ot.plot.plot2D_samples_mat(x
b820 73 2c 20 78 74 2c 20 47 30 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 70 6c 6f s,.xt,.G0,.c=[.5,..5,.1]).pl.plo
b840 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 t(xs[:,.0],.xs[:,.1],.'+b',.labe
b860 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a l='Source.samples').pl.plot(xt[:
b880 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 ,.0],.xt[:,.1],.'xr',.label='Tar
b8a0 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 get.samples').pl.legend(loc=0).p
b8c0 6c 2e 74 69 74 6c 65 28 27 4f 54 20 6d 61 74 72 69 78 20 77 69 74 68 20 73 61 6d 70 6c 65 73 27 l.title('OT.matrix.with.samples'
b8e0 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 )...############################
b900 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
b920 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 43 6f 6d 70 75 74 65 20 53 69 6e ##################.#.Compute.Sin
b940 6b 68 6f 72 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 73 69 khorn.#.----------------..#%%.si
b960 6e 6b 68 6f 72 6e 0a 0a 23 20 72 65 67 20 74 65 72 6d 0a 6c 61 6d 62 64 20 3d 20 31 65 2d 33 0a nkhorn..#.reg.term.lambd.=.1e-3.
b980 0a 47 73 20 3d 20 6f 74 2e 73 69 6e 6b 68 6f 72 6e 28 61 2c 20 62 2c 20 4d 2c 20 6c 61 6d 62 64 .Gs.=.ot.sinkhorn(a,.b,.M,.lambd
b9a0 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 35 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 47 73 2c 20 69 6e )..pl.figure(5).pl.imshow(Gs,.in
b9c0 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 terpolation='nearest').pl.title(
b9e0 27 4f 54 20 6d 61 74 72 69 78 20 73 69 6e 6b 68 6f 72 6e 27 29 0a 0a 70 6c 2e 66 69 67 75 72 65 'OT.matrix.sinkhorn')..pl.figure
ba00 28 36 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 78 (6).ot.plot.plot2D_samples_mat(x
ba20 73 2c 20 78 74 2c 20 47 73 2c 20 63 6f 6c 6f 72 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c s,.xt,.Gs,.color=[.5,..5,.1]).pl
ba40 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 .plot(xs[:,.0],.xs[:,.1],.'+b',.
ba60 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 label='Source.samples').pl.plot(
ba80 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d xt[:,.0],.xt[:,.1],.'xr',.label=
baa0 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 'Target.samples').pl.legend(loc=
bac0 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 6d 61 74 72 69 78 20 53 69 6e 6b 68 6f 72 6e 20 0).pl.title('OT.matrix.Sinkhorn.
bae0 77 69 74 68 20 73 61 6d 70 6c 65 73 27 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 with.samples')..pl.show().PK....
bb00 00 00 00 00 09 6f 2f 4b 6f e7 38 bd f1 0f 00 00 f1 0f 00 00 22 00 00 00 61 75 74 6f 5f 65 78 61 .....o/Ko.8........."...auto_exa
bb20 6d 70 6c 65 73 2f 70 6c 6f 74 5f 6f 74 64 61 5f 6d 61 70 70 69 6e 67 2e 70 79 23 20 2d 2a 2d 20 mples/plot_otda_mapping.py#.-*-.
bb40 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d coding:.utf-8.-*-.""".==========
bb60 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================================
bb80 3d 0a 4f 54 20 6d 61 70 70 69 6e 67 20 65 73 74 69 6d 61 74 69 6f 6e 20 66 6f 72 20 64 6f 6d 61 =.OT.mapping.estimation.for.doma
bba0 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d in.adaptation.==================
bbc0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 =========================..This.
bbe0 65 78 61 6d 70 6c 65 20 70 72 65 73 65 6e 74 73 20 68 6f 77 20 74 6f 20 75 73 65 20 4d 61 70 70 example.presents.how.to.use.Mapp
bc00 69 6e 67 54 72 61 6e 73 70 6f 72 74 20 74 6f 20 65 73 74 69 6d 61 74 65 20 61 74 20 74 68 65 20 ingTransport.to.estimate.at.the.
bc20 73 61 6d 65 0a 74 69 6d 65 20 62 6f 74 68 20 74 68 65 20 63 6f 75 70 6c 69 6e 67 20 74 72 61 6e same.time.both.the.coupling.tran
bc40 73 70 6f 72 74 20 61 6e 64 20 61 70 70 72 6f 78 69 6d 61 74 65 20 74 68 65 20 74 72 61 6e 73 70 sport.and.approximate.the.transp
bc60 6f 72 74 20 6d 61 70 20 77 69 74 68 20 65 69 74 68 65 72 0a 61 20 6c 69 6e 65 61 72 20 6f 72 20 ort.map.with.either.a.linear.or.
bc80 61 20 6b 65 72 6e 65 6c 69 7a 65 64 20 6d 61 70 70 69 6e 67 20 61 73 20 69 6e 74 72 6f 64 75 63 a.kernelized.mapping.as.introduc
bca0 65 64 20 69 6e 20 5b 38 5d 2e 0a 0a 5b 38 5d 20 4d 2e 20 50 65 72 72 6f 74 2c 20 4e 2e 20 43 6f ed.in.[8]...[8].M..Perrot,.N..Co
bcc0 75 72 74 79 2c 20 52 2e 20 46 6c 61 6d 61 72 79 2c 20 41 2e 20 48 61 62 72 61 72 64 2c 0a 20 20 urty,.R..Flamary,.A..Habrard,...
bce0 20 20 22 4d 61 70 70 69 6e 67 20 65 73 74 69 6d 61 74 69 6f 6e 20 66 6f 72 20 64 69 73 63 72 65 .."Mapping.estimation.for.discre
bd00 74 65 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 22 2c 0a 20 20 20 20 4e 65 75 72 61 te.optimal.transport",.....Neura
bd20 6c 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 50 72 6f 63 65 73 73 69 6e 67 20 53 79 73 74 65 6d 73 l.Information.Processing.Systems
bd40 20 28 4e 49 50 53 29 2c 20 32 30 31 36 2e 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 73 3a 20 52 .(NIPS),.2016.."""..#.Authors:.R
bd60 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e emi.Flamary.<remi.flamary@unice.
bd80 66 72 3e 0a 23 20 20 20 20 20 20 20 20 20 20 53 74 61 6e 69 73 6c 61 73 20 43 68 61 6d 62 6f 6e fr>.#..........Stanislas.Chambon
bda0 20 3c 73 74 61 6e 2e 63 68 61 6d 62 6f 6e 40 67 6d 61 69 6c 2e 63 6f 6d 3e 0a 23 0a 23 20 4c 69 .<stan.chambon@gmail.com>.#.#.Li
bdc0 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 cense:.MIT.License..import.numpy
bde0 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 .as.np.import.matplotlib.pylab.a
be00 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 s.pl.import.ot...###############
be20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
be40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a ###############################.
be60 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a #.Generate.data.#.-------------.
be80 0a 6e 5f 73 6f 75 72 63 65 5f 73 61 6d 70 6c 65 73 20 3d 20 31 30 30 0a 6e 5f 74 61 72 67 65 74 .n_source_samples.=.100.n_target
bea0 5f 73 61 6d 70 6c 65 73 20 3d 20 31 30 30 0a 74 68 65 74 61 20 3d 20 32 20 2a 20 6e 70 2e 70 69 _samples.=.100.theta.=.2.*.np.pi
bec0 20 2f 20 32 30 0a 6e 6f 69 73 65 5f 6c 65 76 65 6c 20 3d 20 30 2e 31 0a 0a 58 73 2c 20 79 73 20 ./.20.noise_level.=.0.1..Xs,.ys.
bee0 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 0a =.ot.datasets.get_data_classif(.
bf00 20 20 20 20 27 67 61 75 73 73 72 6f 74 27 2c 20 6e 5f 73 6f 75 72 63 65 5f 73 61 6d 70 6c 65 73 ....'gaussrot',.n_source_samples
bf20 2c 20 6e 7a 3d 6e 6f 69 73 65 5f 6c 65 76 65 6c 29 0a 58 73 5f 6e 65 77 2c 20 5f 20 3d 20 6f 74 ,.nz=noise_level).Xs_new,._.=.ot
bf40 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 0a 20 20 20 20 .datasets.get_data_classif(.....
bf60 27 67 61 75 73 73 72 6f 74 27 2c 20 6e 5f 73 6f 75 72 63 65 5f 73 61 6d 70 6c 65 73 2c 20 6e 7a 'gaussrot',.n_source_samples,.nz
bf80 3d 6e 6f 69 73 65 5f 6c 65 76 65 6c 29 0a 58 74 2c 20 79 74 20 3d 20 6f 74 2e 64 61 74 61 73 65 =noise_level).Xt,.yt.=.ot.datase
bfa0 74 73 2e 67 65 74 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 0a 20 20 20 20 27 67 61 75 73 73 72 ts.get_data_classif(.....'gaussr
bfc0 6f 74 27 2c 20 6e 5f 74 61 72 67 65 74 5f 73 61 6d 70 6c 65 73 2c 20 74 68 65 74 61 3d 74 68 65 ot',.n_target_samples,.theta=the
bfe0 74 61 2c 20 6e 7a 3d 6e 6f 69 73 65 5f 6c 65 76 65 6c 29 0a 0a 23 20 6f 6e 65 20 6f 66 20 74 68 ta,.nz=noise_level)..#.one.of.th
c000 65 20 74 61 72 67 65 74 20 6d 6f 64 65 20 63 68 61 6e 67 65 73 20 69 74 73 20 76 61 72 69 61 6e e.target.mode.changes.its.varian
c020 63 65 20 28 6e 6f 20 6c 69 6e 65 61 72 20 6d 61 70 70 69 6e 67 29 0a 58 74 5b 79 74 20 3d 3d 20 ce.(no.linear.mapping).Xt[yt.==.
c040 32 5d 20 2a 3d 20 33 0a 58 74 20 3d 20 58 74 20 2b 20 34 0a 0a 23 23 23 23 23 23 23 23 23 23 23 2].*=.3.Xt.=.Xt.+.4..###########
c060 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
c080 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
c0a0 23 23 23 0a 23 20 50 6c 6f 74 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e ###.#.Plot.data.#.---------..pl.
c0c0 66 69 67 75 72 65 28 31 2c 20 28 31 30 2c 20 35 29 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 2e 73 figure(1,.(10,.5)).pl.clf().pl.s
c0e0 63 61 74 74 65 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 58 73 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c catter(Xs[:,.0],.Xs[:,.1],.c=ys,
c100 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c .marker='+',.label='Source.sampl
c120 65 73 27 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 es').pl.scatter(Xt[:,.0],.Xt[:,.
c140 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 1],.c=yt,.marker='o',.label='Tar
c160 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 get.samples').pl.legend(loc=0).p
c180 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 20 61 6e 64 20 74 61 72 67 65 74 20 64 69 73 74 72 l.title('Source.and.target.distr
c1a0 69 62 75 74 69 6f 6e 73 27 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ibutions')...###################
c1c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
c1e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 49 6e ###########################.#.In
c200 73 74 61 6e 74 69 61 74 65 20 74 68 65 20 64 69 66 66 65 72 65 6e 74 20 74 72 61 6e 73 70 6f 72 stantiate.the.different.transpor
c220 74 20 61 6c 67 6f 72 69 74 68 6d 73 20 61 6e 64 20 66 69 74 20 74 68 65 6d 0a 23 20 2d 2d 2d 2d t.algorithms.and.fit.them.#.----
c240 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d --------------------------------
c260 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 20 4d 61 70 70 69 -----------------------..#.Mappi
c280 6e 67 54 72 61 6e 73 70 6f 72 74 20 77 69 74 68 20 6c 69 6e 65 61 72 20 6b 65 72 6e 65 6c 0a 6f ngTransport.with.linear.kernel.o
c2a0 74 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 20 3d 20 6f 74 2e 64 61 2e 4d 61 70 70 69 6e 67 t_mapping_linear.=.ot.da.Mapping
c2c0 54 72 61 6e 73 70 6f 72 74 28 0a 20 20 20 20 6b 65 72 6e 65 6c 3d 22 6c 69 6e 65 61 72 22 2c 20 Transport(.....kernel="linear",.
c2e0 6d 75 3d 31 65 30 2c 20 65 74 61 3d 31 65 2d 38 2c 20 62 69 61 73 3d 54 72 75 65 2c 0a 20 20 20 mu=1e0,.eta=1e-8,.bias=True,....
c300 20 6d 61 78 5f 69 74 65 72 3d 32 30 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 0a 6f 74 5f .max_iter=20,.verbose=True)..ot_
c320 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 mapping_linear.fit(Xs=Xs,.Xt=Xt)
c340 0a 0a 23 20 66 6f 72 20 6f 72 69 67 69 6e 61 6c 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 2c ..#.for.original.source.samples,
c360 20 74 72 61 6e 73 66 6f 72 6d 20 61 70 70 6c 69 65 73 20 62 61 72 79 63 65 6e 74 72 69 63 20 6d .transform.applies.barycentric.m
c380 61 70 70 69 6e 67 0a 74 72 61 6e 73 70 5f 58 73 5f 6c 69 6e 65 61 72 20 3d 20 6f 74 5f 6d 61 70 apping.transp_Xs_linear.=.ot_map
c3a0 70 69 6e 67 5f 6c 69 6e 65 61 72 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 0a 23 20 ping_linear.transform(Xs=Xs)..#.
c3c0 66 6f 72 20 6f 75 74 20 6f 66 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 2c 20 74 72 61 6e 73 for.out.of.source.samples,.trans
c3e0 66 6f 72 6d 20 61 70 70 6c 69 65 73 20 74 68 65 20 6c 69 6e 65 61 72 20 6d 61 70 70 69 6e 67 0a form.applies.the.linear.mapping.
c400 74 72 61 6e 73 70 5f 58 73 5f 6c 69 6e 65 61 72 5f 6e 65 77 20 3d 20 6f 74 5f 6d 61 70 70 69 6e transp_Xs_linear_new.=.ot_mappin
c420 67 5f 6c 69 6e 65 61 72 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 5f 6e 65 77 29 0a 0a 0a g_linear.transform(Xs=Xs_new)...
c440 23 20 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 20 77 69 74 68 20 67 61 75 73 73 69 61 6e #.MappingTransport.with.gaussian
c460 20 6b 65 72 6e 65 6c 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 67 61 75 73 73 69 61 6e 20 3d 20 6f 74 .kernel.ot_mapping_gaussian.=.ot
c480 2e 64 61 2e 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 28 0a 20 20 20 20 6b 65 72 6e 65 6c .da.MappingTransport(.....kernel
c4a0 3d 22 67 61 75 73 73 69 61 6e 22 2c 20 65 74 61 3d 31 65 2d 35 2c 20 6d 75 3d 31 65 2d 31 2c 20 ="gaussian",.eta=1e-5,.mu=1e-1,.
c4c0 62 69 61 73 3d 54 72 75 65 2c 20 73 69 67 6d 61 3d 31 2c 0a 20 20 20 20 6d 61 78 5f 69 74 65 72 bias=True,.sigma=1,.....max_iter
c4e0 3d 31 30 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 67 61 =10,.verbose=True).ot_mapping_ga
c500 75 73 73 69 61 6e 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 66 6f 72 20 ussian.fit(Xs=Xs,.Xt=Xt)..#.for.
c520 6f 72 69 67 69 6e 61 6c 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 2c 20 74 72 61 6e 73 66 6f original.source.samples,.transfo
c540 72 6d 20 61 70 70 6c 69 65 73 20 62 61 72 79 63 65 6e 74 72 69 63 20 6d 61 70 70 69 6e 67 0a 74 rm.applies.barycentric.mapping.t
c560 72 61 6e 73 70 5f 58 73 5f 67 61 75 73 73 69 61 6e 20 3d 20 6f 74 5f 6d 61 70 70 69 6e 67 5f 67 ransp_Xs_gaussian.=.ot_mapping_g
c580 61 75 73 73 69 61 6e 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 0a 23 20 66 6f 72 20 aussian.transform(Xs=Xs)..#.for.
c5a0 6f 75 74 20 6f 66 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 2c 20 74 72 61 6e 73 66 6f 72 6d out.of.source.samples,.transform
c5c0 20 61 70 70 6c 69 65 73 20 74 68 65 20 67 61 75 73 73 69 61 6e 20 6d 61 70 70 69 6e 67 0a 74 72 .applies.the.gaussian.mapping.tr
c5e0 61 6e 73 70 5f 58 73 5f 67 61 75 73 73 69 61 6e 5f 6e 65 77 20 3d 20 6f 74 5f 6d 61 70 70 69 6e ansp_Xs_gaussian_new.=.ot_mappin
c600 67 5f 67 61 75 73 73 69 61 6e 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 5f 6e 65 77 29 0a g_gaussian.transform(Xs=Xs_new).
c620 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ..##############################
c640 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
c660 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 74 72 61 6e 73 70 6f 72 ################.#.Plot.transpor
c680 74 65 64 20 73 61 6d 70 6c 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ted.samples.#.------------------
c6a0 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c ------..pl.figure(2).pl.clf().pl
c6c0 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b .subplot(2,.2,.1).pl.scatter(Xt[
c6e0 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f :,.0],.Xt[:,.1],.c=yt,.marker='o
c700 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 ',............label='Target.samp
c720 6c 65 73 27 2c 20 61 6c 70 68 61 3d 2e 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 les',.alpha=.2).pl.scatter(trans
c740 70 5f 58 73 5f 6c 69 6e 65 61 72 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 6c 69 6e p_Xs_linear[:,.0],.transp_Xs_lin
c760 65 61 72 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 0a 20 20 20 ear[:,.1],.c=ys,.marker='+',....
c780 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 4d 61 70 70 65 64 20 73 6f 75 72 63 65 20 73 61 6d ........label='Mapped.source.sam
c7a0 70 6c 65 73 27 29 0a 70 6c 2e 74 69 74 6c 65 28 22 42 61 72 79 2e 20 6d 61 70 70 69 6e 67 20 28 ples').pl.title("Bary..mapping.(
c7c0 6c 69 6e 65 61 72 29 22 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 0a 70 6c 2e 73 linear)").pl.legend(loc=0)..pl.s
c7e0 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c ubplot(2,.2,.2).pl.scatter(Xt[:,
c800 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c .0],.Xt[:,.1],.c=yt,.marker='o',
c820 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 ............label='Target.sample
c840 73 27 2c 20 61 6c 70 68 61 3d 2e 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f s',.alpha=.2).pl.scatter(transp_
c860 58 73 5f 6c 69 6e 65 61 72 5f 6e 65 77 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 6c Xs_linear_new[:,.0],.transp_Xs_l
c880 69 6e 65 61 72 5f 6e 65 77 5b 3a 2c 20 31 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 63 3d 79 73 inear_new[:,.1],............c=ys
c8a0 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 4c 65 61 72 6e 65 64 20 6d 61 70 ,.marker='+',.label='Learned.map
c8c0 70 69 6e 67 27 29 0a 70 6c 2e 74 69 74 6c 65 28 22 45 73 74 69 6d 2e 20 6d 61 70 70 69 6e 67 20 ping').pl.title("Estim..mapping.
c8e0 28 6c 69 6e 65 61 72 29 22 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 33 29 0a (linear)")..pl.subplot(2,.2,.3).
c900 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 pl.scatter(Xt[:,.0],.Xt[:,.1],.c
c920 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 =yt,.marker='o',............labe
c940 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 2e 32 29 0a 70 6c l='Target.samples',.alpha=.2).pl
c960 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 67 61 75 73 73 69 61 6e 5b 3a 2c 20 30 .scatter(transp_Xs_gaussian[:,.0
c980 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 67 61 75 73 73 69 61 6e 5b 3a 2c 20 31 5d 2c 20 63 3d 79 ],.transp_Xs_gaussian[:,.1],.c=y
c9a0 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d s,............marker='+',.label=
c9c0 27 62 61 72 79 63 65 6e 74 72 69 63 20 6d 61 70 70 69 6e 67 27 29 0a 70 6c 2e 74 69 74 6c 65 28 'barycentric.mapping').pl.title(
c9e0 22 42 61 72 79 2e 20 6d 61 70 70 69 6e 67 20 28 6b 65 72 6e 65 6c 29 22 29 0a 0a 70 6c 2e 73 75 "Bary..mapping.(kernel)")..pl.su
ca00 62 70 6c 6f 74 28 32 2c 20 32 2c 20 34 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 bplot(2,.2,.4).pl.scatter(Xt[:,.
ca20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 0],.Xt[:,.1],.c=yt,.marker='o',.
ca40 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 ...........label='Target.samples
ca60 27 2c 20 61 6c 70 68 61 3d 2e 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 ',.alpha=.2).pl.scatter(transp_X
ca80 73 5f 67 61 75 73 73 69 61 6e 5f 6e 65 77 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f s_gaussian_new[:,.0],.transp_Xs_
caa0 67 61 75 73 73 69 61 6e 5f 6e 65 77 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 gaussian_new[:,.1],.c=ys,.......
cac0 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 4c 65 61 72 6e 65 64 20 .....marker='+',.label='Learned.
cae0 6d 61 70 70 69 6e 67 27 29 0a 70 6c 2e 74 69 74 6c 65 28 22 45 73 74 69 6d 2e 20 6d 61 70 70 69 mapping').pl.title("Estim..mappi
cb00 6e 67 20 28 6b 65 72 6e 65 6c 29 22 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a ng.(kernel)").pl.tight_layout().
cb20 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 09 6f 2f 4b c9 85 61 a8 64 09 00 .pl.show().PK.........o/K..a.d..
cb40 00 64 09 00 00 21 00 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 63 6f 6d 70 .d...!...auto_examples/plot_comp
cb60 75 74 65 5f 65 6d 64 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a ute_emd.py#.-*-.coding:.utf-8.-*
cb80 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 50 6c 6f 74 20 6d 75 6c -.""".=================.Plot.mul
cba0 74 69 70 6c 65 20 45 4d 44 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 53 68 6f tiple.EMD.=================..Sho
cbc0 77 73 20 68 6f 77 20 74 6f 20 63 6f 6d 70 75 74 65 20 6d 75 6c 74 69 70 6c 65 20 45 4d 44 20 61 ws.how.to.compute.multiple.EMD.a
cbe0 6e 64 20 53 69 6e 6b 68 6f 72 6e 20 77 69 74 68 20 74 77 6f 20 64 69 66 66 65 72 6e 74 0a 67 72 nd.Sinkhorn.with.two.differnt.gr
cc00 6f 75 6e 64 20 6d 65 74 72 69 63 73 20 61 6e 64 20 70 6c 6f 74 20 74 68 65 69 72 20 76 61 6c 75 ound.metrics.and.plot.their.valu
cc20 65 73 20 66 6f 72 20 64 69 66 66 65 65 6e 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 2e 0a 0a es.for.diffeent.distributions...
cc40 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 ."""..#.Author:.Remi.Flamary.<re
cc60 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 mi.flamary@unice.fr>.#.#.License
cc80 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e :.MIT.License..import.numpy.as.n
cca0 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a p.import.matplotlib.pylab.as.pl.
ccc0 69 6d 70 6f 72 74 20 6f 74 0a 66 72 6f 6d 20 6f 74 2e 64 61 74 61 73 65 74 73 20 69 6d 70 6f 72 import.ot.from.ot.datasets.impor
cce0 74 20 67 65 74 5f 31 44 5f 67 61 75 73 73 20 61 73 20 67 61 75 73 73 0a 0a 0a 23 23 23 23 23 23 t.get_1D_gauss.as.gauss...######
cd00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
cd20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
cd40 23 23 23 23 23 23 23 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d ########.#.Generate.data.#.-----
cd60 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 6e 20 3d 20 31 30 --------..#%%.parameters..n.=.10
cd80 30 20 20 23 20 6e 62 20 62 69 6e 73 0a 6e 5f 74 61 72 67 65 74 20 3d 20 35 30 20 20 23 20 6e 62 0..#.nb.bins.n_target.=.50..#.nb
cda0 20 74 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 0a 23 20 62 69 6e 20 70 6f .target.distributions...#.bin.po
cdc0 73 69 74 69 6f 6e 73 0a 78 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 2c 20 64 74 79 70 65 3d 6e sitions.x.=.np.arange(n,.dtype=n
cde0 70 2e 66 6c 6f 61 74 36 34 29 0a 0a 6c 73 74 5f 6d 20 3d 20 6e 70 2e 6c 69 6e 73 70 61 63 65 28 p.float64)..lst_m.=.np.linspace(
ce00 32 30 2c 20 39 30 2c 20 6e 5f 74 61 72 67 65 74 29 0a 0a 23 20 47 61 75 73 73 69 61 6e 20 64 69 20,.90,.n_target)..#.Gaussian.di
ce20 73 74 72 69 62 75 74 69 6f 6e 73 0a 61 20 3d 20 67 61 75 73 73 28 6e 2c 20 6d 3d 32 30 2c 20 73 stributions.a.=.gauss(n,.m=20,.s
ce40 3d 35 29 20 20 23 20 6d 3d 20 6d 65 61 6e 2c 20 73 3d 20 73 74 64 0a 0a 42 20 3d 20 6e 70 2e 7a =5)..#.m=.mean,.s=.std..B.=.np.z
ce60 65 72 6f 73 28 28 6e 2c 20 6e 5f 74 61 72 67 65 74 29 29 0a 0a 66 6f 72 20 69 2c 20 6d 20 69 6e eros((n,.n_target))..for.i,.m.in
ce80 20 65 6e 75 6d 65 72 61 74 65 28 6c 73 74 5f 6d 29 3a 0a 20 20 20 20 42 5b 3a 2c 20 69 5d 20 3d .enumerate(lst_m):.....B[:,.i].=
cea0 20 67 61 75 73 73 28 6e 2c 20 6d 3d 6d 2c 20 73 3d 35 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 .gauss(n,.m=m,.s=5)..#.loss.matr
cec0 69 78 20 61 6e 64 20 6e 6f 72 6d 61 6c 69 7a 61 74 69 6f 6e 0a 4d 20 3d 20 6f 74 2e 64 69 73 74 ix.and.normalization.M.=.ot.dist
cee0 28 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 2c 20 78 2e 72 65 73 68 61 70 65 28 28 6e (x.reshape((n,.1)),.x.reshape((n
cf00 2c 20 31 29 29 2c 20 27 65 75 63 6c 69 64 65 61 6e 27 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 29 ,.1)),.'euclidean').M./=.M.max()
cf20 0a 4d 32 20 3d 20 6f 74 2e 64 69 73 74 28 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 2c .M2.=.ot.dist(x.reshape((n,.1)),
cf40 20 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 2c 20 27 73 71 65 75 63 6c 69 64 65 61 6e .x.reshape((n,.1)),.'sqeuclidean
cf60 27 29 0a 4d 32 20 2f 3d 20 4d 32 2e 6d 61 78 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 ').M2./=.M2.max()..#############
cf80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
cfa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
cfc0 23 0a 23 20 50 6c 6f 74 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 #.#.Plot.data.#.---------..#%%.p
cfe0 6c 6f 74 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 70 6c 2e 66 69 67 75 72 65 lot.the.distributions..pl.figure
d000 28 31 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 31 2c 20 31 29 0a 70 6c 2e 70 6c 6f 74 28 (1).pl.subplot(2,.1,.1).pl.plot(
d020 78 2c 20 61 2c 20 27 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 64 69 73 74 72 69 62 x,.a,.'b',.label='Source.distrib
d040 75 74 69 6f 6e 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 20 64 69 73 74 72 69 62 ution').pl.title('Source.distrib
d060 75 74 69 6f 6e 27 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 31 2c 20 32 29 0a 70 6c 2e 70 ution').pl.subplot(2,.1,.2).pl.p
d080 6c 6f 74 28 78 2c 20 42 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 64 69 73 74 72 69 62 75 lot(x,.B,.label='Target.distribu
d0a0 74 69 6f 6e 73 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 61 72 67 65 74 20 64 69 73 74 72 69 62 tions').pl.title('Target.distrib
d0c0 75 74 69 6f 6e 73 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 0a 23 23 23 utions').pl.tight_layout()...###
d0e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
d100 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
d120 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 43 6f 6d 70 75 74 65 20 45 4d 44 20 66 6f 72 20 74 68 ###########.#.Compute.EMD.for.th
d140 65 20 64 69 66 66 65 72 65 6e 74 20 6c 6f 73 73 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d e.different.losses.#.-----------
d160 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 43 -------------------------..#%%.C
d180 6f 6d 70 75 74 65 20 61 6e 64 20 70 6c 6f 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 61 6e ompute.and.plot.distributions.an
d1a0 64 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 0a 64 5f 65 6d 64 20 3d 20 6f 74 2e 65 6d 64 32 28 61 d.loss.matrix..d_emd.=.ot.emd2(a
d1c0 2c 20 42 2c 20 4d 29 20 20 23 20 64 69 72 65 63 74 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66 ,.B,.M)..#.direct.computation.of
d1e0 20 45 4d 44 0a 64 5f 65 6d 64 32 20 3d 20 6f 74 2e 65 6d 64 32 28 61 2c 20 42 2c 20 4d 32 29 20 .EMD.d_emd2.=.ot.emd2(a,.B,.M2).
d200 20 23 20 64 69 72 65 63 74 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66 20 45 4d 44 20 77 69 74 .#.direct.computation.of.EMD.wit
d220 68 20 6c 6f 73 73 20 4d 32 0a 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 29 0a 70 6c 2e 70 6c 6f 74 h.loss.M2...pl.figure(2).pl.plot
d240 28 64 5f 65 6d 64 2c 20 6c 61 62 65 6c 3d 27 45 75 63 6c 69 64 65 61 6e 20 45 4d 44 27 29 0a 70 (d_emd,.label='Euclidean.EMD').p
d260 6c 2e 70 6c 6f 74 28 64 5f 65 6d 64 32 2c 20 6c 61 62 65 6c 3d 27 53 71 75 61 72 65 64 20 45 75 l.plot(d_emd2,.label='Squared.Eu
d280 63 6c 69 64 65 61 6e 20 45 4d 44 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 45 4d 44 20 64 69 73 74 clidean.EMD').pl.title('EMD.dist
d2a0 61 6e 63 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 ances').pl.legend()..###########
d2c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
d2e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
d300 23 23 23 0a 23 20 43 6f 6d 70 75 74 65 20 53 69 6e 6b 68 6f 72 6e 20 66 6f 72 20 74 68 65 20 64 ###.#.Compute.Sinkhorn.for.the.d
d320 69 66 66 65 72 65 6e 74 20 6c 6f 73 73 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ifferent.losses.#.--------------
d340 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 ---------------------------..#%%
d360 0a 72 65 67 20 3d 20 31 65 2d 32 0a 64 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 2e 73 69 6e 6b .reg.=.1e-2.d_sinkhorn.=.ot.sink
d380 68 6f 72 6e 32 28 61 2c 20 42 2c 20 4d 2c 20 72 65 67 29 0a 64 5f 73 69 6e 6b 68 6f 72 6e 32 20 horn2(a,.B,.M,.reg).d_sinkhorn2.
d3a0 3d 20 6f 74 2e 73 69 6e 6b 68 6f 72 6e 32 28 61 2c 20 42 2c 20 4d 32 2c 20 72 65 67 29 0a 0a 70 =.ot.sinkhorn2(a,.B,.M2,.reg)..p
d3c0 6c 2e 66 69 67 75 72 65 28 32 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 2e 70 6c 6f 74 28 64 5f 65 l.figure(2).pl.clf().pl.plot(d_e
d3e0 6d 64 2c 20 6c 61 62 65 6c 3d 27 45 75 63 6c 69 64 65 61 6e 20 45 4d 44 27 29 0a 70 6c 2e 70 6c md,.label='Euclidean.EMD').pl.pl
d400 6f 74 28 64 5f 65 6d 64 32 2c 20 6c 61 62 65 6c 3d 27 53 71 75 61 72 65 64 20 45 75 63 6c 69 64 ot(d_emd2,.label='Squared.Euclid
d420 65 61 6e 20 45 4d 44 27 29 0a 70 6c 2e 70 6c 6f 74 28 64 5f 73 69 6e 6b 68 6f 72 6e 2c 20 27 2b ean.EMD').pl.plot(d_sinkhorn,.'+
d440 27 2c 20 6c 61 62 65 6c 3d 27 45 75 63 6c 69 64 65 61 6e 20 53 69 6e 6b 68 6f 72 6e 27 29 0a 70 ',.label='Euclidean.Sinkhorn').p
d460 6c 2e 70 6c 6f 74 28 64 5f 73 69 6e 6b 68 6f 72 6e 32 2c 20 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 l.plot(d_sinkhorn2,.'+',.label='
d480 53 71 75 61 72 65 64 20 45 75 63 6c 69 64 65 61 6e 20 53 69 6e 6b 68 6f 72 6e 27 29 0a 70 6c 2e Squared.Euclidean.Sinkhorn').pl.
d4a0 74 69 74 6c 65 28 27 45 4d 44 20 64 69 73 74 61 6e 63 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 title('EMD.distances').pl.legend
d4c0 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 09 6f 2f 4b 99 da 74 4f ()..pl.show().PK.........o/K..tO
d4e0 0d 0e 00 00 0d 0e 00 00 27 00 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 6f ........'...auto_examples/plot_o
d500 74 64 61 5f 63 6f 6c 6f 72 5f 69 6d 61 67 65 73 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a tda_color_images.py#.-*-.coding:
d520 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d .utf-8.-*-.""".=================
d540 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4f 54 20 66 6f 72 20 69 6d 61 67 65 20 63 6f 6c 6f 72 20 ============.OT.for.image.color.
d560 61 64 61 70 74 61 74 69 6f 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d adaptation.=====================
d580 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 70 72 65 73 65 6e 74 73 20 ========..This.example.presents.
d5a0 61 20 77 61 79 20 6f 66 20 74 72 61 6e 73 66 65 72 72 69 6e 67 20 63 6f 6c 6f 72 73 20 62 65 74 a.way.of.transferring.colors.bet
d5c0 77 65 65 6e 20 74 77 6f 20 69 6d 61 67 65 0a 77 69 74 68 20 4f 70 74 69 6d 61 6c 20 54 72 61 6e ween.two.image.with.Optimal.Tran
d5e0 73 70 6f 72 74 20 61 73 20 69 6e 74 72 6f 64 75 63 65 64 20 69 6e 20 5b 36 5d 0a 0a 5b 36 5d 20 sport.as.introduced.in.[6]..[6].
d600 46 65 72 72 61 64 61 6e 73 2c 20 53 2e 2c 20 50 61 70 61 64 61 6b 69 73 2c 20 4e 2e 2c 20 50 65 Ferradans,.S.,.Papadakis,.N.,.Pe
d620 79 72 65 2c 20 47 2e 2c 20 26 20 41 75 6a 6f 6c 2c 20 4a 2e 20 46 2e 20 28 32 30 31 34 29 2e 0a yre,.G.,.&.Aujol,.J..F..(2014)..
d640 52 65 67 75 6c 61 72 69 7a 65 64 20 64 69 73 63 72 65 74 65 20 6f 70 74 69 6d 61 6c 20 74 72 61 Regularized.discrete.optimal.tra
d660 6e 73 70 6f 72 74 2e 0a 53 49 41 4d 20 4a 6f 75 72 6e 61 6c 20 6f 6e 20 49 6d 61 67 69 6e 67 20 nsport..SIAM.Journal.on.Imaging.
d680 53 63 69 65 6e 63 65 73 2c 20 37 28 33 29 2c 20 31 38 35 33 2d 31 38 38 32 2e 0a 22 22 22 0a 0a Sciences,.7(3),.1853-1882.."""..
d6a0 23 20 41 75 74 68 6f 72 73 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c #.Authors:.Remi.Flamary.<remi.fl
d6c0 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 20 20 20 20 20 20 20 20 20 20 53 74 61 6e 69 amary@unice.fr>.#..........Stani
d6e0 73 6c 61 73 20 43 68 61 6d 62 6f 6e 20 3c 73 74 61 6e 2e 63 68 61 6d 62 6f 6e 40 67 6d 61 69 6c slas.Chambon.<stan.chambon@gmail
d700 2e 63 6f 6d 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a .com>.#.#.License:.MIT.License..
d720 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 66 72 6f 6d 20 73 63 69 70 79 20 69 6d import.numpy.as.np.from.scipy.im
d740 70 6f 72 74 20 6e 64 69 6d 61 67 65 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 port.ndimage.import.matplotlib.p
d760 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 0a 0a 72 20 3d 20 6e 70 2e 72 61 ylab.as.pl.import.ot...r.=.np.ra
d780 6e 64 6f 6d 2e 52 61 6e 64 6f 6d 53 74 61 74 65 28 34 32 29 0a 0a 0a 64 65 66 20 69 6d 32 6d 61 ndom.RandomState(42)...def.im2ma
d7a0 74 28 49 29 3a 0a 20 20 20 20 22 22 22 43 6f 6e 76 65 72 74 73 20 61 6e 64 20 69 6d 61 67 65 20 t(I):....."""Converts.and.image.
d7c0 74 6f 20 6d 61 74 72 69 78 20 28 6f 6e 65 20 70 69 78 65 6c 20 70 65 72 20 6c 69 6e 65 29 22 22 to.matrix.(one.pixel.per.line)""
d7e0 22 0a 20 20 20 20 72 65 74 75 72 6e 20 49 2e 72 65 73 68 61 70 65 28 28 49 2e 73 68 61 70 65 5b ".....return.I.reshape((I.shape[
d800 30 5d 20 2a 20 49 2e 73 68 61 70 65 5b 31 5d 2c 20 49 2e 73 68 61 70 65 5b 32 5d 29 29 0a 0a 0a 0].*.I.shape[1],.I.shape[2]))...
d820 64 65 66 20 6d 61 74 32 69 6d 28 58 2c 20 73 68 61 70 65 29 3a 0a 20 20 20 20 22 22 22 43 6f 6e def.mat2im(X,.shape):....."""Con
d840 76 65 72 74 73 20 62 61 63 6b 20 61 20 6d 61 74 72 69 78 20 74 6f 20 61 6e 20 69 6d 61 67 65 22 verts.back.a.matrix.to.an.image"
d860 22 22 0a 20 20 20 20 72 65 74 75 72 6e 20 58 2e 72 65 73 68 61 70 65 28 73 68 61 70 65 29 0a 0a "".....return.X.reshape(shape)..
d880 0a 64 65 66 20 6d 69 6e 6d 61 78 28 49 29 3a 0a 20 20 20 20 72 65 74 75 72 6e 20 6e 70 2e 63 6c .def.minmax(I):.....return.np.cl
d8a0 69 70 28 49 2c 20 30 2c 20 31 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ip(I,.0,.1)...##################
d8c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
d8e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 47 ############################.#.G
d900 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 20 enerate.data.#.-------------..#.
d920 4c 6f 61 64 69 6e 67 20 69 6d 61 67 65 73 0a 49 31 20 3d 20 6e 64 69 6d 61 67 65 2e 69 6d 72 65 Loading.images.I1.=.ndimage.imre
d940 61 64 28 27 2e 2e 2f 64 61 74 61 2f 6f 63 65 61 6e 5f 64 61 79 2e 6a 70 67 27 29 2e 61 73 74 79 ad('../data/ocean_day.jpg').asty
d960 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 20 2f 20 32 35 36 0a 49 32 20 3d 20 6e 64 69 6d 61 67 pe(np.float64)./.256.I2.=.ndimag
d980 65 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 6f 63 65 61 6e 5f 73 75 6e 73 65 74 2e 6a e.imread('../data/ocean_sunset.j
d9a0 70 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 20 2f 20 32 35 36 0a 0a 58 pg').astype(np.float64)./.256..X
d9c0 31 20 3d 20 69 6d 32 6d 61 74 28 49 31 29 0a 58 32 20 3d 20 69 6d 32 6d 61 74 28 49 32 29 0a 0a 1.=.im2mat(I1).X2.=.im2mat(I2)..
d9e0 23 20 74 72 61 69 6e 69 6e 67 20 73 61 6d 70 6c 65 73 0a 6e 62 20 3d 20 31 30 30 30 0a 69 64 78 #.training.samples.nb.=.1000.idx
da00 31 20 3d 20 72 2e 72 61 6e 64 69 6e 74 28 58 31 2e 73 68 61 70 65 5b 30 5d 2c 20 73 69 7a 65 3d 1.=.r.randint(X1.shape[0],.size=
da20 28 6e 62 2c 29 29 0a 69 64 78 32 20 3d 20 72 2e 72 61 6e 64 69 6e 74 28 58 32 2e 73 68 61 70 65 (nb,)).idx2.=.r.randint(X2.shape
da40 5b 30 5d 2c 20 73 69 7a 65 3d 28 6e 62 2c 29 29 0a 0a 58 73 20 3d 20 58 31 5b 69 64 78 31 2c 20 [0],.size=(nb,))..Xs.=.X1[idx1,.
da60 3a 5d 0a 58 74 20 3d 20 58 32 5b 69 64 78 32 2c 20 3a 5d 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 :].Xt.=.X2[idx2,.:]...##########
da80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
daa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
dac0 23 23 23 23 0a 23 20 50 6c 6f 74 20 6f 72 69 67 69 6e 61 6c 20 69 6d 61 67 65 0a 23 20 2d 2d 2d ####.#.Plot.original.image.#.---
dae0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 ----------------..pl.figure(1,.f
db00 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 igsize=(6.4,.3))..pl.subplot(1,.
db20 32 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 2,.1).pl.imshow(I1).pl.axis('off
db40 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 31 27 29 0a 0a 70 6c 2e 73 75 62 70 6c ').pl.title('Image.1')..pl.subpl
db60 6f 74 28 31 2c 20 32 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 29 0a 70 6c 2e 61 78 69 ot(1,.2,.2).pl.imshow(I2).pl.axi
db80 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 32 27 29 0a 0a 0a 23 s('off').pl.title('Image.2')...#
dba0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
dbc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
dbe0 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 53 63 61 74 74 65 72 20 70 6c 6f 74 20 6f 66 20 #############.#.Scatter.plot.of.
dc00 63 6f 6c 6f 72 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a colors.#.----------------------.
dc20 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 29 29 0a .pl.figure(2,.figsize=(6.4,.3)).
dc40 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 .pl.subplot(1,.2,.1).pl.scatter(
dc60 58 73 5b 3a 2c 20 30 5d 2c 20 58 73 5b 3a 2c 20 32 5d 2c 20 63 3d 58 73 29 0a 70 6c 2e 61 78 69 Xs[:,.0],.Xs[:,.2],.c=Xs).pl.axi
dc80 73 28 5b 30 2c 20 31 2c 20 30 2c 20 31 5d 29 0a 70 6c 2e 78 6c 61 62 65 6c 28 27 52 65 64 27 29 s([0,.1,.0,.1]).pl.xlabel('Red')
dca0 0a 70 6c 2e 79 6c 61 62 65 6c 28 27 42 6c 75 65 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 .pl.ylabel('Blue').pl.title('Ima
dcc0 67 65 20 31 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 32 29 0a 70 6c 2e 73 ge.1')..pl.subplot(1,.2,.2).pl.s
dce0 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 32 5d 2c 20 63 3d 58 74 29 catter(Xt[:,.0],.Xt[:,.2],.c=Xt)
dd00 0a 70 6c 2e 61 78 69 73 28 5b 30 2c 20 31 2c 20 30 2c 20 31 5d 29 0a 70 6c 2e 78 6c 61 62 65 6c .pl.axis([0,.1,.0,.1]).pl.xlabel
dd20 28 27 52 65 64 27 29 0a 70 6c 2e 79 6c 61 62 65 6c 28 27 42 6c 75 65 27 29 0a 70 6c 2e 74 69 74 ('Red').pl.ylabel('Blue').pl.tit
dd40 6c 65 28 27 49 6d 61 67 65 20 32 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a le('Image.2').pl.tight_layout().
dd60 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ..##############################
dd80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
dda0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 49 6e 73 74 61 6e 74 69 61 74 65 20 74 ################.#.Instantiate.t
ddc0 68 65 20 64 69 66 66 65 72 65 6e 74 20 74 72 61 6e 73 70 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d he.different.transport.algorithm
dde0 73 20 61 6e 64 20 66 69 74 20 74 68 65 6d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d s.and.fit.them.#.---------------
de00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d --------------------------------
de20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 20 45 4d 44 54 72 61 6e 73 70 6f 72 74 0a 6f 74 5f ------------..#.EMDTransport.ot_
de40 65 6d 64 20 3d 20 6f 74 2e 64 61 2e 45 4d 44 54 72 61 6e 73 70 6f 72 74 28 29 0a 6f 74 5f 65 6d emd.=.ot.da.EMDTransport().ot_em
de60 64 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 53 69 6e 6b 68 6f 72 6e 54 d.fit(Xs=Xs,.Xt=Xt)..#.SinkhornT
de80 72 61 6e 73 70 6f 72 74 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 2e 64 61 2e 53 69 6e ransport.ot_sinkhorn.=.ot.da.Sin
dea0 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 28 72 65 67 5f 65 3d 31 65 2d 31 29 0a 6f 74 5f 73 69 khornTransport(reg_e=1e-1).ot_si
dec0 6e 6b 68 6f 72 6e 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 70 72 65 64 nkhorn.fit(Xs=Xs,.Xt=Xt)..#.pred
dee0 69 63 74 69 6f 6e 20 62 65 74 77 65 65 6e 20 69 6d 61 67 65 73 20 28 75 73 69 6e 67 20 6f 75 74 iction.between.images.(using.out
df00 20 6f 66 20 73 61 6d 70 6c 65 20 70 72 65 64 69 63 74 69 6f 6e 20 61 73 20 69 6e 20 5b 36 5d 29 .of.sample.prediction.as.in.[6])
df20 0a 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 20 3d 20 6f 74 5f 65 6d 64 2e 74 72 61 6e 73 66 6f 72 .transp_Xs_emd.=.ot_emd.transfor
df40 6d 28 58 73 3d 58 31 29 0a 74 72 61 6e 73 70 5f 58 74 5f 65 6d 64 20 3d 20 6f 74 5f 65 6d 64 2e m(Xs=X1).transp_Xt_emd.=.ot_emd.
df60 69 6e 76 65 72 73 65 5f 74 72 61 6e 73 66 6f 72 6d 28 58 74 3d 58 32 29 0a 0a 74 72 61 6e 73 70 inverse_transform(Xt=X2)..transp
df80 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 5f 65 6d 64 2e 74 72 61 6e 73 66 6f 72 6d 28 _Xs_sinkhorn.=.ot_emd.transform(
dfa0 58 73 3d 58 31 29 0a 74 72 61 6e 73 70 5f 58 74 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 5f 65 Xs=X1).transp_Xt_sinkhorn.=.ot_e
dfc0 6d 64 2e 69 6e 76 65 72 73 65 5f 74 72 61 6e 73 66 6f 72 6d 28 58 74 3d 58 32 29 0a 0a 49 31 74 md.inverse_transform(Xt=X2)..I1t
dfe0 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 2c 20 .=.minmax(mat2im(transp_Xs_emd,.
e000 49 31 2e 73 68 61 70 65 29 29 0a 49 32 74 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 74 I1.shape)).I2t.=.minmax(mat2im(t
e020 72 61 6e 73 70 5f 58 74 5f 65 6d 64 2c 20 49 32 2e 73 68 61 70 65 29 29 0a 0a 49 31 74 65 20 3d ransp_Xt_emd,.I2.shape))..I1te.=
e040 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 .minmax(mat2im(transp_Xs_sinkhor
e060 6e 2c 20 49 31 2e 73 68 61 70 65 29 29 0a 49 32 74 65 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 n,.I1.shape)).I2te.=.minmax(mat2
e080 69 6d 28 74 72 61 6e 73 70 5f 58 74 5f 73 69 6e 6b 68 6f 72 6e 2c 20 49 32 2e 73 68 61 70 65 29 im(transp_Xt_sinkhorn,.I2.shape)
e0a0 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 )...############################
e0c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
e0e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 6e 65 77 20 69 6d ##################.#.Plot.new.im
e100 61 67 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 ages.#.---------------..pl.figur
e120 65 28 33 2c 20 66 69 67 73 69 7a 65 3d 28 38 2c 20 34 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 e(3,.figsize=(8,.4))..pl.subplot
e140 28 32 2c 20 33 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 29 0a 70 6c 2e 61 78 69 73 28 (2,.3,.1).pl.imshow(I1).pl.axis(
e160 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 31 27 29 0a 0a 70 6c 2e 73 'off').pl.title('Image.1')..pl.s
e180 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 74 29 0a 70 ubplot(2,.3,.2).pl.imshow(I1t).p
e1a0 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 31 20 l.axis('off').pl.title('Image.1.
e1c0 41 64 61 70 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 33 29 0a 70 6c 2e Adapt')..pl.subplot(2,.3,.3).pl.
e1e0 69 6d 73 68 6f 77 28 49 31 74 65 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 imshow(I1te).pl.axis('off').pl.t
e200 69 74 6c 65 28 27 49 6d 61 67 65 20 31 20 41 64 61 70 74 20 28 72 65 67 29 27 29 0a 0a 70 6c 2e itle('Image.1.Adapt.(reg)')..pl.
e220 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 34 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 29 0a 70 subplot(2,.3,.4).pl.imshow(I2).p
e240 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 32 27 l.axis('off').pl.title('Image.2'
e260 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 35 29 0a 70 6c 2e 69 6d 73 68 6f 77 )..pl.subplot(2,.3,.5).pl.imshow
e280 28 49 32 74 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 (I2t).pl.axis('off').pl.title('I
e2a0 6d 61 67 65 20 32 20 41 64 61 70 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c mage.2.Adapt')..pl.subplot(2,.3,
e2c0 20 36 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 74 65 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 .6).pl.imshow(I2te).pl.axis('off
e2e0 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 32 20 41 64 61 70 74 20 28 72 65 67 29 ').pl.title('Image.2.Adapt.(reg)
e300 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a ').pl.tight_layout()..pl.show().
e320 50 4b 01 02 14 03 14 00 00 00 00 00 09 6f 2f 4b fc f7 6b 6f da 09 00 00 da 09 00 00 1c 00 00 00 PK...........o/K..ko............
e340 00 00 00 00 00 00 00 00 b4 81 00 00 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 ..............auto_examples/plot
e360 5f 67 72 6f 6d 6f 76 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 09 6f 2f 4b a4 4f 47 3f 0c 0c _gromov.pyPK...........o/K.OG?..
e380 00 00 0c 0c 00 00 19 00 00 00 00 00 00 00 00 00 00 00 b4 81 14 0a 00 00 61 75 74 6f 5f 65 78 61 ........................auto_exa
e3a0 6d 70 6c 65 73 2f 70 6c 6f 74 5f 57 44 41 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 09 6f 2f mples/plot_WDA.pyPK...........o/
e3c0 4b 8b 89 17 b5 91 1c 00 00 91 1c 00 00 27 00 00 00 00 00 00 00 00 00 00 00 b4 81 57 16 00 00 61 K............'.............W...a
e3e0 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 67 72 6f 6d 6f 76 5f 62 61 72 79 63 65 6e uto_examples/plot_gromov_barycen
e400 74 65 72 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 09 6f 2f 4b 7e 83 d4 f9 6e 0b 00 00 6e 0b ter.pyPK...........o/K~...n...n.
e420 00 00 21 00 00 00 00 00 00 00 00 00 00 00 b4 81 2d 33 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 ..!.............-3..auto_example
e440 73 2f 70 6c 6f 74 5f 6f 70 74 69 6d 5f 4f 54 72 65 67 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 s/plot_optim_OTreg.pyPK.........
e460 00 09 6f 2f 4b 3b 5a 71 cf fc 14 00 00 fc 14 00 00 1d 00 00 00 00 00 00 00 00 00 00 00 b4 81 da ..o/K;Zq........................
e480 3e 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 6f 74 64 61 5f 64 32 2e 70 79 >..auto_examples/plot_otda_d2.py
e4a0 50 4b 01 02 14 03 14 00 00 00 00 00 09 6f 2f 4b 0a ea dc a4 21 12 00 00 21 12 00 00 2a 00 00 00 PK...........o/K....!...!...*...
e4c0 00 00 00 00 00 00 00 00 b4 81 11 54 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 ...........T..auto_examples/plot
e4e0 5f 6f 74 64 61 5f 73 65 6d 69 5f 73 75 70 65 72 76 69 73 65 64 2e 70 79 50 4b 01 02 14 03 14 00 _otda_semi_supervised.pyPK......
e500 00 00 00 00 09 6f 2f 4b ad 47 e9 fa 92 06 00 00 92 06 00 00 1b 00 00 00 00 00 00 00 00 00 00 00 .....o/K.G......................
e520 b4 81 7a 66 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 4f 54 5f 31 44 2e 70 ..zf..auto_examples/plot_OT_1D.p
e540 79 50 4b 01 02 14 03 14 00 00 00 00 00 09 6f 2f 4b 0c f2 34 0e 5a 0e 00 00 5a 0e 00 00 23 00 00 yPK...........o/K..4.Z...Z...#..
e560 00 00 00 00 00 00 00 00 00 b4 81 45 6d 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f ...........Em..auto_examples/plo
e580 74 5f 62 61 72 79 63 65 6e 74 65 72 5f 31 44 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 09 6f t_barycenter_1D.pyPK...........o
e5a0 2f 4b 60 f3 2a fb 00 11 00 00 00 11 00 00 22 00 00 00 00 00 00 00 00 00 00 00 b4 81 e0 7b 00 00 /K`.*........."..............{..
e5c0 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 6f 74 64 61 5f 63 6c 61 73 73 65 73 2e auto_examples/plot_otda_classes.
e5e0 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 09 6f 2f 4b 1a d1 23 82 4f 10 00 00 4f 10 00 00 30 00 pyPK...........o/K..#.O...O...0.
e600 00 00 00 00 00 00 00 00 00 00 b4 81 20 8d 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c ................auto_examples/pl
e620 6f 74 5f 6f 74 64 61 5f 6d 61 70 70 69 6e 67 5f 63 6f 6c 6f 72 73 5f 69 6d 61 67 65 73 2e 70 79 ot_otda_mapping_colors_images.py
e640 50 4b 01 02 14 03 14 00 00 00 00 00 09 6f 2f 4b 37 2c 8d 0c 79 13 00 00 79 13 00 00 21 00 00 00 PK...........o/K7,..y...y...!...
e660 00 00 00 00 00 00 00 00 b4 81 bd 9d 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 ..............auto_examples/plot
e680 5f 4f 54 5f 4c 31 5f 76 73 5f 4c 32 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 09 6f 2f 4b 8c _OT_L1_vs_L2.pyPK...........o/K.
e6a0 4d bd 60 44 09 00 00 44 09 00 00 23 00 00 00 00 00 00 00 00 00 00 00 b4 81 75 b1 00 00 61 75 74 M.`D...D...#.............u...aut
e6c0 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 4f 54 5f 32 44 5f 73 61 6d 70 6c 65 73 2e 70 79 o_examples/plot_OT_2D_samples.py
e6e0 50 4b 01 02 14 03 14 00 00 00 00 00 09 6f 2f 4b 6f e7 38 bd f1 0f 00 00 f1 0f 00 00 22 00 00 00 PK...........o/Ko.8........."...
e700 00 00 00 00 00 00 00 00 b4 81 fa ba 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 ..............auto_examples/plot
e720 5f 6f 74 64 61 5f 6d 61 70 70 69 6e 67 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 09 6f 2f 4b _otda_mapping.pyPK...........o/K
e740 c9 85 61 a8 64 09 00 00 64 09 00 00 21 00 00 00 00 00 00 00 00 00 00 00 b4 81 2b cb 00 00 61 75 ..a.d...d...!.............+...au
e760 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 63 6f 6d 70 75 74 65 5f 65 6d 64 2e 70 79 50 to_examples/plot_compute_emd.pyP
e780 4b 01 02 14 03 14 00 00 00 00 00 09 6f 2f 4b 99 da 74 4f 0d 0e 00 00 0d 0e 00 00 27 00 00 00 00 K...........o/K..tO........'....
e7a0 00 00 00 00 00 00 00 b4 81 ce d4 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f .............auto_examples/plot_
e7c0 6f 74 64 61 5f 63 6f 6c 6f 72 5f 69 6d 61 67 65 73 2e 70 79 50 4b 05 06 00 00 00 00 0f 00 0f 00 otda_color_images.pyPK..........
e7e0 b4 04 00 00 20 e3 00 00 00 00 ..........