summaryrefslogtreecommitdiff
path: root/docs/source/auto_examples/auto_examples_python.zip
blob: 120a586099afe6b40d35a1d0a6c96824bd798100 (plain)
ofshex dumpascii
0000 50 4b 03 04 14 00 00 00 00 00 b3 5c 6f 4e c6 3b 52 da f3 0a 00 00 f3 0a 00 00 0e 00 00 00 70 6c PK.........\oN.;R.............pl
0020 6f 74 5f 67 72 6f 6d 6f 76 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 ot_gromov.py#.-*-.coding:.utf-8.
0040 2d 2a 2d 0d 0a 22 22 22 0d 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d -*-.."""..======================
0060 3d 3d 3d 3d 0d 0a 47 72 6f 6d 6f 76 2d 57 61 73 73 65 72 73 74 65 69 6e 20 65 78 61 6d 70 6c 65 ====..Gromov-Wasserstein.example
0080 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 3d 3d 0d 0a 0d 0a ..==========================....
00a0 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 73 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73 68 6f 77 This.example.is.designed.to.show
00c0 20 68 6f 77 20 74 6f 20 75 73 65 20 74 68 65 20 47 72 6f 6d 6f 76 2d 57 61 73 73 65 72 74 73 65 .how.to.use.the.Gromov-Wassertse
00e0 69 6e 20 64 69 73 74 61 6e 63 65 0d 0a 63 6f 6d 70 75 74 61 74 69 6f 6e 20 69 6e 20 50 4f 54 2e in.distance..computation.in.POT.
0100 0d 0a 22 22 22 0d 0a 0d 0a 23 20 41 75 74 68 6f 72 3a 20 45 72 77 61 6e 20 56 61 75 74 69 65 72 .."""....#.Author:.Erwan.Vautier
0120 20 3c 65 72 77 61 6e 2e 76 61 75 74 69 65 72 40 67 6d 61 69 6c 2e 63 6f 6d 3e 0d 0a 23 20 20 20 .<erwan.vautier@gmail.com>..#...
0140 20 20 20 20 20 20 4e 69 63 6f 6c 61 73 20 43 6f 75 72 74 79 20 3c 6e 63 6f 75 72 74 79 40 69 72 ......Nicolas.Courty.<ncourty@ir
0160 69 73 61 2e 66 72 3e 0d 0a 23 0d 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e isa.fr>..#..#.License:.MIT.Licen
0180 73 65 0d 0a 0d 0a 69 6d 70 6f 72 74 20 73 63 69 70 79 20 61 73 20 73 70 0d 0a 69 6d 70 6f 72 74 se....import.scipy.as.sp..import
01a0 20 6e 75 6d 70 79 20 61 73 20 6e 70 0d 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e .numpy.as.np..import.matplotlib.
01c0 70 79 6c 61 62 20 61 73 20 70 6c 0d 0a 66 72 6f 6d 20 6d 70 6c 5f 74 6f 6f 6c 6b 69 74 73 2e 6d pylab.as.pl..from.mpl_toolkits.m
01e0 70 6c 6f 74 33 64 20 69 6d 70 6f 72 74 20 41 78 65 73 33 44 20 20 23 20 6e 6f 71 61 0d 0a 69 6d plot3d.import.Axes3D..#.noqa..im
0200 70 6f 72 74 20 6f 74 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 port.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 0d 0a 23 0d 0a 23 20 53 ########################..#..#.S
0260 61 6d 70 6c 65 20 74 77 6f 20 47 61 75 73 73 69 61 6e 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 ample.two.Gaussian.distributions
0280 20 28 32 44 20 61 6e 64 20 33 44 29 0d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .(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 0d 0a 23 -----------------------------..#
02c0 0d 0a 23 20 54 68 65 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 ..#.The.Gromov-Wasserstein.dista
02e0 6e 63 65 20 61 6c 6c 6f 77 73 20 74 6f 20 63 6f 6d 70 75 74 65 20 64 69 73 74 61 6e 63 65 73 20 nce.allows.to.compute.distances.
0300 77 69 74 68 20 73 61 6d 70 6c 65 73 20 74 68 61 74 0d 0a 23 20 64 6f 20 6e 6f 74 20 62 65 6c 6f with.samples.that..#.do.not.belo
0320 6e 67 20 74 6f 20 74 68 65 20 73 61 6d 65 20 6d 65 74 72 69 63 20 73 70 61 63 65 2e 20 46 6f 72 ng.to.the.same.metric.space..For
0340 20 64 65 6d 6f 6e 73 74 72 61 74 69 6f 6e 20 70 75 72 70 6f 73 65 2c 20 77 65 20 73 61 6d 70 6c .demonstration.purpose,.we.sampl
0360 65 0d 0a 23 20 74 77 6f 20 47 61 75 73 73 69 61 6e 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 e..#.two.Gaussian.distributions.
0380 69 6e 20 32 2d 20 61 6e 64 20 33 2d 64 69 6d 65 6e 73 69 6f 6e 61 6c 20 73 70 61 63 65 73 2e 0d in.2-.and.3-dimensional.spaces..
03a0 0a 0d 0a 0d 0a 6e 5f 73 61 6d 70 6c 65 73 20 3d 20 33 30 20 20 23 20 6e 62 20 73 61 6d 70 6c 65 .....n_samples.=.30..#.nb.sample
03c0 73 0d 0a 0d 0a 6d 75 5f 73 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 30 2c 20 30 5d 29 0d 0a 63 6f s....mu_s.=.np.array([0,.0])..co
03e0 76 5f 73 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 5b 31 2c 20 30 5d 2c 20 5b 30 2c 20 31 5d 5d 29 v_s.=.np.array([[1,.0],.[0,.1]])
0400 0d 0a 0d 0a 6d 75 5f 74 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 34 2c 20 34 2c 20 34 5d 29 0d 0a ....mu_t.=.np.array([4,.4,.4])..
0420 63 6f 76 5f 74 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 5b 31 2c 20 30 2c 20 30 5d 2c 20 5b 30 2c cov_t.=.np.array([[1,.0,.0],.[0,
0440 20 31 2c 20 30 5d 2c 20 5b 30 2c 20 30 2c 20 31 5d 5d 29 0d 0a 0d 0a 0d 0a 78 73 20 3d 20 6f 74 .1,.0],.[0,.0,.1]])......xs.=.ot
0460 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 32 44 5f 73 61 6d 70 6c 65 73 5f 67 61 75 73 73 28 .datasets.make_2D_samples_gauss(
0480 6e 5f 73 61 6d 70 6c 65 73 2c 20 6d 75 5f 73 2c 20 63 6f 76 5f 73 29 0d 0a 50 20 3d 20 73 70 2e n_samples,.mu_s,.cov_s)..P.=.sp.
04a0 6c 69 6e 61 6c 67 2e 73 71 72 74 6d 28 63 6f 76 5f 74 29 0d 0a 78 74 20 3d 20 6e 70 2e 72 61 6e linalg.sqrtm(cov_t)..xt.=.np.ran
04c0 64 6f 6d 2e 72 61 6e 64 6e 28 6e 5f 73 61 6d 70 6c 65 73 2c 20 33 29 2e 64 6f 74 28 50 29 20 2b dom.randn(n_samples,.3).dot(P).+
04e0 20 6d 75 5f 74 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 .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 0d 0a 23 0d 0a 23 20 50 6c 6f ######################..#..#.Plo
0540 74 74 69 6e 67 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0d 0a 23 20 2d 2d 2d 2d 2d tting.the.distributions..#.-----
0560 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 66 69 67 20 3d ---------------------......fig.=
0580 20 70 6c 2e 66 69 67 75 72 65 28 29 0d 0a 61 78 31 20 3d 20 66 69 67 2e 61 64 64 5f 73 75 62 70 .pl.figure()..ax1.=.fig.add_subp
05a0 6c 6f 74 28 31 32 31 29 0d 0a 61 78 31 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b lot(121)..ax1.plot(xs[:,.0],.xs[
05c0 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
05e0 65 73 27 29 0d 0a 61 78 32 20 3d 20 66 69 67 2e 61 64 64 5f 73 75 62 70 6c 6f 74 28 31 32 32 2c es')..ax2.=.fig.add_subplot(122,
0600 20 70 72 6f 6a 65 63 74 69 6f 6e 3d 27 33 64 27 29 0d 0a 61 78 32 2e 73 63 61 74 74 65 72 28 78 .projection='3d')..ax2.scatter(x
0620 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 78 74 5b 3a 2c 20 32 5d 2c 20 63 6f 6c t[:,.0],.xt[:,.1],.xt[:,.2],.col
0640 6f 72 3d 27 72 27 29 0d 0a 70 6c 2e 73 68 6f 77 28 29 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 or='r')..pl.show()....##########
0660 23 23 23 23 23 23 23 23 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 0d 0a 23 0d 0a 23 20 43 6f 6d 70 75 74 65 20 64 69 73 74 61 6e 63 65 20 6b 65 72 6e 65 ###..#..#.Compute.distance.kerne
06c0 6c 73 2c 20 6e 6f 72 6d 61 6c 69 7a 65 20 74 68 65 6d 20 61 6e 64 20 74 68 65 6e 20 64 69 73 70 ls,.normalize.them.and.then.disp
06e0 6c 61 79 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 lay..#.-------------------------
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 0d 0a 0d 0a 0d 0a 43 31 20 3d 20 73 70 2e 73 70 61 74 69 61 6c 2e 64 69 73 74 61 6e 63 65 2e 63 ......C1.=.sp.spatial.distance.c
0740 64 69 73 74 28 78 73 2c 20 78 73 29 0d 0a 43 32 20 3d 20 73 70 2e 73 70 61 74 69 61 6c 2e 64 69 dist(xs,.xs)..C2.=.sp.spatial.di
0760 73 74 61 6e 63 65 2e 63 64 69 73 74 28 78 74 2c 20 78 74 29 0d 0a 0d 0a 43 31 20 2f 3d 20 43 31 stance.cdist(xt,.xt)....C1./=.C1
0780 2e 6d 61 78 28 29 0d 0a 43 32 20 2f 3d 20 43 32 2e 6d 61 78 28 29 0d 0a 0d 0a 70 6c 2e 66 69 67 .max()..C2./=.C2.max()....pl.fig
07a0 75 72 65 28 29 0d 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 32 31 29 0d 0a 70 6c 2e 69 6d 73 68 6f ure()..pl.subplot(121)..pl.imsho
07c0 77 28 43 31 29 0d 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 32 32 29 0d 0a 70 6c 2e 69 6d 73 68 6f w(C1)..pl.subplot(122)..pl.imsho
07e0 77 28 43 32 29 0d 0a 70 6c 2e 73 68 6f 77 28 29 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 w(C2)..pl.show()....############
0800 23 23 23 23 23 23 23 23 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 0d 0a 23 0d 0a 23 20 43 6f 6d 70 75 74 65 20 47 72 6f 6d 6f 76 2d 57 61 73 73 65 72 73 74 65 #..#..#.Compute.Gromov-Wasserste
0860 69 6e 20 70 6c 61 6e 73 20 61 6e 64 20 64 69 73 74 61 6e 63 65 0d 0a 23 20 2d 2d 2d 2d 2d 2d 2d in.plans.and.distance..#.-------
0880 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 --------------------------------
08a0 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 70 20 3d 20 6f 74 2e 75 6e 69 66 28 6e 5f 73 61 6d 70 6c 65 73 29 ------....p.=.ot.unif(n_samples)
08c0 0d 0a 71 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 67 77 30 2c ..q.=.ot.unif(n_samples)....gw0,
08e0 20 6c 6f 67 30 20 3d 20 6f 74 2e 67 72 6f 6d 6f 76 2e 67 72 6f 6d 6f 76 5f 77 61 73 73 65 72 73 .log0.=.ot.gromov.gromov_wassers
0900 74 65 69 6e 28 0d 0a 20 20 20 20 43 31 2c 20 43 32 2c 20 70 2c 20 71 2c 20 27 73 71 75 61 72 65 tein(......C1,.C2,.p,.q,.'square
0920 5f 6c 6f 73 73 27 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 2c 20 6c 6f 67 3d 54 72 75 65 29 0d _loss',.verbose=True,.log=True).
0940 0a 0d 0a 67 77 2c 20 6c 6f 67 20 3d 20 6f 74 2e 67 72 6f 6d 6f 76 2e 65 6e 74 72 6f 70 69 63 5f ...gw,.log.=.ot.gromov.entropic_
0960 67 72 6f 6d 6f 76 5f 77 61 73 73 65 72 73 74 65 69 6e 28 0d 0a 20 20 20 20 43 31 2c 20 43 32 2c gromov_wasserstein(......C1,.C2,
0980 20 70 2c 20 71 2c 20 27 73 71 75 61 72 65 5f 6c 6f 73 73 27 2c 20 65 70 73 69 6c 6f 6e 3d 35 65 .p,.q,.'square_loss',.epsilon=5e
09a0 2d 34 2c 20 6c 6f 67 3d 54 72 75 65 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0d 0a 0d 0a 0d -4,.log=True,.verbose=True).....
09c0 0a 70 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 .print('Gromov-Wasserstein.dista
09e0 6e 63 65 73 3a 20 27 20 2b 20 73 74 72 28 6c 6f 67 30 5b 27 67 77 5f 64 69 73 74 27 5d 29 29 0d nces:.'.+.str(log0['gw_dist'])).
0a00 0a 70 72 69 6e 74 28 27 45 6e 74 72 6f 70 69 63 20 47 72 6f 6d 6f 76 2d 57 61 73 73 65 72 73 74 .print('Entropic.Gromov-Wasserst
0a20 65 69 6e 20 64 69 73 74 61 6e 63 65 73 3a 20 27 20 2b 20 73 74 72 28 6c 6f 67 5b 27 67 77 5f 64 ein.distances:.'.+.str(log['gw_d
0a40 69 73 74 27 5d 29 29 0d 0a 0d 0a 0d 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 28 31 30 2c 20 35 ist']))......pl.figure(1,.(10,.5
0a60 29 29 0d 0a 0d 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0d 0a 70 6c 2e 69 6d ))....pl.subplot(1,.2,.1)..pl.im
0a80 73 68 6f 77 28 67 77 30 2c 20 63 6d 61 70 3d 27 6a 65 74 27 29 0d 0a 70 6c 2e 74 69 74 6c 65 28 show(gw0,.cmap='jet')..pl.title(
0aa0 27 47 72 6f 6d 6f 76 20 57 61 73 73 65 72 73 74 65 69 6e 27 29 0d 0a 0d 0a 70 6c 2e 73 75 62 70 'Gromov.Wasserstein')....pl.subp
0ac0 6c 6f 74 28 31 2c 20 32 2c 20 32 29 0d 0a 70 6c 2e 69 6d 73 68 6f 77 28 67 77 2c 20 63 6d 61 70 lot(1,.2,.2)..pl.imshow(gw,.cmap
0ae0 3d 27 6a 65 74 27 29 0d 0a 70 6c 2e 74 69 74 6c 65 28 27 45 6e 74 72 6f 70 69 63 20 47 72 6f 6d ='jet')..pl.title('Entropic.Grom
0b00 6f 76 20 57 61 73 73 65 72 73 74 65 69 6e 27 29 0d 0a 0d 0a 70 6c 2e 73 68 6f 77 28 29 0d 0a 50 ov.Wasserstein')....pl.show()..P
0b20 4b 03 04 14 00 00 00 00 00 b3 5c 6f 4e a4 4f 47 3f 0c 0c 00 00 0c 0c 00 00 0b 00 00 00 70 6c 6f K.........\oN.OG?............plo
0b40 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 2a 2d 0a t_WDA.py#.-*-.coding:.utf-8.-*-.
0b60 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 3d 3d 3d """.============================
0b80 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 74 20 41 =====.Wasserstein.Discriminant.A
0ba0 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 3d 3d 3d nalysis.========================
0bc0 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 74 72 61 =========..This.example.illustra
0be0 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 20 69 6e te.the.use.of.WDA.as.proposed.in
0c00 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 74 75 72 .[11]....[11].Flamary,.R.,.Cutur
0c20 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 6d 6f 6e i,.M.,.Courty,.N.,.&.Rakotomamon
0c40 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 73 63 72 jy,.A..(2016)..Wasserstein.Discr
0c60 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 68 6f 72 iminant.Analysis..."""..#.Author
0c80 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
0ca0 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.
0cc0 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
0ce0 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 20 69 6d otlib.pylab.as.pl..from.ot.dr.im
0d00 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 23 23 23 port.wda,.fda...################
0d20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
0d40 23 23 23 23 23 23 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 ##############################.#
0d60 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 0a .Generate.data.#.-------------..
0d80 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 62 20 73 #%%.parameters..n.=.1000..#.nb.s
0da0 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 61 74 61 amples.in.source.and.target.data
0dc0 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 63 6c 65 sets.nz.=.0.2..#.generate.circle
0de0 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 29 20 2a .dataset.t.=.np.random.rand(n).*
0e00 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 61 72 61 .2.*.np.pi.ys.=.np.floor((np.ara
0e20 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 20 3d 20 nge(n).*.1.0./.n.*.3)).+.1.xs.=.
0e40 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 29 2e 72 np.concatenate(.....(np.cos(t).r
0e60 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 73 68 61 eshape((-1,.1)),.np.sin(t).resha
0e80 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 2e 72 65 pe((-1,.1))),.1).xs.=.xs.*.ys.re
0ea0 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 2e 72 61 shape(-1,.1).+.nz.*.np.random.ra
0ec0 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 28 6e 29 ndn(n,.2)..t.=.np.random.rand(n)
0ee0 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 70 2e 61 .*.2.*.np.pi.yt.=.np.floor((np.a
0f00 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 74 20 range(n).*.1.0./.n.*.3)).+.1.xt.
0f20 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 29 =.np.concatenate(.....(np.cos(t)
0f40 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 73 .reshape((-1,.1)),.np.sin(t).res
0f60 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 79 74 2e hape((-1,.1))),.1).xt.=.xt.*.yt.
0f80 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 2e reshape(-1,.1).+.nz.*.np.random.
0fa0 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 3d 20 6e randn(n,.2)..nbnoise.=.8..xs.=.n
0fc0 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 28 6e 2c p.hstack((xs,.np.random.randn(n,
0fe0 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 74 2c 20 .nbnoise))).xt.=.np.hstack((xt,.
1000 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 0a 0a 23 np.random.randn(n,.nbnoise)))..#
1020 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
1040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
1060 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 2d #############.#.Plot.data.#.----
1080 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 67 75 72 -----..#%%.plot.samples.pl.figur
10a0 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 73 75 62 e(1,.figsize=(6.4,.3.5))..pl.sub
10c0 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 2c 20 30 plot(1,.2,.1).pl.scatter(xt[:,.0
10e0 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 2c 20 6c ],.xt[:,.1],.c=ys,.marker='+',.l
1100 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 65 6e 64 abel='Source.samples').pl.legend
1120 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 74 20 64 (loc=0).pl.title('Discriminant.d
1140 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 20 32 29 imensions')..pl.subplot(1,.2,.2)
1160 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 5d 2c 20 .pl.scatter(xt[:,.2],.xt[:,.3],.
1180 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 63 65 20 c=ys,.marker='+',.label='Source.
11a0 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 2e 74 69 samples').pl.legend(loc=0).pl.ti
11c0 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 67 68 74 tle('Other.dimensions').pl.tight
11e0 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 23 23 23 _layout()..#####################
1200 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
1220 23 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 6f 6d 70 #########################.#.Comp
1240 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 73 69 73 ute.Fisher.Discriminant.Analysis
1260 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 2d .#.-----------------------------
1280 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 32 0a 0a -------..#%%.Compute.FDA.p.=.2..
12a0 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 29 0a 0a Pfda,.projfda.=.fda(xs,.ys,.p)..
12c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
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 0a 23 20 43 6f 6d 70 75 74 65 20 57 61 73 73 65 72 73 ##############.#.Compute.Wassers
1320 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 2d 2d 2d tein.Discriminant.Analysis.#.---
1340 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 --------------------------------
1360 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 0a 72 65 ------..#%%.Compute.WDA.p.=.2.re
1380 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 0a 50 77 g.=.1e0.k.=.10.maxiter.=.100..Pw
13a0 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 72 65 67 da,.projwda.=.wda(xs,.ys,.p,.reg
13c0 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 23 23 23 ,.k,.maxiter=maxiter)...########
13e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
1400 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
1420 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 23 20 2d ######.#.Plot.2D.projections.#.-
1440 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 73 61 6d ------------------..#%%.plot.sam
1460 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 20 70 72 ples..xsp.=.projfda(xs).xtp.=.pr
1480 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 0a 78 74 ojfda(xt)..xspw.=.projwda(xs).xt
14a0 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 29 0a 0a pw.=.projwda(xt)..pl.figure(2)..
14c0 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 72 28 78 pl.subplot(2,.2,.1).pl.scatter(x
14e0 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 72 6b 65 sp[:,.0],.xsp[:,.1],.c=ys,.marke
1500 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'
1520 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
1540 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 0a 0a 70 jected.training.samples.FDA')..p
1560 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 28 78 74 l.subplot(2,.2,.2).pl.scatter(xt
1580 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 6b 65 72 p[:,.0],.xtp[:,.1],.c=ys,.marker
15a0 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')
15c0 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
15e0 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 73 75 62 ected.test.samples.FDA')..pl.sub
1600 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 5b 3a 2c plot(2,.2,.3).pl.scatter(xspw[:,
1620 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 3d 27 2b .0],.xspw[:,.1],.c=ys,.marker='+
1640 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 0a 70 6c ',.label='Projected.samples').pl
1660 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 65 63 74 .legend(loc=0).pl.title('Project
1680 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 2e 73 75 ed.training.samples.WDA')..pl.su
16a0 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 77 5b 3a bplot(2,.2,.4).pl.scatter(xtpw[:
16c0 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 72 3d 27 ,.0],.xtpw[:,.1],.c=ys,.marker='
16e0 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 0a 70 +',.label='Projected.samples').p
1700 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 65 63 l.legend(loc=0).pl.title('Projec
1720 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 68 74 5f ted.test.samples.WDA').pl.tight_
1740 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 a6 5d layout()..pl.show().PK.........]
1760 6f 4e e5 d4 47 7d 9d 1c 00 00 9d 1c 00 00 19 00 00 00 70 6c 6f 74 5f 67 72 6f 6d 6f 76 5f 62 61 oN..G}............plot_gromov_ba
1780 72 79 63 65 6e 74 65 72 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d rycenter.py#.-*-.coding:.utf-8.-
17a0 2a 2d 0d 0a 22 22 22 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 *-.."""..=======================
17c0 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 72 73 74 65 ==============..Gromov-Wasserste
17e0 69 6e 20 42 61 72 79 63 65 6e 74 65 72 20 65 78 61 6d 70 6c 65 0d 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d in.Barycenter.example..=========
1800 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 0a 0d 0a ============================....
1820 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 73 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73 68 6f 77 This.example.is.designed.to.show
1840 20 68 6f 77 20 74 6f 20 75 73 65 20 74 68 65 20 47 72 6f 6d 6f 76 2d 57 61 73 73 65 72 73 74 65 .how.to.use.the.Gromov-Wasserste
1860 69 6e 20 64 69 73 74 61 6e 63 65 0d 0a 63 6f 6d 70 75 74 61 74 69 6f 6e 20 69 6e 20 50 4f 54 2e in.distance..computation.in.POT.
1880 0d 0a 22 22 22 0d 0a 0d 0a 23 20 41 75 74 68 6f 72 3a 20 45 72 77 61 6e 20 56 61 75 74 69 65 72 .."""....#.Author:.Erwan.Vautier
18a0 20 3c 65 72 77 61 6e 2e 76 61 75 74 69 65 72 40 67 6d 61 69 6c 2e 63 6f 6d 3e 0d 0a 23 20 20 20 .<erwan.vautier@gmail.com>..#...
18c0 20 20 20 20 20 20 4e 69 63 6f 6c 61 73 20 43 6f 75 72 74 79 20 3c 6e 63 6f 75 72 74 79 40 69 72 ......Nicolas.Courty.<ncourty@ir
18e0 69 73 61 2e 66 72 3e 0d 0a 23 0d 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e isa.fr>..#..#.License:.MIT.Licen
1900 73 65 0d 0a 0d 0a 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 se......import.numpy.as.np..impo
1920 72 74 20 73 63 69 70 79 20 61 73 20 73 70 0d 0a 0d 0a 69 6d 70 6f 72 74 20 73 63 69 70 79 2e 6e rt.scipy.as.sp....import.scipy.n
1940 64 69 6d 61 67 65 20 61 73 20 73 70 69 0d 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 dimage.as.spi..import.matplotlib
1960 2e 70 79 6c 61 62 20 61 73 20 70 6c 0d 0a 66 72 6f 6d 20 73 6b 6c 65 61 72 6e 20 69 6d 70 6f 72 .pylab.as.pl..from.sklearn.impor
1980 74 20 6d 61 6e 69 66 6f 6c 64 0d 0a 66 72 6f 6d 20 73 6b 6c 65 61 72 6e 2e 64 65 63 6f 6d 70 6f t.manifold..from.sklearn.decompo
19a0 73 69 74 69 6f 6e 20 69 6d 70 6f 72 74 20 50 43 41 0d 0a 0d 0a 69 6d 70 6f 72 74 20 6f 74 0d 0a sition.import.PCA....import.ot..
19c0 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 23 23 23 ..##############################
19e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
1a00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 23 20 53 6d 61 63 6f 66 20 4d 44 53 0d 0a ################..#.Smacof.MDS..
1a20 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 0d 0a 23 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e #.----------..#..#.This.function
1a40 20 61 6c 6c 6f 77 73 20 74 6f 20 66 69 6e 64 20 61 6e 20 65 6d 62 65 64 64 69 6e 67 20 6f 66 20 .allows.to.find.an.embedding.of.
1a60 70 6f 69 6e 74 73 20 67 69 76 65 6e 20 61 20 64 69 73 73 69 6d 69 6c 61 72 69 74 79 20 6d 61 74 points.given.a.dissimilarity.mat
1a80 72 69 78 0d 0a 23 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 67 69 76 65 6e 20 62 79 20 74 68 65 rix..#.that.will.be.given.by.the
1aa0 20 6f 75 74 70 75 74 20 6f 66 20 74 68 65 20 61 6c 67 6f 72 69 74 68 6d 0d 0a 0d 0a 0d 0a 64 65 .output.of.the.algorithm......de
1ac0 66 20 73 6d 61 63 6f 66 5f 6d 64 73 28 43 2c 20 64 69 6d 2c 20 6d 61 78 5f 69 74 65 72 3d 33 30 f.smacof_mds(C,.dim,.max_iter=30
1ae0 30 30 2c 20 65 70 73 3d 31 65 2d 39 29 3a 0d 0a 20 20 20 20 22 22 22 0d 0a 20 20 20 20 52 65 74 00,.eps=1e-9):......"""......Ret
1b00 75 72 6e 73 20 61 6e 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 urns.an.interpolated.point.cloud
1b20 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 64 69 73 73 69 6d 69 6c 61 72 69 74 79 20 6d 61 74 .following.the.dissimilarity.mat
1b40 72 69 78 20 43 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 4d 41 43 4f 46 20 6d 75 6c 74 69 64 69 6d rix.C......using.SMACOF.multidim
1b60 65 6e 73 69 6f 6e 61 6c 20 73 63 61 6c 69 6e 67 20 28 4d 44 53 29 20 69 6e 20 73 70 65 63 69 66 ensional.scaling.(MDS).in.specif
1b80 69 63 20 64 69 6d 65 6e 73 69 6f 6e 6e 65 64 0d 0a 20 20 20 20 74 61 72 67 65 74 20 73 70 61 63 ic.dimensionned......target.spac
1ba0 65 0d 0a 0d 0a 20 20 20 20 50 61 72 61 6d 65 74 65 72 73 0d 0a 20 20 20 20 2d 2d 2d 2d 2d 2d 2d e........Parameters......-------
1bc0 2d 2d 2d 0d 0a 20 20 20 20 43 20 3a 20 6e 64 61 72 72 61 79 2c 20 73 68 61 70 65 20 28 6e 73 2c ---......C.:.ndarray,.shape.(ns,
1be0 20 6e 73 29 0d 0a 20 20 20 20 20 20 20 20 64 69 73 73 69 6d 69 6c 61 72 69 74 79 20 6d 61 74 72 .ns)..........dissimilarity.matr
1c00 69 78 0d 0a 20 20 20 20 64 69 6d 20 3a 20 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 64 69 6d ix......dim.:.int............dim
1c20 65 6e 73 69 6f 6e 20 6f 66 20 74 68 65 20 74 61 72 67 65 74 65 64 20 73 70 61 63 65 0d 0a 20 20 ension.of.the.targeted.space....
1c40 20 20 6d 61 78 5f 69 74 65 72 20 3a 20 20 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 4d 61 78 69 6d ..max_iter.:..int..........Maxim
1c60 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 53 um.number.of.iterations.of.the.S
1c80 4d 41 43 4f 46 20 61 6c 67 6f 72 69 74 68 6d 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 75 6e MACOF.algorithm.for.a.single.run
1ca0 0d 0a 20 20 20 20 65 70 73 20 3a 20 66 6c 6f 61 74 0d 0a 20 20 20 20 20 20 20 20 72 65 6c 61 74 ......eps.:.float..........relat
1cc0 69 76 65 20 74 6f 6c 65 72 61 6e 63 65 20 77 2e 72 2e 74 20 73 74 72 65 73 73 20 74 6f 20 64 65 ive.tolerance.w.r.t.stress.to.de
1ce0 63 6c 61 72 65 20 63 6f 6e 76 65 72 67 65 0d 0a 0d 0a 20 20 20 20 52 65 74 75 72 6e 73 0d 0a 20 clare.converge........Returns...
1d00 20 20 20 2d 2d 2d 2d 2d 2d 2d 0d 0a 20 20 20 20 6e 70 6f 73 20 3a 20 6e 64 61 72 72 61 79 2c 20 ...-------......npos.:.ndarray,.
1d20 73 68 61 70 65 20 28 52 2c 20 64 69 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 45 6d 62 65 64 shape.(R,.dim).............Embed
1d40 64 65 64 20 63 6f 6f 72 64 69 6e 61 74 65 73 20 6f 66 20 74 68 65 20 69 6e 74 65 72 70 6f 6c 61 ded.coordinates.of.the.interpola
1d60 74 65 64 20 70 6f 69 6e 74 20 63 6c 6f 75 64 20 28 64 65 66 69 6e 65 64 20 77 69 74 68 0d 0a 20 ted.point.cloud.(defined.with...
1d80 20 20 20 20 20 20 20 20 20 20 6f 6e 65 20 69 73 6f 6d 65 74 72 79 29 0d 0a 20 20 20 20 22 22 22 ..........one.isometry)......"""
1da0 0d 0a 0d 0a 20 20 20 20 72 6e 67 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 52 61 6e 64 6f 6d 53 74 ........rng.=.np.random.RandomSt
1dc0 61 74 65 28 73 65 65 64 3d 33 29 0d 0a 0d 0a 20 20 20 20 6d 64 73 20 3d 20 6d 61 6e 69 66 6f 6c ate(seed=3)........mds.=.manifol
1de0 64 2e 4d 44 53 28 0d 0a 20 20 20 20 20 20 20 20 64 69 6d 2c 0d 0a 20 20 20 20 20 20 20 20 6d 61 d.MDS(..........dim,..........ma
1e00 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 31 65 x_iter=max_iter,..........eps=1e
1e20 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 27 70 72 65 63 -9,..........dissimilarity='prec
1e40 6f 6d 70 75 74 65 64 27 2c 0d 0a 20 20 20 20 20 20 20 20 6e 5f 69 6e 69 74 3d 31 29 0d 0a 20 20 omputed',..........n_init=1)....
1e60 20 20 70 6f 73 20 3d 20 6d 64 73 2e 66 69 74 28 43 29 2e 65 6d 62 65 64 64 69 6e 67 5f 0d 0a 0d ..pos.=.mds.fit(C).embedding_...
1e80 0a 20 20 20 20 6e 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 .....nmds.=.manifold.MDS(.......
1ea0 20 20 20 32 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 ...2,..........max_iter=max_iter
1ec0 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
1ee0 73 73 69 6d 69 6c 61 72 69 74 79 3d 22 70 72 65 63 6f 6d 70 75 74 65 64 22 2c 0d 0a 20 20 20 20 ssimilarity="precomputed",......
1f00 20 20 20 20 72 61 6e 64 6f 6d 5f 73 74 61 74 65 3d 72 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 6e ....random_state=rng,..........n
1f20 5f 69 6e 69 74 3d 31 29 0d 0a 20 20 20 20 6e 70 6f 73 20 3d 20 6e 6d 64 73 2e 66 69 74 5f 74 72 _init=1)......npos.=.nmds.fit_tr
1f40 61 6e 73 66 6f 72 6d 28 43 2c 20 69 6e 69 74 3d 70 6f 73 29 0d 0a 0d 0a 20 20 20 20 72 65 74 75 ansform(C,.init=pos)........retu
1f60 72 6e 20 6e 70 6f 73 0d 0a 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 rn.npos......###################
1f80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
1fa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 23 20 44 ###########################..#.D
1fc0 61 74 61 20 70 72 65 70 61 72 61 74 69 6f 6e 0d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ata.preparation..#.-------------
1fe0 2d 2d 2d 0d 0a 23 0d 0a 23 20 54 68 65 20 66 6f 75 72 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 ---..#..#.The.four.distributions
2000 20 61 72 65 20 63 6f 6e 73 74 72 75 63 74 65 64 20 66 72 6f 6d 20 34 20 73 69 6d 70 6c 65 20 69 .are.constructed.from.4.simple.i
2020 6d 61 67 65 73 0d 0a 0d 0a 0d 0a 64 65 66 20 69 6d 32 6d 61 74 28 49 29 3a 0d 0a 20 20 20 20 22 mages......def.im2mat(I):......"
2040 22 22 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 ""Converts.and.image.to.matrix.(
2060 6f 6e 65 20 70 69 78 65 6c 20 70 65 72 20 6c 69 6e 65 29 22 22 22 0d 0a 20 20 20 20 72 65 74 75 one.pixel.per.line)"""......retu
2080 72 6e 20 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 rn.I.reshape((I.shape[0].*.I.sha
20a0 70 65 5b 31 5d 2c 20 49 2e 73 68 61 70 65 5b 32 5d 29 29 0d 0a 0d 0a 0d 0a 73 71 75 61 72 65 20 pe[1],.I.shape[2]))......square.
20c0 3d 20 73 70 69 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 73 71 75 61 72 65 2e 70 6e 67 =.spi.imread('../data/square.png
20e0 27 29 2e 61 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 ').astype(np.float64)[:,.:,.2]./
2100 20 32 35 36 0d 0a 63 72 6f 73 73 20 3d 20 73 70 69 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 .256..cross.=.spi.imread('../dat
2120 61 2f 63 72 6f 73 73 2e 70 6e 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 a/cross.png').astype(np.float64)
2140 5b 3a 2c 20 3a 2c 20 32 5d 20 2f 20 32 35 36 0d 0a 74 72 69 61 6e 67 6c 65 20 3d 20 73 70 69 2e [:,.:,.2]./.256..triangle.=.spi.
2160 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 74 72 69 61 6e 67 6c 65 2e 70 6e 67 27 29 2e 61 imread('../data/triangle.png').a
2180 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
21a0 0d 0a 73 74 61 72 20 3d 20 73 70 69 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 73 74 61 ..star.=.spi.imread('../data/sta
21c0 72 2e 70 6e 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 5b 3a 2c 20 3a 2c r.png').astype(np.float64)[:,.:,
21e0 20 32 5d 20 2f 20 32 35 36 0d 0a 0d 0a 73 68 61 70 65 73 20 3d 20 5b 73 71 75 61 72 65 2c 20 63 .2]./.256....shapes.=.[square,.c
2200 72 6f 73 73 2c 20 74 72 69 61 6e 67 6c 65 2c 20 73 74 61 72 5d 0d 0a 0d 0a 53 20 3d 20 34 0d 0a ross,.triangle,.star]....S.=.4..
2220 78 73 20 3d 20 5b 5b 5d 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 53 29 5d 0d 0a 0d 0a 0d xs.=.[[].for.i.in.range(S)].....
2240 0a 66 6f 72 20 6e 62 20 69 6e 20 72 61 6e 67 65 28 34 29 3a 0d 0a 20 20 20 20 66 6f 72 20 69 20 .for.nb.in.range(4):......for.i.
2260 69 6e 20 72 61 6e 67 65 28 38 29 3a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 20 6a 20 69 6e 20 72 in.range(8):..........for.j.in.r
2280 61 6e 67 65 28 38 29 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 73 68 61 70 65 73 5b ange(8):..............if.shapes[
22a0 6e 62 5d 5b 69 2c 20 6a 5d 20 3c 20 30 2e 39 35 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 nb][i,.j].<.0.95:...............
22c0 20 20 20 78 73 5b 6e 62 5d 2e 61 70 70 65 6e 64 28 5b 6a 2c 20 38 20 2d 20 69 5d 29 0d 0a 0d 0a ...xs[nb].append([j,.8.-.i])....
22e0 78 73 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 6e 70 2e 61 72 72 61 79 28 78 73 5b 30 5d 29 2c 20 xs.=.np.array([np.array(xs[0]),.
2300 6e 70 2e 61 72 72 61 79 28 78 73 5b 31 5d 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 np.array(xs[1]),................
2320 20 6e 70 2e 61 72 72 61 79 28 78 73 5b 32 5d 29 2c 20 6e 70 2e 61 72 72 61 79 28 78 73 5b 33 5d .np.array(xs[2]),.np.array(xs[3]
2340 29 5d 29 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 )])....#########################
2360 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
2380 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 23 20 42 61 72 79 63 65 6e #####################..#.Barycen
23a0 74 65 72 20 63 6f 6d 70 75 74 61 74 69 6f 6e 0d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ter.computation..#.-------------
23c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 0d 0a 6e 73 20 3d 20 5b 6c 65 6e 28 78 73 5b 73 5d 29 20 ---------......ns.=.[len(xs[s]).
23e0 66 6f 72 20 73 20 69 6e 20 72 61 6e 67 65 28 53 29 5d 0d 0a 6e 5f 73 61 6d 70 6c 65 73 20 3d 20 for.s.in.range(S)]..n_samples.=.
2400 33 30 0d 0a 0d 0a 22 22 22 43 6f 6d 70 75 74 65 20 61 6c 6c 20 64 69 73 74 61 6e 63 65 73 20 6d 30...."""Compute.all.distances.m
2420 61 74 72 69 63 65 73 20 66 6f 72 20 74 68 65 20 66 6f 75 72 20 73 68 61 70 65 73 22 22 22 0d 0a atrices.for.the.four.shapes"""..
2440 43 73 20 3d 20 5b 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 Cs.=.[sp.spatial.distance.cdist(
2460 78 73 5b 73 5d 2c 20 78 73 5b 73 5d 29 20 66 6f 72 20 73 20 69 6e 20 72 61 6e 67 65 28 53 29 5d xs[s],.xs[s]).for.s.in.range(S)]
2480 0d 0a 43 73 20 3d 20 5b 63 73 20 2f 20 63 73 2e 6d 61 78 28 29 20 66 6f 72 20 63 73 20 69 6e 20 ..Cs.=.[cs./.cs.max().for.cs.in.
24a0 43 73 5d 0d 0a 0d 0a 70 73 20 3d 20 5b 6f 74 2e 75 6e 69 66 28 6e 73 5b 73 5d 29 20 66 6f 72 20 Cs]....ps.=.[ot.unif(ns[s]).for.
24c0 73 20 69 6e 20 72 61 6e 67 65 28 53 29 5d 0d 0a 70 20 3d 20 6f 74 2e 75 6e 69 66 28 6e 5f 73 61 s.in.range(S)]..p.=.ot.unif(n_sa
24e0 6d 70 6c 65 73 29 0d 0a 0d 0a 0d 0a 6c 61 6d 62 64 61 73 74 20 3d 20 5b 5b 66 6c 6f 61 74 28 69 mples)......lambdast.=.[[float(i
2500 29 20 2f 20 33 2c 20 66 6c 6f 61 74 28 33 20 2d 20 69 29 20 2f 20 33 5d 20 66 6f 72 20 69 20 69 )./.3,.float(3.-.i)./.3].for.i.i
2520 6e 20 5b 31 2c 20 32 5d 5d 0d 0a 0d 0a 43 74 30 31 20 3d 20 5b 30 20 66 6f 72 20 69 20 69 6e 20 n.[1,.2]]....Ct01.=.[0.for.i.in.
2540 72 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 range(2)]..for.i.in.range(2):...
2560 20 20 20 43 74 30 31 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 ...Ct01[i].=.ot.gromov.gromov_ba
2580 72 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 rycenters(n_samples,.[Cs[0],.Cs[
25a0 31 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 1]],............................
25c0 20 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 31 5d 0d 0a .................[ps[0],.ps[1]..
25e0 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 ................................
2600 20 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 ............],.p,.lambdast[i],.'
2620 73 71 75 61 72 65 5f 6c 6f 73 73 27 2c 20 20 23 20 35 65 2d 34 2c 0d 0a 20 20 20 20 20 20 20 20 square_loss',..#.5e-4,..........
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 6d 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 ...max_iter=100,.tol=1e-3)....Ct
2680 30 32 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 02.=.[0.for.i.in.range(2)]..for.
26a0 69 20 69 6e 20 72 61 6e 67 65 28 32 29 3a 0d 0a 20 20 20 20 43 74 30 32 5b 69 5d 20 3d 20 6f 74 i.in.range(2):......Ct02[i].=.ot
26c0 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
26e0 70 6c 65 73 2c 20 5b 43 73 5b 30 5d 2c 20 43 73 5b 32 5d 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 ples,.[Cs[0],.Cs[2]],...........
2700 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 ................................
2720 20 20 5b 70 73 5b 30 5d 2c 20 70 73 5b 32 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..[ps[0],.ps[2].................
2740 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 .............................],.
2760 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 20 p,.lambdast[i],.'square_loss',..
2780 23 20 35 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 #.5e-4,.........................
27a0 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 74 65 72 3d 31 30 30 ....................max_iter=100
27c0 2c 20 74 6f 6c 3d 31 65 2d 33 29 0d 0a 0d 0a 43 74 31 33 20 3d 20 5b 30 20 66 6f 72 20 69 20 69 ,.tol=1e-3)....Ct13.=.[0.for.i.i
27e0 6e 20 72 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 n.range(2)]..for.i.in.range(2):.
2800 0a 20 20 20 20 43 74 31 33 5b 69 5d 20 3d 20 6f 74 2e 67 72 6f 6d 6f 76 2e 67 72 6f 6d 6f 76 5f .....Ct13[i].=.ot.gromov.gromov_
2820 62 61 72 79 63 65 6e 74 65 72 73 28 6e 5f 73 61 6d 70 6c 65 73 2c 20 5b 43 73 5b 31 5d 2c 20 43 barycenters(n_samples,.[Cs[1],.C
2840 73 5b 33 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 s[3]],..........................
2860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 70 73 5b 31 5d 2c 20 70 73 5b 33 5d ...................[ps[1],.ps[3]
2880 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 ................................
28a0 20 20 20 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 ..............],.p,.lambdast[i],
28c0 20 27 73 71 75 61 72 65 5f 6c 6f 73 73 27 2c 20 20 23 20 35 65 2d 34 2c 0d 0a 20 20 20 20 20 20 .'square_loss',..#.5e-4,........
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 6d 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 .....max_iter=100,.tol=1e-3)....
2920 43 74 32 33 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 Ct23.=.[0.for.i.in.range(2)]..fo
2940 72 20 69 20 69 6e 20 72 61 6e 67 65 28 32 29 3a 0d 0a 20 20 20 20 43 74 32 33 5b 69 5d 20 3d 20 r.i.in.range(2):......Ct23[i].=.
2960 6f 74 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 ot.gromov.gromov_barycenters(n_s
2980 61 6d 70 6c 65 73 2c 20 5b 43 73 5b 32 5d 2c 20 43 73 5b 33 5d 5d 2c 0d 0a 20 20 20 20 20 20 20 amples,.[Cs[2],.Cs[3]],.........
29a0 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 ................................
29c0 20 20 20 20 5b 70 73 5b 32 5d 2c 20 70 73 5b 33 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ....[ps[2],.ps[3]...............
29e0 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 5d ...............................]
2a00 2c 20 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 ,.p,.lambdast[i],.'square_loss',
2a20 20 20 23 20 35 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 ..#.5e-4,.......................
2a40 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 74 65 72 3d 31 ......................max_iter=1
2a60 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 23 23 23 23 23 00,.tol=1e-3)......#############
2a80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
2aa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
2ac0 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 2d 2d 2d 2d 2d #..#.Visualization..#.----------
2ae0 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 67 65 74 74 69 ---..#..#.The.PCA.helps.in.getti
2b00 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 72 6f 74 61 74 ng.consistency.between.the.rotat
2b20 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 6e 65 6e 74 73 ions......clf.=.PCA(n_components
2b40 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 70 6f 73 20 3d =2)..npos.=.[0,.0,.0,.0]..npos.=
2b60 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 73 20 69 6e 20 .[smacof_mds(Cs[s],.2).for.s.in.
2b80 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 30 5d 0d 0a 6e range(S)]....npost01.=.[0,.0]..n
2ba0 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 5d 2c 20 32 29 post01.=.[smacof_mds(Ct01[s],.2)
2bc0 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 31 20 3d 20 5b .for.s.in.range(2)]..npost01.=.[
2be0 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 5d 29 20 66 6f clf.fit_transform(npost01[s]).fo
2c00 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 20 3d 20 5b 30 r.s.in.range(2)]....npost02.=.[0
2c20 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 28 43 74 30 32 ,.0]..npost02.=.[smacof_mds(Ct02
2c40 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 0a 6e 70 6f 73 [s],.2).for.s.in.range(2)]..npos
2c60 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 6f 73 74 30 32 t02.=.[clf.fit_transform(npost02
2c80 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 6e 70 6f 73 74 [s]).for.s.in.range(2)]....npost
2ca0 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 63 6f 66 5f 6d 13.=.[0,.0]..npost13.=.[smacof_m
2cc0 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 67 65 28 32 29 ds(Ct13[s],.2).for.s.in.range(2)
2ce0 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 66 6f 72 6d 28 ]..npost13.=.[clf.fit_transform(
2d00 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 32 29 5d 0d 0a npost13[s]).for.s.in.range(2)]..
2d20 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 20 3d 20 5b 73 ..npost23.=.[0,.0]..npost23.=.[s
2d40 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 20 69 6e 20 72 macof_mds(Ct23[s],.2).for.s.in.r
2d60 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 74 5f 74 72 61 ange(2)]..npost23.=.[clf.fit_tra
2d80 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 20 72 61 6e 67 nsform(npost23[s]).for.s.in.rang
2da0 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 66 69 67 73 69 e(2)]......fig.=.pl.figure(figsi
2dc0 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 62 70 6c 6f 74 ze=(10,.10))....ax1.=.pl.subplot
2de0 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 6c 69 6d 28 28 2grid((4,.4),.(0,.0))..pl.xlim((
2e00 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 31 2e 73 -1,.1))..pl.ylim((-1,.1))..ax1.s
2e20 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 30 5d 5b 3a 2c catter(npos[0][:,.0],.npos[0][:,
2e40 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 2e 73 75 62 70 .1],.color='r')....ax2.=.pl.subp
2e60 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 6c 2e 78 6c 69 lot2grid((4,.4),.(0,.1))..pl.xli
2e80 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 61 78 m((-1,.1))..pl.ylim((-1,.1))..ax
2ea0 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 20 6e 70 6f 73 2.scatter(npost01[1][:,.0],.npos
2ec0 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 0a 61 78 33 20 t01[1][:,.1],.color='b')....ax3.
2ee0 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 30 2c 20 32 29 =.pl.subplot2grid((4,.4),.(0,.2)
2f00 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 28 2d 31 )..pl.xlim((-1,.1))..pl.ylim((-1
2f20 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 30 5d 5b 3a 2c ,.1))..ax3.scatter(npost01[0][:,
2f40 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 72 3d 27 62 27 .0],.npost01[0][:,.1],.color='b'
2f60 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 28 34 2c 20 34 )....ax4.=.pl.subplot2grid((4,.4
2f80 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 29 0d 0a 70 6c ),.(0,.3))..pl.xlim((-1,.1))..pl
2fa0 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 28 6e 70 6f 73 .ylim((-1,.1))..ax4.scatter(npos
2fc0 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 6f 6c 6f 72 3d [1][:,.0],.npos[1][:,.1],.color=
2fe0 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 69 64 28 28 34 'r')....ax5.=.pl.subplot2grid((4
3000 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 20 31 29 29 0d ,.4),.(1,.0))..pl.xlim((-1,.1)).
3020 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 74 65 72 28 6e .pl.ylim((-1,.1))..ax5.scatter(n
3040 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 5b 3a 2c 20 31 post02[1][:,.0],.npost02[1][:,.1
3060 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 75 62 70 6c 6f ],.color='b')....ax6.=.pl.subplo
3080 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 78 6c 69 6d 28 t2grid((4,.4),.(1,.3))..pl.xlim(
30a0 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 36 2e (-1,.1))..pl.ylim((-1,.1))..ax6.
30c0 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 70 6f 73 74 31 scatter(npost13[1][:,.0],.npost1
30e0 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 78 37 20 3d 20 3[1][:,.1],.color='b')....ax7.=.
3100 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 20 30 29 29 0d pl.subplot2grid((4,.4),.(2,.0)).
3120 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 28 2d 31 2c 20 .pl.xlim((-1,.1))..pl.ylim((-1,.
3140 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 5b 3a 2c 20 30 1))..ax7.scatter(npost02[0][:,.0
3160 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 27 62 27 29 0d ],.npost02[0][:,.1],.color='b').
3180 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 2c 20 34 29 2c ...ax8.=.pl.subplot2grid((4,.4),
31a0 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 0a 70 6c 2e 79 .(2,.3))..pl.xlim((-1,.1))..pl.y
31c0 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 70 6f 73 74 31 lim((-1,.1))..ax8.scatter(npost1
31e0 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 5d 2c 20 63 6f 3[0][:,.0],.npost13[0][:,.1],.co
3200 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 74 32 67 72 69 lor='b')....ax9.=.pl.subplot2gri
3220 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 28 2d 31 2c 20 d((4,.4),.(3,.0))..pl.xlim((-1,.
3240 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 73 63 61 74 74 1))..pl.ylim((-1,.1))..ax9.scatt
3260 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 2c 20 31 5d 2c er(npos[2][:,.0],.npos[2][:,.1],
3280 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 62 70 6c 6f 74 .color='r')....ax10.=.pl.subplot
32a0 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 6c 69 6d 28 28 2grid((4,.4),.(3,.1))..pl.xlim((
32c0 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 31 30 2e -1,.1))..pl.ylim((-1,.1))..ax10.
32e0 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 70 6f 73 74 32 scatter(npost23[1][:,.0],.npost2
3300 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 78 31 31 20 3d 3[1][:,.1],.color='b')....ax11.=
3320 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 2c 20 32 29 29 .pl.subplot2grid((4,.4),.(3,.2))
3340 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 28 2d 31 2c ..pl.xlim((-1,.1))..pl.ylim((-1,
3360 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 30 5d 5b 3a 2c .1))..ax11.scatter(npost23[0][:,
3380 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 72 3d 27 62 27 .0],.npost23[0][:,.1],.color='b'
33a0 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 28 28 34 2c 20 )....ax12.=.pl.subplot2grid((4,.
33c0 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 29 29 0d 0a 70 4),.(3,.3))..pl.xlim((-1,.1))..p
33e0 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 65 72 28 6e 70 l.ylim((-1,.1))..ax12.scatter(np
3400 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 20 63 6f 6c 6f os[3][:,.0],.npos[3][:,.1],.colo
3420 72 3d 27 72 27 29 0d 0a 50 4b 03 04 14 00 00 00 00 00 b3 5c 6f 4e b8 cd f6 1b 7e 0b 00 00 7e 0b r='r')..PK.........\oN....~...~.
3440 00 00 13 00 00 00 70 6c 6f 74 5f 6f 70 74 69 6d 5f 4f 54 72 65 67 2e 70 79 23 20 2d 2a 2d 20 63 ......plot_optim_OTreg.py#.-*-.c
3460 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.-*-.""".===========
3480 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 65 67 75 6c 61 72 69 =======================.Regulari
34a0 7a 65 64 20 4f 54 20 77 69 74 68 20 67 65 6e 65 72 69 63 20 73 6f 6c 76 65 72 0a 3d 3d 3d 3d 3d zed.OT.with.generic.solver.=====
34c0 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 49 =============================..I
34e0 6c 6c 75 73 74 72 61 74 65 73 20 74 68 65 20 75 73 65 20 6f 66 20 74 68 65 20 67 65 6e 65 72 69 llustrates.the.use.of.the.generi
3500 63 20 73 6f 6c 76 65 72 20 66 6f 72 20 72 65 67 75 6c 61 72 69 7a 65 64 20 4f 54 20 77 69 74 68 c.solver.for.regularized.OT.with
3520 0a 75 73 65 72 2d 64 65 73 69 67 6e 65 64 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 20 74 65 .user-designed.regularization.te
3540 72 6d 2e 20 49 74 20 75 73 65 73 20 43 6f 6e 64 69 74 69 6f 6e 61 6c 20 67 72 61 64 69 65 6e 74 rm..It.uses.Conditional.gradient
3560 20 61 73 20 69 6e 20 5b 36 5d 20 61 6e 64 0a 67 65 6e 65 72 61 6c 69 7a 65 64 20 43 6f 6e 64 69 .as.in.[6].and.generalized.Condi
3580 74 69 6f 6e 61 6c 20 47 72 61 64 69 65 6e 74 20 61 73 20 70 72 6f 70 6f 73 65 64 20 69 6e 20 5b tional.Gradient.as.proposed.in.[
35a0 35 5d 5b 37 5d 2e 0a 0a 0a 5b 35 5d 20 4e 2e 20 43 6f 75 72 74 79 3b 20 52 2e 20 46 6c 61 6d 61 5][7]....[5].N..Courty;.R..Flama
35c0 72 79 3b 20 44 2e 20 54 75 69 61 3b 20 41 2e 20 52 61 6b 6f 74 6f 6d 61 6d 6f 6e 6a 79 2c 20 4f ry;.D..Tuia;.A..Rakotomamonjy,.O
35e0 70 74 69 6d 61 6c 20 54 72 61 6e 73 70 6f 72 74 20 66 6f 72 0a 44 6f 6d 61 69 6e 20 41 64 61 70 ptimal.Transport.for.Domain.Adap
3600 74 61 74 69 6f 6e 2c 20 69 6e 20 49 45 45 45 20 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 6f 6e 20 tation,.in.IEEE.Transactions.on.
3620 50 61 74 74 65 72 6e 20 41 6e 61 6c 79 73 69 73 20 61 6e 64 20 4d 61 63 68 69 6e 65 0a 49 6e 74 Pattern.Analysis.and.Machine.Int
3640 65 6c 6c 69 67 65 6e 63 65 20 2c 20 76 6f 6c 2e 50 50 2c 20 6e 6f 2e 39 39 2c 20 70 70 2e 31 2d elligence.,.vol.PP,.no.99,.pp.1-
3660 31 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 1...[6].Ferradans,.S.,.Papadakis
3680 2c 20 4e 2e 2c 20 50 65 79 72 c3 a9 2c 20 47 2e 2c 20 26 20 41 75 6a 6f 6c 2c 20 4a 2e 20 46 2e ,.N.,.Peyr..,.G.,.&.Aujol,.J..F.
36a0 20 28 32 30 31 34 29 2e 0a 52 65 67 75 6c 61 72 69 7a 65 64 20 64 69 73 63 72 65 74 65 20 6f 70 .(2014)..Regularized.discrete.op
36c0 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 20 6f 6e timal.transport..SIAM.Journal.on
36e0 20 49 6d 61 67 69 6e 67 20 53 63 69 65 6e 63 65 73 2c 0a 37 28 33 29 2c 20 31 38 35 33 2d 31 38 .Imaging.Sciences,.7(3),.1853-18
3700 38 32 2e 0a 0a 5b 37 5d 20 52 61 6b 6f 74 6f 6d 61 6d 6f 6e 6a 79 2c 20 41 2e 2c 20 46 6c 61 6d 82...[7].Rakotomamonjy,.A.,.Flam
3720 61 72 79 2c 20 52 2e 2c 20 26 20 43 6f 75 72 74 79 2c 20 4e 2e 20 28 32 30 31 35 29 2e 20 47 65 ary,.R.,.&.Courty,.N..(2015)..Ge
3740 6e 65 72 61 6c 69 7a 65 64 0a 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 67 72 61 64 69 65 6e 74 3a 20 neralized.conditional.gradient:.
3760 61 6e 61 6c 79 73 69 73 20 6f 66 20 63 6f 6e 76 65 72 67 65 6e 63 65 20 61 6e 64 20 61 70 70 6c analysis.of.convergence.and.appl
3780 69 63 61 74 69 6f 6e 73 2e 0a 61 72 58 69 76 20 70 72 65 70 72 69 6e 74 20 61 72 58 69 76 3a 31 ications..arXiv.preprint.arXiv:1
37a0 35 31 30 2e 30 36 35 36 37 2e 0a 0a 0a 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 510.06567....."""..import.numpy.
37c0 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 73 as.np.import.matplotlib.pylab.as
37e0 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 69 6d 70 6f 72 74 20 6f 74 2e 70 6c 6f 74 0a 0a 23 23 .pl.import.ot.import.ot.plot..##
3800 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
3820 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
3840 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 23 20 2d ############.#.Generate.data.#.-
3860 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 73 0a 0a 6e 20 ------------..#%%.parameters..n.
3880 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 69 74 69 6f 6e =.100..#.nb.bins..#.bin.position
38a0 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 2e 66 6c 6f 61 s.x.=.np.arange(n,.dtype=np.floa
38c0 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 6f 6e 73 0a 61 t64)..#.Gaussian.distributions.a
38e0 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 31 44 5f 67 61 75 73 73 28 6e 2c 20 .=.ot.datasets.make_1D_gauss(n,.
3900 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 64 0a 62 20 m=20,.s=5)..#.m=.mean,.s=.std.b.
3920 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 31 44 5f 67 61 75 73 73 28 6e 2c 20 6d =.ot.datasets.make_1D_gauss(n,.m
3940 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 20 6f 74 =60,.s=10)..#.loss.matrix.M.=.ot
3960 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 73 68 61 .dist(x.reshape((n,.1)),.x.resha
3980 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 23 23 23 pe((n,.1))).M./=.M.max()..######
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 23 23 23 ################################
39c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
39e0 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 2d 2d 2d ########.#.Solve.EMD.#.---------
3a00 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).
3a20 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
3a40 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
3a60 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')..####################
3a80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
3aa0 23 23 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
3ac0 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 67 75 6c ve.EMD.with.Frobenius.norm.regul
3ae0 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 2d 2d 2d arization.#.--------------------
3b00 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 45 78 ------------------------..#%%.Ex
3b20 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 75 6c 61 ample.with.Frobenius.norm.regula
3b40 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 72 6e 20 rization...def.f(G):.....return.
3b60 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 29 3a 0a 0.5.*.np.sum(G**2)...def.df(G):.
3b80 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 32 20 3d ....return.G...reg.=.1e-1..Gl2.=
3ba0 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 20 64 66 .ot.optim.cg(a,.b,.M,.reg,.f,.df
3bc0 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 0a 6f 74 ,.verbose=True)..pl.figure(3).ot
3be0 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 4f 54 20 .plot.plot1D_mat(a,.b,.Gl2,.'OT.
3c00 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 23 23 23 matrix.Frob..reg')..############
3c20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
3c40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
3c60 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 72 65 67 ##.#.Solve.EMD.with.entropic.reg
3c80 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 2d ularization.#.------------------
3ca0 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 6d 70 6c --------------------..#%%.Exampl
3cc0 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 6e 0a 0a e.with.entropic.regularization..
3ce0 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 47 20 2a .def.f(G):.....return.np.sum(G.*
3d00 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 72 65 74 .np.log(G))...def.df(G):.....ret
3d20 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 2d 33 0a urn.np.log(G).+.1....reg.=.1e-3.
3d40 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 67 2c 20 .Ge.=.ot.optim.cg(a,.b,.M,.reg,.
3d60 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 72 65 28 f,.df,.verbose=True)..pl.figure(
3d80 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 6f 74 31 4,.figsize=(5,.5)).ot.plot.plot1
3da0 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 74 72 6f D_mat(a,.b,.Ge,.'OT.matrix.Entro
3dc0 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 23 23 23 p..reg')..######################
3de0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
3e00 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 76 65 ########################.#.Solve
3e20 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 74 72 6f .EMD.with.Frobenius.norm.+.entro
3e40 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 2d 2d 2d pic.regularization.#.-----------
3e60 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 --------------------------------
3e80 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 68 20 46 ------------..#%%.Example.with.F
3ea0 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 6c 61 72 robenius.norm.+.entropic.regular
3ec0 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 20 20 20 ization.with.gcg...def.f(G):....
3ee0 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 64 65 66 .return.0.5.*.np.sum(G**2)...def
3f00 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 20 31 65 .df(G):.....return.G...reg1.=.1e
3f20 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 69 6d 2e -3.reg2.=.1e-1..Gel2.=.ot.optim.
3f40 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 66 2c 20 gcg(a,.b,.M,.reg1,.reg2,.f,.df,.
3f60 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 69 67 73 verbose=True)..pl.figure(5,.figs
3f80 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 74 28 61 ize=(5,.5)).ot.plot.plot1D_mat(a
3fa0 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 72 69 78 ,.b,.Gel2,.'OT.entropic.+.matrix
3fc0 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 00 00 00 .Frob..reg').pl.show().PK.......
3fe0 00 a6 5d 6f 4e 39 06 7c 60 0c 15 00 00 0c 15 00 00 0f 00 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 64 ..]oN9.|`............plot_otda_d
4000 32 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 22 0a 2.py#.-*-.coding:.utf-8.-*-.""".
4020 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 ================================
4040 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 69 ===================.OT.for.domai
4060 6e 20 61 64 61 70 74 61 74 69 6f 6e 20 6f 6e 20 65 6d 70 69 72 69 63 61 6c 20 64 69 73 74 72 69 n.adaptation.on.empirical.distri
4080 62 75 74 69 6f 6e 73 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 butions.========================
40a0 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
40c0 73 20 65 78 61 6d 70 6c 65 20 69 6e 74 72 6f 64 75 63 65 73 20 61 20 64 6f 6d 61 69 6e 20 61 64 s.example.introduces.a.domain.ad
40e0 61 70 74 61 74 69 6f 6e 20 69 6e 20 61 20 32 44 20 73 65 74 74 69 6e 67 2e 20 49 74 20 65 78 70 aptation.in.a.2D.setting..It.exp
4100 6c 69 63 69 74 73 0a 74 68 65 20 70 72 6f 62 6c 65 6d 20 6f 66 20 64 6f 6d 61 69 6e 20 61 64 61 licits.the.problem.of.domain.ada
4120 70 74 61 74 69 6f 6e 20 61 6e 64 20 69 6e 74 72 6f 64 75 63 65 73 20 73 6f 6d 65 20 6f 70 74 69 ptation.and.introduces.some.opti
4140 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 0a 61 70 70 72 6f 61 63 68 65 73 20 74 6f 20 73 6f 6c 76 mal.transport.approaches.to.solv
4160 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
4180 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
41a0 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
41c0 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
41e0 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
4200 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
4220 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
4240 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>.#......
4260 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
4280 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.
42a0 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
42c0 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 69 6d 70 6f 72 74 20 6f 74 2e 70 6c 6f 74 0a .as.pl.import.ot.import.ot.plot.
42e0 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 .###############################
4300 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
4320 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 74 61 0a ###############.#.generate.data.
4340 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 75 72 63 #.-------------..n_samples_sourc
4360 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 30 0a 0a e.=.150.n_samples_target.=.150..
4380 58 73 2c 20 79 73 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 61 5f 63 Xs,.ys.=.ot.datasets.make_data_c
43a0 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 72 63 lassif('3gauss',.n_samples_sourc
43c0 65 29 0a 58 74 2c 20 79 74 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 e).Xt,.yt.=.ot.datasets.make_dat
43e0 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 74 a_classif('3gauss2',.n_samples_t
4400 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 73 arget)..#.Cost.matrix.M.=.ot.dis
4420 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 0a t(Xs,.Xt,.metric='sqeuclidean').
4440 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 ..##############################
4460 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
4480 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
44a0 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
44c0 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.#.---------------
44e0 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 --------------------------------
4500 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 74 ------------..#.EMD.Transport.ot
4520 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 65 _emd.=.ot.da.EMDTransport().ot_e
4540 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 6e md.fit(Xs=Xs,.Xt=Xt)..#.Sinkhorn
4560 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 53 .Transport.ot_sinkhorn.=.ot.da.S
4580 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 5f inkhornTransport(reg_e=1e-1).ot_
45a0 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 69 sinkhorn.fit(Xs=Xs,.Xt=Xt)..#.Si
45c0 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 73 nkhorn.Transport.with.Group.lass
45e0 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 61 o.regularization.ot_lpl1.=.ot.da
4600 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 2d .SinkhornLpl1Transport(reg_e=1e-
4620 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 73 1,.reg_cl=1e0).ot_lpl1.fit(Xs=Xs
4640 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 75 ,.ys=ys,.Xt=Xt)..#.transport.sou
4660 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 0a rce.samples.onto.target.samples.
4680 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 6d transp_Xs_emd.=.ot_emd.transform
46a0 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 5f (Xs=Xs).transp_Xs_sinkhorn.=.ot_
46c0 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 70 sinkhorn.transform(Xs=Xs).transp
46e0 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 3d _Xs_lpl1.=.ot_lpl1.transform(Xs=
4700 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 23 Xs)...##########################
4720 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
4740 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 70 ####################.#.Fig.1.:.p
4760 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 2b lots.source.and.target.samples.+
4780 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 2d .matrix.of.pairwise.distance.#.-
47a0 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 --------------------------------
47c0 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 --------------------------------
47e0 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 20 ----..pl.figure(1,.figsize=(10,.
4800 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 74 10)).pl.subplot(2,.2,.1).pl.scat
4820 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 61 ter(Xs[:,.0],.Xs[:,.1],.c=ys,.ma
4840 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 27 rker='+',.label='Source.samples'
4860 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
4880 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 20 .legend(loc=0).pl.title('Source.
48a0 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 0a .samples')..pl.subplot(2,.2,.2).
48c0 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
48e0 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 73 =yt,.marker='o',.label='Target.s
4900 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 73 amples').pl.xticks([]).pl.yticks
4920 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 27 ([]).pl.legend(loc=0).pl.title('
4940 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 20 Target.samples')..pl.subplot(2,.
4960 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 6e 2,.3).pl.imshow(M,.interpolation
4980 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 69 ='nearest').pl.xticks([]).pl.yti
49a0 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 72 cks([]).pl.title('Matrix.of.pair
49c0 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 74 wise.distances').pl.tight_layout
49e0 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 23 ()...###########################
4a00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
4a20 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 6c ###################.#.Fig.2.:.pl
4a40 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 69 ots.optimal.couplings.for.the.di
4a60 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 2d fferent.methods.#.--------------
4a80 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 --------------------------------
4aa0 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 65 -----------.pl.figure(2,.figsize
4ac0 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 70 =(10,.6))..pl.subplot(2,.3,.1).p
4ae0 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 72 l.imshow(ot_emd.coupling_,.inter
4b00 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 5d polation='nearest').pl.xticks([]
4b20 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 61 ).pl.yticks([]).pl.title('Optima
4b40 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 73 l.coupling\nEMDTransport')..pl.s
4b60 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 6e ubplot(2,.3,.2).pl.imshow(ot_sin
4b80 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 27 khorn.coupling_,.interpolation='
4ba0 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
4bc0 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 67 s([]).pl.title('Optimal.coupling
4be0 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 6f \nSinkhornTransport')..pl.subplo
4c00 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 75 t(2,.3,.3).pl.imshow(ot_lpl1.cou
4c20 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 29 pling_,.interpolation='nearest')
4c40 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 2e .pl.xticks([]).pl.yticks([]).pl.
4c60 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 72 title('Optimal.coupling\nSinkhor
4c80 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 20 nLpl1Transport')..pl.subplot(2,.
4ca0 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 74 3,.4).ot.plot.plot2D_samples_mat
4cc0 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 35 (Xs,.Xt,.ot_emd.coupling_,.c=[.5
4ce0 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 58 ,..5,.1]).pl.scatter(Xs[:,.0],.X
4d00 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 6c s[:,.1],.c=ys,.marker='+',.label
4d20 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 74 ='Source.samples').pl.scatter(Xt
4d40 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='
4d60 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 78 o',.label='Target.samples').pl.x
4d80 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 65 ticks([]).pl.yticks([]).pl.title
4da0 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 4d ('Main.coupling.coefficients\nEM
4dc0 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 35 DTransport')..pl.subplot(2,.3,.5
4de0 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 2c ).ot.plot.plot2D_samples_mat(Xs,
4e00 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 2e .Xt,.ot_sinkhorn.coupling_,.c=[.
4e20 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],.
4e40 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
4e60 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
4e80 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=
4ea0 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.
4ec0 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
4ee0 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 53 e('Main.coupling.coefficients\nS
4f00 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 32 inkhornTransport')..pl.subplot(2
4f20 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 6d ,.3,.6).ot.plot.plot2D_samples_m
4f40 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 3d at(Xs,.Xt,.ot_lpl1.coupling_,.c=
4f60 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 5d [.5,..5,.1]).pl.scatter(Xs[:,.0]
4f80 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 61 ,.Xs[:,.1],.c=ys,.marker='+',.la
4fa0 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 72 bel='Source.samples').pl.scatter
4fc0 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
4fe0 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
5000 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 69 l.xticks([]).pl.yticks([]).pl.ti
5020 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 5c tle('Main.coupling.coefficients\
5040 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 68 nSinkhornLpl1Transport').pl.tigh
5060 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 23 t_layout()...###################
5080 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
50a0 23 23 23 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 69 ###########################.#.Fi
50c0 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 23 g.3.:.plot.transported.samples.#
50e0 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 2d .-------------------------------
5100 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 73 -..#.display.transported.samples
5120 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 70 .pl.figure(4,.figsize=(10,.4)).p
5140 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 74 l.subplot(1,.3,.1).pl.scatter(Xt
5160 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='
5180 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
51a0 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
51c0 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 5b nsp_Xs_emd[:,.0],.transp_Xs_emd[
51e0 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='
5200 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
5220 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 5c ).pl.title('Transported.samples\
5240 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 29 nEmdTransport').pl.legend(loc=0)
5260 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
5280 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 5b .subplot(1,.3,.2).pl.scatter(Xt[
52a0 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
52c0 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
52e0 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 6e les',.alpha=0.5).pl.scatter(tran
5300 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 5f sp_Xs_sinkhorn[:,.0],.transp_Xs_
5320 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 20 sinkhorn[:,.1],.c=ys,...........
5340 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 6c .marker='+',.label='Transp.sampl
5360 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 64 es',.s=30).pl.title('Transported
5380 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 6c .samples\nSinkhornTransport').pl
53a0 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 75 .xticks([]).pl.yticks([])..pl.su
53c0 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 20 bplot(1,.3,.3).pl.scatter(Xt[:,.
53e0 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',.
5400 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
5420 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 5f ',.alpha=0.5).pl.scatter(transp_
5440 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 2c Xs_lpl1[:,.0],.transp_Xs_lpl1[:,
5460 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 27 .1],.c=ys,............marker='+'
5480 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 0a ,.label='Transp.samples',.s=30).
54a0 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 53 pl.title('Transported.samples\nS
54c0 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 73 inkhornLpl1Transport').pl.xticks
54e0 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 79 ([]).pl.yticks([])..pl.tight_lay
5500 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 a6 5d 6f 4e 71 12 out().pl.show().PK.........]oNq.
5520 0d cb 23 12 00 00 23 12 00 00 1c 00 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 73 65 6d 69 5f 73 75 70 ..#...#.......plot_otda_semi_sup
5540 65 72 76 69 73 65 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 ervised.py#.-*-.coding:.utf-8.-*
5560 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 3d -.""".==========================
5580 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4f 54 44 41 20 75 6e 73 75 70 65 72 76 ==================.OTDA.unsuperv
55a0 69 73 65 64 20 76 73 20 73 65 6d 69 2d 73 75 70 65 72 76 69 73 65 64 20 73 65 74 74 69 6e 67 0a ised.vs.semi-supervised.setting.
55c0 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 ================================
55e0 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
5600 64 75 63 65 73 20 61 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 duces.a.semi.supervised.domain.a
5620 64 61 70 74 61 74 69 6f 6e 20 69 6e 20 61 20 32 44 20 73 65 74 74 69 6e 67 2e 0a 49 74 20 65 78 daptation.in.a.2D.setting..It.ex
5640 70 6c 69 63 69 74 73 20 74 68 65 20 70 72 6f 62 6c 65 6d 20 6f 66 20 73 65 6d 69 20 73 75 70 65 plicits.the.problem.of.semi.supe
5660 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 61 6e 64 20 69 6e 74 rvised.domain.adaptation.and.int
5680 72 6f 64 75 63 65 73 0a 73 6f 6d 65 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 20 61 roduces.some.optimal.transport.a
56a0 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
56c0 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
56e0 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.
5700 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
5720 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
5740 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
5760 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
5780 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@
57a0 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
57c0 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>.
57e0 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
5800 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
5820 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...############################
5840 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
5860 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
5880 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
58a0 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
58c0 30 0a 0a 58 73 2c 20 79 73 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 0..Xs,.ys.=.ot.datasets.make_dat
58e0 61 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 a_classif('3gauss',.n_samples_so
5900 75 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 6d 61 6b 65 5f urce).Xt,.yt.=.ot.datasets.make_
5920 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 73 61 6d 70 6c 65 data_classif('3gauss2',.n_sample
5940 73 5f 74 61 72 67 65 74 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 s_target)...####################
5960 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
5980 23 23 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 54 72 61 ##########################.#.Tra
59a0 6e 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 nsport.source.samples.onto.targe
59c0 74 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 t.samples.#.--------------------
59e0 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 0a 23 20 75 6e 73 ------------------------...#.uns
5a00 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
5a20 69 6e 6b 68 6f 72 6e 5f 75 6e 20 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 inkhorn_un.=.ot.da.SinkhornTrans
5a40 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 75 6e 2e port(reg_e=1e-1).ot_sinkhorn_un.
5a60 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b fit(Xs=Xs,.Xt=Xt).transp_Xs_sink
5a80 68 6f 72 6e 5f 75 6e 20 3d 20 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f 75 6e 2e 74 72 61 6e 73 66 6f horn_un.=.ot_sinkhorn_un.transfo
5aa0 72 6d 28 58 73 3d 58 73 29 0a 0a 23 20 73 65 6d 69 2d 73 75 70 65 72 76 69 73 65 64 20 64 6f 6d rm(Xs=Xs)..#.semi-supervised.dom
5ac0 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f 73 65 6d 69 20 ain.adaptation.ot_sinkhorn_semi.
5ae0 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 65 67 5f 65 3d =.ot.da.SinkhornTransport(reg_e=
5b00 31 65 2d 31 29 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f 73 65 6d 69 2e 66 69 74 28 58 73 3d 58 73 1e-1).ot_sinkhorn_semi.fit(Xs=Xs
5b20 2c 20 58 74 3d 58 74 2c 20 79 73 3d 79 73 2c 20 79 74 3d 79 74 29 0a 74 72 61 6e 73 70 5f 58 73 ,.Xt=Xt,.ys=ys,.yt=yt).transp_Xs
5b40 5f 73 69 6e 6b 68 6f 72 6e 5f 73 65 6d 69 20 3d 20 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f 73 65 6d _sinkhorn_semi.=.ot_sinkhorn_sem
5b60 69 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 20 73 75 70 65 72 i.transform(Xs=Xs)..#.semi.super
5b80 76 69 73 65 64 20 44 41 20 75 73 65 73 20 61 76 61 69 6c 61 62 6c 65 20 6c 61 62 61 6c 65 64 20 vised.DA.uses.available.labaled.
5ba0 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 20 63 6f 73 target.samples.to.modify.the.cos
5bc0 74 0a 23 20 6d 61 74 72 69 78 20 69 6e 76 6f 6c 76 65 64 20 69 6e 20 74 68 65 20 4f 54 20 70 72 t.#.matrix.involved.in.the.OT.pr
5be0 6f 62 6c 65 6d 2e 20 54 68 65 20 63 6f 73 74 20 6f 66 20 74 72 61 6e 73 70 6f 72 74 69 6e 67 20 oblem..The.cost.of.transporting.
5c00 61 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 0a 23 20 6f 66 20 63 6c 61 73 73 20 41 20 6f 6e 74 a.source.sample.#.of.class.A.ont
5c20 6f 20 61 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 20 6f 66 20 63 6c 61 73 73 20 42 20 21 3d 20 o.a.target.sample.of.class.B.!=.
5c40 41 20 69 73 20 73 65 74 20 74 6f 20 69 6e 66 69 6e 69 74 65 2c 20 6f 72 20 61 0a 23 20 76 65 72 A.is.set.to.infinite,.or.a.#.ver
5c60 79 20 6c 61 72 67 65 20 76 61 6c 75 65 0a 0a 23 20 6e 6f 74 65 20 74 68 61 74 20 69 6e 20 74 68 y.large.value..#.note.that.in.th
5c80 65 20 70 72 65 73 65 6e 74 20 63 61 73 65 20 77 65 20 63 6f 6e 73 69 64 65 72 20 74 68 61 74 20 e.present.case.we.consider.that.
5ca0 61 6c 6c 20 74 68 65 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 20 61 72 65 0a 23 20 6c 61 62 all.the.target.samples.are.#.lab
5cc0 65 6c 65 64 2e 20 46 6f 72 20 64 61 69 6c 79 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 2c 20 73 6f eled..For.daily.applications,.so
5ce0 6d 65 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 20 6d 69 67 68 74 20 6e 6f 74 20 68 61 76 65 20 me.target.sample.might.not.have.
5d00 6c 61 62 65 6c 73 2c 0a 23 20 69 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20 65 6c 65 6d 65 labels,.#.in.this.case.the.eleme
5d20 6e 74 20 6f 66 20 79 74 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65 73 65 20 nt.of.yt.corresponding.to.these.
5d40 73 61 6d 70 6c 65 73 20 73 68 6f 75 6c 64 20 62 65 0a 23 20 66 69 6c 6c 65 64 20 77 69 74 68 20 samples.should.be.#.filled.with.
5d60 2d 31 2e 0a 0a 23 20 57 61 72 6e 69 6e 67 3a 20 77 65 20 72 65 63 61 6c 6c 20 74 68 61 74 20 2d -1...#.Warning:.we.recall.that.-
5d80 31 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 61 73 20 61 20 63 6c 61 73 73 20 6c 61 62 65 1.cannot.be.used.as.a.class.labe
5da0 6c 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 l...############################
5dc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
5de0 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 70 6c 6f ##################.#.Fig.1.:.plo
5e00 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 2b 20 6d ts.source.and.target.samples.+.m
5e20 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 2d 2d 2d atrix.of.pairwise.distance.#.---
5e40 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 --------------------------------
5e60 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 --------------------------------
5e80 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 20 31 30 --..pl.figure(1,.figsize=(10,.10
5ea0 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 74 74 65 )).pl.subplot(2,.2,.1).pl.scatte
5ec0 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 61 72 6b r(Xs[:,.0],.Xs[:,.1],.c=ys,.mark
5ee0 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 27 29 0a er='+',.label='Source.samples').
5f00 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 6c pl.xticks([]).pl.yticks([]).pl.l
5f20 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 20 20 73 egend(loc=0).pl.title('Source..s
5f40 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 0a 70 6c amples')..pl.subplot(2,.2,.2).pl
5f60 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 79 .scatter(Xt[:,.0],.Xt[:,.1],.c=y
5f80 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 73 61 6d t,.marker='o',.label='Target.sam
5fa0 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 73 28 5b ples').pl.xticks([]).pl.yticks([
5fc0 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 27 54 61 ]).pl.legend(loc=0).pl.title('Ta
5fe0 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 20 32 2c rget.samples')..pl.subplot(2,.2,
6000 20 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f 75 6e 2e 63 6f 73 .3).pl.imshow(ot_sinkhorn_un.cos
6020 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 70 6c 2e t_,.interpolation='nearest').pl.
6040 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
6060 65 28 27 43 6f 73 74 20 6d 61 74 72 69 78 20 2d 20 75 6e 73 75 70 65 72 76 69 73 65 64 20 44 41 e('Cost.matrix.-.unsupervised.DA
6080 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 34 29 0a 70 6c 2e 69 6d 73 68 6f ')..pl.subplot(2,.2,.4).pl.imsho
60a0 77 28 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f 73 65 6d 69 2e 63 6f 73 74 5f 2c 20 69 6e 74 65 72 70 w(ot_sinkhorn_semi.cost_,.interp
60c0 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 5d 29 olation='nearest').pl.xticks([])
60e0 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 43 6f 73 74 20 6d 61 .pl.yticks([]).pl.title('Cost.ma
6100 74 72 69 78 20 2d 20 73 65 6d 69 73 75 70 65 72 76 69 73 65 64 20 44 41 27 29 0a 0a 70 6c 2e 74 trix.-.semisupervised.DA')..pl.t
6120 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 23 20 74 68 65 20 6f 70 74 69 6d 61 6c 20 63 6f 75 ight_layout()..#.the.optimal.cou
6140 70 6c 69 6e 67 20 69 6e 20 74 68 65 20 73 65 6d 69 2d 73 75 70 65 72 76 69 73 65 64 20 44 41 20 pling.in.the.semi-supervised.DA.
6160 63 61 73 65 20 77 69 6c 6c 20 65 78 68 69 62 69 74 20 22 20 73 68 61 70 65 0a 23 20 73 69 6d 69 case.will.exhibit.".shape.#.simi
6180 6c 61 72 22 20 74 6f 20 74 68 65 20 63 6f 73 74 20 6d 61 74 72 69 78 2c 20 28 62 6c 6f 63 6b 20 lar".to.the.cost.matrix,.(block.
61a0 64 69 61 67 6f 6e 61 6c 20 6d 61 74 72 69 78 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 diagonal.matrix)...#############
61c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
61e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
6200 23 0a 23 20 46 69 67 20 32 20 3a 20 70 6c 6f 74 73 20 6f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 #.#.Fig.2.:.plots.optimal.coupli
6220 6e 67 73 20 66 6f 72 20 74 68 65 20 64 69 66 66 65 72 65 6e 74 20 6d 65 74 68 6f 64 73 0a 23 20 ngs.for.the.different.methods.#.
6240 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 --------------------------------
6260 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 66 69 -------------------------..pl.fi
6280 67 75 72 65 28 32 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 gure(2,.figsize=(8,.4))..pl.subp
62a0 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 73 69 6e 6b 68 6f lot(1,.2,.1).pl.imshow(ot_sinkho
62c0 72 6e 5f 75 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 27 rn_un.coupling_,.interpolation='
62e0 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
6300 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 67 s([]).pl.title('Optimal.coupling
6320 5c 6e 55 6e 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 \nUnsupervised.DA')..pl.subplot(
6340 31 2c 20 32 2c 20 32 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 1,.2,.2).pl.imshow(ot_sinkhorn_s
6360 65 6d 69 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 27 6e 65 emi.coupling_,.interpolation='ne
6380 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 73 28 arest').pl.xticks([]).pl.yticks(
63a0 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 67 5c 6e []).pl.title('Optimal.coupling\n
63c0 53 65 6d 69 2d 73 75 70 65 72 76 69 73 65 64 20 44 41 27 29 0a 0a 70 6c 2e 74 69 67 68 74 5f 6c Semi-supervised.DA')..pl.tight_l
63e0 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 23 23 23 23 ayout()...######################
6400 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
6420 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 69 67 20 33 ########################.#.Fig.3
6440 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 23 20 2d 2d .:.plot.transported.samples.#.--
6460 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 0a 0a ------------------------------..
6480 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 73 0a 70 6c #.display.transported.samples.pl
64a0 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 38 2c 20 34 29 29 0a 70 6c 2e 73 75 .figure(4,.figsize=(8,.4)).pl.su
64c0 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 74 5b 3a 2c 20 bplot(1,.2,.1).pl.scatter(Xt[:,.
64e0 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',.
6500 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
6520 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 5f ',.alpha=0.5).pl.scatter(transp_
6540 58 73 5f 73 69 6e 6b 68 6f 72 6e 5f 75 6e 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f Xs_sinkhorn_un[:,.0],.transp_Xs_
6560 73 69 6e 6b 68 6f 72 6e 5f 75 6e 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 sinkhorn_un[:,.1],.c=ys,........
6580 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
65a0 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
65c0 74 65 64 20 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 ted.samples\nEmdTransport').pl.l
65e0 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 egend(loc=0).pl.xticks([]).pl.yt
6600 69 63 6b 73 28 5b 5d 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 icks([])..pl.subplot(1,.2,.2).pl
6620 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 79 .scatter(Xt[:,.0],.Xt[:,.1],.c=y
6640 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 3d t,.marker='o',............label=
6660 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 35 29 0a 70 6c 2e 'Target.samples',.alpha=0.5).pl.
6680 73 63 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 73 65 6d 69 5b scatter(transp_Xs_sinkhorn_semi[
66a0 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 5f 73 65 6d 69 5b 3a :,.0],.transp_Xs_sinkhorn_semi[:
66c0 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='+
66e0 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)
6700 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
6720 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d SinkhornTransport').pl.xticks([]
6740 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 79 6f 75 74 ).pl.yticks([])..pl.tight_layout
6760 28 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 b3 5c 6f 4e 0b 5c 2a af a2 ().pl.show().PK.........\oN.\*..
6780 06 00 00 a2 06 00 00 0d 00 00 00 70 6c 6f 74 5f 4f 54 5f 31 44 2e 70 79 23 20 2d 2a 2d 20 63 6f ...........plot_OT_1D.py#.-*-.co
67a0 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 3d ding:.utf-8.-*-.""".============
67c0 3d 3d 3d 3d 3d 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 ========.1D.optimal.transport.==
67e0 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 65 78 61 6d 70 6c 65 ==================..This.example
6800 20 69 6c 6c 75 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 .illustrates.the.computation.of.
6820 45 4d 44 20 61 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 EMD.and.Sinkhorn.transport.plans
6840 0a 61 6e 64 20 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 .and.their.visualization..."""..
6860 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 6d 69 2e 66 6c 61 #.Author:.Remi.Flamary.<remi.fla
6880 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 3a 20 4d 49 54 20 mary@unice.fr>.#.#.License:.MIT.
68a0 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 70 0a 69 6d 70 6f License..import.numpy.as.np.impo
68c0 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 70 6f 72 74 rt.matplotlib.pylab.as.pl.import
68e0 20 6f 74 0a 69 6d 70 6f 72 74 20 6f 74 2e 70 6c 6f 74 0a 66 72 6f 6d 20 6f 74 2e 64 61 74 61 73 .ot.import.ot.plot.from.ot.datas
6900 65 74 73 20 69 6d 70 6f 72 74 20 6d 61 6b 65 5f 31 44 5f 67 61 75 73 73 20 61 73 20 67 61 75 73 ets.import.make_1D_gauss.as.gaus
6920 73 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 s..#############################
6940 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
6960 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
6980 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 65 a.#.-------------...#%%.paramete
69a0 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 6e 20 70 6f rs..n.=.100..#.nb.bins..#.bin.po
69c0 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
69e0 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 69 62 75 74 p.float64)..#.Gaussian.distribut
6a00 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 3d 35 29 20 20 23 20 ions.a.=.gauss(n,.m=20,.s=5)..#.
6a20 6d 3d 20 6d 65 61 6e 2c 20 73 3d 20 73 74 64 0a 62 20 3d 20 67 61 75 73 73 28 6e 2c 20 6d 3d 36 m=.mean,.s=.std.b.=.gauss(n,.m=6
6a40 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 20 6f 74 2e 64 0,.s=10)..#.loss.matrix.M.=.ot.d
6a60 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 73 68 61 70 65 ist(x.reshape((n,.1)),.x.reshape
6a80 28 28 6e 2c 20 31 29 29 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 29 0a 0a 0a 23 23 23 23 23 23 23 ((n,.1))).M./=.M.max()...#######
6aa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
6ac0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
6ae0 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 61 6e 64 #######.#.Plot.distributions.and
6b00 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .loss.matrix.#.-----------------
6b20 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 74 68 65 20 -----------------..#%%.plot.the.
6b40 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 distributions..pl.figure(1,.figs
6b60 69 7a 65 3d 28 36 2e 34 2c 20 33 29 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 61 2c 20 27 62 27 2c ize=(6.4,.3)).pl.plot(x,.a,.'b',
6b80 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 27 29 0a 70 6c .label='Source.distribution').pl
6ba0 2e 70 6c 6f 74 28 78 2c 20 62 2c 20 27 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 64 .plot(x,.b,.'r',.label='Target.d
6bc0 69 73 74 72 69 62 75 74 69 6f 6e 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 29 0a 0a 23 25 25 20 70 istribution').pl.legend()..#%%.p
6be0 6c 6f 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 61 6e 64 20 6c 6f 73 73 20 6d 61 74 72 69 lot.distributions.and.loss.matri
6c00 78 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 29 0a x..pl.figure(2,.figsize=(5,.5)).
6c20 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 4d 2c 20 27 43 6f 73 ot.plot.plot1D_mat(a,.b,.M,.'Cos
6c40 74 20 6d 61 74 72 69 78 20 4d 27 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 t.matrix.M')..##################
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 23 23 23 23 23 23 ################################
6c80 23 23 23 23 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 ############################.#.S
6ca0 6f 6c 76 65 20 45 4d 44 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 25 25 20 45 4d 44 0a 0a olve.EMD.#.---------...#%%.EMD..
6cc0 47 30 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 G0.=.ot.emd(a,.b,.M)..pl.figure(
6ce0 33 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 6f 74 31 3,.figsize=(5,.5)).ot.plot.plot1
6d00 44 5f 6d 61 74 28 61 2c 20 62 2c 20 47 30 2c 20 27 4f 54 20 6d 61 74 72 69 78 20 47 30 27 29 0a D_mat(a,.b,.G0,.'OT.matrix.G0').
6d20 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 .###############################
6d40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
6d60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 53 6f 6c 76 65 20 53 69 6e 6b 68 6f 72 6e ###############.#.Solve.Sinkhorn
6d80 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 25 25 20 53 69 6e 6b 68 6f 72 6e .#.--------------...#%%.Sinkhorn
6da0 0a 0a 6c 61 6d 62 64 20 3d 20 31 65 2d 33 0a 47 73 20 3d 20 6f 74 2e 73 69 6e 6b 68 6f 72 6e 28 ..lambd.=.1e-3.Gs.=.ot.sinkhorn(
6dc0 61 2c 20 62 2c 20 4d 2c 20 6c 61 6d 62 64 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 0a 70 a,.b,.M,.lambd,.verbose=True)..p
6de0 6c 2e 66 69 67 75 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 l.figure(4,.figsize=(5,.5)).ot.p
6e00 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 47 73 2c 20 27 4f 54 20 6d 61 74 lot.plot1D_mat(a,.b,.Gs,.'OT.mat
6e20 72 69 78 20 53 69 6e 6b 68 6f 72 6e 27 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 rix.Sinkhorn')..pl.show().PK....
6e40 00 00 00 00 b4 5c 6f 4e 6d 8a 53 18 e2 17 00 00 e2 17 00 00 12 00 00 00 70 6c 6f 74 5f 73 74 6f .....\oNm.S.............plot_sto
6e60 63 68 61 73 74 69 63 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d chastic.py""".==================
6e80 3d 3d 3d 3d 3d 3d 3d 3d 0a 53 74 6f 63 68 61 73 74 69 63 20 65 78 61 6d 70 6c 65 73 0a 3d 3d 3d ========.Stochastic.examples.===
6ea0 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 65 78 =======================..This.ex
6ec0 61 6d 70 6c 65 20 69 73 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73 68 6f 77 20 68 6f 77 20 74 6f ample.is.designed.to.show.how.to
6ee0 20 75 73 65 20 74 68 65 20 73 74 6f 63 68 61 74 69 63 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a .use.the.stochatic.optimization.
6f00 61 6c 67 6f 72 69 74 68 6d 73 20 66 6f 72 20 64 65 73 63 72 65 74 65 20 61 6e 64 20 73 65 6d 69 algorithms.for.descrete.and.semi
6f20 63 6f 6e 74 69 6e 6f 75 73 20 6d 65 61 73 75 72 65 73 20 66 72 6f 6d 20 74 68 65 20 50 4f 54 20 continous.measures.from.the.POT.
6f40 6c 69 62 72 61 72 79 2e 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a 20 4b 69 6c 69 61 6e 20 library..."""..#.Author:.Kilian.
6f60 46 61 74 72 61 73 20 3c 6b 69 6c 69 61 6e 2e 66 61 74 72 61 73 40 67 6d 61 69 6c 2e 63 6f 6d 3e Fatras.<kilian.fatras@gmail.com>
6f80 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 69 6d 70 6f 72 .#.#.License:.MIT.License..impor
6fa0 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.
6fc0 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6f 74 0a 69 6d 70 6f 72 74 20 6f 74 2e numpy.as.np.import.ot.import.ot.
6fe0 70 6c 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 23 23 23 plot...#########################
7000 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7020 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 43 4f 4d 50 55 54 45 20 54 ####################.#.COMPUTE.T
7040 52 41 4e 53 50 4f 52 54 41 54 49 4f 4e 20 4d 41 54 52 49 58 20 46 4f 52 20 53 45 4d 49 2d 44 55 RANSPORTATION.MATRIX.FOR.SEMI-DU
7060 41 4c 20 50 52 4f 42 4c 45 4d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 AL.PROBLEM.#####################
7080 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
70a0 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 23 23 23 23 23 23 ########################.#######
70c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
70e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7100 23 23 23 23 23 23 0a 23 20 44 49 53 43 52 45 54 45 20 43 41 53 45 3a 0a 23 0a 23 20 53 61 6d 70 ######.#.DISCRETE.CASE:.#.#.Samp
7120 6c 65 20 74 77 6f 20 64 69 73 63 72 65 74 65 20 6d 65 61 73 75 72 65 73 20 66 6f 72 20 74 68 65 le.two.discrete.measures.for.the
7140 20 64 69 73 63 72 65 74 65 20 63 61 73 65 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .discrete.case.#.---------------
7160 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 0a 23 ------------------------------.#
7180 0a 23 20 44 65 66 69 6e 65 20 32 20 64 69 73 63 72 65 74 65 20 6d 65 61 73 75 72 65 73 20 61 20 .#.Define.2.discrete.measures.a.
71a0 61 6e 64 20 62 2c 20 74 68 65 20 70 6f 69 6e 74 73 20 77 68 65 72 65 20 61 72 65 20 64 65 66 69 and.b,.the.points.where.are.defi
71c0 6e 65 64 20 74 68 65 20 73 6f 75 72 63 65 0a 23 20 61 6e 64 20 74 68 65 20 74 61 72 67 65 74 20 ned.the.source.#.and.the.target.
71e0 6d 65 61 73 75 72 65 73 20 61 6e 64 20 66 69 6e 61 6c 6c 79 20 74 68 65 20 63 6f 73 74 20 6d 61 measures.and.finally.the.cost.ma
7200 74 72 69 78 20 63 2e 0a 0a 6e 5f 73 6f 75 72 63 65 20 3d 20 37 0a 6e 5f 74 61 72 67 65 74 20 3d trix.c...n_source.=.7.n_target.=
7220 20 34 0a 72 65 67 20 3d 20 31 0a 6e 75 6d 49 74 65 72 6d 61 78 20 3d 20 31 30 30 30 0a 0a 61 20 .4.reg.=.1.numItermax.=.1000..a.
7240 3d 20 6f 74 2e 75 74 69 6c 73 2e 75 6e 69 66 28 6e 5f 73 6f 75 72 63 65 29 0a 62 20 3d 20 6f 74 =.ot.utils.unif(n_source).b.=.ot
7260 2e 75 74 69 6c 73 2e 75 6e 69 66 28 6e 5f 74 61 72 67 65 74 29 0a 0a 72 6e 67 20 3d 20 6e 70 2e .utils.unif(n_target)..rng.=.np.
7280 72 61 6e 64 6f 6d 2e 52 61 6e 64 6f 6d 53 74 61 74 65 28 30 29 0a 58 5f 73 6f 75 72 63 65 20 3d random.RandomState(0).X_source.=
72a0 20 72 6e 67 2e 72 61 6e 64 6e 28 6e 5f 73 6f 75 72 63 65 2c 20 32 29 0a 59 5f 74 61 72 67 65 74 .rng.randn(n_source,.2).Y_target
72c0 20 3d 20 72 6e 67 2e 72 61 6e 64 6e 28 6e 5f 74 61 72 67 65 74 2c 20 32 29 0a 4d 20 3d 20 6f 74 .=.rng.randn(n_target,.2).M.=.ot
72e0 2e 64 69 73 74 28 58 5f 73 6f 75 72 63 65 2c 20 59 5f 74 61 72 67 65 74 29 0a 0a 23 23 23 23 23 .dist(X_source,.Y_target)..#####
7300 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7320 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7340 23 23 23 23 23 23 23 23 0a 23 0a 23 20 43 61 6c 6c 20 74 68 65 20 22 53 41 47 22 20 6d 65 74 68 ########.#.#.Call.the."SAG".meth
7360 6f 64 20 74 6f 20 66 69 6e 64 20 74 68 65 20 74 72 61 6e 73 70 6f 72 74 61 74 69 6f 6e 20 6d 61 od.to.find.the.transportation.ma
7380 74 72 69 78 20 69 6e 20 74 68 65 20 64 69 73 63 72 65 74 65 20 63 61 73 65 0a 23 20 2d 2d 2d 2d trix.in.the.discrete.case.#.----
73a0 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 --------------------------------
73c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 23 20 44 65 66 69 6e 65 20 74 68 65 20 6d 65 74 68 6f 64 20 ---------.#.#.Define.the.method.
73e0 22 53 41 47 22 2c 20 63 61 6c 6c 20 6f 74 2e 73 6f 6c 76 65 5f 73 65 6d 69 5f 64 75 61 6c 5f 65 "SAG",.call.ot.solve_semi_dual_e
7400 6e 74 72 6f 70 69 63 20 61 6e 64 20 70 6c 6f 74 20 74 68 65 0a 23 20 72 65 73 75 6c 74 73 2e 0a ntropic.and.plot.the.#.results..
7420 0a 6d 65 74 68 6f 64 20 3d 20 22 53 41 47 22 0a 73 61 67 5f 70 69 20 3d 20 6f 74 2e 73 74 6f 63 .method.=."SAG".sag_pi.=.ot.stoc
7440 68 61 73 74 69 63 2e 73 6f 6c 76 65 5f 73 65 6d 69 5f 64 75 61 6c 5f 65 6e 74 72 6f 70 69 63 28 hastic.solve_semi_dual_entropic(
7460 61 2c 20 62 2c 20 4d 2c 20 72 65 67 2c 20 6d 65 74 68 6f 64 2c 0a 20 20 20 20 20 20 20 20 20 20 a,.b,.M,.reg,.method,...........
7480 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 ................................
74a0 20 20 20 20 20 20 6e 75 6d 49 74 65 72 6d 61 78 29 0a 70 72 69 6e 74 28 73 61 67 5f 70 69 29 0a ......numItermax).print(sag_pi).
74c0 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 .###############################
74e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7500 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 53 45 4d 49 43 4f 4e 54 49 4e 4f 55 53 20 43 ##############.#.SEMICONTINOUS.C
7520 41 53 45 3a 0a 23 0a 23 20 53 61 6d 70 6c 65 20 6f 6e 65 20 67 65 6e 65 72 61 6c 20 6d 65 61 73 ASE:.#.#.Sample.one.general.meas
7540 75 72 65 20 61 2c 20 6f 6e 65 20 64 69 73 63 72 65 74 65 20 6d 65 61 73 75 72 65 73 20 62 20 66 ure.a,.one.discrete.measures.b.f
7560 6f 72 20 74 68 65 20 73 65 6d 69 63 6f 6e 74 69 6e 6f 75 73 0a 23 20 63 61 73 65 0a 23 20 2d 2d or.the.semicontinous.#.case.#.--
7580 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 --------------------------------
75a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 23 20 44 65 66 69 6e 65 20 6f 6e 65 20 67 65 6e 65 72 -----------.#.#.Define.one.gener
75c0 61 6c 20 6d 65 61 73 75 72 65 20 61 2c 20 6f 6e 65 20 64 69 73 63 72 65 74 65 20 6d 65 61 73 75 al.measure.a,.one.discrete.measu
75e0 72 65 73 20 62 2c 20 74 68 65 20 70 6f 69 6e 74 73 20 77 68 65 72 65 0a 23 20 61 72 65 20 64 65 res.b,.the.points.where.#.are.de
7600 66 69 6e 65 64 20 74 68 65 20 73 6f 75 72 63 65 20 61 6e 64 20 74 68 65 20 74 61 72 67 65 74 20 fined.the.source.and.the.target.
7620 6d 65 61 73 75 72 65 73 20 61 6e 64 20 66 69 6e 61 6c 6c 79 20 74 68 65 20 63 6f 73 74 20 6d 61 measures.and.finally.the.cost.ma
7640 74 72 69 78 20 63 2e 0a 0a 6e 5f 73 6f 75 72 63 65 20 3d 20 37 0a 6e 5f 74 61 72 67 65 74 20 3d trix.c...n_source.=.7.n_target.=
7660 20 34 0a 72 65 67 20 3d 20 31 0a 6e 75 6d 49 74 65 72 6d 61 78 20 3d 20 31 30 30 30 0a 6c 6f 67 .4.reg.=.1.numItermax.=.1000.log
7680 20 3d 20 54 72 75 65 0a 0a 61 20 3d 20 6f 74 2e 75 74 69 6c 73 2e 75 6e 69 66 28 6e 5f 73 6f 75 .=.True..a.=.ot.utils.unif(n_sou
76a0 72 63 65 29 0a 62 20 3d 20 6f 74 2e 75 74 69 6c 73 2e 75 6e 69 66 28 6e 5f 74 61 72 67 65 74 29 rce).b.=.ot.utils.unif(n_target)
76c0 0a 0a 72 6e 67 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 52 61 6e 64 6f 6d 53 74 61 74 65 28 30 29 ..rng.=.np.random.RandomState(0)
76e0 0a 58 5f 73 6f 75 72 63 65 20 3d 20 72 6e 67 2e 72 61 6e 64 6e 28 6e 5f 73 6f 75 72 63 65 2c 20 .X_source.=.rng.randn(n_source,.
7700 32 29 0a 59 5f 74 61 72 67 65 74 20 3d 20 72 6e 67 2e 72 61 6e 64 6e 28 6e 5f 74 61 72 67 65 74 2).Y_target.=.rng.randn(n_target
7720 2c 20 32 29 0a 4d 20 3d 20 6f 74 2e 64 69 73 74 28 58 5f 73 6f 75 72 63 65 2c 20 59 5f 74 61 72 ,.2).M.=.ot.dist(X_source,.Y_tar
7740 67 65 74 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 get)..##########################
7760 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7780 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 0a 23 20 43 61 6c 6c 20 74 68 65 ###################.#.#.Call.the
77a0 20 22 41 53 47 44 22 20 6d 65 74 68 6f 64 20 74 6f 20 66 69 6e 64 20 74 68 65 20 74 72 61 6e 73 ."ASGD".method.to.find.the.trans
77c0 70 6f 72 74 61 74 69 6f 6e 20 6d 61 74 72 69 78 20 69 6e 20 74 68 65 20 73 65 6d 69 63 6f 6e 74 portation.matrix.in.the.semicont
77e0 69 6e 6f 75 73 0a 23 20 63 61 73 65 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d inous.#.case.#.-----------------
7800 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 23 0a 23 ----------------------------.#.#
7820 20 44 65 66 69 6e 65 20 74 68 65 20 6d 65 74 68 6f 64 20 22 41 53 47 44 22 2c 20 63 61 6c 6c 20 .Define.the.method."ASGD",.call.
7840 6f 74 2e 73 6f 6c 76 65 5f 73 65 6d 69 5f 64 75 61 6c 5f 65 6e 74 72 6f 70 69 63 20 61 6e 64 20 ot.solve_semi_dual_entropic.and.
7860 70 6c 6f 74 20 74 68 65 0a 23 20 72 65 73 75 6c 74 73 2e 0a 0a 6d 65 74 68 6f 64 20 3d 20 22 41 plot.the.#.results...method.=."A
7880 53 47 44 22 0a 61 73 67 64 5f 70 69 2c 20 6c 6f 67 5f 61 73 67 64 20 3d 20 6f 74 2e 73 74 6f 63 SGD".asgd_pi,.log_asgd.=.ot.stoc
78a0 68 61 73 74 69 63 2e 73 6f 6c 76 65 5f 73 65 6d 69 5f 64 75 61 6c 5f 65 6e 74 72 6f 70 69 63 28 hastic.solve_semi_dual_entropic(
78c0 61 2c 20 62 2c 20 4d 2c 20 72 65 67 2c 20 6d 65 74 68 6f 64 2c 0a 20 20 20 20 20 20 20 20 20 20 a,.b,.M,.reg,.method,...........
78e0 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 ................................
7900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6d 49 74 65 72 6d 61 78 2c 20 6c 6f 67 .................numItermax,.log
7920 3d 6c 6f 67 29 0a 70 72 69 6e 74 28 6c 6f 67 5f 61 73 67 64 5b 27 61 6c 70 68 61 27 5d 2c 20 6c =log).print(log_asgd['alpha'],.l
7940 6f 67 5f 61 73 67 64 5b 27 62 65 74 61 27 5d 29 0a 70 72 69 6e 74 28 61 73 67 64 5f 70 69 29 0a og_asgd['beta']).print(asgd_pi).
7960 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 .###############################
7980 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
79a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 0a 23 20 43 6f 6d 70 61 72 65 20 74 68 65 20 72 ##############.#.#.Compare.the.r
79c0 65 73 75 6c 74 73 20 77 69 74 68 20 74 68 65 20 53 69 6e 6b 68 6f 72 6e 20 61 6c 67 6f 72 69 74 esults.with.the.Sinkhorn.algorit
79e0 68 6d 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 hm.#.---------------------------
7a00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 23 20 43 61 6c 6c 20 74 68 65 20 ------------------.#.#.Call.the.
7a20 53 69 6e 6b 68 6f 72 6e 20 61 6c 67 6f 72 69 74 68 6d 20 66 72 6f 6d 20 50 4f 54 0a 0a 73 69 6e Sinkhorn.algorithm.from.POT..sin
7a40 6b 68 6f 72 6e 5f 70 69 20 3d 20 6f 74 2e 73 69 6e 6b 68 6f 72 6e 28 61 2c 20 62 2c 20 4d 2c 20 khorn_pi.=.ot.sinkhorn(a,.b,.M,.
7a60 72 65 67 29 0a 70 72 69 6e 74 28 73 69 6e 6b 68 6f 72 6e 5f 70 69 29 0a 0a 0a 23 23 23 23 23 23 reg).print(sinkhorn_pi)...######
7a80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7aa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7ac0 23 23 23 23 23 23 23 23 0a 23 20 50 4c 4f 54 20 54 52 41 4e 53 50 4f 52 54 41 54 49 4f 4e 20 4d ########.#.PLOT.TRANSPORTATION.M
7ae0 41 54 52 49 58 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 ATRIX.##########################
7b00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7b20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23 23 23 23 23 23 23 23 23 23 ####################..##########
7b40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7b60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7b80 23 23 23 23 0a 23 20 50 6c 6f 74 20 53 41 47 20 72 65 73 75 6c 74 73 0a 23 20 2d 2d 2d 2d 2d 2d ####.#.Plot.SAG.results.#.------
7ba0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 ----------..pl.figure(4,.figsize
7bc0 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 20 62 =(5,.5)).ot.plot.plot1D_mat(a,.b
7be0 2c 20 73 61 67 5f 70 69 2c 20 27 73 65 6d 69 2d 64 75 61 6c 20 3a 20 4f 54 20 6d 61 74 72 69 78 ,.sag_pi,.'semi-dual.:.OT.matrix
7c00 20 53 41 47 27 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 .SAG').pl.show()...#############
7c20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7c40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7c60 23 0a 23 20 50 6c 6f 74 20 41 53 47 44 20 72 65 73 75 6c 74 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d #.#.Plot.ASGD.results.#.--------
7c80 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d ---------..pl.figure(4,.figsize=
7ca0 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 20 62 2c (5,.5)).ot.plot.plot1D_mat(a,.b,
7cc0 20 61 73 67 64 5f 70 69 2c 20 27 73 65 6d 69 2d 64 75 61 6c 20 3a 20 4f 54 20 6d 61 74 72 69 78 .asgd_pi,.'semi-dual.:.OT.matrix
7ce0 20 41 53 47 44 27 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 .ASGD').pl.show()...############
7d00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7d20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7d40 23 23 0a 23 20 50 6c 6f 74 20 53 69 6e 6b 68 6f 72 6e 20 72 65 73 75 6c 74 73 0a 23 20 2d 2d 2d ##.#.Plot.Sinkhorn.results.#.---
7d60 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 34 2c ------------------..pl.figure(4,
7d80 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 6f 74 31 44 5f .figsize=(5,.5)).ot.plot.plot1D_
7da0 6d 61 74 28 61 2c 20 62 2c 20 73 69 6e 6b 68 6f 72 6e 5f 70 69 2c 20 27 4f 54 20 6d 61 74 72 69 mat(a,.b,.sinkhorn_pi,.'OT.matri
7dc0 78 20 53 69 6e 6b 68 6f 72 6e 27 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 0a 0a 23 23 23 23 23 23 23 x.Sinkhorn').pl.show()...#######
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 23 23 23 23 23 23 23 23 ################################
7e00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7e20 23 23 23 23 23 23 0a 23 20 43 4f 4d 50 55 54 45 20 54 52 41 4e 53 50 4f 52 54 41 54 49 4f 4e 20 ######.#.COMPUTE.TRANSPORTATION.
7e40 4d 41 54 52 49 58 20 46 4f 52 20 44 55 41 4c 20 50 52 4f 42 4c 45 4d 0a 23 23 23 23 23 23 23 23 MATRIX.FOR.DUAL.PROBLEM.########
7e60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7e80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7ea0 23 23 23 23 23 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 #####.##########################
7ec0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7ee0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 53 45 4d 49 43 4f 4e 54 49 4e ###################.#.SEMICONTIN
7f00 4f 55 53 20 43 41 53 45 3a 0a 23 0a 23 20 53 61 6d 70 6c 65 20 6f 6e 65 20 67 65 6e 65 72 61 6c OUS.CASE:.#.#.Sample.one.general
7f20 20 6d 65 61 73 75 72 65 20 61 2c 20 6f 6e 65 20 64 69 73 63 72 65 74 65 20 6d 65 61 73 75 72 65 .measure.a,.one.discrete.measure
7f40 73 20 62 20 66 6f 72 20 74 68 65 20 73 65 6d 69 63 6f 6e 74 69 6e 6f 75 73 0a 23 20 63 61 73 65 s.b.for.the.semicontinous.#.case
7f60 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 2d .#.-----------------------------
7f80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 23 20 44 65 66 69 6e 65 20 6f 6e 65 20 ----------------.#.#.Define.one.
7fa0 67 65 6e 65 72 61 6c 20 6d 65 61 73 75 72 65 20 61 2c 20 6f 6e 65 20 64 69 73 63 72 65 74 65 20 general.measure.a,.one.discrete.
7fc0 6d 65 61 73 75 72 65 73 20 62 2c 20 74 68 65 20 70 6f 69 6e 74 73 20 77 68 65 72 65 0a 23 20 61 measures.b,.the.points.where.#.a
7fe0 72 65 20 64 65 66 69 6e 65 64 20 74 68 65 20 73 6f 75 72 63 65 20 61 6e 64 20 74 68 65 20 74 61 re.defined.the.source.and.the.ta
8000 72 67 65 74 20 6d 65 61 73 75 72 65 73 20 61 6e 64 20 66 69 6e 61 6c 6c 79 20 74 68 65 20 63 6f rget.measures.and.finally.the.co
8020 73 74 20 6d 61 74 72 69 78 20 63 2e 0a 0a 6e 5f 73 6f 75 72 63 65 20 3d 20 37 0a 6e 5f 74 61 72 st.matrix.c...n_source.=.7.n_tar
8040 67 65 74 20 3d 20 34 0a 72 65 67 20 3d 20 31 0a 6e 75 6d 49 74 65 72 6d 61 78 20 3d 20 31 30 30 get.=.4.reg.=.1.numItermax.=.100
8060 30 30 30 0a 6c 72 20 3d 20 30 2e 31 0a 62 61 74 63 68 5f 73 69 7a 65 20 3d 20 33 0a 6c 6f 67 20 000.lr.=.0.1.batch_size.=.3.log.
8080 3d 20 54 72 75 65 0a 0a 61 20 3d 20 6f 74 2e 75 74 69 6c 73 2e 75 6e 69 66 28 6e 5f 73 6f 75 72 =.True..a.=.ot.utils.unif(n_sour
80a0 63 65 29 0a 62 20 3d 20 6f 74 2e 75 74 69 6c 73 2e 75 6e 69 66 28 6e 5f 74 61 72 67 65 74 29 0a ce).b.=.ot.utils.unif(n_target).
80c0 0a 72 6e 67 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 52 61 6e 64 6f 6d 53 74 61 74 65 28 30 29 0a .rng.=.np.random.RandomState(0).
80e0 58 5f 73 6f 75 72 63 65 20 3d 20 72 6e 67 2e 72 61 6e 64 6e 28 6e 5f 73 6f 75 72 63 65 2c 20 32 X_source.=.rng.randn(n_source,.2
8100 29 0a 59 5f 74 61 72 67 65 74 20 3d 20 72 6e 67 2e 72 61 6e 64 6e 28 6e 5f 74 61 72 67 65 74 2c ).Y_target.=.rng.randn(n_target,
8120 20 32 29 0a 4d 20 3d 20 6f 74 2e 64 69 73 74 28 58 5f 73 6f 75 72 63 65 2c 20 59 5f 74 61 72 67 .2).M.=.ot.dist(X_source,.Y_targ
8140 65 74 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 et)..###########################
8160 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
8180 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 0a 23 20 43 61 6c 6c 20 74 68 65 20 ##################.#.#.Call.the.
81a0 22 53 47 44 22 20 64 75 61 6c 20 6d 65 74 68 6f 64 20 74 6f 20 66 69 6e 64 20 74 68 65 20 74 72 "SGD".dual.method.to.find.the.tr
81c0 61 6e 73 70 6f 72 74 61 74 69 6f 6e 20 6d 61 74 72 69 78 20 69 6e 20 74 68 65 0a 23 20 73 65 6d ansportation.matrix.in.the.#.sem
81e0 69 63 6f 6e 74 69 6e 6f 75 73 20 63 61 73 65 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d icontinous.case.#.--------------
8200 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 0a -------------------------------.
8220 23 0a 23 20 43 61 6c 6c 20 6f 74 2e 73 6f 6c 76 65 5f 64 75 61 6c 5f 65 6e 74 72 6f 70 69 63 20 #.#.Call.ot.solve_dual_entropic.
8240 61 6e 64 20 70 6c 6f 74 20 74 68 65 20 72 65 73 75 6c 74 73 2e 0a 0a 73 67 64 5f 64 75 61 6c 5f and.plot.the.results...sgd_dual_
8260 70 69 2c 20 6c 6f 67 5f 73 67 64 20 3d 20 6f 74 2e 73 74 6f 63 68 61 73 74 69 63 2e 73 6f 6c 76 pi,.log_sgd.=.ot.stochastic.solv
8280 65 5f 64 75 61 6c 5f 65 6e 74 72 6f 70 69 63 28 61 2c 20 62 2c 20 4d 2c 20 72 65 67 2c 0a 20 20 e_dual_entropic(a,.b,.M,.reg,...
82a0 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 ................................
82c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 61 74 63 68 5f 73 69 7a .......................batch_siz
82e0 65 2c 20 6e 75 6d 49 74 65 72 6d 61 78 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e,.numItermax,..................
8300 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 ................................
8320 20 20 20 20 20 20 20 20 6c 72 2c 20 6c 6f 67 3d 6c 6f 67 29 0a 70 72 69 6e 74 28 6c 6f 67 5f 73 ........lr,.log=log).print(log_s
8340 67 64 5b 27 61 6c 70 68 61 27 5d 2c 20 6c 6f 67 5f 73 67 64 5b 27 62 65 74 61 27 5d 29 0a 70 72 gd['alpha'],.log_sgd['beta']).pr
8360 69 6e 74 28 73 67 64 5f 64 75 61 6c 5f 70 69 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 int(sgd_dual_pi)..##############
8380 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
83a0 23 23 23 23 23 23 23 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 ###############################.
83c0 23 0a 23 20 43 6f 6d 70 61 72 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 77 69 74 68 20 74 68 65 #.#.Compare.the.results.with.the
83e0 20 53 69 6e 6b 68 6f 72 6e 20 61 6c 67 6f 72 69 74 68 6d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .Sinkhorn.algorithm.#.----------
8400 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 --------------------------------
8420 2d 2d 2d 0a 23 0a 23 20 43 61 6c 6c 20 74 68 65 20 53 69 6e 6b 68 6f 72 6e 20 61 6c 67 6f 72 69 ---.#.#.Call.the.Sinkhorn.algori
8440 74 68 6d 20 66 72 6f 6d 20 50 4f 54 0a 0a 73 69 6e 6b 68 6f 72 6e 5f 70 69 20 3d 20 6f 74 2e 73 thm.from.POT..sinkhorn_pi.=.ot.s
8460 69 6e 6b 68 6f 72 6e 28 61 2c 20 62 2c 20 4d 2c 20 72 65 67 29 0a 70 72 69 6e 74 28 73 69 6e 6b inkhorn(a,.b,.M,.reg).print(sink
8480 68 6f 72 6e 5f 70 69 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 horn_pi)..######################
84a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
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 0a 23 20 50 6c 6f 74 20 ########################.#.Plot.
84e0 20 53 47 44 20 72 65 73 75 6c 74 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .SGD.results.#.-----------------
8500 0a 0a 70 6c 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 29 0a 6f ..pl.figure(4,.figsize=(5,.5)).o
8520 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 73 67 64 5f 64 75 61 6c t.plot.plot1D_mat(a,.b,.sgd_dual
8540 5f 70 69 2c 20 27 64 75 61 6c 20 3a 20 4f 54 20 6d 61 74 72 69 78 20 53 47 44 27 29 0a 70 6c 2e _pi,.'dual.:.OT.matrix.SGD').pl.
8560 73 68 6f 77 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 show()...#######################
8580 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
85a0 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 50 6c 6f 74 20 53 #######################.#.Plot.S
85c0 69 6e 6b 68 6f 72 6e 20 72 65 73 75 6c 74 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d inkhorn.results.#.--------------
85e0 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 35 -------..pl.figure(4,.figsize=(5
8600 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 73 ,.5)).ot.plot.plot1D_mat(a,.b,.s
8620 69 6e 6b 68 6f 72 6e 5f 70 69 2c 20 27 4f 54 20 6d 61 74 72 69 78 20 53 69 6e 6b 68 6f 72 6e 27 inkhorn_pi,.'OT.matrix.Sinkhorn'
8640 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 3c 5d 6f 4e f2 7c 7e 9e 5c 0e ).pl.show().PK........<]oN.|~.\.
8660 00 00 5c 0e 00 00 15 00 00 00 70 6c 6f 74 5f 62 61 72 79 63 65 6e 74 65 72 5f 31 44 2e 70 79 23 ..\.......plot_barycenter_1D.py#
8680 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 3d .-*-.coding:.utf-8.-*-.""".=====
86a0 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 31 44 20 57 61 73 =========================.1D.Was
86c0 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 3d 3d 3d 3d 3d 3d 3d serstein.barycenter.demo.=======
86e0 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 65 78 =======================..This.ex
8700 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 70 75 74 61 74 69 6f ample.illustrates.the.computatio
8720 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 65 69 6e 20 42 61 72 n.of.regularized.Wassersyein.Bar
8740 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 5d 2e 0a 0a 0a 5b 33 ycenter.as.proposed.in.[3]....[3
8760 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 2c 20 47 2e 2c 20 43 ].Benamou,.J..D.,.Carlier,.G.,.C
8780 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 65 79 72 c3 a9 2c 20 uturi,.M.,.Nenna,.L.,.&.Peyr..,.
87a0 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 6d 61 6e 20 70 72 6f G..(2015)..Iterative.Bregman.pro
87c0 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 74 72 61 6e 73 70 6f jections.for.regularized.transpo
87e0 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 72 6e 61 6c 20 6f 6e rtation.problems.SIAM.Journal.on
8800 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 28 32 29 2c 20 41 31 .Scientific.Computing,.37(2),.A1
8820 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 3a 20 52 65 6d 69 20 111-A1138..."""..#.Author:.Remi.
8840 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 66 72 3e 0a Flamary.<remi.flamary@unice.fr>.
8860 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
8880 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 6f 74 6c 69 62 2e 70 .numpy.as.np.import.matplotlib.p
88a0 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 63 65 73 73 61 72 79 ylab.as.pl.import.ot.#.necessary
88c0 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 75 73 65 64 0a 66 72 .for.3d.plot.even.if.not.used.fr
88e0 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 6d 70 6f 72 74 20 41 om.mpl_toolkits.mplot3d.import.A
8900 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 74 6c 69 62 2e 63 6f xes3D..#.noqa.from.matplotlib.co
8920 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 65 63 74 69 6f 6e 0a llections.import.PolyCollection.
8940 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 .###############################
8960 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
8980 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.
89a0 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 73 0a #.-------------..#%%.parameters.
89c0 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 69 74 .n.=.100..#.nb.bins..#.bin.posit
89e0 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 2e 66 ions.x.=.np.arange(n,.dtype=np.f
8a00 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 6f 6e loat64)..#.Gaussian.distribution
8a20 73 0a 61 31 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 31 44 5f 67 61 75 73 73 s.a1.=.ot.datasets.make_1D_gauss
8a40 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
8a60 64 0a 61 32 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 31 44 5f 67 61 75 73 73 d.a2.=.ot.datasets.make_1D_gauss
8a80 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 6d 61 74 72 69 (n,.m=60,.s=8)..#.creating.matri
8aa0 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 74 69 6f 6e 73 x.A.containing.all.distributions
8ac0 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 6e 5f 64 69 73 .A.=.np.vstack((a1,.a2)).T.n_dis
8ae0 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 6c 6f 73 73 20 tributions.=.A.shape[1]..#.loss.
8b00 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 6f 74 2e 75 74 matrix.+.normalization.M.=.ot.ut
8b20 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 23 23 23 23 23 ils.dist0(n).M./=.M.max()..#####
8b40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
8b60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
8b80 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 2d 2d 2d 2d 2d #########.#.Plot.data.#.--------
8ba0 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 6e 73 0a 0a 70 -..#%%.plot.the.distributions..p
8bc0 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 66 6f l.figure(1,.figsize=(6.4,.3)).fo
8be0 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 73 29 3a 0a 20 r.i.in.range(n_distributions):..
8c00 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 69 74 6c 65 28 ...pl.plot(x,.A[:,.i]).pl.title(
8c20 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 61 79 6f 75 74 'Distributions').pl.tight_layout
8c40 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 23 23 23 23 23 ()..############################
8c60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
8c80 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 6e 74 65 72 20 ##################.#.Barycenter.
8ca0 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 2d 2d 2d 2d 2d computation.#.------------------
8cc0 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 61 74 69 6f 6e ----..#%%.barycenter.computation
8ce0 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 31 0a 77 65 69 ..alpha.=.0.2..#.0<=alpha<=1.wei
8d00 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 20 61 6c 70 68 ghts.=.np.array([1.-.alpha,.alph
8d20 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 6f 74 28 77 65 a])..#.l2bary.bary_l2.=.A.dot(we
8d40 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 20 31 65 2d 33 ights)..#.wasserstein.reg.=.1e-3
8d60 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 79 63 65 6e 74 .bary_wass.=.ot.bregman.barycent
8d80 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 66 69 67 75 72 er(A,.M,.reg,.weights)..pl.figur
8da0 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 20 31 2c 20 31 e(2).pl.clf().pl.subplot(2,.1,.1
8dc0 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 73 ).for.i.in.range(n_distributions
8de0 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 69 ):.....pl.plot(x,.A[:,.i]).pl.ti
8e00 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 62 70 6c 6f 74 tle('Distributions')..pl.subplot
8e20 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 32 2c 20 27 72 (2,.1,.2).pl.plot(x,.bary_l2,.'r
8e40 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 61 72 79 5f 77 ',.label='l2').pl.plot(x,.bary_w
8e60 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 6e 27 29 0a 70 ass,.'g',.label='Wasserstein').p
8e80 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 6e 74 65 72 73 l.legend().pl.title('Barycenters
8ea0 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 23 23 23 ').pl.tight_layout()..##########
8ec0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
8ee0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
8f00 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 61 74 69 6f 6e ####.#.Barycentric.interpolation
8f20 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 0a 0a 23 25 .#.-------------------------..#%
8f40 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 0a 6e 5f 61 6c %.barycenter.interpolation..n_al
8f60 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 6e 73 70 61 63 pha.=.11.alpha_list.=.np.linspac
8f80 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 70 2e 7a 65 72 e(0,.1,.n_alpha)...B_l2.=.np.zer
8fa0 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 6e 70 2e 63 6f os((n,.n_alpha))..B_wass.=.np.co
8fc0 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 20 6e 5f 61 6c py(B_l2)..for.i.in.range(0,.n_al
8fe0 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 74 5b 69 5d 0a pha):.....alpha.=.alpha_list[i].
9000 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 20 61 6c 70 68 ....weights.=.np.array([1.-.alph
9020 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 20 41 2e 64 6f a,.alpha]).....B_l2[:,.i].=.A.do
9040 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 20 3d 20 6f 74 t(weights).....B_wass[:,.i].=.ot
9060 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 65 67 2c 20 77 .bregman.barycenter(A,.M,.reg,.w
9080 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 74 69 6f 6e 0a eights)..#%%.plot.interpolation.
90a0 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 2e 67 65 74 5f .pl.figure(3)..cmap.=.pl.cm.get_
90c0 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 7a 73 20 3d 20 cmap('viridis').verts.=.[].zs.=.
90e0 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 65 72 61 74 65 alpha_list.for.i,.z.in.enumerate
9100 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 20 20 20 76 65 (zs):.....ys.=.B_l2[:,.i].....ve
9120 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 29 0a 0a 61 78 rts.append(list(zip(x,.ys)))..ax
9140 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 27 33 64 27 29 .=.pl.gcf().gca(projection='3d')
9160 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 74 73 2c 20 66 ..poly.=.PolyCollection(verts,.f
9180 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 20 61 6c 70 68 acecolors=[cmap(a).for.a.in.alph
91a0 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 29 0a 61 78 2e a_list]).poly.set_alpha(0.7).ax.
91c0 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 73 2c 20 7a 64 add_collection3d(poly,.zs=zs,.zd
91e0 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 61 78 2e 73 65 ir='y').ax.set_xlabel('x').ax.se
9200 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 6c 28 27 24 5c t_xlim3d(0,.n).ax.set_ylabel('$\
9220 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 31 29 0a 61 78 \alpha$').ax.set_ylim3d(0,.1).ax
9240 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 33 64 28 30 2c .set_zlabel('').ax.set_zlim3d(0,
9260 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 65 28 27 42 61 .B_l2.max().*.1.01).pl.title('Ba
9280 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 20 6c 32 27 29 rycenter.interpolation.with.l2')
92a0 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 72 65 28 34 29 .pl.tight_layout()..pl.figure(4)
92c0 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 69 64 69 73 27 .cmap.=.pl.cm.get_cmap('viridis'
92e0 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 74 0a 66 6f 72 ).verts.=.[].zs.=.alpha_list.for
9300 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 20 79 73 20 3d .i,.z.in.enumerate(zs):.....ys.=
9320 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 65 6e 64 28 6c .B_wass[:,.i].....verts.append(l
9340 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 63 66 28 29 2e ist(zip(x,.ys)))..ax.=.pl.gcf().
9360 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 3d 20 50 6f 6c gca(projection='3d')..poly.=.Pol
9380 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 72 73 3d 5b 63 yCollection(verts,.facecolors=[c
93a0 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 29 0a 70 6f 6c map(a).for.a.in.alpha_list]).pol
93c0 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 6c 65 63 74 69 y.set_alpha(0.7).ax.add_collecti
93e0 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 0a 61 78 2e 73 on3d(poly,.zs=zs,.zdir='y').ax.s
9400 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 64 28 30 2c 20 et_xlabel('x').ax.set_xlim3d(0,.
9420 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 27 29 0a 61 78 n).ax.set_ylabel('$\\alpha$').ax
9440 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 61 62 65 6c 28 .set_ylim3d(0,.1).ax.set_zlabel(
9460 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 61 78 28 29 20 '').ax.set_zlim3d(0,.B_l2.max().
9480 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 72 20 69 6e 74 *.1.01).pl.title('Barycenter.int
94a0 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 27 29 0a 70 6c erpolation.with.Wasserstein').pl
94c0 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 04 14 .tight_layout()..pl.show().PK...
94e0 00 00 00 00 00 a6 5d 6f 4e b0 31 70 de ee 10 00 00 ee 10 00 00 14 00 00 00 70 6c 6f 74 5f 6f 74 ......]oN.1p.............plot_ot
9500 64 61 5f 63 6c 61 73 73 65 73 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 da_classes.py#.-*-.coding:.utf-8
9520 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 3d .-*-.""".=======================
9540 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 0a 3d 3d 3d 3d 3d =.OT.for.domain.adaptation.=====
9560 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 65 78 61 6d 70 6c ===================..This.exampl
9580 65 20 69 6e 74 72 6f 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 e.introduces.a.domain.adaptation
95a0 20 69 6e 20 61 20 32 44 20 73 65 74 74 69 6e 67 20 61 6e 64 20 74 68 65 20 34 20 4f 54 44 41 0a .in.a.2D.setting.and.the.4.OTDA.
95c0 61 70 70 72 6f 61 63 68 65 73 20 63 75 72 72 65 6e 74 6c 79 20 73 75 70 70 6f 72 74 65 64 20 69 approaches.currently.supported.i
95e0 6e 20 50 4f 54 2e 0a 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 n.POT..."""..#.Authors:.Remi.Fla
9600 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 20 20 mary.<remi.flamary@unice.fr>.#..
9620 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 20 3c 73 74 61 6e 2e ........Stanislas.Chambon.<stan.
9640 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 63 65 6e 73 65 3a 20 chambon@gmail.com>.#.#.License:.
9660 4d 49 54 20 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 MIT.License..import.matplotlib.p
9680 79 6c 61 62 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 ylab.as.pl.import.ot...#########
96a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
96c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
96e0 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 2d 2d 2d #####.#.Generate.data.#.--------
9700 2d 2d 2d 2d 2d 0a 0a 6e 5f 73 6f 75 72 63 65 5f 73 61 6d 70 6c 65 73 20 3d 20 31 35 30 0a 6e 5f -----..n_source_samples.=.150.n_
9720 74 61 72 67 65 74 5f 73 61 6d 70 6c 65 73 20 3d 20 31 35 30 0a 0a 58 73 2c 20 79 73 20 3d 20 6f target_samples.=.150..Xs,.ys.=.o
9740 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 27 33 67 t.datasets.make_data_classif('3g
9760 61 75 73 73 27 2c 20 6e 5f 73 6f 75 72 63 65 5f 73 61 6d 70 6c 65 73 29 0a 58 74 2c 20 79 74 20 auss',.n_source_samples).Xt,.yt.
9780 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 =.ot.datasets.make_data_classif(
97a0 27 33 67 61 75 73 73 32 27 2c 20 6e 5f 74 61 72 67 65 74 5f 73 61 6d 70 6c 65 73 29 0a 0a 0a 23 '3gauss2',.n_target_samples)...#
97c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
97e0 23 23 23 23 23 23 23 23 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 0a 23 20 49 6e 73 74 61 6e 74 69 61 74 65 20 74 68 65 20 #############.#.Instantiate.the.
9820 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 73 20 61 different.transport.algorithms.a
9840 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 2d 2d 2d nd.fit.them.#.------------------
9860 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 --------------------------------
9880 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 74 5f 65 6d ---------..#.EMD.Transport.ot_em
98a0 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 64 2e d.=.ot.da.EMDTransport().ot_emd.
98c0 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 20 54 72 fit(Xs=Xs,.Xt=Xt)..#.Sinkhorn.Tr
98e0 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 6b ansport.ot_sinkhorn.=.ot.da.Sink
9900 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 6e hornTransport(reg_e=1e-1).ot_sin
9920 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 69 6e 6b 68 khorn.fit(Xs=Xs,.Xt=Xt)..#.Sinkh
9940 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 73 6f 20 72 orn.Transport.with.Group.lasso.r
9960 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 61 2e 53 69 egularization.ot_lpl1.=.ot.da.Si
9980 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 2d 31 2c 20 nkhornLpl1Transport(reg_e=1e-1,.
99a0 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 73 2c 20 79 reg_cl=1e0).ot_lpl1.fit(Xs=Xs,.y
99c0 73 3d 79 73 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 s=ys,.Xt=Xt)..#.Sinkhorn.Transpo
99e0 72 74 20 77 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 rt.with.Group.lasso.regularizati
9a00 6f 6e 20 6c 31 6c 32 0a 6f 74 5f 6c 31 6c 32 20 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b 68 6f 72 6e on.l1l2.ot_l1l2.=.ot.da.Sinkhorn
9a20 4c 31 6c 32 54 72 61 6e 73 70 6f 72 74 28 72 65 67 5f 65 3d 31 65 2d 31 2c 20 72 65 67 5f 63 6c L1l2Transport(reg_e=1e-1,.reg_cl
9a40 3d 32 65 30 2c 20 6d 61 78 5f 69 74 65 72 3d 32 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 =2e0,.max_iter=20,..............
9a60 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 76 65 72 62 6f 73 65 .........................verbose
9a80 3d 54 72 75 65 29 0a 6f 74 5f 6c 31 6c 32 2e 66 69 74 28 58 73 3d 58 73 2c 20 79 73 3d 79 73 2c =True).ot_l1l2.fit(Xs=Xs,.ys=ys,
9aa0 20 58 74 3d 58 74 29 0a 0a 23 20 74 72 61 6e 73 70 6f 72 74 20 73 6f 75 72 63 65 20 73 61 6d 70 .Xt=Xt)..#.transport.source.samp
9ac0 6c 65 73 20 6f 6e 74 6f 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 0a 74 72 61 6e 73 70 5f 58 les.onto.target.samples.transp_X
9ae0 73 5f 65 6d 64 20 3d 20 6f 74 5f 65 6d 64 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a s_emd.=.ot_emd.transform(Xs=Xs).
9b00 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 5f 73 69 6e 6b 68 6f 72 6e transp_Xs_sinkhorn.=.ot_sinkhorn
9b20 2e 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 6c 70 6c 31 .transform(Xs=Xs).transp_Xs_lpl1
9b40 20 3d 20 6f 74 5f 6c 70 6c 31 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 74 72 61 6e .=.ot_lpl1.transform(Xs=Xs).tran
9b60 73 70 5f 58 73 5f 6c 31 6c 32 20 3d 20 6f 74 5f 6c 31 6c 32 2e 74 72 61 6e 73 66 6f 72 6d 28 58 sp_Xs_l1l2.=.ot_l1l2.transform(X
9b80 73 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 s=Xs)...########################
9ba0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
9bc0 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 69 67 20 31 20 3a ######################.#.Fig.1.:
9be0 20 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 .plots.source.and.target.samples
9c00 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 2d .#.-----------------------------
9c20 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 67 73 69 7a 65 ----------..pl.figure(1,.figsize
9c40 3d 28 31 30 2c 20 35 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 =(10,.5)).pl.subplot(1,.2,.1).pl
9c60 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 5d 2c 20 63 3d 79 .scatter(Xs[:,.0],.Xs[:,.1],.c=y
9c80 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 63 65 20 73 61 6d s,.marker='+',.label='Source.sam
9ca0 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 73 28 5b ples').pl.xticks([]).pl.yticks([
9cc0 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 27 53 6f ]).pl.legend(loc=0).pl.title('So
9ce0 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 74 28 31 2c 20 32 urce..samples')..pl.subplot(1,.2
9d00 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 74 5b 3a 2c 20 ,.2).pl.scatter(Xt[:,.0],.Xt[:,.
9d20 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
9d40 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 29 0a 70 6c 2e 79 get.samples').pl.xticks([]).pl.y
9d60 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 0a 70 6c 2e 74 69 ticks([]).pl.legend(loc=0).pl.ti
9d80 74 6c 65 28 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c tle('Target.samples').pl.tight_l
9da0 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 23 23 23 23 ayout()...######################
9dc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
9de0 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 69 67 20 32 ########################.#.Fig.2
9e00 20 3a 20 70 6c 6f 74 20 6f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 73 20 61 6e 64 20 74 72 .:.plot.optimal.couplings.and.tr
9e20 61 6e 73 70 6f 72 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 ansported.samples.#.------------
9e40 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 --------------------------------
9e60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 61 72 61 6d 5f 69 6d 67 20 3d 20 7b 27 69 6e 74 65 72 70 ----------..param_img.=.{'interp
9e80 6f 6c 61 74 69 6f 6e 27 3a 20 27 6e 65 61 72 65 73 74 27 7d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 olation':.'nearest'}..pl.figure(
9ea0 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 6c 6f 74 28 32 2,.figsize=(15,.8)).pl.subplot(2
9ec0 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 75 70 6c 69 6e ,.4,.1).pl.imshow(ot_emd.couplin
9ee0 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 5b 5d 29 0a 70 g_,.**param_img).pl.xticks([]).p
9f00 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 61 6c 20 63 l.yticks([]).pl.title('Optimal.c
9f20 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 73 75 62 70 oupling\nEMDTransport')..pl.subp
9f40 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 69 6e 6b 68 6f lot(2,.4,.2).pl.imshow(ot_sinkho
9f60 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 70 6c 2e 78 74 rn.coupling_,.**param_img).pl.xt
9f80 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 65 28 icks([]).pl.yticks([]).pl.title(
9fa0 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 54 72 61 6e 73 'Optimal.coupling\nSinkhornTrans
9fc0 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 0a 70 6c 2e 69 port')..pl.subplot(2,.4,.3).pl.i
9fe0 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 70 61 72 61 6d mshow(ot_lpl1.coupling_,.**param
a000 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 6b 73 28 5b 5d _img).pl.xticks([]).pl.yticks([]
a020 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 67 5c 6e 53 69 ).pl.title('Optimal.coupling\nSi
a040 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 75 62 70 6c 6f nkhornLpl1Transport')..pl.subplo
a060 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 32 2e 63 6f 75 t(2,.4,.4).pl.imshow(ot_l1l2.cou
a080 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 5b pling_,.**param_img).pl.xticks([
a0a0 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
a0c0 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 61 6e 73 70 6f al.coupling\nSinkhornL1l2Transpo
a0e0 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 6c 2e 73 63 61 rt')..pl.subplot(2,.4,.5).pl.sca
a100 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 20 6d tter(Xt[:,.0],.Xt[:,.1],.c=yt,.m
a120 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 61 72 arker='o',............label='Tar
a140 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 2e 73 63 61 74 get.samples',.alpha=0.3).pl.scat
a160 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 61 6e 73 70 5f ter(transp_Xs_emd[:,.0],.transp_
a180 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 20 20 20 20 6d Xs_emd[:,.1],.c=ys,............m
a1a0 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 6c 65 73 arker='+',.label='Transp.samples
a1c0 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 74 69 63 6b 73 ',.s=30).pl.xticks([]).pl.yticks
a1e0 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 73 61 6d 70 6c ([]).pl.title('Transported.sampl
a200 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 64 28 6c 6f 63 es\nEmdTransport').pl.legend(loc
a220 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 32 2c 20 34 2c ="lower.left")..pl.subplot(2,.4,
a240 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 5b 3a 2c 20 31 .6).pl.scatter(Xt[:,.0],.Xt[:,.1
a260 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 20 20 ],.c=yt,.marker='o',............
a280 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 30 2e label='Target.samples',.alpha=0.
a2a0 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 6b 68 6f 72 6e 3).pl.scatter(transp_Xs_sinkhorn
a2c0 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 3a 2c 20 31 5d [:,.0],.transp_Xs_sinkhorn[:,.1]
a2e0 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 27 2c 20 6c ,.c=ys,............marker='+',.l
a300 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 0a 70 6c 2e abel='Transp.samples',.s=30).pl.
a320 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
a340 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 6b 68 6f 72 6e e('Transported.samples\nSinkhorn
a360 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 37 29 Transport')..pl.subplot(2,.4,.7)
a380 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],.
a3a0 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 20 20 6c 61 62 c=yt,.marker='o',............lab
a3c0 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 30 2e 33 29 0a el='Target.samples',.alpha=0.3).
a3e0 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 2c 20 30 5d 2c pl.scatter(transp_Xs_lpl1[:,.0],
a400 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 2c 0a 20 20 20 .transp_Xs_lpl1[:,.1],.c=ys,....
a420 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 54 72 61 6e 73 ........marker='+',.label='Trans
a440 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 28 5b 5d 29 0a p.samples',.s=30).pl.xticks([]).
a460 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 6e 73 70 6f 72 pl.yticks([]).pl.title('Transpor
a480 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 61 6e 73 70 6f ted.samples\nSinkhornLpl1Transpo
a4a0 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 6c 2e 73 63 61 rt')..pl.subplot(2,.4,.8).pl.sca
a4c0 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 20 6d tter(Xt[:,.0],.Xt[:,.1],.c=yt,.m
a4e0 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 61 72 arker='o',............label='Tar
a500 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 2e 73 63 61 74 get.samples',.alpha=0.3).pl.scat
a520 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 72 61 6e 73 70 ter(transp_Xs_l1l2[:,.0],.transp
a540 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 20 20 20 20 20 _Xs_l1l2[:,.1],.c=ys,...........
a560 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 6c .marker='+',.label='Transp.sampl
a580 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 74 69 63 es',.s=30).pl.xticks([]).pl.ytic
a5a0 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 73 61 6d ks([]).pl.title('Transported.sam
a5c0 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 27 29 0a 70 6c ples\nSinkhornL1l2Transport').pl
a5e0 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 04 14 .tight_layout()..pl.show().PK...
a600 00 00 00 00 00 b3 5c 6f 4e ff 09 e8 78 dd 08 00 00 dd 08 00 00 14 00 00 00 70 6c 6f 74 5f 4f 54 ......\oN...x............plot_OT
a620 5f 31 44 5f 73 6d 6f 6f 74 68 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 _1D_smooth.py#.-*-.coding:.utf-8
a640 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 3d .-*-.""".=======================
a660 3d 3d 3d 3d 0a 31 44 20 73 6d 6f 6f 74 68 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 ====.1D.smooth.optimal.transport
a680 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 0a 0a 54 68 .===========================..Th
a6a0 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 70 75 is.example.illustrates.the.compu
a6c0 74 61 74 69 6f 6e 20 6f 66 20 45 4d 44 2c 20 53 69 6e 6b 68 6f 72 6e 20 61 6e 64 20 73 6d 6f 6f tation.of.EMD,.Sinkhorn.and.smoo
a6e0 74 68 20 4f 54 20 70 6c 61 6e 73 0a 61 6e 64 20 74 68 65 69 72 20 76 69 73 75 61 6c 69 7a 61 74 th.OT.plans.and.their.visualizat
a700 69 6f 6e 2e 0a 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 ion..."""..#.Author:.Remi.Flamar
a720 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 23 20 4c 69 y.<remi.flamary@unice.fr>.#.#.Li
a740 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
a760 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
a780 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 69 6d 70 6f 72 74 20 6f 74 2e 70 6c 6f 74 0a 66 72 s.pl.import.ot.import.ot.plot.fr
a7a0 6f 6d 20 6f 74 2e 64 61 74 61 73 65 74 73 20 69 6d 70 6f 72 74 20 6d 61 6b 65 5f 31 44 5f 67 61 om.ot.datasets.import.make_1D_ga
a7c0 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..##################
a7e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
a800 23 23 23 23 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
a820 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.#.-------------...#
a840 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
a860 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
a880 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
a8a0 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
a8c0 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
a8e0 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
a900 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))
a920 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(
a940 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 )...############################
a960 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
a980 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
a9a0 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.#.------
a9c0 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 ----------------------------..#%
a9e0 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
aa00 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
aa20 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
aa40 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
aa60 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
aa80 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
aaa0 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
aac0 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,
aae0 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')..#######
ab00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
ab20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
ab40 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.#.---------.
ab60 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).
ab80 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
aba0 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
abc0 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')..####################
abe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
ac00 23 23 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
ac20 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.#.--------------...#
ac40 25 25 20 53 69 6e 6b 68 6f 72 6e 0a 0a 6c 61 6d 62 64 20 3d 20 32 65 2d 33 0a 47 73 20 3d 20 6f %%.Sinkhorn..lambd.=.2e-3.Gs.=.o
ac60 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
ac80 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=(
aca0 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,.
acc0 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
ace0 6f 77 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 23 23 23 ow()..##########################
ad00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
ad20 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 76 65 20 53 6d 6f ####################.#.Solve.Smo
ad40 6f 74 68 20 4f 54 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 25 25 20 53 6d oth.OT.#.--------------...#%%.Sm
ad60 6f 6f 74 68 20 4f 54 20 77 69 74 68 20 4b 4c 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 0a ooth.OT.with.KL.regularization..
ad80 6c 61 6d 62 64 20 3d 20 32 65 2d 33 0a 47 73 6d 20 3d 20 6f 74 2e 73 6d 6f 6f 74 68 2e 73 6d 6f lambd.=.2e-3.Gsm.=.ot.smooth.smo
ada0 6f 74 68 5f 6f 74 5f 64 75 61 6c 28 61 2c 20 62 2c 20 4d 2c 20 6c 61 6d 62 64 2c 20 72 65 67 5f oth_ot_dual(a,.b,.M,.lambd,.reg_
adc0 74 79 70 65 3d 27 6b 6c 27 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 35 2c 20 66 69 67 73 69 7a 65 type='kl')..pl.figure(5,.figsize
ade0 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 20 62 =(5,.5)).ot.plot.plot1D_mat(a,.b
ae00 2c 20 47 73 6d 2c 20 27 4f 54 20 6d 61 74 72 69 78 20 53 6d 6f 6f 74 68 20 4f 54 20 4b 4c 20 72 ,.Gsm,.'OT.matrix.Smooth.OT.KL.r
ae20 65 67 2e 27 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 0a 0a 23 25 25 20 53 6d 6f 6f 74 68 20 4f 54 eg.')..pl.show()...#%%.Smooth.OT
ae40 20 77 69 74 68 20 4b 4c 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 0a 6c 61 6d 62 64 20 3d .with.KL.regularization..lambd.=
ae60 20 31 65 2d 31 0a 47 73 6d 20 3d 20 6f 74 2e 73 6d 6f 6f 74 68 2e 73 6d 6f 6f 74 68 5f 6f 74 5f .1e-1.Gsm.=.ot.smooth.smooth_ot_
ae80 64 75 61 6c 28 61 2c 20 62 2c 20 4d 2c 20 6c 61 6d 62 64 2c 20 72 65 67 5f 74 79 70 65 3d 27 6c dual(a,.b,.M,.lambd,.reg_type='l
aea0 32 27 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 36 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 2')..pl.figure(6,.figsize=(5,.5)
aec0 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 47 73 6d 2c 20 ).ot.plot.plot1D_mat(a,.b,.Gsm,.
aee0 27 4f 54 20 6d 61 74 72 69 78 20 53 6d 6f 6f 74 68 20 4f 54 20 6c 32 20 72 65 67 2e 27 29 0a 0a 'OT.matrix.Smooth.OT.l2.reg.')..
af00 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 3d 5d 6f 4e b0 ed ff 28 54 10 00 00 pl.show().PK........=]oN...(T...
af20 54 10 00 00 22 00 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 6d 61 70 70 69 6e 67 5f 63 6f 6c 6f 72 73 T..."...plot_otda_mapping_colors
af40 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 38 20 2d 2a _images.py#.-*-.coding:.utf-8.-*
af60 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 3d -.""".==========================
af80 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 4f 54 20 66 ===========================.OT.f
afa0 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 74 68 20 6d or.image.color.adaptation.with.m
afc0 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 3d 3d 3d 3d apping.estimation.==============
afe0 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 ================================
b000 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 61 74 69 6f =======..OT.for.domain.adaptatio
b020 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 6e 20 5b 36 n.with.image.color.adaptation.[6
b040 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 5d 2e 0a 0a ].with.mapping.estimation.[8]...
b060 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 2c 20 4e 2e [6].Ferradans,.S.,.Papadakis,.N.
b080 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 28 32 30 31 ,.Peyre,.G.,.&.Aujol,.J..F..(201
b0a0 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 20 6f 70 74 4)..Regularized.....discrete.opt
b0c0 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 20 6f 6e 20 imal.transport..SIAM.Journal.on.
b0e0 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 31 38 35 33 Imaging.Sciences,.7(3),.....1853
b100 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 72 74 79 2c -1882..[8].M..Perrot,.N..Courty,
b120 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 70 70 69 6e .R..Flamary,.A..Habrard,."Mappin
b140 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 65 20 6f 70 g.estimation.for.....discrete.op
b160 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 6f 72 6d 61 timal.transport",.Neural.Informa
b180 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 53 29 2c 0a tion.Processing.Systems.(NIPS),.
b1a0 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 65 6d 69 20 ....2016..."""..#.Authors:.Remi.
b1c0 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 66 72 3e 0a Flamary.<remi.flamary@unice.fr>.
b1e0 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 20 3c 73 74 #..........Stanislas.Chambon.<st
b200 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 63 65 6e 73 an.chambon@gmail.com>.#.#.Licens
b220 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 20 61 73 20 e:.MIT.License..import.numpy.as.
b240 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 0a 69 6d 70 np.from.scipy.import.ndimage.imp
b260 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 70 6f 72 ort.matplotlib.pylab.as.pl.impor
b280 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 61 74 65 28 t.ot..r.=.np.random.RandomState(
b2a0 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 43 6f 6e 76 42)...def.im2mat(I):....."""Conv
b2c0 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 65 20 70 69 erts.and.image.to.matrix.(one.pi
b2e0 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 49 2e 72 65 xel.per.line)""".....return.I.re
b300 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 31 5d 2c 20 shape((I.shape[0].*.I.shape[1],.
b320 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 20 73 68 61 I.shape[2]))...def.mat2im(X,.sha
b340 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 6d 61 74 72 pe):....."""Converts.back.a.matr
b360 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 20 58 2e 72 ix.to.an.image""".....return.X.r
b380 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 29 3a 0a 20 eshape(shape)...def.minmax(I):..
b3a0 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 0a 23 23 23 ...return.np.clip(I,.0,.1)...###
b3c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
b3e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
b400 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 23 20 2d 2d ###########.#.Generate.data.#.--
b420 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 73 0a 49 31 -----------..#.Loading.images.I1
b440 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 63 65 61 6e .=.ndimage.imread('../data/ocean
b460 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 29 20 2f 20 _day.jpg').astype(np.float64)./.
b480 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 64 61 74 61 256.I2.=.ndimage.imread('../data
b4a0 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 70 2e 66 6c /ocean_sunset.jpg').astype(np.fl
b4c0 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 31 29 0a 58 oat64)./.256...X1.=.im2mat(I1).X
b4e0 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 61 6d 70 6c 2.=.im2mat(I2)..#.training.sampl
b500 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 74 28 58 31 es.nb.=.1000.idx1.=.r.randint(X1
b520 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 3d 20 72 2e .shape[0],.size=(nb,)).idx2.=.r.
b540 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 62 2c 29 29 randint(X2.shape[0],.size=(nb,))
b560 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 64 78 32 2c ..Xs.=.X1[idx1,.:].Xt.=.X2[idx2,
b580 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 23 23 23 23 .:]...##########################
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 0a 23 20 44 6f 6d 61 69 6e 20 61 64 ####################.#.Domain.ad
b5e0 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 69 6f 6e 20 aptation.for.pixel.distribution.
b600 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 2d 2d 2d 2d transfer.#.---------------------
b620 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 20 ----------------------------..#.
b640 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 45 4d 44 54 EMDTransport.ot_emd.=.ot.da.EMDT
b660 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 20 58 74 3d ransport().ot_emd.fit(Xs=Xs,.Xt=
b680 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 72 61 6e 73 Xt).transp_Xs_emd.=.ot_emd.trans
b6a0 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 61 78 28 6d form(Xs=X1).Image_emd.=.minmax(m
b6c0 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 65 29 29 0a at2im(transp_Xs_emd,.I1.shape)).
b6e0 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 68 6f 72 6e .#.SinkhornTransport.ot_sinkhorn
b700 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 65 67 5f 65 .=.ot.da.SinkhornTransport(reg_e
b720 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 2c 20 58 74 =1e-1).ot_sinkhorn.fit(Xs=Xs,.Xt
b740 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 5f 73 69 6e =Xt).transp_Xs_sinkhorn.=.ot_sin
b760 6b 68 6f 72 6e 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 khorn.transform(Xs=X1).Image_sin
b780 6b 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 khorn.=.minmax(mat2im(transp_Xs_
b7a0 73 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 sinkhorn,.I1.shape))..ot_mapping
b7c0 5f 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 _linear.=.ot.da.MappingTransport
b7e0 28 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 (.....mu=1e0,.eta=1e-8,.bias=Tru
b800 65 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 e,.max_iter=20,.verbose=True).ot
b820 5f 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 _mapping_linear.fit(Xs=Xs,.Xt=Xt
b840 29 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 )..X1tl.=.ot_mapping_linear.tran
b860 73 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 sform(Xs=X1).Image_mapping_linea
b880 72 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 r.=.minmax(mat2im(X1tl,.I1.shape
b8a0 29 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 ))..ot_mapping_gaussian.=.ot.da.
b8c0 4d 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 MappingTransport(.....mu=1e0,.et
b8e0 61 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 a=1e-2,.sigma=1,.bias=False,.max
b900 5f 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 _iter=10,.verbose=True).ot_mappi
b920 6e 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 ng_gaussian.fit(Xs=Xs,.Xt=Xt)..X
b940 31 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 1tn.=.ot_mapping_gaussian.transf
b960 6f 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 orm(Xs=X1)..#.use.the.estimated.
b980 6d 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 mapping.Image_mapping_gaussian.=
b9a0 20 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 .minmax(mat2im(X1tn,.I1.shape)).
b9c0 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 ..##############################
b9e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
ba00 23 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 ################.#.Plot.original
ba20 20 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 .images.#.--------------------..
ba40 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 29 29 0a 70 pl.figure(1,.figsize=(6.4,.3)).p
ba60 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 68 6f 77 28 49 31 29 l.subplot(1,.2,.1).pl.imshow(I1)
ba80 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 6d 61 67 65 20 .pl.axis('off').pl.title('Image.
baa0 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 69 6d 73 68 1')..pl.subplot(1,.2,.2).pl.imsh
bac0 6f 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 ow(I2).pl.axis('off').pl.title('
bae0 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 0a 0a 23 23 Image.2').pl.tight_layout()...##
bb00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
bb20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
bb40 23 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 ############.#.Plot.pixel.values
bb60 20 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 .distribution.#.----------------
bb80 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 20 66 69 67 --------------..pl.figure(2,.fig
bba0 73 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 size=(6.4,.5))..pl.subplot(1,.2,
bbc0 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 32 .1).pl.scatter(Xs[:,.0],.Xs[:,.2
bbe0 5d 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 ],.c=Xs).pl.axis([0,.1,.0,.1]).p
bc00 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 27 42 6c 75 65 27 l.xlabel('Red').pl.ylabel('Blue'
bc20 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 6f ).pl.title('Image.1')..pl.subplo
bc40 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],.
bc60 58 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 Xt[:,.2],.c=Xt).pl.axis([0,.1,.0
bc80 2c 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 ,.1]).pl.xlabel('Red').pl.ylabel
bca0 28 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 ('Blue').pl.title('Image.2').pl.
bcc0 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 23 23 23 23 23 23 tight_layout()...###############
bce0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
bd00 23 23 23 23 23 23 23 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 ###############################.
bd20 23 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 #.Plot.transformed.images.#.----
bd40 2d 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 -------------------..pl.figure(2
bd60 2c 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 ,.figsize=(10,.5))..pl.subplot(2
bd80 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 27 6f ,.3,.1).pl.imshow(I1).pl.axis('o
bda0 66 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 ff').pl.title('Im..1')..pl.subpl
bdc0 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 6c 2e 61 78 69 ot(2,.3,.4).pl.imshow(I2).pl.axi
bde0 73 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 s('off').pl.title('Im..2')..pl.s
be00 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 6d 61 67 65 5f ubplot(2,.3,.2).pl.imshow(Image_
be20 65 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 emd).pl.axis('off').pl.title('Em
be40 64 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 dTransport')..pl.subplot(2,.3,.5
be60 29 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 ).pl.imshow(Image_sinkhorn).pl.a
be80 78 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 xis('off').pl.title('SinkhornTra
bea0 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 33 29 0a 70 6c nsport')..pl.subplot(2,.3,.3).pl
bec0 2e 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 .imshow(Image_mapping_linear).pl
bee0 2e 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 .axis('off').pl.title('MappingTr
bf00 61 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 ansport.(linear)')..pl.subplot(2
bf20 2c 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 ,.3,.6).pl.imshow(Image_mapping_
bf40 67 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 gaussian).pl.axis('off').pl.titl
bf60 65 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 e('MappingTransport.(gaussian)')
bf80 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 50 4b .pl.tight_layout()..pl.show().PK
bfa0 03 04 14 00 00 00 00 00 b3 5c 6f 4e 90 0c 61 ee fa 07 00 00 fa 07 00 00 1f 00 00 00 70 6c 6f 74 .........\oN..a.............plot
bfc0 5f 66 72 65 65 5f 73 75 70 70 6f 72 74 5f 62 61 72 79 63 65 6e 74 65 72 2e 70 79 23 20 2d 2a 2d _free_support_barycenter.py#.-*-
bfe0 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 3d .coding:.utf-8.-*-.""".=========
c000 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 ================================
c020 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 32 44 20 66 72 65 65 20 73 75 70 70 6f 72 74 20 57 61 73 73 ===========.2D.free.support.Wass
c040 65 72 73 74 65 69 6e 20 62 61 72 79 63 65 6e 74 65 72 73 20 6f 66 20 64 69 73 74 72 69 62 75 74 erstein.barycenters.of.distribut
c060 69 6f 6e 73 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 ions.===========================
c080 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 49 6c 6c 75 73 =========================..Illus
c0a0 74 72 61 74 69 6f 6e 20 6f 66 20 32 44 20 57 61 73 73 65 72 73 74 65 69 6e 20 62 61 72 79 63 65 tration.of.2D.Wasserstein.baryce
c0c0 6e 74 65 72 73 20 69 66 20 64 69 73 63 72 69 62 75 74 69 6f 6e 73 20 74 68 61 74 20 61 72 65 20 nters.if.discributions.that.are.
c0e0 77 65 69 67 68 74 65 64 0a 73 75 6d 20 6f 66 20 64 69 72 61 63 73 2e 0a 0a 22 22 22 0a 0a 23 20 weighted.sum.of.diracs..."""..#.
c100 41 75 74 68 6f 72 3a 20 56 69 76 69 65 6e 20 53 65 67 75 79 20 3c 76 69 76 69 65 6e 2e 73 65 67 Author:.Vivien.Seguy.<vivien.seg
c120 75 79 40 69 69 70 2e 69 73 74 2e 69 2e 6b 79 6f 74 6f 2d 75 2e 61 63 2e 6a 70 3e 0a 23 0a 23 20 uy@iip.ist.i.kyoto-u.ac.jp>.#.#.
c140 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 75 6d License:.MIT.License..import.num
c160 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 61 62 py.as.np.import.matplotlib.pylab
c180 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...#############
c1a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
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 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.#.------------
c200 2d 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 20 61 6e 64 20 64 61 74 61 20 67 65 6e 65 72 61 -.#%%.parameters.and.data.genera
c220 74 69 6f 6e 0a 4e 20 3d 20 33 0a 64 20 3d 20 32 0a 6d 65 61 73 75 72 65 73 5f 6c 6f 63 61 74 69 tion.N.=.3.d.=.2.measures_locati
c240 6f 6e 73 20 3d 20 5b 5d 0a 6d 65 61 73 75 72 65 73 5f 77 65 69 67 68 74 73 20 3d 20 5b 5d 0a 0a ons.=.[].measures_weights.=.[]..
c260 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 4e 29 3a 0a 0a 20 20 20 20 6e 5f 69 20 3d 20 6e 70 for.i.in.range(N):......n_i.=.np
c280 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 69 6e 74 28 6c 6f 77 3d 31 2c 20 68 69 67 68 3d 32 30 29 20 .random.randint(low=1,.high=20).
c2a0 20 23 20 6e 62 20 73 61 6d 70 6c 65 73 0a 0a 20 20 20 20 6d 75 5f 69 20 3d 20 6e 70 2e 72 61 6e .#.nb.samples......mu_i.=.np.ran
c2c0 64 6f 6d 2e 6e 6f 72 6d 61 6c 28 30 2e 2c 20 34 2e 2c 20 28 64 2c 29 29 20 20 23 20 47 61 75 73 dom.normal(0.,.4.,.(d,))..#.Gaus
c2e0 73 69 61 6e 20 6d 65 61 6e 0a 0a 20 20 20 20 41 5f 69 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 sian.mean......A_i.=.np.random.r
c300 61 6e 64 28 64 2c 20 64 29 0a 20 20 20 20 63 6f 76 5f 69 20 3d 20 6e 70 2e 64 6f 74 28 41 5f 69 and(d,.d).....cov_i.=.np.dot(A_i
c320 2c 20 41 5f 69 2e 74 72 61 6e 73 70 6f 73 65 28 29 29 20 20 23 20 47 61 75 73 73 69 61 6e 20 63 ,.A_i.transpose())..#.Gaussian.c
c340 6f 76 61 72 69 61 6e 63 65 20 6d 61 74 72 69 78 0a 0a 20 20 20 20 78 5f 69 20 3d 20 6f 74 2e 64 ovariance.matrix......x_i.=.ot.d
c360 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 32 44 5f 73 61 6d 70 6c 65 73 5f 67 61 75 73 73 28 6e 5f atasets.make_2D_samples_gauss(n_
c380 69 2c 20 6d 75 5f 69 2c 20 63 6f 76 5f 69 29 20 20 23 20 44 69 72 61 63 20 6c 6f 63 61 74 69 6f i,.mu_i,.cov_i)..#.Dirac.locatio
c3a0 6e 73 0a 20 20 20 20 62 5f 69 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 75 6e 69 66 6f 72 6d 28 30 ns.....b_i.=.np.random.uniform(0
c3c0 2e 2c 20 31 2e 2c 20 28 6e 5f 69 2c 29 29 0a 20 20 20 20 62 5f 69 20 3d 20 62 5f 69 20 2f 20 6e .,.1.,.(n_i,)).....b_i.=.b_i./.n
c3e0 70 2e 73 75 6d 28 62 5f 69 29 20 20 23 20 44 69 72 61 63 20 77 65 69 67 68 74 73 0a 0a 20 20 20 p.sum(b_i)..#.Dirac.weights.....
c400 20 6d 65 61 73 75 72 65 73 5f 6c 6f 63 61 74 69 6f 6e 73 2e 61 70 70 65 6e 64 28 78 5f 69 29 0a .measures_locations.append(x_i).
c420 20 20 20 20 6d 65 61 73 75 72 65 73 5f 77 65 69 67 68 74 73 2e 61 70 70 65 6e 64 28 62 5f 69 29 ....measures_weights.append(b_i)
c440 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 ...#############################
c460 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
c480 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 66 72 65 65 #################.#.Compute.free
c4a0 20 73 75 70 70 6f 72 74 20 62 61 72 79 63 65 6e 74 65 72 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .support.barycenter.#.----------
c4c0 2d 2d 2d 0a 0a 6b 20 3d 20 31 30 20 20 23 20 6e 75 6d 62 65 72 20 6f 66 20 44 69 72 61 63 73 20 ---..k.=.10..#.number.of.Diracs.
c4e0 6f 66 20 74 68 65 20 62 61 72 79 63 65 6e 74 65 72 0a 58 5f 69 6e 69 74 20 3d 20 6e 70 2e 72 61 of.the.barycenter.X_init.=.np.ra
c500 6e 64 6f 6d 2e 6e 6f 72 6d 61 6c 28 30 2e 2c 20 31 2e 2c 20 28 6b 2c 20 64 29 29 20 20 23 20 69 ndom.normal(0.,.1.,.(k,.d))..#.i
c520 6e 69 74 69 61 6c 20 44 69 72 61 63 20 6c 6f 63 61 74 69 6f 6e 73 0a 62 20 3d 20 6e 70 2e 6f 6e nitial.Dirac.locations.b.=.np.on
c540 65 73 28 28 6b 2c 29 29 20 2f 20 6b 20 20 23 20 77 65 69 67 68 74 73 20 6f 66 20 74 68 65 20 62 es((k,))./.k..#.weights.of.the.b
c560 61 72 79 63 65 6e 74 65 72 20 28 69 74 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 6f 70 74 69 6d 69 arycenter.(it.will.not.be.optimi
c580 7a 65 64 2c 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6f 70 74 69 zed,.only.the.locations.are.opti
c5a0 6d 69 7a 65 64 29 0a 0a 58 20 3d 20 6f 74 2e 6c 70 2e 66 72 65 65 5f 73 75 70 70 6f 72 74 5f 62 mized)..X.=.ot.lp.free_support_b
c5c0 61 72 79 63 65 6e 74 65 72 28 6d 65 61 73 75 72 65 73 5f 6c 6f 63 61 74 69 6f 6e 73 2c 20 6d 65 arycenter(measures_locations,.me
c5e0 61 73 75 72 65 73 5f 77 65 69 67 68 74 73 2c 20 58 5f 69 6e 69 74 2c 20 62 29 0a 0a 0a 23 23 23 asures_weights,.X_init,.b)...###
c600 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
c620 23 23 23 23 23 23 23 23 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 0a 23 20 50 6c 6f 74 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d ###########.#.Plot.data.#.------
c660 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 29 0a 66 6f 72 20 28 78 5f 69 2c 20 62 5f 69 29 ---..pl.figure(1).for.(x_i,.b_i)
c680 20 69 6e 20 7a 69 70 28 6d 65 61 73 75 72 65 73 5f 6c 6f 63 61 74 69 6f 6e 73 2c 20 6d 65 61 73 .in.zip(measures_locations,.meas
c6a0 75 72 65 73 5f 77 65 69 67 68 74 73 29 3a 0a 20 20 20 20 63 6f 6c 6f 72 20 3d 20 6e 70 2e 72 61 ures_weights):.....color.=.np.ra
c6c0 6e 64 6f 6d 2e 72 61 6e 64 69 6e 74 28 6c 6f 77 3d 31 2c 20 68 69 67 68 3d 31 30 20 2a 20 4e 29 ndom.randint(low=1,.high=10.*.N)
c6e0 0a 20 20 20 20 70 6c 2e 73 63 61 74 74 65 72 28 78 5f 69 5b 3a 2c 20 30 5d 2c 20 78 5f 69 5b 3a .....pl.scatter(x_i[:,.0],.x_i[:
c700 2c 20 31 5d 2c 20 73 3d 62 20 2a 20 31 30 30 30 2c 20 6c 61 62 65 6c 3d 27 69 6e 70 75 74 20 6d ,.1],.s=b.*.1000,.label='input.m
c720 65 61 73 75 72 65 27 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 5b 3a 2c 20 30 5d 2c 20 58 5b 3a easure').pl.scatter(X[:,.0],.X[:
c740 2c 20 31 5d 2c 20 73 3d 62 20 2a 20 31 30 30 30 2c 20 63 3d 27 62 6c 61 63 6b 27 2c 20 6d 61 72 ,.1],.s=b.*.1000,.c='black',.mar
c760 6b 65 72 3d 27 5e 27 2c 20 6c 61 62 65 6c 3d 27 32 2d 57 61 73 73 65 72 73 74 65 69 6e 20 62 61 ker='^',.label='2-Wasserstein.ba
c780 72 79 63 65 6e 74 65 72 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 44 61 74 61 20 6d 65 61 73 75 72 rycenter').pl.title('Data.measur
c7a0 65 73 20 61 6e 64 20 74 68 65 69 72 20 62 61 72 79 63 65 6e 74 65 72 27 29 0a 70 6c 2e 6c 65 67 es.and.their.barycenter').pl.leg
c7c0 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 a6 end(loc=0).pl.show().PK.........
c7e0 5d 6f 4e 6f 6c 58 5b 88 13 00 00 88 13 00 00 13 00 00 00 70 6c 6f 74 5f 4f 54 5f 4c 31 5f 76 73 ]oNolX[............plot_OT_L1_vs
c800 5f 4c 32 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 _L2.py#.-*-.coding:.utf-8.-*-.""
c820 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 ".==============================
c840 3d 3d 3d 3d 3d 3d 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 ============.2D.Optimal.transpor
c860 74 20 66 6f 72 20 64 69 66 66 65 72 65 6e 74 20 6d 65 74 72 69 63 73 0a 3d 3d 3d 3d 3d 3d 3d 3d t.for.different.metrics.========
c880 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 ================================
c8a0 3d 3d 0a 0a 32 44 20 4f 54 20 6f 6e 20 65 6d 70 69 72 69 63 61 6c 20 64 69 73 74 72 69 62 75 74 ==..2D.OT.on.empirical.distribut
c8c0 69 6f 20 20 77 69 74 68 20 64 69 66 66 65 72 65 6e 74 20 67 6f 75 6e 64 20 6d 65 74 72 69 63 2e io..with.different.gound.metric.
c8e0 0a 0a 53 74 6f 6c 65 20 74 68 65 20 66 69 67 75 72 65 20 69 64 65 61 20 66 72 6f 6d 20 46 69 67 ..Stole.the.figure.idea.from.Fig
c900 2e 20 31 20 61 6e 64 20 32 20 69 6e 0a 68 74 74 70 73 3a 2f 2f 61 72 78 69 76 2e 6f 72 67 2f 70 ..1.and.2.in.https://arxiv.org/p
c920 64 66 2f 31 37 30 36 2e 30 37 36 35 30 2e 70 64 66 0a 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f df/1706.07650.pdf..."""..#.Autho
c940 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 75 6e r:.Remi.Flamary.<remi.flamary@un
c960 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 73 65 ice.fr>.#.#.License:.MIT.License
c980 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 74 70 ..import.numpy.as.np.import.matp
c9a0 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 69 6d 70 lotlib.pylab.as.pl.import.ot.imp
c9c0 6f 72 74 20 6f 74 2e 70 6c 6f 74 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ort.ot.plot..###################
c9e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
ca00 23 23 23 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 61 ###########################.#.Da
ca20 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 67 0a 23 20 2d 2d 2d taset.1.:.uniform.sampling.#.---
ca40 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 6e 20 3d 20 32 -------------------------..n.=.2
ca60 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 65 72 6f 73 28 28 6e 0..#.nb.samples.xs.=.np.zeros((n
ca80 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 65 28 6e 29 20 2b 20 ,.2)).xs[:,.0].=.np.arange(n).+.
caa0 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 29 20 2b 20 31 29 20 1.xs[:,.1].=.(np.arange(n).+.1).
cac0 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 72 69 63 74 6c 79 20 *.-0.001..#.to.make.it.strictly.
cae0 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 28 6e 2c 20 32 29 29 convex.....xt.=.np.zeros((n,.2))
cb00 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 2b 20 31 0a 0a 61 2c .xt[:,.1].=.np.arange(n).+.1..a,
cb20 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 6e 29 20 20 23 20 75 .b.=.ot.unif(n),.ot.unif(n)..#.u
cb40 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 6d 70 6c 65 73 0a 0a niform.distribution.on.samples..
cb60 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 74 28 78 73 2c 20 78 #.loss.matrix.M1.=.ot.dist(xs,.x
cb80 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 20 2f 3d 20 4d 31 2e t,.metric='euclidean').M1./=.M1.
cba0 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 20 6f 74 2e 64 69 73 max()..#.loss.matrix.M2.=.ot.dis
cbc0 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 64 65 61 6e 27 29 0a t(xs,.xt,.metric='sqeuclidean').
cbe0 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 74 72 69 78 0a 4d 70 M2./=.M2.max()..#.loss.matrix.Mp
cc00 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 2c 20 6d 65 74 72 69 .=.np.sqrt(ot.dist(xs,.xt,.metri
cc20 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 6d 61 78 28 29 0a 0a c='euclidean')).Mp./=.Mp.max()..
cc40 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 7a 65 3d 28 37 2c 20 #.Data.pl.figure(1,.figsize=(7,.
cc60 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 2c 20 30 5d 2c 20 78 3)).pl.clf().pl.plot(xs[:,.0],.x
cc80 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 72 63 65 20 73 61 6d s[:,.1],.'+b',.label='Source.sam
cca0 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 78 74 5b 3a 2c 20 31 ples').pl.plot(xt[:,.0],.xt[:,.1
ccc0 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 6d 70 6c 65 73 27 29 ],.'xr',.label='Target.samples')
cce0 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 65 28 27 53 6f 75 72 .pl.axis('equal').pl.title('Sour
cd00 63 65 20 61 6e 64 20 74 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 0a ce.and.target.distributions')...
cd20 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 28 32 2c 20 66 69 67 #.Cost.matrices.pl.figure(2,.fig
cd40 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 31 2c 20 33 2c 20 31 size=(7,.3))..pl.subplot(1,.3,.1
cd60 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 74 69 6f 6e 3d 27 6e ).pl.imshow(M1,.interpolation='n
cd80 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 65 61 6e 20 63 6f 73 earest').pl.title('Euclidean.cos
cda0 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 70 6c 2e 69 6d 73 68 t')..pl.subplot(1,.3,.2).pl.imsh
cdc0 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 72 65 73 74 27 29 0a ow(M2,.interpolation='nearest').
cde0 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 61 6e 20 63 6f 73 74 pl.title('Squared.Euclidean.cost
ce00 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 6c 2e 69 6d 73 68 6f ')..pl.subplot(1,.3,.3).pl.imsho
ce20 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 65 73 74 27 29 0a 70 w(Mp,.interpolation='nearest').p
ce40 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 6f 73 74 27 29 0a 70 l.title('Sqrt.Euclidean.cost').p
ce60 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 23 23 23 23 23 23 23 l.tight_layout()..##############
ce80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
cea0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
cec0 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 74 72 69 63 65 73 0a .#.Dataset.1.:.Plot.OT.Matrices.
cee0 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 0a 0a #.----------------------------..
cf00 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
cf20 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
cf40 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
cf60 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 6c 2e 73 75 62 70 6c ure(3,.figsize=(7,.3))..pl.subpl
cf80 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
cfa0 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]
cfc0 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],.'+
cfe0 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
d000 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
d020 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
d040 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
d060 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
d080 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
d0a0 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
d0c0 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',.
d0e0 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(
d100 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=
d120 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
d140 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('
d160 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
d180 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
d1a0 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]
d1c0 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],.'+
d1e0 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
d200 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
d220 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
d240 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
d260 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
d280 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 23 23 23 23 23 23 23 _layout()..pl.show()...#########
d2a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
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 0a 23 20 44 61 74 61 73 65 74 20 32 20 3a 20 50 61 72 74 69 61 6c 20 63 69 72 63 #####.#.Dataset.2.:.Partial.circ
d300 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 2d 2d 2d 2d 2d 2d 0a le.#.--------------------------.
d320 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 74 20 3d 20 6e 70 2e .n.=.50..#.nb.samples.xtot.=.np.
d340 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 20 30 5d 20 3d 20 6e zeros((n.+.1,.2)).xtot[:,.0].=.n
d360 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 20 31 29 20 2b 20 31 p.cos(.....(np.arange(n.+.1).+.1
d380 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 20 6e 70 2e 70 69 29 .0).*.0.9./.(n.+.2).*.2.*.np.pi)
d3a0 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 20 28 6e 70 2e 61 72 .xtot[:,.1].=.np.sin(.....(np.ar
d3c0 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 2f 20 28 6e 20 2b 20 ange(n.+.1).+.1.0).*.0.9./.(n.+.
d3e0 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 74 5b 3a 6e 2c 20 3a 2).*.2.*.np.pi)..xs.=.xtot[:n,.:
d400 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 3d 20 6f 74 2e 75 6e ].xt.=.xtot[1:,.:]..a,.b.=.ot.un
d420 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 6f 72 6d 20 64 69 73 if(n),.ot.unif(n)..#.uniform.dis
d440 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 6f 73 73 20 6d 61 74 tribution.on.samples..#.loss.mat
d460 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 6d 65 74 72 69 63 3d rix.M1.=.ot.dist(xs,.xt,.metric=
d480 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 28 29 0a 0a 23 20 6c 'euclidean').M1./=.M1.max()..#.l
d4a0 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 73 2c 20 78 74 2c 20 oss.matrix.M2.=.ot.dist(xs,.xt,.
d4c0 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 2f 3d 20 4d 32 2e 6d metric='sqeuclidean').M2./=.M2.m
d4e0 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 6e 70 2e 73 71 72 74 ax()..#.loss.matrix.Mp.=.np.sqrt
d500 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 65 75 63 6c 69 64 65 (ot.dist(xs,.xt,.metric='euclide
d520 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 44 61 74 61 0a 70 6c an')).Mp./=.Mp.max()...#.Data.pl
d540 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 29 0a 70 6c 2e 63 6c .figure(4,.figsize=(7,.3)).pl.cl
d560 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 3a 2c 20 31 5d 2c 20 f().pl.plot(xs[:,.0],.xs[:,.1],.
d580 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 6c '+b',.label='Source.samples').pl
d5a0 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 20 .plot(xt[:,.0],.xt[:,.1],.'xr',.
d5c0 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 28 label='Target.samples').pl.axis(
d5e0 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 20 61 6e 64 20 74 72 'equal').pl.title('Source.and.tr
d600 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 43 6f 73 74 20 6d 61 aget.distributions')...#.Cost.ma
d620 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 7a 65 3d 28 37 2c 20 trices.pl.figure(5,.figsize=(7,.
d640 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 70 6c 2e 69 6d 73 68 3))..pl.subplot(1,.3,.1).pl.imsh
d660 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 72 65 73 74 27 29 0a ow(M1,.interpolation='nearest').
d680 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 29 0a 0a 70 6c 2e 73 pl.title('Euclidean.cost')..pl.s
d6a0 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 28 4d 32 2c 20 69 6e ubplot(1,.3,.2).pl.imshow(M2,.in
d6c0 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(
d6e0 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 0a 0a 70 6c 2e 73 75 'Squared.Euclidean.cost')..pl.su
d700 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 4d 70 2c 20 69 6e 74 bplot(1,.3,.3).pl.imshow(Mp,.int
d720 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 27 erpolation='nearest').pl.title('
d740 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 74 69 67 68 74 5f 6c Sqrt.Euclidean.cost').pl.tight_l
d760 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()..#######################
d780 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
d7a0 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 61 74 61 73 65 #######################.#.Datase
d7c0 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 20 2d 2d 2d 2d 2d 2d t.2.:.Plot..OT.Matrices.#.------
d7e0 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 0a 23 25 25 20 45 4d -----------------------...#%%.EM
d800 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 32 20 3d 20 6f 74 2e D.G1.=.ot.emd(a,.b,.M1).G2.=.ot.
d820 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 28 61 2c 20 62 2c 20 emd(a,.b,.M2).Gp.=.ot.emd(a,.b,.
d840 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 75 72 65 28 36 2c 20 Mp)..#.OT.matrices.pl.figure(6,.
d860 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 31 2c 20 33 figsize=(7,.3))..pl.subplot(1,.3
d880 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 65 73 5f 6d 61 74 28 ,.1).ot.plot.plot2D_samples_mat(
d8a0 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 29 0a 70 6c 2e 70 6c xs,.xt,.G1,.c=[.5,..5,.1]).pl.pl
d8c0 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 6c 61 62 ot(xs[:,.0],.xs[:,.1],.'+b',.lab
d8e0 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 78 74 5b el='Source.samples').pl.plot(xt[
d900 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 27 54 61 :,.0],.xt[:,.1],.'xr',.label='Ta
d920 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 27 29 0a rget.samples').pl.axis('equal').
d940 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 4f 54 20 #.pl.legend(loc=0).pl.title('OT.
d960 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 2c 20 33 2c 20 32 29 Euclidean')..pl.subplot(1,.3,.2)
d980 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 73 2c 20 .ot.plot.plot2D_samples_mat(xs,.
d9a0 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 2e 70 6c 6f 74 28 78 xt,.G2,.c=[.5,..5,.1]).pl.plot(x
d9c0 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 27 s[:,.0],.xs[:,.1],.'+b',.label='
d9e0 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 2c 20 30 Source.samples').pl.plot(xt[:,.0
da00 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 67 65 74 ],.xt[:,.1],.'xr',.label='Target
da20 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 27 29 0a 23 20 70 6c .samples').pl.axis('equal').#.pl
da40 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 4f 54 20 73 71 75 61 .legend(loc=0).pl.title('OT.squa
da60 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 6f 74 28 31 2c 20 33 red.Euclidean')..pl.subplot(1,.3
da80 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 65 73 5f 6d 61 74 28 ,.3).ot.plot.plot2D_samples_mat(
daa0 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 29 0a 70 6c 2e 70 6c xs,.xt,.Gp,.c=[.5,..5,.1]).pl.pl
dac0 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 6c 61 62 ot(xs[:,.0],.xs[:,.1],.'+b',.lab
dae0 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 78 74 5b el='Source.samples').pl.plot(xt[
db00 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 27 54 61 :,.0],.xt[:,.1],.'xr',.label='Ta
db20 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 27 29 0a rget.samples').pl.axis('equal').
db40 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 4f 54 20 #.pl.legend(loc=0).pl.title('OT.
db60 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 5f 6c 61 79 6f 75 74 sqrt.Euclidean').pl.tight_layout
db80 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 a6 5d 6f 4e a6 16 4e 83 ()..pl.show().PK.........]oN..N.
dba0 2e 17 00 00 2e 17 00 00 21 00 00 00 70 6c 6f 74 5f 62 61 72 79 63 65 6e 74 65 72 5f 6c 70 5f 76 ........!...plot_barycenter_lp_v
dbc0 73 5f 65 6e 74 72 6f 70 69 63 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 s_entropic.py#.-*-.coding:.utf-8
dbe0 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 3d .-*-.""".=======================
dc00 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 ================================
dc20 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 31 44 20 57 61 ==========================.1D.Wa
dc40 73 73 65 72 73 74 65 69 6e 20 62 61 72 79 63 65 6e 74 65 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 sserstein.barycenter.comparison.
dc60 62 65 74 77 65 65 6e 20 65 78 61 63 74 20 4c 50 20 61 6e 64 20 65 6e 74 72 6f 70 69 63 20 72 65 between.exact.LP.and.entropic.re
dc80 67 75 6c 61 72 69 7a 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 gularization.===================
dca0 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 ================================
dcc0 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 ==============================..
dce0 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
dd00 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 74 putation.of.regularized.Wasserst
dd20 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
dd40 5d 20 61 6e 64 20 65 78 61 63 74 20 4c 50 20 62 61 72 79 63 65 6e 74 65 72 73 20 75 73 69 6e 67 ].and.exact.LP.barycenters.using
dd60 20 73 74 61 6e 64 61 72 64 20 4c 50 20 73 6f 6c 76 65 72 2e 0a 0a 49 74 20 72 65 70 72 6f 64 75 .standard.LP.solver...It.reprodu
dd80 63 65 73 20 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 46 69 67 75 72 65 20 33 2e 31 20 61 6e 64 ces.approximately.Figure.3.1.and
dda0 20 33 2e 32 20 66 72 6f 6d 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 70 61 70 65 72 3a 0a 43 .3.2.from.the.following.paper:.C
ddc0 75 74 75 72 69 2c 20 4d 2e 2c 20 26 20 50 65 79 72 c3 a9 2c 20 47 2e 20 28 32 30 31 36 29 2e 20 uturi,.M.,.&.Peyr..,.G..(2016)..
dde0 41 20 73 6d 6f 6f 74 68 65 64 20 64 75 61 6c 20 61 70 70 72 6f 61 63 68 20 66 6f 72 20 76 61 72 A.smoothed.dual.approach.for.var
de00 69 61 74 69 6f 6e 61 6c 0a 57 61 73 73 65 72 73 74 65 69 6e 20 70 72 6f 62 6c 65 6d 73 2e 20 53 iational.Wasserstein.problems..S
de20 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 6e 63 65 73 2c IAM.Journal.on.Imaging.Sciences,
de40 20 39 28 31 29 2c 20 33 32 30 2d 33 34 33 2e 0a 0a 5b 33 5d 20 42 65 6e 61 6d 6f 75 2c 20 4a 2e .9(1),.320-343...[3].Benamou,.J.
de60 20 44 2e 2c 20 43 61 72 6c 69 65 72 2c 20 47 2e 2c 20 43 75 74 75 72 69 2c 20 4d 2e 2c 20 4e 65 .D.,.Carlier,.G.,.Cuturi,.M.,.Ne
de80 6e 6e 61 2c 20 4c 2e 2c 20 26 20 50 65 79 72 c3 a9 2c 20 47 2e 20 28 32 30 31 35 29 2e 0a 49 74 nna,.L.,.&.Peyr..,.G..(2015)..It
dea0 65 72 61 74 69 76 65 20 42 72 65 67 6d 61 6e 20 70 72 6f 6a 65 63 74 69 6f 6e 73 20 66 6f 72 20 erative.Bregman.projections.for.
dec0 72 65 67 75 6c 61 72 69 7a 65 64 20 74 72 61 6e 73 70 6f 72 74 61 74 69 6f 6e 20 70 72 6f 62 6c regularized.transportation.probl
dee0 65 6d 73 0a 53 49 41 4d 20 4a 6f 75 72 6e 61 6c 20 6f 6e 20 53 63 69 65 6e 74 69 66 69 63 20 43 ems.SIAM.Journal.on.Scientific.C
df00 6f 6d 70 75 74 69 6e 67 2c 20 33 37 28 32 29 2c 20 41 31 31 31 31 2d 41 31 31 33 38 2e 0a 0a 22 omputing,.37(2),.A1111-A1138..."
df20 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 6d 69 ""..#.Author:.Remi.Flamary.<remi
df40 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 3a 20 .flamary@unice.fr>.#.#.License:.
df60 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 70 0a MIT.License..import.numpy.as.np.
df80 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
dfa0 70 6f 72 74 20 6f 74 0a 23 20 6e 65 63 65 73 73 61 72 79 20 66 6f 72 20 33 64 20 70 6c 6f 74 20 port.ot.#.necessary.for.3d.plot.
dfc0 65 76 65 6e 20 69 66 20 6e 6f 74 20 75 73 65 64 0a 66 72 6f 6d 20 6d 70 6c 5f 74 6f 6f 6c 6b 69 even.if.not.used.from.mpl_toolki
dfe0 74 73 2e 6d 70 6c 6f 74 33 64 20 69 6d 70 6f 72 74 20 41 78 65 73 33 44 20 20 23 20 6e 6f 71 61 ts.mplot3d.import.Axes3D..#.noqa
e000 0a 66 72 6f 6d 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 63 6f 6c 6c 65 63 74 69 6f 6e 73 20 69 6d 70 .from.matplotlib.collections.imp
e020 6f 72 74 20 50 6f 6c 79 43 6f 6c 6c 65 63 74 69 6f 6e 20 20 23 20 6e 6f 71 61 0a 0a 23 69 6d 70 ort.PolyCollection..#.noqa..#imp
e040 6f 72 74 20 6f 74 2e 6c 70 2e 63 76 78 20 61 73 20 63 76 78 0a 0a 23 23 23 23 23 23 23 23 23 23 ort.ot.lp.cvx.as.cvx..##########
e060 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
e080 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
e0a0 23 23 23 23 0a 23 20 47 61 75 73 73 69 61 6e 20 44 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d ####.#.Gaussian.Data.#.---------
e0c0 2d 2d 2d 2d 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 70 72 6f 62 6c 65 6d 73 20 3d ----..#%%.parameters..problems.=
e0e0 20 5b 5d 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 .[]..n.=.100..#.nb.bins..#.bin.p
e100 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 70 65 3d ositions.x.=.np.arange(n,.dtype=
e120 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 69 62 75 np.float64)..#.Gaussian.distribu
e140 74 69 6f 6e 73 0a 23 20 47 61 75 73 73 69 61 6e 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 61 tions.#.Gaussian.distributions.a
e160 31 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 31 44 5f 67 61 75 73 73 28 6e 2c 1.=.ot.datasets.make_1D_gauss(n,
e180 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 64 0a 61 .m=20,.s=5)..#.m=.mean,.s=.std.a
e1a0 32 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 31 44 5f 67 61 75 73 73 28 6e 2c 2.=.ot.datasets.make_1D_gauss(n,
e1c0 20 6d 3d 36 30 2c 20 73 3d 38 29 0a 0a 23 20 63 72 65 61 74 69 6e 67 20 6d 61 74 72 69 78 20 41 .m=60,.s=8)..#.creating.matrix.A
e1e0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61 6c 6c 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 41 20 .containing.all.distributions.A.
e200 3d 20 6e 70 2e 76 73 74 61 63 6b 28 28 61 31 2c 20 61 32 29 29 2e 54 0a 6e 5f 64 69 73 74 72 69 =.np.vstack((a1,.a2)).T.n_distri
e220 62 75 74 69 6f 6e 73 20 3d 20 41 2e 73 68 61 70 65 5b 31 5d 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 butions.=.A.shape[1]..#.loss.mat
e240 72 69 78 20 2b 20 6e 6f 72 6d 61 6c 69 7a 61 74 69 6f 6e 0a 4d 20 3d 20 6f 74 2e 75 74 69 6c 73 rix.+.normalization.M.=.ot.utils
e260 2e 64 69 73 74 30 28 6e 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 29 0a 0a 0a 23 25 25 20 70 6c 6f .dist0(n).M./=.M.max()...#%%.plo
e280 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 28 31 t.the.distributions..pl.figure(1
e2a0 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 29 29 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e ,.figsize=(6.4,.3)).for.i.in.ran
e2c0 67 65 28 6e 5f 64 69 73 74 72 69 62 75 74 69 6f 6e 73 29 3a 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 ge(n_distributions):.....pl.plot
e2e0 28 78 2c 20 41 5b 3a 2c 20 69 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 44 69 73 74 72 69 62 75 74 (x,.A[:,.i]).pl.title('Distribut
e300 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 23 25 25 20 62 61 ions').pl.tight_layout()..#%%.ba
e320 72 79 63 65 6e 74 65 72 20 63 6f 6d 70 75 74 61 74 69 6f 6e 0a 0a 61 6c 70 68 61 20 3d 20 30 2e rycenter.computation..alpha.=.0.
e340 35 20 20 23 20 30 3c 3d 61 6c 70 68 61 3c 3d 31 0a 77 65 69 67 68 74 73 20 3d 20 6e 70 2e 61 72 5..#.0<=alpha<=1.weights.=.np.ar
e360 72 61 79 28 5b 31 20 2d 20 61 6c 70 68 61 2c 20 61 6c 70 68 61 5d 29 0a 0a 23 20 6c 32 62 61 72 ray([1.-.alpha,.alpha])..#.l2bar
e380 79 0a 62 61 72 79 5f 6c 32 20 3d 20 41 2e 64 6f 74 28 77 65 69 67 68 74 73 29 0a 0a 23 20 77 61 y.bary_l2.=.A.dot(weights)..#.wa
e3a0 73 73 65 72 73 74 65 69 6e 0a 72 65 67 20 3d 20 31 65 2d 33 0a 6f 74 2e 74 69 63 28 29 0a 62 61 sserstein.reg.=.1e-3.ot.tic().ba
e3c0 72 79 5f 77 61 73 73 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 ry_wass.=.ot.bregman.barycenter(
e3e0 41 2c 20 4d 2c 20 72 65 67 2c 20 77 65 69 67 68 74 73 29 0a 6f 74 2e 74 6f 63 28 29 0a 0a 0a 6f A,.M,.reg,.weights).ot.toc()...o
e400 74 2e 74 69 63 28 29 0a 62 61 72 79 5f 77 61 73 73 32 20 3d 20 6f 74 2e 6c 70 2e 62 61 72 79 63 t.tic().bary_wass2.=.ot.lp.baryc
e420 65 6e 74 65 72 28 41 2c 20 4d 2c 20 77 65 69 67 68 74 73 2c 20 73 6f 6c 76 65 72 3d 27 69 6e 74 enter(A,.M,.weights,.solver='int
e440 65 72 69 6f 72 2d 70 6f 69 6e 74 27 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 6f 74 2e 74 erior-point',.verbose=True).ot.t
e460 6f 63 28 29 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 2e 73 oc()..pl.figure(2).pl.clf().pl.s
e480 75 62 70 6c 6f 74 28 32 2c 20 31 2c 20 31 29 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6e ubplot(2,.1,.1).for.i.in.range(n
e4a0 5f 64 69 73 74 72 69 62 75 74 69 6f 6e 73 29 3a 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 2c 20 _distributions):.....pl.plot(x,.
e4c0 41 5b 3a 2c 20 69 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 44 69 73 74 72 69 62 75 74 69 6f 6e 73 A[:,.i]).pl.title('Distributions
e4e0 27 29 0a 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 6c 6f 74 28 ')..pl.subplot(2,.1,.2).pl.plot(
e500 78 2c 20 62 61 72 79 5f 6c 32 2c 20 27 72 27 2c 20 6c 61 62 65 6c 3d 27 6c 32 27 29 0a 70 6c 2e x,.bary_l2,.'r',.label='l2').pl.
e520 70 6c 6f 74 28 78 2c 20 62 61 72 79 5f 77 61 73 73 2c 20 27 67 27 2c 20 6c 61 62 65 6c 3d 27 52 plot(x,.bary_wass,.'g',.label='R
e540 65 67 20 57 61 73 73 65 72 73 74 65 69 6e 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 61 72 79 eg.Wasserstein').pl.plot(x,.bary
e560 5f 77 61 73 73 32 2c 20 27 62 27 2c 20 6c 61 62 65 6c 3d 27 4c 50 20 57 61 73 73 65 72 73 74 65 _wass2,.'b',.label='LP.Wasserste
e580 69 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 in').pl.legend().pl.title('Baryc
e5a0 65 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 70 72 6f 62 enters').pl.tight_layout()..prob
e5c0 6c 65 6d 73 2e 61 70 70 65 6e 64 28 5b 41 2c 20 5b 62 61 72 79 5f 6c 32 2c 20 62 61 72 79 5f 77 lems.append([A,.[bary_l2,.bary_w
e5e0 61 73 73 2c 20 62 61 72 79 5f 77 61 73 73 32 5d 5d 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 ass,.bary_wass2]])..############
e600 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
e620 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
e640 23 23 0a 23 20 44 69 72 61 63 20 44 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 ##.#.Dirac.Data.#.----------..#%
e660 25 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 61 31 20 3d 20 31 2e 30 20 2a 20 28 78 20 3e 20 31 30 %.parameters..a1.=.1.0.*.(x.>.10
e680 29 20 2a 20 28 78 20 3c 20 35 30 29 0a 61 32 20 3d 20 31 2e 30 20 2a 20 28 78 20 3e 20 36 30 29 ).*.(x.<.50).a2.=.1.0.*.(x.>.60)
e6a0 20 2a 20 28 78 20 3c 20 38 30 29 0a 0a 61 31 20 2f 3d 20 61 31 2e 73 75 6d 28 29 0a 61 32 20 2f .*.(x.<.80)..a1./=.a1.sum().a2./
e6c0 3d 20 61 32 2e 73 75 6d 28 29 0a 0a 23 20 63 72 65 61 74 69 6e 67 20 6d 61 74 72 69 78 20 41 20 =.a2.sum()..#.creating.matrix.A.
e6e0 63 6f 6e 74 61 69 6e 69 6e 67 20 61 6c 6c 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 41 20 3d containing.all.distributions.A.=
e700 20 6e 70 2e 76 73 74 61 63 6b 28 28 61 31 2c 20 61 32 29 29 2e 54 0a 6e 5f 64 69 73 74 72 69 62 .np.vstack((a1,.a2)).T.n_distrib
e720 75 74 69 6f 6e 73 20 3d 20 41 2e 73 68 61 70 65 5b 31 5d 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 utions.=.A.shape[1]..#.loss.matr
e740 69 78 20 2b 20 6e 6f 72 6d 61 6c 69 7a 61 74 69 6f 6e 0a 4d 20 3d 20 6f 74 2e 75 74 69 6c 73 2e ix.+.normalization.M.=.ot.utils.
e760 64 69 73 74 30 28 6e 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 29 0a 0a 0a 23 25 25 20 70 6c 6f 74 dist0(n).M./=.M.max()...#%%.plot
e780 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 28 31 2c .the.distributions..pl.figure(1,
e7a0 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 29 29 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 .figsize=(6.4,.3)).for.i.in.rang
e7c0 65 28 6e 5f 64 69 73 74 72 69 62 75 74 69 6f 6e 73 29 3a 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 28 e(n_distributions):.....pl.plot(
e7e0 78 2c 20 41 5b 3a 2c 20 69 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 44 69 73 74 72 69 62 75 74 69 x,.A[:,.i]).pl.title('Distributi
e800 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 25 25 20 62 61 ons').pl.tight_layout()...#%%.ba
e820 72 79 63 65 6e 74 65 72 20 63 6f 6d 70 75 74 61 74 69 6f 6e 0a 0a 61 6c 70 68 61 20 3d 20 30 2e rycenter.computation..alpha.=.0.
e840 35 20 20 23 20 30 3c 3d 61 6c 70 68 61 3c 3d 31 0a 77 65 69 67 68 74 73 20 3d 20 6e 70 2e 61 72 5..#.0<=alpha<=1.weights.=.np.ar
e860 72 61 79 28 5b 31 20 2d 20 61 6c 70 68 61 2c 20 61 6c 70 68 61 5d 29 0a 0a 23 20 6c 32 62 61 72 ray([1.-.alpha,.alpha])..#.l2bar
e880 79 0a 62 61 72 79 5f 6c 32 20 3d 20 41 2e 64 6f 74 28 77 65 69 67 68 74 73 29 0a 0a 23 20 77 61 y.bary_l2.=.A.dot(weights)..#.wa
e8a0 73 73 65 72 73 74 65 69 6e 0a 72 65 67 20 3d 20 31 65 2d 33 0a 6f 74 2e 74 69 63 28 29 0a 62 61 sserstein.reg.=.1e-3.ot.tic().ba
e8c0 72 79 5f 77 61 73 73 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 ry_wass.=.ot.bregman.barycenter(
e8e0 41 2c 20 4d 2c 20 72 65 67 2c 20 77 65 69 67 68 74 73 29 0a 6f 74 2e 74 6f 63 28 29 0a 0a 0a 6f A,.M,.reg,.weights).ot.toc()...o
e900 74 2e 74 69 63 28 29 0a 62 61 72 79 5f 77 61 73 73 32 20 3d 20 6f 74 2e 6c 70 2e 62 61 72 79 63 t.tic().bary_wass2.=.ot.lp.baryc
e920 65 6e 74 65 72 28 41 2c 20 4d 2c 20 77 65 69 67 68 74 73 2c 20 73 6f 6c 76 65 72 3d 27 69 6e 74 enter(A,.M,.weights,.solver='int
e940 65 72 69 6f 72 2d 70 6f 69 6e 74 27 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 6f 74 2e 74 erior-point',.verbose=True).ot.t
e960 6f 63 28 29 0a 0a 0a 70 72 6f 62 6c 65 6d 73 2e 61 70 70 65 6e 64 28 5b 41 2c 20 5b 62 61 72 79 oc()...problems.append([A,.[bary
e980 5f 6c 32 2c 20 62 61 72 79 5f 77 61 73 73 2c 20 62 61 72 79 5f 77 61 73 73 32 5d 5d 29 0a 0a 70 _l2,.bary_wass,.bary_wass2]])..p
e9a0 6c 2e 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 l.figure(2).pl.clf().pl.subplot(
e9c0 32 2c 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 2,.1,.1).for.i.in.range(n_distri
e9e0 62 75 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 butions):.....pl.plot(x,.A[:,.i]
ea00 29 0a 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 ).pl.title('Distributions')..pl.
ea20 73 75 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 subplot(2,.1,.2).pl.plot(x,.bary
ea40 5f 6c 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 _l2,.'r',.label='l2').pl.plot(x,
ea60 20 62 61 72 79 5f 77 61 73 73 2c 20 27 67 27 2c 20 6c 61 62 65 6c 3d 27 52 65 67 20 57 61 73 73 .bary_wass,.'g',.label='Reg.Wass
ea80 65 72 73 74 65 69 6e 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 61 72 79 5f 77 61 73 73 32 2c erstein').pl.plot(x,.bary_wass2,
eaa0 20 27 62 27 2c 20 6c 61 62 65 6c 3d 27 4c 50 20 57 61 73 73 65 72 73 74 65 69 6e 27 29 0a 70 6c .'b',.label='LP.Wasserstein').pl
eac0 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 6e 74 65 72 73 27 .legend().pl.title('Barycenters'
eae0 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 ).pl.tight_layout()..#%%.paramet
eb00 65 72 73 0a 0a 61 31 20 3d 20 6e 70 2e 7a 65 72 6f 73 28 6e 29 0a 61 32 20 3d 20 6e 70 2e 7a 65 ers..a1.=.np.zeros(n).a2.=.np.ze
eb20 72 6f 73 28 6e 29 0a 0a 61 31 5b 31 30 5d 20 3d 20 2e 32 35 0a 61 31 5b 32 30 5d 20 3d 20 2e 35 ros(n)..a1[10].=..25.a1[20].=..5
eb40 0a 61 31 5b 33 30 5d 20 3d 20 2e 32 35 0a 61 32 5b 38 30 5d 20 3d 20 31 0a 0a 0a 61 31 20 2f 3d .a1[30].=..25.a2[80].=.1...a1./=
eb60 20 61 31 2e 73 75 6d 28 29 0a 61 32 20 2f 3d 20 61 32 2e 73 75 6d 28 29 0a 0a 23 20 63 72 65 61 .a1.sum().a2./=.a2.sum()..#.crea
eb80 74 69 6e 67 20 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 ting.matrix.A.containing.all.dis
eba0 74 72 69 62 75 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 tributions.A.=.np.vstack((a1,.a2
ebc0 29 29 2e 54 0a 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 )).T.n_distributions.=.A.shape[1
ebe0 5d 0a 0a 23 20 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 ]..#.loss.matrix.+.normalization
ec00 0a 4d 20 3d 20 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 .M.=.ot.utils.dist0(n).M./=.M.ma
ec20 78 28 29 0a 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 6e 73 x()...#%%.plot.the.distributions
ec40 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 29 29 ..pl.figure(1,.figsize=(6.4,.3))
ec60 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 73 29 .for.i.in.range(n_distributions)
ec80 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 69 74 :.....pl.plot(x,.A[:,.i]).pl.tit
eca0 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 61 79 le('Distributions').pl.tight_lay
ecc0 6f 75 74 28 29 0a 0a 0a 23 25 25 20 62 61 72 79 63 65 6e 74 65 72 20 63 6f 6d 70 75 74 61 74 69 out()...#%%.barycenter.computati
ece0 6f 6e 0a 0a 61 6c 70 68 61 20 3d 20 30 2e 35 20 20 23 20 30 3c 3d 61 6c 70 68 61 3c 3d 31 0a 77 on..alpha.=.0.5..#.0<=alpha<=1.w
ed00 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 20 61 6c eights.=.np.array([1.-.alpha,.al
ed20 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 6f 74 28 pha])..#.l2bary.bary_l2.=.A.dot(
ed40 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 20 31 65 weights)..#.wasserstein.reg.=.1e
ed60 2d 33 0a 6f 74 2e 74 69 63 28 29 0a 62 61 72 79 5f 77 61 73 73 20 3d 20 6f 74 2e 62 72 65 67 6d -3.ot.tic().bary_wass.=.ot.bregm
ed80 61 6e 2e 62 61 72 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 an.barycenter(A,.M,.reg,.weights
eda0 29 0a 6f 74 2e 74 6f 63 28 29 0a 0a 0a 6f 74 2e 74 69 63 28 29 0a 62 61 72 79 5f 77 61 73 73 32 ).ot.toc()...ot.tic().bary_wass2
edc0 20 3d 20 6f 74 2e 6c 70 2e 62 61 72 79 63 65 6e 74 65 72 28 41 2c 20 4d 2c 20 77 65 69 67 68 74 .=.ot.lp.barycenter(A,.M,.weight
ede0 73 2c 20 73 6f 6c 76 65 72 3d 27 69 6e 74 65 72 69 6f 72 2d 70 6f 69 6e 74 27 2c 20 76 65 72 62 s,.solver='interior-point',.verb
ee00 6f 73 65 3d 54 72 75 65 29 0a 6f 74 2e 74 6f 63 28 29 0a 0a 0a 70 72 6f 62 6c 65 6d 73 2e 61 70 ose=True).ot.toc()...problems.ap
ee20 70 65 6e 64 28 5b 41 2c 20 5b 62 61 72 79 5f 6c 32 2c 20 62 61 72 79 5f 77 61 73 73 2c 20 62 61 pend([A,.[bary_l2,.bary_wass,.ba
ee40 72 79 5f 77 61 73 73 32 5d 5d 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 29 0a 70 6c 2e 63 6c 66 ry_wass2]])..pl.figure(2).pl.clf
ee60 28 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 31 2c 20 31 29 0a 66 6f 72 20 69 20 69 6e 20 ().pl.subplot(2,.1,.1).for.i.in.
ee80 72 61 6e 67 65 28 6e 5f 64 69 73 74 72 69 62 75 74 69 6f 6e 73 29 3a 0a 20 20 20 20 70 6c 2e 70 range(n_distributions):.....pl.p
eea0 6c 6f 74 28 78 2c 20 41 5b 3a 2c 20 69 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 44 69 73 74 72 69 lot(x,.A[:,.i]).pl.title('Distri
eec0 62 75 74 69 6f 6e 73 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 31 2c 20 32 29 0a 70 butions')..pl.subplot(2,.1,.2).p
eee0 6c 2e 70 6c 6f 74 28 78 2c 20 62 61 72 79 5f 6c 32 2c 20 27 72 27 2c 20 6c 61 62 65 6c 3d 27 6c l.plot(x,.bary_l2,.'r',.label='l
ef00 32 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 61 72 79 5f 77 61 73 73 2c 20 27 67 27 2c 20 6c 2').pl.plot(x,.bary_wass,.'g',.l
ef20 61 62 65 6c 3d 27 52 65 67 20 57 61 73 73 65 72 73 74 65 69 6e 27 29 0a 70 6c 2e 70 6c 6f 74 28 abel='Reg.Wasserstein').pl.plot(
ef40 78 2c 20 62 61 72 79 5f 77 61 73 73 32 2c 20 27 62 27 2c 20 6c 61 62 65 6c 3d 27 4c 50 20 57 61 x,.bary_wass2,.'b',.label='LP.Wa
ef60 73 73 65 72 73 74 65 69 6e 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 29 0a 70 6c 2e 74 69 74 6c 65 sserstein').pl.legend().pl.title
ef80 28 27 42 61 72 79 63 65 6e 74 65 72 73 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 ('Barycenters').pl.tight_layout(
efa0 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 )...############################
efc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
efe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 6e 61 6c 20 66 69 67 75 72 ##################.#.Final.figur
f000 65 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 0a 23 25 25 20 70 6c 6f 74 0a 0a 6e 62 e.#.------------.#..#%%.plot..nb
f020 6d 20 3d 20 6c 65 6e 28 70 72 6f 62 6c 65 6d 73 29 0a 6e 62 6d 32 20 3d 20 28 6e 62 6d 20 2f 2f m.=.len(problems).nbm2.=.(nbm.//
f040 20 32 29 0a 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 28 32 30 2c 20 36 29 29 0a 70 6c 2e 63 .2)...pl.figure(2,.(20,.6)).pl.c
f060 6c 66 28 29 0a 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6e 62 6d 29 3a 0a 0a 20 20 20 20 lf()..for.i.in.range(nbm):......
f080 41 20 3d 20 70 72 6f 62 6c 65 6d 73 5b 69 5d 5b 30 5d 0a 20 20 20 20 62 61 72 79 5f 6c 32 20 3d A.=.problems[i][0].....bary_l2.=
f0a0 20 70 72 6f 62 6c 65 6d 73 5b 69 5d 5b 31 5d 5b 30 5d 0a 20 20 20 20 62 61 72 79 5f 77 61 73 73 .problems[i][1][0].....bary_wass
f0c0 20 3d 20 70 72 6f 62 6c 65 6d 73 5b 69 5d 5b 31 5d 5b 31 5d 0a 20 20 20 20 62 61 72 79 5f 77 61 .=.problems[i][1][1].....bary_wa
f0e0 73 73 32 20 3d 20 70 72 6f 62 6c 65 6d 73 5b 69 5d 5b 31 5d 5b 32 5d 0a 0a 20 20 20 20 70 6c 2e ss2.=.problems[i][1][2]......pl.
f100 73 75 62 70 6c 6f 74 28 32 2c 20 6e 62 6d 2c 20 31 20 2b 20 69 29 0a 20 20 20 20 66 6f 72 20 6a subplot(2,.nbm,.1.+.i).....for.j
f120 20 69 6e 20 72 61 6e 67 65 28 6e 5f 64 69 73 74 72 69 62 75 74 69 6f 6e 73 29 3a 0a 20 20 20 20 .in.range(n_distributions):.....
f140 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 2c 20 41 5b 3a 2c 20 6a 5d 29 0a 20 20 20 20 69 66 20 69 ....pl.plot(x,.A[:,.j]).....if.i
f160 20 3d 3d 20 6e 62 6d 32 3a 0a 20 20 20 20 20 20 20 20 70 6c 2e 74 69 74 6c 65 28 27 44 69 73 74 .==.nbm2:.........pl.title('Dist
f180 72 69 62 75 74 69 6f 6e 73 27 29 0a 20 20 20 20 70 6c 2e 78 74 69 63 6b 73 28 28 29 29 0a 20 20 ributions').....pl.xticks(())...
f1a0 20 20 70 6c 2e 79 74 69 63 6b 73 28 28 29 29 0a 0a 20 20 20 20 70 6c 2e 73 75 62 70 6c 6f 74 28 ..pl.yticks(())......pl.subplot(
f1c0 32 2c 20 6e 62 6d 2c 20 31 20 2b 20 69 20 2b 20 6e 62 6d 29 0a 0a 20 20 20 20 70 6c 2e 70 6c 6f 2,.nbm,.1.+.i.+.nbm)......pl.plo
f1e0 74 28 78 2c 20 62 61 72 79 5f 6c 32 2c 20 27 72 27 2c 20 6c 61 62 65 6c 3d 27 4c 32 20 28 45 75 t(x,.bary_l2,.'r',.label='L2.(Eu
f200 63 6c 69 64 65 61 6e 29 27 29 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 61 72 79 5f 77 clidean)').....pl.plot(x,.bary_w
f220 61 73 73 2c 20 27 67 27 2c 20 6c 61 62 65 6c 3d 27 52 65 67 20 57 61 73 73 65 72 73 74 65 69 6e ass,.'g',.label='Reg.Wasserstein
f240 27 29 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 61 72 79 5f 77 61 73 73 32 2c 20 27 62 ').....pl.plot(x,.bary_wass2,.'b
f260 27 2c 20 6c 61 62 65 6c 3d 27 4c 50 20 57 61 73 73 65 72 73 74 65 69 6e 27 29 0a 20 20 20 20 69 ',.label='LP.Wasserstein').....i
f280 66 20 69 20 3d 3d 20 6e 62 6d 20 2d 20 31 3a 0a 20 20 20 20 20 20 20 20 70 6c 2e 6c 65 67 65 6e f.i.==.nbm.-.1:.........pl.legen
f2a0 64 28 29 0a 20 20 20 20 69 66 20 69 20 3d 3d 20 6e 62 6d 32 3a 0a 20 20 20 20 20 20 20 20 70 6c d().....if.i.==.nbm2:.........pl
f2c0 2e 74 69 74 6c 65 28 27 42 61 72 79 63 65 6e 74 65 72 73 27 29 0a 0a 20 20 20 20 70 6c 2e 78 74 .title('Barycenters')......pl.xt
f2e0 69 63 6b 73 28 28 29 29 0a 20 20 20 20 70 6c 2e 79 74 69 63 6b 73 28 28 29 29 0a 50 4b 03 04 14 icks(()).....pl.yticks(()).PK...
f300 00 00 00 00 00 b3 5c 6f 4e bf 4a 09 ec 55 09 00 00 55 09 00 00 15 00 00 00 70 6c 6f 74 5f 4f 54 ......\oN.J..U...U.......plot_OT
f320 5f 32 44 5f 73 61 6d 70 6c 65 73 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d _2D_samples.py#.-*-.coding:.utf-
f340 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.-*-.""".======================
f360 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 32 ==============================.2
f380 44 20 4f 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 65 6d 70 69 D.Optimal.transport.between.empi
f3a0 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 3d 3d 3d 3d 3d rical.distributions.============
f3c0 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 ================================
f3e0 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 49 6c 6c 75 73 74 72 61 74 69 6f 6e 20 6f 66 20 32 44 20 6f 70 74 ========..Illustration.of.2D.opt
f400 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 20 62 65 74 77 65 65 6e 20 64 69 73 63 72 69 62 75 74 imal.transport.between.discribut
f420 69 6f 6e 73 20 74 68 61 74 20 61 72 65 20 77 65 69 67 68 74 65 64 0a 73 75 6d 20 6f 66 20 64 69 ions.that.are.weighted.sum.of.di
f440 72 61 63 73 2e 20 54 68 65 20 4f 54 20 6d 61 74 72 69 78 20 69 73 20 70 6c 6f 74 74 65 64 20 77 racs..The.OT.matrix.is.plotted.w
f460 69 74 68 20 74 68 65 20 73 61 6d 70 6c 65 73 2e 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a ith.the.samples..."""..#.Author:
f480 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 63 .Remi.Flamary.<remi.flamary@unic
f4a0 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 0a e.fr>.#.#.License:.MIT.License..
f4c0 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 6f import.numpy.as.np.import.matplo
f4e0 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 69 6d 70 6f 72 tlib.pylab.as.pl.import.ot.impor
f500 74 20 6f 74 2e 70 6c 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 t.ot.plot..#####################
f520 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
f540 23 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 #########################.#.Gene
f560 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 25 25 20 70 rate.data.#.-------------..#%%.p
f580 61 72 61 6d 65 74 65 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 arameters.and.data.generation..n
f5a0 20 3d 20 35 30 20 20 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 .=.50..#.nb.samples..mu_s.=.np.a
f5c0 72 72 61 79 28 5b 30 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 rray([0,.0]).cov_s.=.np.array([[
f5e0 31 2c 20 30 5d 2c 20 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 1,.0],.[0,.1]])..mu_t.=.np.array
f600 28 5b 34 2c 20 34 5d 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 ([4,.4]).cov_t.=.np.array([[1,.-
f620 2e 38 5d 2c 20 5b 2d 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 .8],.[-.8,.1]])..xs.=.ot.dataset
f640 73 2e 6d 61 6b 65 5f 32 44 5f 73 61 6d 70 6c 65 73 5f 67 61 75 73 73 28 6e 2c 20 6d 75 5f 73 2c s.make_2D_samples_gauss(n,.mu_s,
f660 20 63 6f 76 5f 73 29 0a 78 74 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 32 44 .cov_s).xt.=.ot.datasets.make_2D
f680 5f 73 61 6d 70 6c 65 73 5f 67 61 75 73 73 28 6e 2c 20 6d 75 5f 74 2c 20 63 6f 76 5f 74 29 0a 0a _samples_gauss(n,.mu_t,.cov_t)..
f6a0 61 2c 20 62 20 3d 20 6e 70 2e 6f 6e 65 73 28 28 6e 2c 29 29 20 2f 20 6e 2c 20 6e 70 2e 6f 6e 65 a,.b.=.np.ones((n,))./.n,.np.one
f6c0 73 28 28 6e 2c 29 29 20 2f 20 6e 20 20 23 20 75 6e 69 66 6f 72 6d 20 64 69 73 74 72 69 62 75 74 s((n,))./.n..#.uniform.distribut
f6e0 69 6f 6e 20 6f 6e 20 73 61 6d 70 6c 65 73 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 20 ion.on.samples..#.loss.matrix.M.
f700 3d 20 6f 74 2e 64 69 73 74 28 78 73 2c 20 78 74 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 29 0a 0a =.ot.dist(xs,.xt).M./=.M.max()..
f720 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
f740 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
f760 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.#.---
f780 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 0a 70 6c 2e 66 69 67 ------..#%%.plot.samples..pl.fig
f7a0 75 72 65 28 31 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 ure(1).pl.plot(xs[:,.0],.xs[:,.1
f7c0 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 27 29 ],.'+b',.label='Source.samples')
f7e0 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 78 72 .pl.plot(xt[:,.0],.xt[:,.1],.'xr
f800 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 6c 65 ',.label='Target.samples').pl.le
f820 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 20 61 6e 64 gend(loc=0).pl.title('Source.and
f840 20 74 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 70 6c 2e 66 69 67 75 .target.distributions')..pl.figu
f860 72 65 28 32 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 6e re(2).pl.imshow(M,.interpolation
f880 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 43 6f 73 74 20 6d 61 74 72 69 ='nearest').pl.title('Cost.matri
f8a0 78 20 4d 27 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 x.M')..#########################
f8c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
f8e0 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 6f 6d 70 75 74 65 20 #####################.#.Compute.
f900 45 4d 44 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 45 4d 44 0a 0a 47 30 20 3d EMD.#.-----------..#%%.EMD..G0.=
f920 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 33 29 0a 70 .ot.emd(a,.b,.M)..pl.figure(3).p
f940 6c 2e 69 6d 73 68 6f 77 28 47 30 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 l.imshow(G0,.interpolation='near
f960 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 6d 61 74 72 69 78 20 47 30 27 29 0a 0a est').pl.title('OT.matrix.G0')..
f980 70 6c 2e 66 69 67 75 72 65 28 34 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 pl.figure(4).ot.plot.plot2D_samp
f9a0 6c 65 73 5f 6d 61 74 28 78 73 2c 20 78 74 2c 20 47 30 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 les_mat(xs,.xt,.G0,.c=[.5,..5,.1
f9c0 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 20 27 ]).pl.plot(xs[:,.0],.xs[:,.1],.'
f9e0 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 6c 2e +b',.label='Source.samples').pl.
fa00 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 20 6c plot(xt[:,.0],.xt[:,.1],.'xr',.l
fa20 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 6c 65 67 65 6e 64 abel='Target.samples').pl.legend
fa40 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 6d 61 74 72 69 78 20 77 69 74 68 (loc=0).pl.title('OT.matrix.with
fa60 20 73 61 6d 70 6c 65 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 .samples')...###################
fa80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
faa0 23 23 23 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 6f ###########################.#.Co
fac0 6d 70 75 74 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 2d mpute.Sinkhorn.#.---------------
fae0 2d 0a 0a 23 25 25 20 73 69 6e 6b 68 6f 72 6e 0a 0a 23 20 72 65 67 20 74 65 72 6d 0a 6c 61 6d 62 -..#%%.sinkhorn..#.reg.term.lamb
fb00 64 20 3d 20 31 65 2d 33 0a 0a 47 73 20 3d 20 6f 74 2e 73 69 6e 6b 68 6f 72 6e 28 61 2c 20 62 2c d.=.1e-3..Gs.=.ot.sinkhorn(a,.b,
fb20 20 4d 2c 20 6c 61 6d 62 64 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 35 29 0a 70 6c 2e 69 6d 73 68 .M,.lambd)..pl.figure(5).pl.imsh
fb40 6f 77 28 47 73 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 ow(Gs,.interpolation='nearest').
fb60 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 6d 61 74 72 69 78 20 73 69 6e 6b 68 6f 72 6e 27 29 0a 0a pl.title('OT.matrix.sinkhorn')..
fb80 70 6c 2e 66 69 67 75 72 65 28 36 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 pl.figure(6).ot.plot.plot2D_samp
fba0 6c 65 73 5f 6d 61 74 28 78 73 2c 20 78 74 2c 20 47 73 2c 20 63 6f 6c 6f 72 3d 5b 2e 35 2c 20 2e les_mat(xs,.xt,.Gs,.color=[.5,..
fbc0 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 20 31 5,.1]).pl.plot(xs[:,.0],.xs[:,.1
fbe0 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 27 29 ],.'+b',.label='Source.samples')
fc00 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 78 72 .pl.plot(xt[:,.0],.xt[:,.1],.'xr
fc20 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 6c 65 ',.label='Target.samples').pl.le
fc40 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 6d 61 74 72 69 78 20 gend(loc=0).pl.title('OT.matrix.
fc60 53 69 6e 6b 68 6f 72 6e 20 77 69 74 68 20 73 61 6d 70 6c 65 73 27 29 0a 0a 70 6c 2e 73 68 6f 77 Sinkhorn.with.samples')..pl.show
fc80 28 29 0a 50 4b 03 04 14 00 00 00 00 00 b3 5c 6f 4e 0e e0 72 82 97 0b 00 00 97 0b 00 00 1b 00 00 ().PK.........\oN..r............
fca0 00 70 6c 6f 74 5f 6f 74 64 61 5f 6c 69 6e 65 61 72 5f 6d 61 70 70 69 6e 67 2e 70 79 23 21 2f 75 .plot_otda_linear_mapping.py#!/u
fcc0 73 72 2f 62 69 6e 2f 65 6e 76 20 70 79 74 68 6f 6e 33 0a 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a sr/bin/env.python3.#.-*-.coding:
fce0 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.-*-.""".=================
fd00 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4c 69 6e 65 61 72 20 4f 54 20 6d 61 70 70 69 6e 67 20 65 73 ===========.Linear.OT.mapping.es
fd20 74 69 6d 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 3d 3d timation.=======================
fd40 3d 3d 3d 3d 3d 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 61 6d =====..."""..#.Author:.Remi.Flam
fd60 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 23 20 ary.<remi.flamary@unice.fr>.#.#.
fd80 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 75 6d License:.MIT.License..import.num
fda0 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f py.as.np.import.pylab.as.pl.impo
fdc0 72 74 20 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 rt.ot..#########################
fde0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
fe00 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 65 #####################.#.Generate
fe20 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 6e 20 3d 20 31 30 30 30 0a .data.#.-------------..n.=.1000.
fe40 64 20 3d 20 32 0a 73 69 67 6d 61 20 3d 20 2e 31 0a 0a 23 20 73 6f 75 72 63 65 20 73 61 6d 70 6c d.=.2.sigma.=..1..#.source.sampl
fe60 65 73 0a 61 6e 67 6c 65 73 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 28 6e 2c 20 31 29 es.angles.=.np.random.rand(n,.1)
fe80 20 2a 20 32 20 2a 20 6e 70 2e 70 69 0a 78 73 20 3d 20 6e 70 2e 63 6f 6e 63 61 74 65 6e 61 74 65 .*.2.*.np.pi.xs.=.np.concatenate
fea0 28 28 6e 70 2e 73 69 6e 28 61 6e 67 6c 65 73 29 2c 20 6e 70 2e 63 6f 73 28 61 6e 67 6c 65 73 29 ((np.sin(angles),.np.cos(angles)
fec0 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 78 69 73 3d 31 29 20 2b ),.....................axis=1).+
fee0 20 73 69 67 6d 61 20 2a 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 6e 28 6e 2c 20 32 29 0a 78 .sigma.*.np.random.randn(n,.2).x
ff00 73 5b 3a 6e 20 2f 2f 20 32 2c 20 31 5d 20 2b 3d 20 32 0a 0a 0a 23 20 74 61 72 67 65 74 20 73 61 s[:n.//.2,.1].+=.2...#.target.sa
ff20 6d 70 6c 65 73 0a 61 6e 67 6c 65 74 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 28 6e 2c mples.anglet.=.np.random.rand(n,
ff40 20 31 29 20 2a 20 32 20 2a 20 6e 70 2e 70 69 0a 78 74 20 3d 20 6e 70 2e 63 6f 6e 63 61 74 65 6e .1).*.2.*.np.pi.xt.=.np.concaten
ff60 61 74 65 28 28 6e 70 2e 73 69 6e 28 61 6e 67 6c 65 74 29 2c 20 6e 70 2e 63 6f 73 28 61 6e 67 6c ate((np.sin(anglet),.np.cos(angl
ff80 65 74 29 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 78 69 73 3d 31 et)),.....................axis=1
ffa0 29 20 2b 20 73 69 67 6d 61 20 2a 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 6e 28 6e 2c 20 32 ).+.sigma.*.np.random.randn(n,.2
ffc0 29 0a 78 74 5b 3a 6e 20 2f 2f 20 32 2c 20 31 5d 20 2b 3d 20 32 0a 0a 0a 41 20 3d 20 6e 70 2e 61 ).xt[:n.//.2,.1].+=.2...A.=.np.a
ffe0 72 72 61 79 28 5b 5b 31 2e 35 2c 20 2e 37 5d 2c 20 5b 2e 37 2c 20 31 2e 35 5d 5d 29 0a 62 20 3d rray([[1.5,..7],.[.7,.1.5]]).b.=
10000 20 6e 70 2e 61 72 72 61 79 28 5b 5b 34 2c 20 32 5d 5d 29 0a 78 74 20 3d 20 78 74 2e 64 6f 74 28 .np.array([[4,.2]]).xt.=.xt.dot(
10020 41 29 20 2b 20 62 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 A).+.b..########################
10040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
10060 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 50 6c 6f 74 20 64 61 ######################.#.Plot.da
10080 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 28 35 2c ta.#.---------..pl.figure(1,.(5,
100a0 20 35 29 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 .5)).pl.plot(xs[:,.0],.xs[:,.1],
100c0 20 27 2b 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 .'+').pl.plot(xt[:,.0],.xt[:,.1]
100e0 2c 20 27 6f 27 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 ,.'o')...#######################
10100 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
10120 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 45 73 74 69 6d 61 #######################.#.Estima
10140 74 65 20 6c 69 6e 65 61 72 20 6d 61 70 70 69 6e 67 20 61 6e 64 20 74 72 61 6e 73 70 6f 72 74 0a te.linear.mapping.and.transport.
10160 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 #.------------------------------
10180 2d 2d 2d 2d 2d 2d 2d 0a 0a 41 65 2c 20 62 65 20 3d 20 6f 74 2e 64 61 2e 4f 54 5f 6d 61 70 70 69 -------..Ae,.be.=.ot.da.OT_mappi
101a0 6e 67 5f 6c 69 6e 65 61 72 28 78 73 2c 20 78 74 29 0a 0a 78 73 74 20 3d 20 78 73 2e 64 6f 74 28 ng_linear(xs,.xt)..xst.=.xs.dot(
101c0 41 65 29 20 2b 20 62 65 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 Ae).+.be...#####################
101e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
10200 23 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 50 6c 6f 74 #########################.#.Plot
10220 20 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d .transported.samples.#.---------
10240 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 28 35 ---------------..pl.figure(1,.(5
10260 2c 20 35 29 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 ,.5)).pl.clf().pl.plot(xs[:,.0],
10280 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d .xs[:,.1],.'+').pl.plot(xt[:,.0]
102a0 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 6f 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 74 5b 3a 2c 20 ,.xt[:,.1],.'o').pl.plot(xst[:,.
102c0 30 5d 2c 20 78 73 74 5b 3a 2c 20 31 5d 2c 20 27 2b 27 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 0a 0],.xst[:,.1],.'+')..pl.show()..
102e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
10300 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
10320 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 4c 6f 61 64 20 69 6d 61 67 65 20 64 61 74 61 ##############.#.Load.image.data
10340 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 64 65 66 20 69 6d 32 6d 61 74 28 .#.---------------...def.im2mat(
10360 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 74 6f I):....."""Converts.and.image.to
10380 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 22 0a .matrix.(one.pixel.per.line)""".
103a0 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 30 5d ....return.I.reshape((I.shape[0]
103c0 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 64 65 .*.I.shape[1],.I.shape[2]))...de
103e0 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 76 65 f.mat2im(X,.shape):....."""Conve
10400 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 22 22 rts.back.a.matrix.to.an.image"""
10420 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 0a 64 .....return.X.reshape(shape)...d
10440 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 69 70 ef.minmax(I):.....return.np.clip
10460 28 49 2c 20 30 2c 20 31 29 0a 0a 0a 23 20 4c 6f 61 64 69 6e 67 20 69 6d 61 67 65 73 0a 49 31 20 (I,.0,.1)...#.Loading.images.I1.
10480 3d 20 70 6c 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 6f 63 65 61 6e 5f 64 61 79 2e 6a =.pl.imread('../data/ocean_day.j
104a0 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 49 32 pg').astype(np.float64)./.256.I2
104c0 20 3d 20 70 6c 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 .=.pl.imread('../data/ocean_suns
104e0 65 74 2e 6a 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 et.jpg').astype(np.float64)./.25
10500 36 0a 0a 0a 58 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 6...X1.=.im2mat(I1).X2.=.im2mat(
10520 49 32 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 I2)..###########################
10540 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
10560 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 45 73 74 69 6d 61 74 65 20 6d ###################.#.Estimate.m
10580 61 70 70 69 6e 67 20 61 6e 64 20 61 64 61 70 74 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d apping.and.adapt.#.-------------
105a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 6d 61 70 70 69 6e 67 20 3d 20 6f 74 2e 64 61 ---------------..mapping.=.ot.da
105c0 2e 4c 69 6e 65 61 72 54 72 61 6e 73 70 6f 72 74 28 29 0a 0a 6d 61 70 70 69 6e 67 2e 66 69 74 28 .LinearTransport()..mapping.fit(
105e0 58 73 3d 58 31 2c 20 58 74 3d 58 32 29 0a 0a 0a 78 73 74 20 3d 20 6d 61 70 70 69 6e 67 2e 74 72 Xs=X1,.Xt=X2)...xst.=.mapping.tr
10600 61 6e 73 66 6f 72 6d 28 58 73 3d 58 31 29 0a 78 74 73 20 3d 20 6d 61 70 70 69 6e 67 2e 69 6e 76 ansform(Xs=X1).xts.=.mapping.inv
10620 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 20 3d 20 6d 69 6e erse_transform(Xt=X2)..I1t.=.min
10640 6d 61 78 28 6d 61 74 32 69 6d 28 78 73 74 2c 20 49 31 2e 73 68 61 70 65 29 29 0a 49 32 74 20 3d max(mat2im(xst,.I1.shape)).I2t.=
10660 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 78 74 73 2c 20 49 32 2e 73 68 61 70 65 29 29 0a 0a .minmax(mat2im(xts,.I2.shape))..
10680 23 20 25 25 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 #.%%...#########################
106a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
106c0 23 23 23 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 74 72 61 #####################.#.Plot.tra
106e0 6e 73 66 6f 72 6d 65 64 20 69 6d 61 67 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d nsformed.images.#.--------------
10700 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 69 7a 65 3d ---------..pl.figure(2,.figsize=
10720 28 31 30 2c 20 37 29 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 (10,.7))..pl.subplot(2,.2,.1).pl
10740 2e 69 6d 73 68 6f 77 28 49 31 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 .imshow(I1).pl.axis('off').pl.ti
10760 74 6c 65 28 27 49 6d 2e 20 31 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 32 tle('Im..1')..pl.subplot(2,.2,.2
10780 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 ).pl.imshow(I2).pl.axis('off').p
107a0 6c 2e 74 69 74 6c 65 28 27 49 6d 2e 20 32 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 l.title('Im..2')..pl.subplot(2,.
107c0 32 2c 20 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 74 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 2,.3).pl.imshow(I1t).pl.axis('of
107e0 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4d 61 70 70 69 6e 67 20 49 6d 2e 20 31 27 29 0a 0a 70 f').pl.title('Mapping.Im..1')..p
10800 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 34 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 74 l.subplot(2,.2,.4).pl.imshow(I2t
10820 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 6e 76 65 72 ).pl.axis('off').pl.title('Inver
10840 73 65 20 6d 61 70 70 69 6e 67 20 49 6d 2e 20 32 27 29 0a 50 4b 03 04 14 00 00 00 00 00 a6 5d 6f se.mapping.Im..2').PK.........]o
10860 4e cd ad d9 82 f4 0f 00 00 f4 0f 00 00 14 00 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 6d 61 70 70 69 N................plot_otda_mappi
10880 6e 67 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 22 ng.py#.-*-.coding:.utf-8.-*-."""
108a0 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 3d .===============================
108c0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4f 54 20 6d 61 70 70 69 6e 67 20 65 73 74 69 6d 61 74 69 ============.OT.mapping.estimati
108e0 6f 6e 20 66 6f 72 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 0a 3d 3d 3d 3d 3d 3d 3d on.for.domain.adaptation.=======
10900 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 ================================
10920 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 68 6f 77 20 ====..This.example.presents.how.
10940 74 6f 20 75 73 65 20 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 20 74 6f 20 65 73 74 69 6d to.use.MappingTransport.to.estim
10960 61 74 65 20 61 74 20 74 68 65 20 73 61 6d 65 0a 74 69 6d 65 20 62 6f 74 68 20 74 68 65 20 63 6f ate.at.the.same.time.both.the.co
10980 75 70 6c 69 6e 67 20 74 72 61 6e 73 70 6f 72 74 20 61 6e 64 20 61 70 70 72 6f 78 69 6d 61 74 65 upling.transport.and.approximate
109a0 20 74 68 65 20 74 72 61 6e 73 70 6f 72 74 20 6d 61 70 20 77 69 74 68 20 65 69 74 68 65 72 0a 61 .the.transport.map.with.either.a
109c0 20 6c 69 6e 65 61 72 20 6f 72 20 61 20 6b 65 72 6e 65 6c 69 7a 65 64 20 6d 61 70 70 69 6e 67 20 .linear.or.a.kernelized.mapping.
109e0 61 73 20 69 6e 74 72 6f 64 75 63 65 64 20 69 6e 20 5b 38 5d 2e 0a 0a 5b 38 5d 20 4d 2e 20 50 65 as.introduced.in.[8]...[8].M..Pe
10a00 72 72 6f 74 2c 20 4e 2e 20 43 6f 75 72 74 79 2c 20 52 2e 20 46 6c 61 6d 61 72 79 2c 20 41 2e 20 rrot,.N..Courty,.R..Flamary,.A..
10a20 48 61 62 72 61 72 64 2c 0a 20 20 20 20 22 4d 61 70 70 69 6e 67 20 65 73 74 69 6d 61 74 69 6f 6e Habrard,....."Mapping.estimation
10a40 20 66 6f 72 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 72 74 22 .for.discrete.optimal.transport"
10a60 2c 0a 20 20 20 20 4e 65 75 72 61 6c 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 50 72 6f 63 65 73 73 ,.....Neural.Information.Process
10a80 69 6e 67 20 53 79 73 74 65 6d 73 20 28 4e 49 50 53 29 2c 20 32 30 31 36 2e 0a 22 22 22 0a 0a 23 ing.Systems.(NIPS),.2016.."""..#
10aa0 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 61 .Authors:.Remi.Flamary.<remi.fla
10ac0 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 73 mary@unice.fr>.#..........Stanis
10ae0 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 2e las.Chambon.<stan.chambon@gmail.
10b00 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 69 com>.#.#.License:.MIT.License..i
10b20 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 6f 74 mport.numpy.as.np.import.matplot
10b40 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 0a 0a 23 23 23 23 lib.pylab.as.pl.import.ot...####
10b60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
10b80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
10ba0 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 23 20 2d 2d 2d ##########.#.Generate.data.#.---
10bc0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 6e 5f 73 6f 75 72 63 65 5f 73 61 6d 70 6c 65 73 20 3d 20 31 ----------..n_source_samples.=.1
10be0 30 30 0a 6e 5f 74 61 72 67 65 74 5f 73 61 6d 70 6c 65 73 20 3d 20 31 30 30 0a 74 68 65 74 61 20 00.n_target_samples.=.100.theta.
10c00 3d 20 32 20 2a 20 6e 70 2e 70 69 20 2f 20 32 30 0a 6e 6f 69 73 65 5f 6c 65 76 65 6c 20 3d 20 30 =.2.*.np.pi./.20.noise_level.=.0
10c20 2e 31 0a 0a 58 73 2c 20 79 73 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 .1..Xs,.ys.=.ot.datasets.make_da
10c40 74 61 5f 63 6c 61 73 73 69 66 28 0a 20 20 20 20 27 67 61 75 73 73 72 6f 74 27 2c 20 6e 5f 73 6f ta_classif(.....'gaussrot',.n_so
10c60 75 72 63 65 5f 73 61 6d 70 6c 65 73 2c 20 6e 7a 3d 6e 6f 69 73 65 5f 6c 65 76 65 6c 29 0a 58 73 urce_samples,.nz=noise_level).Xs
10c80 5f 6e 65 77 2c 20 5f 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 61 5f _new,._.=.ot.datasets.make_data_
10ca0 63 6c 61 73 73 69 66 28 0a 20 20 20 20 27 67 61 75 73 73 72 6f 74 27 2c 20 6e 5f 73 6f 75 72 63 classif(.....'gaussrot',.n_sourc
10cc0 65 5f 73 61 6d 70 6c 65 73 2c 20 6e 7a 3d 6e 6f 69 73 65 5f 6c 65 76 65 6c 29 0a 58 74 2c 20 79 e_samples,.nz=noise_level).Xt,.y
10ce0 74 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 61 5f 63 6c 61 73 73 69 t.=.ot.datasets.make_data_classi
10d00 66 28 0a 20 20 20 20 27 67 61 75 73 73 72 6f 74 27 2c 20 6e 5f 74 61 72 67 65 74 5f 73 61 6d 70 f(.....'gaussrot',.n_target_samp
10d20 6c 65 73 2c 20 74 68 65 74 61 3d 74 68 65 74 61 2c 20 6e 7a 3d 6e 6f 69 73 65 5f 6c 65 76 65 6c les,.theta=theta,.nz=noise_level
10d40 29 0a 0a 23 20 6f 6e 65 20 6f 66 20 74 68 65 20 74 61 72 67 65 74 20 6d 6f 64 65 20 63 68 61 6e )..#.one.of.the.target.mode.chan
10d60 67 65 73 20 69 74 73 20 76 61 72 69 61 6e 63 65 20 28 6e 6f 20 6c 69 6e 65 61 72 20 6d 61 70 70 ges.its.variance.(no.linear.mapp
10d80 69 6e 67 29 0a 58 74 5b 79 74 20 3d 3d 20 32 5d 20 2a 3d 20 33 0a 58 74 20 3d 20 58 74 20 2b 20 ing).Xt[yt.==.2].*=.3.Xt.=.Xt.+.
10da0 34 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 4..#############################
10dc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
10de0 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 61 74 61 0a 23 20 #################.#.Plot.data.#.
10e00 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 28 31 30 2c 20 35 29 29 ---------..pl.figure(1,.(10,.5))
10e20 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 58 .pl.clf().pl.scatter(Xs[:,.0],.X
10e40 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 6c s[:,.1],.c=ys,.marker='+',.label
10e60 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 74 ='Source.samples').pl.scatter(Xt
10e80 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='
10ea0 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 6c o',.label='Target.samples').pl.l
10ec0 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 20 61 6e egend(loc=0).pl.title('Source.an
10ee0 64 20 74 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 0a 23 23 23 23 23 d.target.distributions')...#####
10f00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
10f20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
10f40 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 68 65 20 64 69 66 66 #########.#.Instantiate.the.diff
10f60 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 73 20 61 6e 64 20 66 erent.transport.algorithms.and.f
10f80 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 2d 2d 2d 2d 2d 2d 2d it.them.#.----------------------
10fa0 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 --------------------------------
10fc0 2d 2d 2d 2d 2d 0a 0a 23 20 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 20 77 69 74 68 20 6c -----..#.MappingTransport.with.l
10fe0 69 6e 65 61 72 20 6b 65 72 6e 65 6c 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 20 3d inear.kernel.ot_mapping_linear.=
11000 20 6f 74 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 .ot.da.MappingTransport(.....ker
11020 6e 65 6c 3d 22 6c 69 6e 65 61 72 22 2c 20 6d 75 3d 31 65 30 2c 20 65 74 61 3d 31 65 2d 38 2c 20 nel="linear",.mu=1e0,.eta=1e-8,.
11040 62 69 61 73 3d 54 72 75 65 2c 0a 20 20 20 20 6d 61 78 5f 69 74 65 72 3d 32 30 2c 20 76 65 72 62 bias=True,.....max_iter=20,.verb
11060 6f 73 65 3d 54 72 75 65 29 0a 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 2e 66 69 74 ose=True)..ot_mapping_linear.fit
11080 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 66 6f 72 20 6f 72 69 67 69 6e 61 6c 20 73 (Xs=Xs,.Xt=Xt)..#.for.original.s
110a0 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 2c 20 74 72 61 6e 73 66 6f 72 6d 20 61 70 70 6c 69 65 73 ource.samples,.transform.applies
110c0 20 62 61 72 79 63 65 6e 74 72 69 63 20 6d 61 70 70 69 6e 67 0a 74 72 61 6e 73 70 5f 58 73 5f 6c .barycentric.mapping.transp_Xs_l
110e0 69 6e 65 61 72 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 66 inear.=.ot_mapping_linear.transf
11100 6f 72 6d 28 58 73 3d 58 73 29 0a 0a 23 20 66 6f 72 20 6f 75 74 20 6f 66 20 73 6f 75 72 63 65 20 orm(Xs=Xs)..#.for.out.of.source.
11120 73 61 6d 70 6c 65 73 2c 20 74 72 61 6e 73 66 6f 72 6d 20 61 70 70 6c 69 65 73 20 74 68 65 20 6c samples,.transform.applies.the.l
11140 69 6e 65 61 72 20 6d 61 70 70 69 6e 67 0a 74 72 61 6e 73 70 5f 58 73 5f 6c 69 6e 65 61 72 5f 6e inear.mapping.transp_Xs_linear_n
11160 65 77 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 66 6f 72 6d ew.=.ot_mapping_linear.transform
11180 28 58 73 3d 58 73 5f 6e 65 77 29 0a 0a 0a 23 20 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 (Xs=Xs_new)...#.MappingTransport
111a0 20 77 69 74 68 20 67 61 75 73 73 69 61 6e 20 6b 65 72 6e 65 6c 0a 6f 74 5f 6d 61 70 70 69 6e 67 .with.gaussian.kernel.ot_mapping
111c0 5f 67 61 75 73 73 69 61 6e 20 3d 20 6f 74 2e 64 61 2e 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f _gaussian.=.ot.da.MappingTranspo
111e0 72 74 28 0a 20 20 20 20 6b 65 72 6e 65 6c 3d 22 67 61 75 73 73 69 61 6e 22 2c 20 65 74 61 3d 31 rt(.....kernel="gaussian",.eta=1
11200 65 2d 35 2c 20 6d 75 3d 31 65 2d 31 2c 20 62 69 61 73 3d 54 72 75 65 2c 20 73 69 67 6d 61 3d 31 e-5,.mu=1e-1,.bias=True,.sigma=1
11220 2c 0a 20 20 20 20 6d 61 78 5f 69 74 65 72 3d 31 30 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 ,.....max_iter=10,.verbose=True)
11240 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 67 61 75 73 73 69 61 6e 2e 66 69 74 28 58 73 3d 58 73 2c 20 .ot_mapping_gaussian.fit(Xs=Xs,.
11260 58 74 3d 58 74 29 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 Xt=Xt)..#.for.original.source.sa
11280 6d 70 6c 65 73 2c 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 mples,.transform.applies.barycen
112a0 74 72 69 63 20 6d 61 70 70 69 6e 67 0a 74 72 61 6e 73 70 5f 58 73 5f 67 61 75 73 73 69 61 6e 20 tric.mapping.transp_Xs_gaussian.
112c0 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 72 6d 28 =.ot_mapping_gaussian.transform(
112e0 58 73 3d 58 73 29 0a 0a 23 20 66 6f 72 20 6f 75 74 20 6f 66 20 73 6f 75 72 63 65 20 73 61 6d 70 Xs=Xs)..#.for.out.of.source.samp
11300 6c 65 73 2c 20 74 72 61 6e 73 66 6f 72 6d 20 61 70 70 6c 69 65 73 20 74 68 65 20 67 61 75 73 73 les,.transform.applies.the.gauss
11320 69 61 6e 20 6d 61 70 70 69 6e 67 0a 74 72 61 6e 73 70 5f 58 73 5f 67 61 75 73 73 69 61 6e 5f 6e ian.mapping.transp_Xs_gaussian_n
11340 65 77 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 ew.=.ot_mapping_gaussian.transfo
11360 72 6d 28 58 73 3d 58 73 5f 6e 65 77 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 rm(Xs=Xs_new)...################
11380 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
113a0 23 23 23 23 23 23 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 ##############################.#
113c0 20 50 6c 6f 74 20 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 0a 23 20 2d 2d 2d 2d .Plot.transported.samples.#.----
113e0 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 66 69 67 75 72 65 28 --------------------..pl.figure(
11400 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 20 32 2c 20 31 29 0a 2).pl.clf().pl.subplot(2,.2,.1).
11420 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
11440 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
11460 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
11480 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 6c 69 6e 65 61 72 5b 3a 2c 20 30 5d 2c .scatter(transp_Xs_linear[:,.0],
114a0 20 74 72 61 6e 73 70 5f 58 73 5f 6c 69 6e 65 61 72 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d .transp_Xs_linear[:,.1],.c=ys,.m
114c0 61 72 6b 65 72 3d 27 2b 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 4d 61 70 arker='+',............label='Map
114e0 70 65 64 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 74 69 74 6c 65 28 22 42 ped.source.samples').pl.title("B
11500 61 72 79 2e 20 6d 61 70 70 69 6e 67 20 28 6c 69 6e 65 61 72 29 22 29 0a 70 6c 2e 6c 65 67 65 6e ary..mapping.(linear)").pl.legen
11520 64 28 6c 6f 63 3d 30 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 32 29 0a 70 6c d(loc=0)..pl.subplot(2,.2,.2).pl
11540 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 79 .scatter(Xt[:,.0],.Xt[:,.1],.c=y
11560 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 3d t,.marker='o',............label=
11580 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 2e 73 'Target.samples',.alpha=.2).pl.s
115a0 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 6c 69 6e 65 61 72 5f 6e 65 77 5b 3a 2c 20 30 catter(transp_Xs_linear_new[:,.0
115c0 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 6c 69 6e 65 61 72 5f 6e 65 77 5b 3a 2c 20 31 5d 2c 0a 20 ],.transp_Xs_linear_new[:,.1],..
115e0 20 20 20 20 20 20 20 20 20 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 ..........c=ys,.marker='+',.labe
11600 6c 3d 27 4c 65 61 72 6e 65 64 20 6d 61 70 70 69 6e 67 27 29 0a 70 6c 2e 74 69 74 6c 65 28 22 45 l='Learned.mapping').pl.title("E
11620 73 74 69 6d 2e 20 6d 61 70 70 69 6e 67 20 28 6c 69 6e 65 61 72 29 22 29 0a 0a 70 6c 2e 73 75 62 stim..mapping.(linear)")..pl.sub
11640 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 58 74 5b 3a 2c 20 30 plot(2,.2,.3).pl.scatter(Xt[:,.0
11660 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 20 ],.Xt[:,.1],.c=yt,.marker='o',..
11680 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 27 ..........label='Target.samples'
116a0 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 73 ,.alpha=.2).pl.scatter(transp_Xs
116c0 5f 67 61 75 73 73 69 61 6e 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 67 61 75 73 73 _gaussian[:,.0],.transp_Xs_gauss
116e0 69 61 6e 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 ian[:,.1],.c=ys,............mark
11700 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 62 61 72 79 63 65 6e 74 72 69 63 20 6d 61 70 70 69 er='+',.label='barycentric.mappi
11720 6e 67 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 6b 65 ng').pl.title("Bary..mapping.(ke
11740 72 6e 65 6c 29 22 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 34 29 0a 70 6c 2e rnel)")..pl.subplot(2,.2,.4).pl.
11760 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 79 74 scatter(Xt[:,.0],.Xt[:,.1],.c=yt
11780 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 3d 27 ,.marker='o',............label='
117a0 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 2e 73 63 Target.samples',.alpha=.2).pl.sc
117c0 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 67 61 75 73 73 69 61 6e 5f 6e 65 77 5b 3a 2c 20 atter(transp_Xs_gaussian_new[:,.
117e0 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 67 61 75 73 73 69 61 6e 5f 6e 65 77 5b 3a 2c 20 31 5d 0],.transp_Xs_gaussian_new[:,.1]
11800 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 27 2c 20 6c ,.c=ys,............marker='+',.l
11820 61 62 65 6c 3d 27 4c 65 61 72 6e 65 64 20 6d 61 70 70 69 6e 67 27 29 0a 70 6c 2e 74 69 74 6c 65 abel='Learned.mapping').pl.title
11840 28 22 45 73 74 69 6d 2e 20 6d 61 70 70 69 6e 67 20 28 6b 65 72 6e 65 6c 29 22 29 0a 70 6c 2e 74 ("Estim..mapping.(kernel)").pl.t
11860 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 04 14 00 00 ight_layout()..pl.show().PK.....
11880 00 00 00 b3 5c 6f 4e 7a 2e b5 2b 65 09 00 00 65 09 00 00 13 00 00 00 70 6c 6f 74 5f 63 6f 6d 70 ....\oNz..+e...e.......plot_comp
118a0 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.-*
118c0 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
118e0 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
11900 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
11920 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
11940 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
11960 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...
11980 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
119a0 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
119c0 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
119e0 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.
11a00 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
11a20 74 20 6d 61 6b 65 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 t.make_1D_gauss.as.gauss...#####
11a40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
11a60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
11a80 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 23 20 2d 2d 2d 2d #########.#.Generate.data.#.----
11aa0 2d 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 ---------..#%%.parameters..n.=.1
11ac0 30 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 00..#.nb.bins.n_target.=.50..#.n
11ae0 62 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 b.target.distributions...#.bin.p
11b00 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 70 65 3d ositions.x.=.np.arange(n,.dtype=
11b20 6e 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 np.float64)..lst_m.=.np.linspace
11b40 28 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 (20,.90,.n_target)..#.Gaussian.d
11b60 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 30 2c 20 istributions.a.=.gauss(n,.m=20,.
11b80 73 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 s=5)..#.m=.mean,.s=.std..B.=.np.
11ba0 7a 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 zeros((n,.n_target))..for.i,.m.i
11bc0 6e 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 n.enumerate(lst_m):.....B[:,.i].
11be0 3d 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 =.gauss(n,.m=m,.s=5)..#.loss.mat
11c00 72 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 rix.and.normalization.M.=.ot.dis
11c20 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 73 68 61 70 65 28 28 t(x.reshape((n,.1)),.x.reshape((
11c40 6e 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 n,.1)),.'euclidean').M./=.M.max(
11c60 29 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 ).M2.=.ot.dist(x.reshape((n,.1))
11c80 2c 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 ,.x.reshape((n,.1)),.'sqeuclidea
11ca0 6e 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 n').M2./=.M2.max()..############
11cc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
11ce0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
11d00 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 25 25 20 ##.#.Plot.data.#.---------..#%%.
11d20 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 75 72 plot.the.distributions..pl.figur
11d40 65 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 e(1).pl.subplot(2,.1,.1).pl.plot
11d60 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
11d80 62 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 bution').pl.title('Source.distri
11da0 62 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 bution').pl.subplot(2,.1,.2).pl.
11dc0 70 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 plot(x,.B,.label='Target.distrib
11de0 75 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 utions').pl.title('Target.distri
11e00 62 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 butions').pl.tight_layout()...##
11e20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
11e40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
11e60 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 20 66 6f 72 20 74 ############.#.Compute.EMD.for.t
11e80 68 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 he.different.losses.#.----------
11ea0 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 20 --------------------------..#%%.
11ec0 43 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 Compute.and.plot.distributions.a
11ee0 6e 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 nd.loss.matrix..d_emd.=.ot.emd2(
11f00 61 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 a,.B,.M)..#.direct.computation.o
11f20 66 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 f.EMD.d_emd2.=.ot.emd2(a,.B,.M2)
11f40 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 20 45 4d 44 20 77 69 ..#.direct.computation.of.EMD.wi
11f60 74 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 th.loss.M2...pl.figure(2).pl.plo
11f80 74 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 t(d_emd,.label='Euclidean.EMD').
11fa0 70 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 pl.plot(d_emd2,.label='Squared.E
11fc0 75 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 uclidean.EMD').pl.title('EMD.dis
11fe0 74 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 tances').pl.legend()..##########
12000 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
12020 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
12040 23 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 ####.#.Compute.Sinkhorn.for.the.
12060 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 2d 2d different.losses.#.-------------
12080 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 ----------------------------..#%
120a0 25 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 %.reg.=.1e-2.d_sinkhorn.=.ot.sin
120c0 6b 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 khorn2(a,.B,.M,.reg).d_sinkhorn2
120e0 20 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 .=.ot.sinkhorn2(a,.B,.M2,.reg)..
12100 70 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 pl.figure(2).pl.clf().pl.plot(d_
12120 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 6c 2e 70 emd,.label='Euclidean.EMD').pl.p
12140 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 63 6c 69 lot(d_emd2,.label='Squared.Eucli
12160 64 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 dean.EMD').pl.plot(d_sinkhorn,.'
12180 2b 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 +',.label='Euclidean.Sinkhorn').
121a0 70 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 pl.plot(d_sinkhorn2,.'+',.label=
121c0 27 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 'Squared.Euclidean.Sinkhorn').pl
121e0 2e 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 .title('EMD.distances').pl.legen
12200 64 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 b3 5c 6f 4e d1 a8 d7 d()..pl.show().PK.........\oN...
12220 2e a9 09 00 00 a9 09 00 00 20 00 00 00 70 6c 6f 74 5f 63 6f 6e 76 6f 6c 75 74 69 6f 6e 61 6c 5f .............plot_convolutional_
12240 62 61 72 79 63 65 6e 74 65 72 2e 70 79 0a 23 25 25 0a 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 barycenter.py.#%%.#.-*-.coding:.
12260 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 3d utf-8.-*-.""".==================
12280 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 43 6f 6e 76 6f ==========================.Convo
122a0 6c 75 74 69 6f 6e 61 6c 20 57 61 73 73 65 72 73 74 65 69 6e 20 42 61 72 79 63 65 6e 74 65 72 20 lutional.Wasserstein.Barycenter.
122c0 65 78 61 6d 70 6c 65 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 example.========================
122e0 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 65 78 61 6d 70 ====================..This.examp
12300 6c 65 20 69 73 20 64 65 73 69 67 6e 65 64 20 74 6f 20 69 6c 6c 75 73 74 72 61 74 65 20 68 6f 77 le.is.designed.to.illustrate.how
12320 20 74 68 65 20 43 6f 6e 76 6f 6c 75 74 69 6f 6e 61 6c 20 57 61 73 73 65 72 73 74 65 69 6e 20 42 .the.Convolutional.Wasserstein.B
12340 61 72 79 63 65 6e 74 65 72 0a 66 75 6e 63 74 69 6f 6e 20 6f 66 20 50 4f 54 20 77 6f 72 6b 73 2e arycenter.function.of.POT.works.
12360 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a 20 4e 69 63 6f 6c 61 73 20 43 6f 75 72 74 79 20 3c ."""..#.Author:.Nicolas.Courty.<
12380 6e 63 6f 75 72 74 79 40 69 72 69 73 61 2e 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d ncourty@irisa.fr>.#.#.License:.M
123a0 49 54 20 4c 69 63 65 6e 73 65 0a 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a IT.License...import.numpy.as.np.
123c0 69 6d 70 6f 72 74 20 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 0a 23 23 import.pylab.as.pl.import.ot..##
123e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
12400 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
12420 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 44 61 74 61 20 70 72 65 70 61 72 61 74 69 6f 6e 0a ############.#.Data.preparation.
12440 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 23 20 54 68 65 20 66 6f 75 72 20 #.----------------.#.#.The.four.
12460 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 64 20 66 72 distributions.are.constructed.fr
12480 6f 6d 20 34 20 73 69 6d 70 6c 65 20 69 6d 61 67 65 73 0a 0a 0a 66 31 20 3d 20 31 20 2d 20 70 6c om.4.simple.images...f1.=.1.-.pl
124a0 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 72 65 64 63 72 6f 73 73 2e 70 6e 67 27 29 5b .imread('../data/redcross.png')[
124c0 3a 2c 20 3a 2c 20 32 5d 0a 66 32 20 3d 20 31 20 2d 20 70 6c 2e 69 6d 72 65 61 64 28 27 2e 2e 2f :,.:,.2].f2.=.1.-.pl.imread('../
124e0 64 61 74 61 2f 64 75 63 6b 2e 70 6e 67 27 29 5b 3a 2c 20 3a 2c 20 32 5d 0a 66 33 20 3d 20 31 20 data/duck.png')[:,.:,.2].f3.=.1.
12500 2d 20 70 6c 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 68 65 61 72 74 2e 70 6e 67 27 29 -.pl.imread('../data/heart.png')
12520 5b 3a 2c 20 3a 2c 20 32 5d 0a 66 34 20 3d 20 31 20 2d 20 70 6c 2e 69 6d 72 65 61 64 28 27 2e 2e [:,.:,.2].f4.=.1.-.pl.imread('..
12540 2f 64 61 74 61 2f 74 6f 6f 74 68 2e 70 6e 67 27 29 5b 3a 2c 20 3a 2c 20 32 5d 0a 0a 41 20 3d 20 /data/tooth.png')[:,.:,.2]..A.=.
12560 5b 5d 0a 66 31 20 3d 20 66 31 20 2f 20 6e 70 2e 73 75 6d 28 66 31 29 0a 66 32 20 3d 20 66 32 20 [].f1.=.f1./.np.sum(f1).f2.=.f2.
12580 2f 20 6e 70 2e 73 75 6d 28 66 32 29 0a 66 33 20 3d 20 66 33 20 2f 20 6e 70 2e 73 75 6d 28 66 33 /.np.sum(f2).f3.=.f3./.np.sum(f3
125a0 29 0a 66 34 20 3d 20 66 34 20 2f 20 6e 70 2e 73 75 6d 28 66 34 29 0a 41 2e 61 70 70 65 6e 64 28 ).f4.=.f4./.np.sum(f4).A.append(
125c0 66 31 29 0a 41 2e 61 70 70 65 6e 64 28 66 32 29 0a 41 2e 61 70 70 65 6e 64 28 66 33 29 0a 41 2e f1).A.append(f2).A.append(f3).A.
125e0 61 70 70 65 6e 64 28 66 34 29 0a 41 20 3d 20 6e 70 2e 61 72 72 61 79 28 41 29 0a 0a 6e 62 5f 69 append(f4).A.=.np.array(A)..nb_i
12600 6d 61 67 65 73 20 3d 20 35 0a 0a 23 20 74 68 6f 73 65 20 61 72 65 20 74 68 65 20 66 6f 75 72 20 mages.=.5..#.those.are.the.four.
12620 63 6f 72 6e 65 72 73 20 63 6f 6f 72 64 69 6e 61 74 65 73 20 74 68 61 74 20 77 69 6c 6c 20 62 65 corners.coordinates.that.will.be
12640 20 69 6e 74 65 72 70 6f 6c 61 74 65 64 20 62 79 20 62 69 6c 69 6e 65 61 72 0a 23 20 69 6e 74 65 .interpolated.by.bilinear.#.inte
12660 72 70 6f 6c 61 74 69 6f 6e 0a 76 31 20 3d 20 6e 70 2e 61 72 72 61 79 28 28 31 2c 20 30 2c 20 30 rpolation.v1.=.np.array((1,.0,.0
12680 2c 20 30 29 29 0a 76 32 20 3d 20 6e 70 2e 61 72 72 61 79 28 28 30 2c 20 31 2c 20 30 2c 20 30 29 ,.0)).v2.=.np.array((0,.1,.0,.0)
126a0 29 0a 76 33 20 3d 20 6e 70 2e 61 72 72 61 79 28 28 30 2c 20 30 2c 20 31 2c 20 30 29 29 0a 76 34 ).v3.=.np.array((0,.0,.1,.0)).v4
126c0 20 3d 20 6e 70 2e 61 72 72 61 79 28 28 30 2c 20 30 2c 20 30 2c 20 31 29 29 0a 0a 0a 23 23 23 23 .=.np.array((0,.0,.0,.1))...####
126e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
12700 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
12720 23 23 23 23 23 23 23 23 23 23 0a 23 20 42 61 72 79 63 65 6e 74 65 72 20 63 6f 6d 70 75 74 61 74 ##########.#.Barycenter.computat
12740 69 6f 6e 20 61 6e 64 20 76 69 73 75 61 6c 69 7a 61 74 69 6f 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d ion.and.visualization.#.--------
12760 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 --------------------------------
12780 0a 23 0a 0a 70 6c 2e 66 69 67 75 72 65 28 66 69 67 73 69 7a 65 3d 28 31 30 2c 20 31 30 29 29 0a .#..pl.figure(figsize=(10,.10)).
127a0 70 6c 2e 74 69 74 6c 65 28 27 43 6f 6e 76 6f 6c 75 74 69 6f 6e 61 6c 20 57 61 73 73 65 72 73 74 pl.title('Convolutional.Wasserst
127c0 65 69 6e 20 42 61 72 79 63 65 6e 74 65 72 73 20 69 6e 20 50 4f 54 27 29 0a 63 6d 20 3d 20 27 42 ein.Barycenters.in.POT').cm.=.'B
127e0 6c 75 65 73 27 0a 23 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 lues'.#.regularization.parameter
12800 0a 72 65 67 20 3d 20 30 2e 30 30 34 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6e 62 5f 69 .reg.=.0.004.for.i.in.range(nb_i
12820 6d 61 67 65 73 29 3a 0a 20 20 20 20 66 6f 72 20 6a 20 69 6e 20 72 61 6e 67 65 28 6e 62 5f 69 6d mages):.....for.j.in.range(nb_im
12840 61 67 65 73 29 3a 0a 20 20 20 20 20 20 20 20 70 6c 2e 73 75 62 70 6c 6f 74 28 6e 62 5f 69 6d 61 ages):.........pl.subplot(nb_ima
12860 67 65 73 2c 20 6e 62 5f 69 6d 61 67 65 73 2c 20 69 20 2a 20 6e 62 5f 69 6d 61 67 65 73 20 2b 20 ges,.nb_images,.i.*.nb_images.+.
12880 6a 20 2b 20 31 29 0a 20 20 20 20 20 20 20 20 74 78 20 3d 20 66 6c 6f 61 74 28 69 29 20 2f 20 28 j.+.1).........tx.=.float(i)./.(
128a0 6e 62 5f 69 6d 61 67 65 73 20 2d 20 31 29 0a 20 20 20 20 20 20 20 20 74 79 20 3d 20 66 6c 6f 61 nb_images.-.1).........ty.=.floa
128c0 74 28 6a 29 20 2f 20 28 6e 62 5f 69 6d 61 67 65 73 20 2d 20 31 29 0a 0a 20 20 20 20 20 20 20 20 t(j)./.(nb_images.-.1)..........
128e0 23 20 77 65 69 67 68 74 73 20 61 72 65 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 62 69 6c #.weights.are.constructed.by.bil
12900 69 6e 65 61 72 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 0a 20 20 20 20 20 20 20 20 74 6d 70 31 inear.interpolation.........tmp1
12920 20 3d 20 28 31 20 2d 20 74 78 29 20 2a 20 76 31 20 2b 20 74 78 20 2a 20 76 32 0a 20 20 20 20 20 .=.(1.-.tx).*.v1.+.tx.*.v2......
12940 20 20 20 74 6d 70 32 20 3d 20 28 31 20 2d 20 74 78 29 20 2a 20 76 33 20 2b 20 74 78 20 2a 20 76 ...tmp2.=.(1.-.tx).*.v3.+.tx.*.v
12960 34 0a 20 20 20 20 20 20 20 20 77 65 69 67 68 74 73 20 3d 20 28 31 20 2d 20 74 79 29 20 2a 20 74 4.........weights.=.(1.-.ty).*.t
12980 6d 70 31 20 2b 20 74 79 20 2a 20 74 6d 70 32 0a 0a 20 20 20 20 20 20 20 20 69 66 20 69 20 3d 3d mp1.+.ty.*.tmp2..........if.i.==
129a0 20 30 20 61 6e 64 20 6a 20 3d 3d 20 30 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 6c 2e 69 6d .0.and.j.==.0:.............pl.im
129c0 73 68 6f 77 28 66 31 2c 20 63 6d 61 70 3d 63 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 6c show(f1,.cmap=cm).............pl
129e0 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 20 20 20 20 20 20 20 20 65 6c 69 66 20 69 20 3d 3d 20 30 .axis('off').........elif.i.==.0
12a00 20 61 6e 64 20 6a 20 3d 3d 20 28 6e 62 5f 69 6d 61 67 65 73 20 2d 20 31 29 3a 0a 20 20 20 20 20 .and.j.==.(nb_images.-.1):......
12a20 20 20 20 20 20 20 20 70 6c 2e 69 6d 73 68 6f 77 28 66 33 2c 20 63 6d 61 70 3d 63 6d 29 0a 20 20 .......pl.imshow(f3,.cmap=cm)...
12a40 20 20 20 20 20 20 20 20 20 20 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 20 20 20 20 20 20 20 ..........pl.axis('off')........
12a60 20 65 6c 69 66 20 69 20 3d 3d 20 28 6e 62 5f 69 6d 61 67 65 73 20 2d 20 31 29 20 61 6e 64 20 6a .elif.i.==.(nb_images.-.1).and.j
12a80 20 3d 3d 20 30 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 6c 2e 69 6d 73 68 6f 77 28 66 32 2c .==.0:.............pl.imshow(f2,
12aa0 20 63 6d 61 70 3d 63 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 6c 2e 61 78 69 73 28 27 6f .cmap=cm).............pl.axis('o
12ac0 66 66 27 29 0a 20 20 20 20 20 20 20 20 65 6c 69 66 20 69 20 3d 3d 20 28 6e 62 5f 69 6d 61 67 65 ff').........elif.i.==.(nb_image
12ae0 73 20 2d 20 31 29 20 61 6e 64 20 6a 20 3d 3d 20 28 6e 62 5f 69 6d 61 67 65 73 20 2d 20 31 29 3a s.-.1).and.j.==.(nb_images.-.1):
12b00 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 6c 2e 69 6d 73 68 6f 77 28 66 34 2c 20 63 6d 61 70 3d .............pl.imshow(f4,.cmap=
12b20 63 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 20 cm).............pl.axis('off')..
12b40 20 20 20 20 20 20 20 65 6c 73 65 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 63 61 6c 6c 20 .......else:.............#.call.
12b60 74 6f 20 62 61 72 79 63 65 6e 74 65 72 20 63 6f 6d 70 75 74 61 74 69 6f 6e 0a 20 20 20 20 20 20 to.barycenter.computation.......
12b80 20 20 20 20 20 20 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 2e 62 72 65 67 6d 61 6e 2e 63 6f 6e 76 6f ......pl.imshow(ot.bregman.convo
12ba0 6c 75 74 69 6f 6e 61 6c 5f 62 61 72 79 63 65 6e 74 65 72 32 64 28 41 2c 20 72 65 67 2c 20 77 65 lutional_barycenter2d(A,.reg,.we
12bc0 69 67 68 74 73 29 2c 20 63 6d 61 70 3d 63 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 6c 2e ights),.cmap=cm).............pl.
12be0 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 axis('off').pl.show().PK........
12c00 c0 5c 6f 4e f4 37 b2 97 17 0e 00 00 17 0e 00 00 19 00 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 63 6f .\oN.7..............plot_otda_co
12c20 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 20 75 74 66 2d 38 lor_images.py#.-*-.coding:.utf-8
12c40 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 3d .-*-.""".=======================
12c60 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 61 64 61 70 74 61 ======.OT.for.image.color.adapta
12c80 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 3d 3d 3d 3d 3d 3d tion.===========================
12ca0 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 61 20 77 61 79 20 ==..This.example.presents.a.way.
12cc0 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 77 65 65 6e 20 74 of.transferring.colors.between.t
12ce0 77 6f 20 69 6d 61 67 65 73 0a 77 69 74 68 20 4f 70 74 69 6d 61 6c 20 54 72 61 6e 73 70 6f 72 74 wo.images.with.Optimal.Transport
12d00 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 46 65 72 72 61 .as.introduced.in.[6]..[6].Ferra
12d20 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 65 2c 20 dans,.S.,.Papadakis,.N.,.Peyre,.
12d40 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 6c G.,.&.Aujol,.J..F..(2014)..Regul
12d60 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 72 arized.discrete.optimal.transpor
12d80 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 53 63 69 65 6e t..SIAM.Journal.on.Imaging.Scien
12da0 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 23 20 41 75 74 ces,.7(3),.1853-1882.."""..#.Aut
12dc0 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 61 6d 61 72 79 hors:.Remi.Flamary.<remi.flamary
12de0 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 73 6c 61 73 20 @unice.fr>.#..........Stanislas.
12e00 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 2e 63 6f 6d 3e Chambon.<stan.chambon@gmail.com>
12e20 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 69 6d 70 6f 72 .#.#.License:.MIT.License..impor
12e40 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 70 6f 72 74 20 t.numpy.as.np.from.scipy.import.
12e60 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 79 6c 61 62 20 ndimage.import.matplotlib.pylab.
12e80 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 6e 64 6f 6d 2e as.pl.import.ot...r.=.np.random.
12ea0 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 74 28 49 29 3a RandomState(42)...def.im2mat(I):
12ec0 0a 20 20 20 20 22 22 22 43 6f 6e 76 65 72 74 73 20 61 6e 20 69 6d 61 67 65 20 74 6f 20 6d 61 74 ....."""Converts.an.image.to.mat
12ee0 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 22 0a 20 20 20 20 rix.(one.pixel.per.line)""".....
12f00 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 30 5d 20 2a 20 49 return.I.reshape((I.shape[0].*.I
12f20 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 64 65 66 20 6d 61 .shape[1],.I.shape[2]))...def.ma
12f40 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 76 65 72 74 73 20 t2im(X,.shape):....."""Converts.
12f60 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 22 22 0a 20 20 20 back.a.matrix.to.an.image"""....
12f80 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 0a 64 65 66 20 6d .return.X.reshape(shape)...def.m
12fa0 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 69 70 28 49 2c 20 inmax(I):.....return.np.clip(I,.
12fc0 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 23 23 23 23 23 23 0,.1)...########################
12fe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
13000 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
13020 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 4c 6f 61 64 69 6e e.data.#.-------------..#.Loadin
13040 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 61 64 28 27 2e 2e g.images.I1.=.ndimage.imread('..
13060 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 70 65 28 6e 70 2e /data/ocean_day.jpg').astype(np.
13080 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 65 2e 69 6d 72 65 float64)./.256.I2.=.ndimage.imre
130a0 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 70 67 27 29 2e 61 ad('../data/ocean_sunset.jpg').a
130c0 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 31 20 3d 20 69 6d stype(np.float64)./.256..X1.=.im
130e0 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 23 20 74 72 61 69 2mat(I1).X2.=.im2mat(I2)..#.trai
13100 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 31 20 3d 20 72 2e ning.samples.nb.=.1000.idx1.=.r.
13120 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 28 6e 62 2c 29 29 randint(X1.shape[0],.size=(nb,))
13140 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 5b 30 5d 2c 20 73 .idx2.=.r.randint(X2.shape[0],.s
13160 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 3a 5d 0a 58 74 20 ize=(nb,))..Xs.=.X1[idx1,.:].Xt.
13180 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 23 23 23 23 23 23 =.X2[idx2,.:]...################
131a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
131c0 23 23 23 23 23 23 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 ##############################.#
131e0 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 2d 2d 2d 2d 2d 2d .Plot.original.image.#.---------
13200 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 67 73 69 7a 65 ----------..pl.figure(1,.figsize
13220 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 32 2c 20 31 29 0a =(6.4,.3))..pl.subplot(1,.2,.1).
13240 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 27 29 0a 70 6c 2e pl.imshow(I1).pl.axis('off').pl.
13260 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 28 31 2c 20 title('Image.1')..pl.subplot(1,.
13280 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 73 28 27 6f 66 66 2,.2).pl.imshow(I2).pl.axis('off
132a0 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 23 23 23 23 23 23 ').pl.title('Image.2')...#######
132c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
132e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
13300 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 63 6f 6c 6f 72 73 #######.#.Scatter.plot.of.colors
13320 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 0a 70 6c 2e 66 69 .#.----------------------..pl.fi
13340 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 0a 70 6c 2e 73 75 gure(2,.figsize=(6.4,.3))..pl.su
13360 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[:,.
13380 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 73 28 5b 30 2c 20 0],.Xs[:,.2],.c=Xs).pl.axis([0,.
133a0 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 0a 70 6c 2e 79 6c 1,.0,.1]).pl.xlabel('Red').pl.yl
133c0 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 67 65 20 31 27 29 abel('Blue').pl.title('Image.1')
133e0 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
13400 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 0a 70 6c 2e 61 78 (Xt[:,.0],.Xt[:,.2],.c=Xt).pl.ax
13420 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 28 27 52 65 64 27 is([0,.1,.0,.1]).pl.xlabel('Red'
13440 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 6c 65 28 27 49 6d ).pl.ylabel('Blue').pl.title('Im
13460 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 23 age.2').pl.tight_layout()...####
13480 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
134a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
134c0 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 68 65 20 64 69 66 ##########.#.Instantiate.the.dif
134e0 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 73 20 61 6e 64 20 ferent.transport.algorithms.and.
13500 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 2d 2d 2d 2d 2d 2d fit.them.#.---------------------
13520 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 --------------------------------
13540 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 65 6d 64 20 3d 20 ------..#.EMDTransport.ot_emd.=.
13560 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 64 2e 66 69 74 28 ot.da.EMDTransport().ot_emd.fit(
13580 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 72 61 6e 73 70 6f Xs=Xs,.Xt=Xt)..#.SinkhornTranspo
135a0 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 6b 68 6f 72 6e 54 rt.ot_sinkhorn.=.ot.da.SinkhornT
135c0 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 6e 6b 68 6f 72 6e ransport(reg_e=1e-1).ot_sinkhorn
135e0 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 69 63 74 69 6f 6e .fit(Xs=Xs,.Xt=Xt)..#.prediction
13600 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 20 6f 66 20 73 61 .between.images.(using.out.of.sa
13620 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 0a 74 72 61 6e 73 mple.prediction.as.in.[6]).trans
13640 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 6d 28 58 73 3d 58 p_Xs_emd.=.ot_emd.transform(Xs=X
13660 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 69 6e 76 65 72 73 1).transp_Xt_emd.=.ot_emd.invers
13680 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 5f 58 73 5f 73 69 e_transform(Xt=X2)..transp_Xs_si
136a0 6e 6b 68 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 nkhorn.=.ot_sinkhorn.transform(X
136c0 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 73 69 s=X1).transp_Xt_sinkhorn.=.ot_si
136e0 6e 6b 68 6f 72 6e 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 nkhorn.inverse_transform(Xt=X2).
13700 0a 49 31 74 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 .I1t.=.minmax(mat2im(transp_Xs_e
13720 6d 64 2c 20 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 md,.I1.shape)).I2t.=.minmax(mat2
13740 69 6d 28 74 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 im(transp_Xt_emd,.I2.shape))..I1
13760 74 65 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 69 6e te.=.minmax(mat2im(transp_Xs_sin
13780 6b 68 6f 72 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 khorn,.I1.shape)).I2te.=.minmax(
137a0 6d 61 74 32 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 mat2im(transp_Xt_sinkhorn,.I2.sh
137c0 61 70 65 29 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 ape))...########################
137e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
13800 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 50 6c 6f 74 20 6e 65 ######################.#.Plot.ne
13820 77 20 69 6d 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 w.images.#.---------------..pl.f
13840 69 67 75 72 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 igure(3,.figsize=(8,.4))..pl.sub
13860 70 6c 6f 74 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 plot(2,.3,.1).pl.imshow(I1).pl.a
13880 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 27 29 0a 0a xis('off').pl.title('Image.1')..
138a0 70 6c 2e 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 49 31 pl.subplot(2,.3,.2).pl.imshow(I1
138c0 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 6d 61 67 t).pl.axis('off').pl.title('Imag
138e0 65 20 31 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 20 33 29 e.1.Adapt')..pl.subplot(2,.3,.3)
13900 0a 70 6c 2e 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 .pl.imshow(I1te).pl.axis('off').
13920 70 6c 2e 74 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 pl.title('Image.1.Adapt.(reg)').
13940 0a 70 6c 2e 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 .pl.subplot(2,.3,.4).pl.imshow(I
13960 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 6d 61 67 2).pl.axis('off').pl.title('Imag
13980 65 20 32 27 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 e.2')..pl.subplot(2,.3,.5).pl.im
139a0 73 68 6f 77 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 show(I2t).pl.axis('off').pl.titl
139c0 65 28 27 49 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 e('Image.2.Adapt')..pl.subplot(2
139e0 2c 20 33 2c 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 ,.3,.6).pl.imshow(I2te).pl.axis(
13a00 27 6f 66 66 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 'off').pl.title('Image.2.Adapt.(
13a20 72 65 67 29 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 reg)').pl.tight_layout()..pl.sho
13a40 77 28 29 0a 50 4b 01 02 14 03 14 00 00 00 00 00 b3 5c 6f 4e c6 3b 52 da f3 0a 00 00 f3 0a 00 00 w().PK...........\oN.;R.........
13a60 0e 00 00 00 00 00 00 00 00 00 00 00 b4 81 00 00 00 00 70 6c 6f 74 5f 67 72 6f 6d 6f 76 2e 70 79 ..................plot_gromov.py
13a80 50 4b 01 02 14 03 14 00 00 00 00 00 b3 5c 6f 4e a4 4f 47 3f 0c 0c 00 00 0c 0c 00 00 0b 00 00 00 PK...........\oN.OG?............
13aa0 00 00 00 00 00 00 00 00 b4 81 1f 0b 00 00 70 6c 6f 74 5f 57 44 41 2e 70 79 50 4b 01 02 14 03 14 ..............plot_WDA.pyPK.....
13ac0 00 00 00 00 00 a6 5d 6f 4e e5 d4 47 7d 9d 1c 00 00 9d 1c 00 00 19 00 00 00 00 00 00 00 00 00 00 ......]oN..G}...................
13ae0 00 b4 81 54 17 00 00 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 ...T...plot_gromov_barycenter.py
13b00 50 4b 01 02 14 03 14 00 00 00 00 00 b3 5c 6f 4e b8 cd f6 1b 7e 0b 00 00 7e 0b 00 00 13 00 00 00 PK...........\oN....~...~.......
13b20 00 00 00 00 00 00 00 00 b4 81 28 34 00 00 70 6c 6f 74 5f 6f 70 74 69 6d 5f 4f 54 72 65 67 2e 70 ..........(4..plot_optim_OTreg.p
13b40 79 50 4b 01 02 14 03 14 00 00 00 00 00 a6 5d 6f 4e 39 06 7c 60 0c 15 00 00 0c 15 00 00 0f 00 00 yPK...........]oN9.|`...........
13b60 00 00 00 00 00 00 00 00 00 b4 81 d7 3f 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 64 32 2e 70 79 50 4b ............?..plot_otda_d2.pyPK
13b80 01 02 14 03 14 00 00 00 00 00 a6 5d 6f 4e 71 12 0d cb 23 12 00 00 23 12 00 00 1c 00 00 00 00 00 ...........]oNq...#...#.........
13ba0 00 00 00 00 00 00 b4 81 10 55 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 73 65 6d 69 5f 73 75 70 65 72 .........U..plot_otda_semi_super
13bc0 76 69 73 65 64 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 b3 5c 6f 4e 0b 5c 2a af a2 06 00 00 vised.pyPK...........\oN.\*.....
13be0 a2 06 00 00 0d 00 00 00 00 00 00 00 00 00 00 00 b4 81 6d 67 00 00 70 6c 6f 74 5f 4f 54 5f 31 44 ..................mg..plot_OT_1D
13c00 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 b4 5c 6f 4e 6d 8a 53 18 e2 17 00 00 e2 17 00 00 12 .pyPK...........\oNm.S..........
13c20 00 00 00 00 00 00 00 00 00 00 00 b4 81 3a 6e 00 00 70 6c 6f 74 5f 73 74 6f 63 68 61 73 74 69 63 .............:n..plot_stochastic
13c40 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 3c 5d 6f 4e f2 7c 7e 9e 5c 0e 00 00 5c 0e 00 00 15 .pyPK..........<]oN.|~.\...\....
13c60 00 00 00 00 00 00 00 00 00 00 00 b4 81 4c 86 00 00 70 6c 6f 74 5f 62 61 72 79 63 65 6e 74 65 72 .............L...plot_barycenter
13c80 5f 31 44 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 a6 5d 6f 4e b0 31 70 de ee 10 00 00 ee 10 _1D.pyPK...........]oN.1p.......
13ca0 00 00 14 00 00 00 00 00 00 00 00 00 00 00 b4 81 db 94 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 63 6c ....................plot_otda_cl
13cc0 61 73 73 65 73 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 b3 5c 6f 4e ff 09 e8 78 dd 08 00 00 asses.pyPK...........\oN...x....
13ce0 dd 08 00 00 14 00 00 00 00 00 00 00 00 00 00 00 b4 81 fb a5 00 00 70 6c 6f 74 5f 4f 54 5f 31 44 ......................plot_OT_1D
13d00 5f 73 6d 6f 6f 74 68 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 3d 5d 6f 4e b0 ed ff 28 54 10 _smooth.pyPK..........=]oN...(T.
13d20 00 00 54 10 00 00 22 00 00 00 00 00 00 00 00 00 00 00 b4 81 0a af 00 00 70 6c 6f 74 5f 6f 74 64 ..T...".................plot_otd
13d40 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 50 4b 01 02 14 03 a_mapping_colors_images.pyPK....
13d60 14 00 00 00 00 00 b3 5c 6f 4e 90 0c 61 ee fa 07 00 00 fa 07 00 00 1f 00 00 00 00 00 00 00 00 00 .......\oN..a...................
13d80 00 00 b4 81 9e bf 00 00 70 6c 6f 74 5f 66 72 65 65 5f 73 75 70 70 6f 72 74 5f 62 61 72 79 63 65 ........plot_free_support_baryce
13da0 6e 74 65 72 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 a6 5d 6f 4e 6f 6c 58 5b 88 13 00 00 88 nter.pyPK...........]oNolX[.....
13dc0 13 00 00 13 00 00 00 00 00 00 00 00 00 00 00 b4 81 d5 c7 00 00 70 6c 6f 74 5f 4f 54 5f 4c 31 5f .....................plot_OT_L1_
13de0 76 73 5f 4c 32 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 a6 5d 6f 4e a6 16 4e 83 2e 17 00 00 vs_L2.pyPK...........]oN..N.....
13e00 2e 17 00 00 21 00 00 00 00 00 00 00 00 00 00 00 b4 81 8e db 00 00 70 6c 6f 74 5f 62 61 72 79 63 ....!.................plot_baryc
13e20 65 6e 74 65 72 5f 6c 70 5f 76 73 5f 65 6e 74 72 6f 70 69 63 2e 70 79 50 4b 01 02 14 03 14 00 00 enter_lp_vs_entropic.pyPK.......
13e40 00 00 00 b3 5c 6f 4e bf 4a 09 ec 55 09 00 00 55 09 00 00 15 00 00 00 00 00 00 00 00 00 00 00 b4 ....\oN.J..U...U................
13e60 81 fb f2 00 00 70 6c 6f 74 5f 4f 54 5f 32 44 5f 73 61 6d 70 6c 65 73 2e 70 79 50 4b 01 02 14 03 .....plot_OT_2D_samples.pyPK....
13e80 14 00 00 00 00 00 b3 5c 6f 4e 0e e0 72 82 97 0b 00 00 97 0b 00 00 1b 00 00 00 00 00 00 00 00 00 .......\oN..r...................
13ea0 00 00 b4 81 83 fc 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 6c 69 6e 65 61 72 5f 6d 61 70 70 69 6e 67 ........plot_otda_linear_mapping
13ec0 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 a6 5d 6f 4e cd ad d9 82 f4 0f 00 00 f4 0f 00 00 14 .pyPK...........]oN.............
13ee0 00 00 00 00 00 00 00 00 00 00 00 b4 81 53 08 01 00 70 6c 6f 74 5f 6f 74 64 61 5f 6d 61 70 70 69 .............S...plot_otda_mappi
13f00 6e 67 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 b3 5c 6f 4e 7a 2e b5 2b 65 09 00 00 65 09 00 ng.pyPK...........\oNz..+e...e..
13f20 00 13 00 00 00 00 00 00 00 00 00 00 00 b4 81 79 18 01 00 70 6c 6f 74 5f 63 6f 6d 70 75 74 65 5f ...............y...plot_compute_
13f40 65 6d 64 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 b3 5c 6f 4e d1 a8 d7 2e a9 09 00 00 a9 09 emd.pyPK...........\oN..........
13f60 00 00 20 00 00 00 00 00 00 00 00 00 00 00 b4 81 0f 22 01 00 70 6c 6f 74 5f 63 6f 6e 76 6f 6c 75 ................."..plot_convolu
13f80 74 69 6f 6e 61 6c 5f 62 61 72 79 63 65 6e 74 65 72 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 tional_barycenter.pyPK..........
13fa0 c0 5c 6f 4e f4 37 b2 97 17 0e 00 00 17 0e 00 00 19 00 00 00 00 00 00 00 00 00 00 00 b4 81 f6 2b .\oN.7.........................+
13fc0 01 00 70 6c 6f 74 5f 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 ..plot_otda_color_images.pyPK...
13fe0 00 00 00 15 00 15 00 97 05 00 00 44 3a 01 00 00 00 ...........D:....