summaryrefslogtreecommitdiff
path: root/docs/source/auto_examples/auto_examples_python.zip
blob: 7c7ff86cd3e6d6eb9c4b164542d181540f33fb64 (plain)
ofshex dumpascii
0000 50 4b 03 04 14 00 00 00 00 00 76 79 50 4c d7 f6 2e c0 f2 0a 00 00 f2 0a 00 00 0e 00 00 00 70 6c PK........vyPL................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 67 65 74 5f 32 44 5f 73 61 6d 70 6c 65 73 5f 67 61 75 73 73 28 6e .datasets.get_2D_samples_gauss(n
0480 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 6c _samples,.mu_s,.cov_s)..P.=.sp.l
04a0 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 64 inalg.sqrtm(cov_t)..xt.=.np.rand
04c0 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 20 om.randn(n_samples,.3).dot(P).+.
04e0 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 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 0d 0a 23 0d 0a 23 20 50 6c 6f 74 #####################..#..#.Plot
0540 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 2d ting.the.distributions..#.------
0560 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 20 --------------------......fig.=.
0580 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 6c pl.figure()..ax1.=.fig.add_subpl
05a0 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 3a ot(121)..ax1.plot(xs[:,.0],.xs[:
05c0 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 65 ,.1],.'+b',.label='Source.sample
05e0 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 20 s')..ax2.=.fig.add_subplot(122,.
0600 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 74 projection='3d')..ax2.scatter(xt
0620 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 6f [:,.0],.xt[:,.1],.xt[:,.2],.colo
0640 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 23 r='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 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 6c ##..#..#.Compute.distance.kernel
06c0 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 6c s,.normalize.them.and.then.displ
06e0 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 2d ay..#.--------------------------
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 0d -------------------------------.
0720 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 64 .....C1.=.sp.spatial.distance.cd
0740 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 73 ist(xs,.xs)..C2.=.sp.spatial.dis
0760 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 2e tance.cdist(xt,.xt)....C1./=.C1.
0780 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 75 max()..C2./=.C2.max()....pl.figu
07a0 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 77 re()..pl.subplot(121)..pl.imshow
07c0 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 77 (C1)..pl.subplot(122)..pl.imshow
07e0 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 23 (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 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 69 ..#..#.Compute.Gromov-Wasserstei
0860 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 2d n.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 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 0d -----....p.=.ot.unif(n_samples).
08c0 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 20 .q.=.ot.unif(n_samples)....gw0,.
08e0 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 74 log0.=.ot.gromov.gromov_wasserst
0900 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 5f ein(......C1,.C2,.p,.q,.'square_
0920 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 0a loss',.verbose=True,.log=True)..
0940 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 67 ..gw,.log.=.ot.gromov.entropic_g
0960 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 20 romov_wasserstein(......C1,.C2,.
0980 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 2d p,.q,.'square_loss',.epsilon=5e-
09a0 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 0a 4,.log=True,.verbose=True)......
09c0 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 6e print('Gromov-Wasserstein.distan
09e0 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 0a ces:.'.+.str(log0['gw_dist']))..
0a00 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 65 print('Entropic.Gromov-Wasserste
0a20 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 69 in.distances:.'.+.str(log['gw_di
0a40 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 29 st']))......pl.figure(1,.(10,.5)
0a60 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 73 )....pl.subplot(1,.2,.1)..pl.ims
0a80 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 27 how(gw0,.cmap='jet')..pl.title('
0aa0 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 6c Gromov.Wasserstein')....pl.subpl
0ac0 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 3d ot(1,.2,.2)..pl.imshow(gw,.cmap=
0ae0 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 6f 'jet')..pl.title('Entropic.Gromo
0b00 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 4b v.Wasserstein')....pl.show()..PK
0b20 03 04 14 00 00 00 00 00 77 79 50 4c a4 4f 47 3f 0c 0c 00 00 0c 0c 00 00 0b 00 00 00 70 6c 6f 74 ........wyPL.OG?............plot
0b40 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 22 _WDA.py#.-*-.coding:.utf-8.-*-."
0b60 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 3d "".=============================
0b80 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 6e ====.Wasserstein.Discriminant.An
0ba0 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 3d alysis.=========================
0bc0 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 74 ========..This.example.illustrat
0be0 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 20 e.the.use.of.WDA.as.proposed.in.
0c00 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 69 [11]....[11].Flamary,.R.,.Cuturi
0c20 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 6a ,.M.,.Courty,.N.,.&.Rakotomamonj
0c40 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 69 y,.A..(2016)..Wasserstein.Discri
0c60 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 3a minant.Analysis..."""..#.Author:
0c80 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
0ca0 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..
0cc0 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
0ce0 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 70 tlib.pylab.as.pl..from.ot.dr.imp
0d00 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 23 ort.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 0a 23 20 #############################.#.
0d60 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 23 Generate.data.#.-------------..#
0d80 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 61 %%.parameters..n.=.1000..#.nb.sa
0da0 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 73 mples.in.source.and.target.datas
0dc0 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 20 ets.nz.=.0.2..#.generate.circle.
0de0 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 20 dataset.t.=.np.random.rand(n).*.
0e00 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 6e 2.*.np.pi.ys.=.np.floor((np.aran
0e20 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 6e ge(n).*.1.0./.n.*.3)).+.1.xs.=.n
0e40 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 65 p.concatenate(.....(np.cos(t).re
0e60 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 70 shape((-1,.1)),.np.sin(t).reshap
0e80 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 73 e((-1,.1))),.1).xs.=.xs.*.ys.res
0ea0 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 6e hape(-1,.1).+.nz.*.np.random.ran
0ec0 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 20 dn(n,.2)..t.=.np.random.rand(n).
0ee0 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 72 *.2.*.np.pi.yt.=.np.floor((np.ar
0f00 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 3d ange(n).*.1.0./.n.*.3)).+.1.xt.=
0f20 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 2e .np.concatenate(.....(np.cos(t).
0f40 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 68 reshape((-1,.1)),.np.sin(t).resh
0f60 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 72 ape((-1,.1))),.1).xt.=.xt.*.yt.r
0f80 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 72 eshape(-1,.1).+.nz.*.np.random.r
0fa0 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 70 andn(n,.2)..nbnoise.=.8..xs.=.np
0fc0 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 20 .hstack((xs,.np.random.randn(n,.
0fe0 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 6e nbnoise))).xt.=.np.hstack((xt,.n
1000 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 23 p.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 0a 23 20 50 6c 6f 74 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d ############.#.Plot.data.#.-----
1080 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 65 ----..#%%.plot.samples.pl.figure
10a0 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 70 (1,.figsize=(6.4,.3.5))..pl.subp
10c0 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 5d lot(1,.2,.1).pl.scatter(xt[:,.0]
10e0 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 61 ,.xt[:,.1],.c=ys,.marker='+',.la
1100 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 28 bel='Source.samples').pl.legend(
1120 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 69 loc=0).pl.title('Discriminant.di
1140 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 0a mensions')..pl.subplot(1,.2,.2).
1160 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 63 pl.scatter(xt[:,.2],.xt[:,.3],.c
1180 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 73 =ys,.marker='+',.label='Source.s
11a0 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 74 amples').pl.legend(loc=0).pl.tit
11c0 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 5f le('Other.dimensions').pl.tight_
11e0 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 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 0a 23 20 43 6f 6d 70 75 ########################.#.Compu
1240 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 0a te.Fisher.Discriminant.Analysis.
1260 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 #.------------------------------
1280 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 50 ------..#%%.Compute.FDA.p.=.2..P
12a0 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 23 fda,.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 0a 23 20 43 6f 6d 70 75 74 65 20 57 61 73 73 65 72 73 74 #############.#.Compute.Wasserst
1320 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 2d ein.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 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 67 -----..#%%.Compute.WDA.p.=.2.reg
1380 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 64 .=.1e0.k.=.10.maxiter.=.100..Pwd
13a0 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 2c a,.projwda.=.wda(xs,.ys,.p,.reg,
13c0 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 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 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 2d #####.#.Plot.2D.projections.#.--
1440 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 70 -----------------..#%%.plot.samp
1460 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 6f les..xsp.=.projfda(xs).xtp.=.pro
1480 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 70 jfda(xt)..xspw.=.projwda(xs).xtp
14a0 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 70 w.=.projwda(xt)..pl.figure(2)..p
14c0 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 73 l.subplot(2,.2,.1).pl.scatter(xs
14e0 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 72 p[:,.0],.xsp[:,.1],.c=ys,.marker
1500 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')
1520 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
1540 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 6c ected.training.samples.FDA')..pl
1560 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 70 .subplot(2,.2,.2).pl.scatter(xtp
1580 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 3d [:,.0],.xtp[:,.1],.c=ys,.marker=
15a0 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 0a '+',.label='Projected.samples').
15c0 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 65 pl.legend(loc=0).pl.title('Proje
15e0 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 70 cted.test.samples.FDA')..pl.subp
1600 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 20 lot(2,.2,.3).pl.scatter(xspw[:,.
1620 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 27 0],.xspw[:,.1],.c=ys,.marker='+'
1640 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 2e ,.label='Projected.samples').pl.
1660 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 65 legend(loc=0).pl.title('Projecte
1680 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 62 d.training.samples.WDA')..pl.sub
16a0 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 2c plot(2,.2,.4).pl.scatter(xtpw[:,
16c0 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 2b .0],.xtpw[:,.1],.c=ys,.marker='+
16e0 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
1700 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
1720 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 6c ed.test.samples.WDA').pl.tight_l
1740 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 77 79 50 ayout()..pl.show().PK........wyP
1760 4c 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 72 L..G}............plot_gromov_bar
1780 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 2a ycenter.py#.-*-.coding:.utf-8.-*
17a0 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 3d -.."""..========================
17c0 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 69 =============..Gromov-Wasserstei
17e0 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 3d n.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 0d 0a 0d 0a 54 ===========================....T
1820 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 20 his.example.is.designed.to.show.
1840 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 69 how.to.use.the.Gromov-Wasserstei
1860 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 0d n.distance..computation.in.POT..
1880 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 20 ."""....#.Author:.Erwan.Vautier.
18a0 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 20 <erwan.vautier@gmail.com>..#....
18c0 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 69 .....Nicolas.Courty.<ncourty@iri
18e0 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 73 sa.fr>..#..#.License:.MIT.Licens
1900 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 72 e......import.numpy.as.np..impor
1920 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 64 t.scipy.as.sp....import.scipy.nd
1940 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 2e image.as.spi..import.matplotlib.
1960 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 74 pylab.as.pl..from.sklearn.import
1980 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 73 .manifold..from.sklearn.decompos
19a0 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 0d ition.import.PCA....import.ot...
19c0 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 .###############################
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 0d 0a 23 20 53 6d 61 63 6f 66 20 4d 44 53 0d 0a 23 ###############..#.Smacof.MDS..#
1a20 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 20 .----------..#..#.This.function.
1a40 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 70 allows.to.find.an.embedding.of.p
1a60 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 72 oints.given.a.dissimilarity.matr
1a80 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 20 ix..#.that.will.be.given.by.the.
1aa0 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 66 output.of.the.algorithm......def
1ac0 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 30 .smacof_mds(C,.dim,.max_iter=300
1ae0 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 75 0,.eps=1e-9):......"""......Retu
1b00 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 20 rns.an.interpolated.point.cloud.
1b20 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 72 following.the.dissimilarity.matr
1b40 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 65 ix.C......using.SMACOF.multidime
1b60 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 69 nsional.scaling.(MDS).in.specifi
1b80 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 65 c.dimensionned......target.space
1ba0 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 2d ........Parameters......--------
1bc0 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 20 --......C.:.ndarray,.shape.(ns,.
1be0 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 69 ns)..........dissimilarity.matri
1c00 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 65 x......dim.:.int............dime
1c20 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 20 nsion.of.the.targeted.space.....
1c40 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 75 .max_iter.:..int..........Maximu
1c60 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 4d m.number.of.iterations.of.the.SM
1c80 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 0d ACOF.algorithm.for.a.single.run.
1ca0 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 69 .....eps.:.float..........relati
1cc0 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 63 ve.tolerance.w.r.t.stress.to.dec
1ce0 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 20 lare.converge........Returns....
1d00 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 73 ..-------......npos.:.ndarray,.s
1d20 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 64 hape.(R,.dim).............Embedd
1d40 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 74 ed.coordinates.of.the.interpolat
1d60 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 20 ed.point.cloud.(defined.with....
1d80 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 0d .........one.isometry)......""".
1da0 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 61 .......rng.=.np.random.RandomSta
1dc0 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 64 te(seed=3)........mds.=.manifold
1de0 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 78 .MDS(..........dim,..........max
1e00 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 2d _iter=max_iter,..........eps=1e-
1e20 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 6f 9,..........dissimilarity='preco
1e40 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 20 mputed',..........n_init=1).....
1e60 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 0a .pos.=.mds.fit(C).embedding_....
1e80 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 20 ....nmds.=.manifold.MDS(........
1ea0 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 2c ..2,..........max_iter=max_iter,
1ec0 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 73 ..........eps=1e-9,..........dis
1ee0 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 20 similarity="precomputed",.......
1f00 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 5f ...random_state=rng,..........n_
1f20 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 61 init=1)......npos.=.nmds.fit_tra
1f40 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 72 nsform(C,.init=pos)........retur
1f60 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 23 n.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 0d 0a 23 20 44 61 ##########################..#.Da
1fc0 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 2d ta.preparation..#.--------------
1fe0 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 20 --..#..#.The.four.distributions.
2000 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 6d are.constructed.from.4.simple.im
2020 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 22 ages......def.im2mat(I):......""
2040 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 6f "Converts.and.image.to.matrix.(o
2060 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 72 ne.pixel.per.line)"""......retur
2080 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 70 n.I.reshape((I.shape[0].*.I.shap
20a0 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 3d e[1],.I.shape[2]))......square.=
20c0 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 27 .spi.imread('../data/square.png'
20e0 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 20 ).astype(np.float64)[:,.:,.2]./.
2100 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 61 256..cross.=.spi.imread('../data
2120 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 5b /cross.png').astype(np.float64)[
2140 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 69 :,.:,.2]./.256..triangle.=.spi.i
2160 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 73 mread('../data/triangle.png').as
2180 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 0d type(np.float64)[:,.:,.2]./.256.
21a0 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 72 .star.=.spi.imread('../data/star
21c0 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 20 .png').astype(np.float64)[:,.:,.
21e0 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 72 2]./.256....shapes.=.[square,.cr
2200 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 78 oss,.triangle,.star]....S.=.4..x
2220 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 0a s.=.[[].for.i.in.range(S)]......
2240 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 69 for.nb.in.range(4):......for.i.i
2260 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 61 n.range(8):..........for.j.in.ra
2280 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 6e nge(8):..............if.shapes[n
22a0 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 20 b][i,.j].<.0.95:................
22c0 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 78 ..xs[nb].append([j,.8.-.i])....x
22e0 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 6e s.=.np.array([np.array(xs[0]),.n
2300 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 20 p.array(xs[1]),.................
2320 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 29 np.array(xs[2]),.np.array(xs[3])
2340 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 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 0d 0a 23 20 42 61 72 79 63 65 6e 74 ####################..#.Barycent
23a0 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 2d er.computation..#.--------------
23c0 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 66 --------......ns.=.[len(xs[s]).f
23e0 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 33 or.s.in.range(S)]..n_samples.=.3
2400 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 61 0...."""Compute.all.distances.ma
2420 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 43 trices.for.the.four.shapes"""..C
2440 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 78 s.=.[sp.spatial.distance.cdist(x
2460 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 0d s[s],.xs[s]).for.s.in.range(S)].
2480 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 43 .Cs.=.[cs./.cs.max().for.cs.in.C
24a0 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 73 s]....ps.=.[ot.unif(ns[s]).for.s
24c0 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 6d .in.range(S)]..p.=.ot.unif(n_sam
24e0 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 29 ples)......lambdast.=.[[float(i)
2500 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 6e ./.3,.float(3.-.i)./.3].for.i.in
2520 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 72 .[1,.2]]....Ct01.=.[0.for.i.in.r
2540 61 6e 67 65 28 32 29 5d 0d 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 32 29 3a 0d 0a 20 20 ange(2)]..for.i.in.range(2):....
2560 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 72 ..Ct01[i].=.ot.gromov.gromov_bar
2580 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 31 ycenters(n_samples,.[Cs[0],.Cs[1
25a0 5d 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ]],.............................
25c0 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 20 ................[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 5d 2c 20 70 2c 20 6c 61 6d 62 64 61 73 74 5b 69 5d 2c 20 27 73 ...........],.p,.lambdast[i],.'s
2620 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 20 quare_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 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 30 ..max_iter=100,.tol=1e-3)....Ct0
2680 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 69 2.=.[0.for.i.in.range(2)]..for.i
26a0 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 2e .in.range(2):......Ct02[i].=.ot.
26c0 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 70 gromov.gromov_barycenters(n_samp
26e0 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 20 les,.[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 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 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 5d 2c 20 70 ............................],.p
2760 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 23 ,.lambdast[i],.'square_loss',..#
2780 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 20 .5e-4,..........................
27a0 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 2c ...................max_iter=100,
27c0 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 6e .tol=1e-3)....Ct13.=.[0.for.i.in
27e0 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 0a .range(2)]..for.i.in.range(2):..
2800 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 62 ....Ct13[i].=.ot.gromov.gromov_b
2820 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 73 arycenters(n_samples,.[Cs[1],.Cs
2840 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 20 [3]],...........................
2860 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 0d ..................[ps[1],.ps[3].
2880 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
28a0 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 20 .............],.p,.lambdast[i],.
28c0 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 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 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 ....max_iter=100,.tol=1e-3)....C
2920 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 72 t23.=.[0.for.i.in.range(2)]..for
2940 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 6f .i.in.range(2):......Ct23[i].=.o
2960 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 61 t.gromov.gromov_barycenters(n_sa
2980 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 20 mples,.[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 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 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 5d 2c ..............................],
2a00 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 20 .p,.lambdast[i],.'square_loss',.
2a20 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 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 6d 61 78 5f 69 74 65 72 3d 31 30 .....................max_iter=10
2a60 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 23 0,.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 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 2d ..#.Visualization..#.-----------
2ae0 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 6e --..#..#.The.PCA.helps.in.gettin
2b00 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 69 g.consistency.between.the.rotati
2b20 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 3d ons......clf.=.PCA(n_components=
2b40 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 20 2)..npos.=.[0,.0,.0,.0]..npos.=.
2b60 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 72 [smacof_mds(Cs[s],.2).for.s.in.r
2b80 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 70 ange(S)]....npost01.=.[0,.0]..np
2ba0 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 20 ost01.=.[smacof_mds(Ct01[s],.2).
2bc0 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 63 for.s.in.range(2)]..npost01.=.[c
2be0 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 72 lf.fit_transform(npost01[s]).for
2c00 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 2c .s.in.range(2)]....npost02.=.[0,
2c20 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 5b .0]..npost02.=.[smacof_mds(Ct02[
2c40 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 74 s],.2).for.s.in.range(2)]..npost
2c60 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 5b 02.=.[clf.fit_transform(npost02[
2c80 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 31 s]).for.s.in.range(2)]....npost1
2ca0 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 64 3.=.[0,.0]..npost13.=.[smacof_md
2cc0 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 5d s(Ct13[s],.2).for.s.in.range(2)]
2ce0 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 6e ..npost13.=.[clf.fit_transform(n
2d00 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 0d post13[s]).for.s.in.range(2)]...
2d20 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 6d .npost23.=.[0,.0]..npost23.=.[sm
2d40 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 61 acof_mds(Ct23[s],.2).for.s.in.ra
2d60 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 6e nge(2)]..npost23.=.[clf.fit_tran
2d80 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 65 sform(npost23[s]).for.s.in.range
2da0 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 7a (2)]......fig.=.pl.figure(figsiz
2dc0 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 32 e=(10,.10))....ax1.=.pl.subplot2
2de0 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 2d grid((4,.4),.(0,.0))..pl.xlim((-
2e00 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 63 1,.1))..pl.ylim((-1,.1))..ax1.sc
2e20 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 20 atter(npos[0][:,.0],.npos[0][:,.
2e40 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 6c 1],.color='r')....ax2.=.pl.subpl
2e60 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 6d ot2grid((4,.4),.(0,.1))..pl.xlim
2e80 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 32 ((-1,.1))..pl.ylim((-1,.1))..ax2
2ea0 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 74 .scatter(npost01[1][:,.0],.npost
2ec0 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 3d 01[1][:,.1],.color='b')....ax3.=
2ee0 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 29 .pl.subplot2grid((4,.4),.(0,.2))
2f00 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,
2f20 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 20 .1))..ax3.scatter(npost01[0][:,.
2f40 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 29 0],.npost01[0][:,.1],.color='b')
2f60 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 29 ....ax4.=.pl.subplot2grid((4,.4)
2f80 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 2e ,.(0,.3))..pl.xlim((-1,.1))..pl.
2fa0 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 5b ylim((-1,.1))..ax4.scatter(npos[
2fc0 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 27 1][:,.0],.npos[1][:,.1],.color='
2fe0 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 2c r')....ax5.=.pl.subplot2grid((4,
3000 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 0a .4),.(1,.0))..pl.xlim((-1,.1))..
3020 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 70 pl.ylim((-1,.1))..ax5.scatter(np
3040 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 5d ost02[1][:,.0],.npost02[1][:,.1]
3060 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 74 ,.color='b')....ax6.=.pl.subplot
3080 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 28 2grid((4,.4),.(1,.3))..pl.xlim((
30a0 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 73 -1,.1))..pl.ylim((-1,.1))..ax6.s
30c0 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 33 catter(npost13[1][:,.0],.npost13
30e0 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 70 [1][:,.1],.color='b')....ax7.=.p
3100 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 0a l.subplot2grid((4,.4),.(2,.0))..
3120 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 31 pl.xlim((-1,.1))..pl.ylim((-1,.1
3140 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 5d ))..ax7.scatter(npost02[0][:,.0]
3160 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 0a ,.npost02[0][:,.1],.color='b')..
3180 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 20 ..ax8.=.pl.subplot2grid((4,.4),.
31a0 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 6c (2,.3))..pl.xlim((-1,.1))..pl.yl
31c0 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 33 im((-1,.1))..ax8.scatter(npost13
31e0 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 6c [0][:,.0],.npost13[0][:,.1],.col
3200 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 64 or='b')....ax9.=.pl.subplot2grid
3220 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 31 ((4,.4),.(3,.0))..pl.xlim((-1,.1
3240 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 65 ))..pl.ylim((-1,.1))..ax9.scatte
3260 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 20 r(npos[2][:,.0],.npos[2][:,.1],.
3280 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 32 color='r')....ax10.=.pl.subplot2
32a0 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 2d grid((4,.4),.(3,.1))..pl.xlim((-
32c0 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 73 1,.1))..pl.ylim((-1,.1))..ax10.s
32e0 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 33 catter(npost23[1][:,.0],.npost23
3300 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 20 [1][:,.1],.color='b')....ax11.=.
3320 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 0d pl.subplot2grid((4,.4),.(3,.2)).
3340 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,.
3360 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 20 1))..ax11.scatter(npost23[0][:,.
3380 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 29 0],.npost23[0][:,.1],.color='b')
33a0 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 34 ....ax12.=.pl.subplot2grid((4,.4
33c0 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 6c ),.(3,.3))..pl.xlim((-1,.1))..pl
33e0 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 6f .ylim((-1,.1))..ax12.scatter(npo
3400 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 72 s[3][:,.0],.npos[3][:,.1],.color
3420 3d 27 72 27 29 0d 0a 50 4b 03 04 14 00 00 00 00 00 76 79 50 4c be a0 06 25 7c 0b 00 00 7c 0b 00 ='r')..PK........vyPL...%|...|..
3440 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 6f .....plot_optim_OTreg.py#.-*-.co
3460 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.-*-.""".============
3480 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 7a ======================.Regulariz
34a0 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 3d ed.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 0a 0a 49 6c ============================..Il
34e0 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 63 lustrates.the.use.of.the.generic
3500 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 0a .solver.for.regularized.OT.with.
3520 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 72 user-designed.regularization.ter
3540 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 20 m..It.uses.Conditional.gradient.
3560 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 74 as.in.[6].and.generalized.Condit
3580 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 35 ional.Gradient.as.proposed.in.[5
35a0 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 72 ][7]....[5].N..Courty;.R..Flamar
35c0 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 70 y;.D..Tuia;.A..Rakotomamonjy,.Op
35e0 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 74 timal.Transport.for.Domain.Adapt
3600 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 50 ation,.in.IEEE.Transactions.on.P
3620 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 65 attern.Analysis.and.Machine.Inte
3640 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 31 lligence.,.vol.PP,.no.99,.pp.1-1
3660 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 2c ...[6].Ferradans,.S.,.Papadakis,
3680 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 20 .N.,.Peyr..,.G.,.&.Aujol,.J..F..
36a0 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 74 (2014)..Regularized.discrete.opt
36c0 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.
36e0 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 38 Imaging.Sciences,.7(3),.1853-188
3700 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 61 2...[7].Rakotomamonjy,.A.,.Flama
3720 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 6e ry,.R.,.&.Courty,.N..(2015)..Gen
3740 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 61 eralized.conditional.gradient:.a
3760 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 69 nalysis.of.convergence.and.appli
3780 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 35 cations..arXiv.preprint.arXiv:15
37a0 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 61 10.06567....."""..import.numpy.a
37c0 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 20 s.np.import.matplotlib.pylab.as.
37e0 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 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 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d ###########.#.Generate.data.#.--
3860 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 3d -----------..#%%.parameters..n.=
3880 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 73 .100..#.nb.bins..#.bin.positions
38a0 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 74 .x.=.np.arange(n,.dtype=np.float
38c0 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 20 64)..#.Gaussian.distributions.a.
38e0 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 31 44 5f 67 61 75 73 73 28 6e 2c 20 6d 3d =.ot.datasets.get_1D_gauss(n,.m=
3900 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 3d 20 20,.s=5)..#.m=.mean,.s=.std.b.=.
3920 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 31 44 5f 67 61 75 73 73 28 6e 2c 20 6d 3d 36 30 ot.datasets.get_1D_gauss(n,.m=60
3940 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 69 ,.s=10)..#.loss.matrix.M.=.ot.di
3960 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 28 st(x.reshape((n,.1)),.x.reshape(
3980 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 23 23 23 (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 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 0a 23 #####.#.Solve.EMD.#.---------..#
3a00 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 0a 70 6c %%.EMD..G0.=.ot.emd(a,.b,.M)..pl
3a20 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 2e 70 6c .figure(3,.figsize=(5,.5)).ot.pl
3a40 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 61 74 72 ot.plot1D_mat(a,.b,.G0,.'OT.matr
3a60 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 23 23 23 ix.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 0a 23 20 53 6f 6c 76 65 20 #######################.#.Solve.
3ac0 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 61 72 69 EMD.with.Frobenius.norm.regulari
3ae0 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 2d 2d 2d zation.#.-----------------------
3b00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 45 78 61 6d 70 ---------------------..#%%.Examp
3b20 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 72 69 7a le.with.Frobenius.norm.regulariz
3b40 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 30 2e 35 ation...def.f(G):.....return.0.5
3b60 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 20 20 20 .*.np.sum(G**2)...def.df(G):....
3b80 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 20 6f 74 .return.G...reg.=.1e-1..Gl2.=.ot
3ba0 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 2c 20 76 .optim.cg(a,.b,.M,.reg,.f,.df,.v
3bc0 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 2e 70 6c erbose=True)..pl.figure(3).ot.pl
3be0 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 6d 61 74 ot.plot1D_mat(a,.b,.Gl2,.'OT.mat
3c00 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 23 23 23 rix.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 0a ###############################.
3c60 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 75 6c 61 #.Solve.EMD.with.entropic.regula
3c80 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 2d rization.#.---------------------
3ca0 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 65 20 77 -----------------..#%%.Example.w
3cc0 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 0a 64 65 ith.entropic.regularization...de
3ce0 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 20 6e 70 f.f(G):.....return.np.sum(G.*.np
3d00 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 75 72 6e .log(G))...def.df(G):.....return
3d20 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 0a 47 65 .np.log(G).+.1....reg.=.1e-3..Ge
3d40 20 3d 20 6f 74 2e 6f 70 74 69 6d 2e 63 67 28 61 2c 20 62 2c 20 4d 2c 20 72 65 67 2c 20 66 2c 20 .=.ot.optim.cg(a,.b,.M,.reg,.f,.
3d60 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 34 2c 20 df,.verbose=True)..pl.figure(4,.
3d80 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 6d figsize=(5,.5)).ot.plot.plot1D_m
3da0 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 70 2e 20 at(a,.b,.Ge,.'OT.matrix.Entrop..
3dc0 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 23 23 23 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 0a 23 20 53 6f 6c 76 65 20 45 4d #####################.#.Solve.EM
3e20 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 70 69 63 D.with.Frobenius.norm.+.entropic
3e40 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 2d 2d 2d .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 0a 0a 23 25 25 20 45 78 61 6d 70 6c 65 20 77 69 74 68 20 46 72 6f 62 ---------..#%%.Example.with.Frob
3ea0 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 69 7a 61 enius.norm.+.entropic.regulariza
3ec0 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 20 72 65 tion.with.gcg...def.f(G):.....re
3ee0 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 20 64 66 turn.0.5.*.np.sum(G**2)...def.df
3f00 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 2d 33 0a (G):.....return.G...reg1.=.1e-3.
3f20 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 67 63 67 reg2.=.1e-1..Gel2.=.ot.optim.gcg
3f40 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 76 65 72 (a,.b,.M,.reg1,.reg2,.f,.df,.ver
3f60 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 69 7a 65 bose=True)..pl.figure(5,.figsize
3f80 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
3fa0 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 20 46 72 ,.Gel2,.'OT.entropic.+.matrix.Fr
3fc0 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 00 77 79 ob..reg').pl.show().PK........wy
3fe0 50 4c 66 5a 12 7c 0a 15 00 00 0a 15 00 00 0f 00 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 64 32 2e 70 PLfZ.|............plot_otda_d2.p
4000 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 3d 3d 3d y#.-*-.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 0a 4f 54 20 66 6f 72 20 64 6f 6d 61 69 6e 20 61 ================.OT.for.domain.a
4060 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 62 75 74 daptation.on.empirical.distribut
4080 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.===========================
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 0a 0a 54 68 69 73 20 65 ========================..This.e
40c0 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 61 70 74 xample.introduces.a.domain.adapt
40e0 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 6c 69 63 ation.in.a.2D.setting..It.explic
4100 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 70 74 61 its.the.problem.of.domain.adapta
4120 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 6d 61 6c tion.and.introduces.some.optimal
4140 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 65 20 69 .transport.approaches.to.solve.i
4160 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 6c 20 63 t...Quantities.such.as.optimal.c
4180 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 65 66 66 ouplings,.greater.coupling.coeff
41a0 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 65 73 20 icients.and.transported.samples.
41c0 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 69 76 65 are.represented.in.order.to.give
41e0 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 61 74 20 .a.visual.understanding.of.what.
4200 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 6e 67 2e the.transport.methods.are.doing.
4220 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 20 3c 72 ."""..#.Authors:.Remi.Flamary.<r
4240 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 20 20 20 emi.flamary@unice.fr>.#.........
4260 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 62 6f 6e .Stanislas.Chambon.<stan.chambon
4280 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 4c 69 63 @gmail.com>.#.#.License:.MIT.Lic
42a0 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 20 61 73 ense..import.matplotlib.pylab.as
42c0 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..##
42e0 23 23 23 23 23 23 23 23 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 0a 23 20 67 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d ############.#.generate.data.#.-
4340 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 65 20 3d ------------..n_samples_source.=
4360 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 58 73 2c .150.n_samples_target.=.150..Xs,
4380 20 79 73 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 64 61 74 61 5f 63 6c 61 73 73 .ys.=.ot.datasets.get_data_class
43a0 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 65 29 0a 58 if('3gauss',.n_samples_source).X
43c0 74 2c 20 79 74 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 64 61 74 61 5f 63 6c 61 t,.yt.=.ot.datasets.get_data_cla
43e0 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 61 72 67 65 74 ssif('3gauss2',.n_samples_target
4400 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 74 28 58 73 2c )..#.Cost.matrix.M.=.ot.dist(Xs,
4420 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 0a 0a 23 23 23 .Xt,.metric='sqeuclidean')...###
4440 23 23 23 23 23 23 23 23 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 0a 23 20 49 6e 73 74 61 6e 74 69 61 74 65 20 74 68 65 20 64 69 ###########.#.Instantiate.the.di
44a0 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 6e 64 fferent.transport.algorithms.and
44c0 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 2d 2d .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 0a 0a 23 20 45 4d 44 20 54 72 61 6e 73 70 6f 72 74 0a 6f 74 5f 65 6d 64 20 -------..#.EMD.Transport.ot_emd.
4520 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 66 69 =.ot.da.EMDTransport().ot_emd.fi
4540 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 61 6e t(Xs=Xs,.Xt=Xt)..#.Sinkhorn.Tran
4560 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 68 6f sport.ot_sinkhorn.=.ot.da.Sinkho
4580 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 6b 68 rnTransport(reg_e=1e-1).ot_sinkh
45a0 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 6f 72 orn.fit(Xs=Xs,.Xt=Xt)..#.Sinkhor
45c0 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 65 67 n.Transport.with.Group.lasso.reg
45e0 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 6e 6b ularization.ot_lpl1.=.ot.da.Sink
4600 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 72 65 hornLpl1Transport(reg_e=1e-1,.re
4620 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 73 3d g_cl=1e0).ot_lpl1.fit(Xs=Xs,.ys=
4640 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 72 63 65 20 73 ys,.Xt=Xt)..#.transport.source.s
4660 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 74 72 61 6e 73 amples.onto.target.samples.trans
4680 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
46a0 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 73 69 6e 6b 68 s).transp_Xs_sinkhorn.=.ot_sinkh
46c0 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 5f 58 73 5f 6c orn.transform(Xs=Xs).transp_Xs_l
46e0 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 58 73 29 0a 0a pl1.=.ot_lpl1.transform(Xs=Xs)..
4700 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 .###############################
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 0a 23 20 46 69 67 20 31 20 3a 20 70 6c 6f 74 73 20 ###############.#.Fig.1.:.plots.
4760 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 61 74 72 source.and.target.samples.+.matr
4780 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 2d 2d 2d ix.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 0a -------------------------------.
47e0 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 29 29 0a .pl.figure(1,.figsize=(10,.10)).
4800 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 58 pl.subplot(2,.2,.1).pl.scatter(X
4820 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 65 72 3d s[:,.0],.Xs[:,.1],.c=ys,.marker=
4840 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 70 6c 2e '+',.label='Source.samples').pl.
4860 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 6c 65 67 65 xticks([]).pl.yticks([]).pl.lege
4880 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 61 6d 70 nd(loc=0).pl.title('Source..samp
48a0 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 2e 73 63 les')..pl.subplot(2,.2,.2).pl.sc
48c0 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 atter(Xt[:,.0],.Xt[:,.1],.c=yt,.
48e0 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 70 6c 65 marker='o',.label='Target.sample
4900 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 5d 29 0a s').pl.xticks([]).pl.yticks([]).
4920 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 72 67 65 pl.legend(loc=0).pl.title('Targe
4940 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 20 33 29 t.samples')..pl.subplot(2,.2,.3)
4960 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 3d 27 6e 65 61 .pl.imshow(M,.interpolation='nea
4980 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 5b rest').pl.xticks([]).pl.yticks([
49a0 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 77 69 73 65 20 ]).pl.title('Matrix.of.pairwise.
49c0 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 28 29 0a 0a 0a distances').pl.tight_layout()...
49e0 23 23 23 23 23 23 23 23 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 0a 23 20 46 69 67 20 32 20 3a 20 70 6c 6f 74 73 20 6f ##############.#.Fig.2.:.plots.o
4a40 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 73 20 66 6f 72 20 74 68 65 20 64 69 66 66 65 72 65 ptimal.couplings.for.the.differe
4a60 6e 74 20 6d 65 74 68 6f 64 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d nt.methods.#.-------------------
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 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 31 30 2c ------.pl.figure(2,.figsize=(10,
4ac0 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 6c 2e 69 6d 73 .6))..pl.subplot(2,.3,.1).pl.ims
4ae0 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 70 6f 6c 61 74 how(ot_emd.coupling_,.interpolat
4b00 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 0a 70 6c 2e ion='nearest').pl.xticks([]).pl.
4b20 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 6f 75 yticks([]).pl.title('Optimal.cou
4b40 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 6c 6f pling\nEMDTransport')..pl.subplo
4b60 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 6b 68 6f 72 6e t(2,.3,.2).pl.imshow(ot_sinkhorn
4b80 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 61 72 65 .coupling_,.interpolation='neare
4ba0 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 5b 5d 29 st').pl.xticks([]).pl.yticks([])
4bc0 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 6e .pl.title('Optimal.coupling\nSin
4be0 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 khornTransport')..pl.subplot(2,.
4c00 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 70 6c 69 6e 67 3,.3).pl.imshow(ot_lpl1.coupling
4c20 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 78 _,.interpolation='nearest').pl.x
4c40 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
4c60 28 27 4f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 5c 6e 53 69 6e 6b 68 6f 72 6e 4c 70 6c 31 ('Optimal.coupling\nSinkhornLpl1
4c80 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 34 29 Transport')..pl.subplot(2,.3,.4)
4ca0 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 20 .ot.plot.plot2D_samples_mat(Xs,.
4cc0 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 2c 20 2e 35 2c Xt,.ot_emd.coupling_,.c=[.5,..5,
4ce0 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 73 5b 3a 2c 20 .1]).pl.scatter(Xs[:,.0],.Xs[:,.
4d00 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 3d 27 53 6f 75 1],.c=ys,.marker='+',.label='Sou
4d20 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 5b 3a 2c 20 30 rce.samples').pl.scatter(Xt[:,.0
4d40 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 20 6c ],.Xt[:,.1],.c=yt,.marker='o',.l
4d60 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 74 69 63 6b 73 abel='Target.samples').pl.xticks
4d80 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4d 61 69 ([]).pl.yticks([]).pl.title('Mai
4da0 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 44 54 72 61 6e n.coupling.coefficients\nEMDTran
4dc0 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 35 29 0a 6f 74 2e sport')..pl.subplot(2,.3,.5).ot.
4de0 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 20 58 74 2c 20 plot.plot2D_samples_mat(Xs,.Xt,.
4e00 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 35 2c 20 2e 35 ot_sinkhorn.coupling_,.c=[.5,..5
4e20 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 73 5b 3a 2c ,.1]).pl.scatter(Xs[:,.0],.Xs[:,
4e40 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 3d 27 53 6f .1],.c=ys,.marker='+',.label='So
4e60 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 5b 3a 2c 20 urce.samples').pl.scatter(Xt[:,.
4e80 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 20 0],.Xt[:,.1],.c=yt,.marker='o',.
4ea0 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 74 69 63 6b label='Target.samples').pl.xtick
4ec0 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4d 61 s([]).pl.yticks([]).pl.title('Ma
4ee0 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 69 6e 6b 68 6f in.coupling.coefficients\nSinkho
4f00 72 6e 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 rnTransport')..pl.subplot(2,.3,.
4f20 36 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 58 73 6).ot.plot.plot2D_samples_mat(Xs
4f40 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 5b 2e 35 2c 20 ,.Xt,.ot_lpl1.coupling_,.c=[.5,.
4f60 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 73 5b .5,.1]).pl.scatter(Xs[:,.0],.Xs[
4f80 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 3d 27 :,.1],.c=ys,.marker='+',.label='
4fa0 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 5b 3a Source.samples').pl.scatter(Xt[:
4fc0 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 27 ,.0],.Xt[:,.1],.c=yt,.marker='o'
4fe0 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 74 69 ,.label='Target.samples').pl.xti
5000 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 cks([]).pl.yticks([]).pl.title('
5020 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 69 6e 6b Main.coupling.coefficients\nSink
5040 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 74 5f 6c 61 79 hornLpl1Transport').pl.tight_lay
5060 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 23 23 out()...########################
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 0a 23 20 46 69 67 20 33 20 3a ######################.#.Fig.3.:
50c0 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 2d 2d .plot.transported.samples.#.----
50e0 2d 2d 2d 2d 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 ----------------------------..#.
5100 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 2e 66 display.transported.samples.pl.f
5120 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 6c 2e 73 75 62 igure(4,.figsize=(10,.4)).pl.sub
5140 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 5b 3a 2c 20 30 plot(1,.3,.1).pl.scatter(Xt[:,.0
5160 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',..
5180 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'
51a0 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 58 ,.alpha=0.5).pl.scatter(transp_X
51c0 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 3a 2c 20 31 5d s_emd[:,.0],.transp_Xs_emd[:,.1]
51e0 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
5200 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.
5220 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 45 6d 64 54 title('Transported.samples\nEmdT
5240 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 0a 70 6c 2e 78 ransport').pl.legend(loc=0).pl.x
5260 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 62 70 ticks([]).pl.yticks([])..pl.subp
5280 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 3a 2c 20 30 5d lot(1,.3,.2).pl.scatter(Xt[:,.0]
52a0 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 20 ,.Xt[:,.1],.c=yt,.marker='o',...
52c0 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 2c .........label='Target.samples',
52e0 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 58 73 .alpha=0.5).pl.scatter(transp_Xs
5300 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 73 69 6e 6b 68 _sinkhorn[:,.0],.transp_Xs_sinkh
5320 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 20 6d 61 72 6b orn[:,.1],.c=ys,............mark
5340 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 27 2c 20 er='+',.label='Transp.samples',.
5360 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 20 73 61 6d 70 s=30).pl.title('Transported.samp
5380 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 2e 78 74 69 63 les\nSinkhornTransport').pl.xtic
53a0 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 ks([]).pl.yticks([])..pl.subplot
53c0 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 30 5d 2c 20 58 (1,.3,.3).pl.scatter(Xt[:,.0],.X
53e0 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 t[:,.1],.c=yt,.marker='o',......
5400 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c ......label='Target.samples',.al
5420 70 68 61 3d 30 2e 35 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 6c 70 pha=0.5).pl.scatter(transp_Xs_lp
5440 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 20 31 5d 2c 20 l1[:,.0],.transp_Xs_lpl1[:,.1],.
5460 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 c=ys,............marker='+',.lab
5480 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 20 73 3d 33 30 29 0a 70 6c 2e 74 69 el='Transp.samples',.s=30).pl.ti
54a0 74 6c 65 28 27 54 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 5c 6e 53 69 6e 6b 68 6f tle('Transported.samples\nSinkho
54c0 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 28 5b 5d 29 0a rnLpl1Transport').pl.xticks([]).
54e0 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 28 29 pl.yticks([])..pl.tight_layout()
5500 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 77 79 50 4c 0a ea dc a4 21 12 00 .pl.show().PK........wyPL....!..
5520 00 21 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 65 72 76 69 73 .!.......plot_otda_semi_supervis
5540 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 2d 0a 22 22 22 ed.py#.-*-.coding:.utf-8.-*-."""
5560 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 .===============================
5580 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 69 73 65 64 20 =============.OTDA.unsupervised.
55a0 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 3d 3d 3d 3d 3d 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 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 6e 74 72 6f 64 75 63 65 73 =======..This.example.introduces
5600 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 64 61 70 74 61 .a.semi.supervised.domain.adapta
5620 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 70 6c 69 63 69 tion.in.a.2D.setting..It.explici
5640 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 72 76 69 73 65 ts.the.problem.of.semi.supervise
5660 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 72 6f 64 75 63 d.domain.adaptation.and.introduc
5680 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 70 70 72 6f 61 es.some.optimal.transport.approa
56a0 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 65 73 20 73 75 ches.to.solve.it...Quantities.su
56c0 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 65 61 74 65 72 ch.as.optimal.couplings,.greater
56e0 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 74 72 61 6e 73 .coupling.coefficients.and.trans
5700 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 74 65 64 20 69 ported.samples.are.represented.i
5720 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 64 65 72 73 74 n.order.to.give.a.visual.underst
5740 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 74 20 6d 65 74 anding.of.what.the.transport.met
5760 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 6f 72 73 3a 20 hods.are.doing.."""..#.Authors:.
5780 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 65 Remi.Flamary.<remi.flamary@unice
57a0 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 68 61 6d 62 6f .fr>.#..........Stanislas.Chambo
57c0 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 23 0a 23 20 4c n.<stan.chambon@gmail.com>.#.#.L
57e0 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 6d 61 74 70 icense:.MIT.License..import.matp
5800 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 0a 0a 23 lotlib.pylab.as.pl.import.ot...#
5820 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
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 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 #############.#.Generate.data.#.
5880 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 65 20 -------------..n_samples_source.
58a0 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 58 73 =.150.n_samples_target.=.150..Xs
58c0 2c 20 79 73 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 64 61 74 61 5f 63 6c 61 73 ,.ys.=.ot.datasets.get_data_clas
58e0 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 65 29 0a sif('3gauss',.n_samples_source).
5900 58 74 2c 20 79 74 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 64 61 74 61 5f 63 6c Xt,.yt.=.ot.datasets.get_data_cl
5920 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 61 72 67 65 assif('3gauss2',.n_samples_targe
5940 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 23 23 23 23 23 23 23 t)...###########################
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 0a 23 20 54 72 61 6e 73 70 6f 72 74 20 ###################.#.Transport.
59a0 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 20 6f 6e 74 6f 20 74 61 72 67 65 74 20 73 61 6d 70 6c source.samples.onto.target.sampl
59c0 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d es.#.---------------------------
59e0 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 75 70 65 72 76 69 73 -----------------...#.unsupervis
5a00 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 69 6e 6b 68 6f 72 6e ed.domain.adaptation.ot_sinkhorn
5a20 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 70 6f 72 74 28 72 65 _un.=.ot.da.SinkhornTransport(re
5a40 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 66 69 74 28 58 73 3d g_e=1e-1).ot_sinkhorn_un.fit(Xs=
5a60 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 68 6f 72 6e 5f 75 6e Xs,.Xt=Xt).transp_Xs_sinkhorn_un
5a80 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 72 6d 28 58 73 3d 58 .=.ot_sinkhorn_un.transform(Xs=X
5aa0 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 61 69 6e 20 61 64 61 s)..#.semi-supervised.domain.ada
5ac0 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 3d 20 6f 74 2e 64 61 ptation.ot_sinkhorn_semi.=.ot.da
5ae0 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 31 65 2d 31 29 0a 6f .SinkhornTransport(reg_e=1e-1).o
5b00 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 2c 20 58 74 3d 58 74 t_sinkhorn_semi.fit(Xs=Xs,.Xt=Xt
5b20 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 5f 73 69 6e 6b 68 6f ,.ys=ys,.yt=yt).transp_Xs_sinkho
5b40 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 69 2e 74 72 61 6e 73 rn_semi.=.ot_sinkhorn_semi.trans
5b60 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 76 69 73 65 64 20 44 form(Xs=Xs)..#.semi.supervised.D
5b80 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 74 61 72 67 65 74 20 A.uses.available.labaled.target.
5ba0 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 74 0a 23 20 6d 61 74 samples.to.modify.the.cost.#.mat
5bc0 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 6f 62 6c 65 6d 2e 20 rix.involved.in.the.OT.problem..
5be0 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 61 20 73 6f 75 72 63 The.cost.of.transporting.a.sourc
5c00 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 6f 20 61 20 74 61 72 e.sample.#.of.class.A.onto.a.tar
5c20 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 41 20 69 73 20 73 65 get.sample.of.class.B.!=.A.is.se
5c40 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 79 20 6c 61 72 67 65 t.to.infinite,.or.a.#.very.large
5c60 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 65 20 70 72 65 73 65 .value..#.note.that.in.the.prese
5c80 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 61 6c 6c 20 74 68 65 nt.case.we.consider.that.all.the
5ca0 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 65 6c 65 64 2e 20 46 .target.samples.are.#.labeled..F
5cc0 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 6d 65 20 74 61 72 67 or.daily.applications,.some.targ
5ce0 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 6c 61 62 65 6c 73 2c et.sample.might.not.have.labels,
5d00 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 6e 74 20 6f 66 20 79 .#.in.this.case.the.element.of.y
5d20 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 73 61 6d 70 6c 65 73 t.corresponding.to.these.samples
5d40 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 2d 31 2e 0a 0a 23 20 .should.be.#.filled.with.-1...#.
5d60 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 31 20 63 61 6e 6e 6f Warning:.we.recall.that.-1.canno
5d80 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 6c 0a 0a 0a 23 23 23 t.be.used.as.a.class.label...###
5da0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
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 0a 23 20 46 69 67 20 31 20 3a 20 70 6c 6f 74 73 20 73 6f 75 72 ###########.#.Fig.1.:.plots.sour
5e00 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 61 74 72 69 78 20 6f ce.and.target.samples.+.matrix.o
5e20 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 2d 2d 2d 2d 2d 2d 2d f.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 0a 0a 70 6c 2e ---------------------------..pl.
5e80 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 29 29 0a 70 6c 2e 73 figure(1,.figsize=(10,.10)).pl.s
5ea0 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 73 5b 3a 2c ubplot(2,.2,.1).pl.scatter(Xs[:,
5ec0 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 65 72 3d 27 2b 27 2c .0],.Xs[:,.1],.c=ys,.marker='+',
5ee0 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 78 74 69 63 .label='Source.samples').pl.xtic
5f00 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c ks([]).pl.yticks([]).pl.legend(l
5f20 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 61 6d 70 6c 65 73 27 oc=0).pl.title('Source..samples'
5f40 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 2e 73 63 61 74 74 65 )..pl.subplot(2,.2,.2).pl.scatte
5f60 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b r(Xt[:,.0],.Xt[:,.1],.c=yt,.mark
5f80 65 72 3d 27 6f 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a er='o',.label='Target.samples').
5fa0 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
5fc0 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 72 67 65 74 20 73 61 egend(loc=0).pl.title('Target.sa
5fe0 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 33 29 0a 70 6c 2e mples')..pl.subplot(2,.2,.3).pl.
6000 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 74 5f 2c 20 69 6e 74 imshow(ot_sinkhorn_un.cost_,.int
6020 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 erpolation='nearest').pl.xticks(
6040 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 43 6f 73 74 []).pl.yticks([]).pl.title('Cost
6060 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 27 29 0a 0a 70 6c 2e .matrix.-.unsupervised.DA')..pl.
6080 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 6f 74 5f 73 69 subplot(2,.2,.4).pl.imshow(ot_si
60a0 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 6f 6c 61 74 69 6f 6e nkhorn_semi.cost_,.interpolation
60c0 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
60e0 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 74 72 69 78 20 2d 20 cks([]).pl.title('Cost.matrix.-.
6100 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 69 67 68 74 5f 6c 61 semisupervised.DA')..pl.tight_la
6120 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 70 6c 69 6e 67 20 69 yout()..#.the.optimal.coupling.i
6140 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 63 61 73 65 20 77 69 n.the.semi-supervised.DA.case.wi
6160 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 6c 61 72 22 20 74 6f ll.exhibit.".shape.#.similar".to
6180 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 64 69 61 67 6f 6e 61 .the.cost.matrix,.(block.diagona
61a0 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 23 23 23 23 23 23 23 l.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 0a 23 20 46 69 67 ##########################.#.Fig
6200 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 6e 67 73 20 66 6f 72 .2.:.plots.optimal.couplings.for
6220 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 2d 2d 2d 2d 2d 2d 2d .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 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c ------------------..pl.figure(2,
6280 20 66 69 67 73 69 7a 65 3d 28 38 2c 20 34 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 .figsize=(8,.4))..pl.subplot(1,.
62a0 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 72 6e 5f 75 6e 2e 63 2,.1).pl.imshow(ot_sinkhorn_un.c
62c0 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 61 72 65 73 74 oupling_,.interpolation='nearest
62e0 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 ').pl.xticks([]).pl.yticks([]).p
6300 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 55 6e 73 75 70 l.title('Optimal.coupling\nUnsup
6320 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 31 2c 20 32 2c 20 32 ervised.DA')..pl.subplot(1,.2,.2
6340 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f 73 65 6d 69 2e 63 6f 75 ).pl.imshow(ot_sinkhorn_semi.cou
6360 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')
6380 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.
63a0 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 65 6d 69 2d 73 75 title('Optimal.coupling\nSemi-su
63c0 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 61 79 6f 75 74 28 29 pervised.DA')..pl.tight_layout()
63e0 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 ...#############################
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 0a 23 20 46 69 67 20 33 20 3a 20 70 6c 6f 74 #################.#.Fig.3.:.plot
6440 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.#.---------
6460 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 64 69 73 70 6c -----------------------..#.displ
6480 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 2e 66 69 67 75 72 65 ay.transported.samples.pl.figure
64a0 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 62 70 6c 6f 74 28 31 (4,.figsize=(8,.4)).pl.subplot(1
64c0 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 30 5d 2c 20 58 74 5b ,.2,.1).pl.scatter(Xt[:,.0],.Xt[
64e0 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 :,.1],.c=yt,.marker='o',........
6500 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 ....label='Target.samples',.alph
6520 61 3d 30 2e 35 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b a=0.5).pl.scatter(transp_Xs_sink
6540 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 73 69 6e 6b 68 6f 72 horn_un[:,.0],.transp_Xs_sinkhor
6560 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 20 20 20 20 6d 61 72 n_un[:,.1],.c=ys,............mar
6580 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 27 2c ker='+',.label='Transp.samples',
65a0 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 20 73 61 6d .s=30).pl.title('Transported.sam
65c0 70 6c 65 73 5c 6e 45 6d 64 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c ples\nEmdTransport').pl.legend(l
65e0 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 69 63 6b 73 28 5b 5d oc=0).pl.xticks([]).pl.yticks([]
6600 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 32 29 0a 70 6c 2e 73 63 61 74 74 65 )..pl.subplot(1,.2,.2).pl.scatte
6620 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b r(Xt[:,.0],.Xt[:,.1],.c=yt,.mark
6640 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 67 65 74 er='o',............label='Target
6660 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 30 2e 35 29 0a 70 6c 2e 73 63 61 74 74 65 72 .samples',.alpha=0.5).pl.scatter
6680 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 3a 2c 20 30 5d 2c 20 (transp_Xs_sinkhorn_semi[:,.0],.
66a0 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 2c 20 31 5d 2c 20 63 transp_Xs_sinkhorn_semi[:,.1],.c
66c0 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 =ys,............marker='+',.labe
66e0 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 20 73 3d 33 30 29 0a 70 6c 2e 74 69 74 l='Transp.samples',.s=30).pl.tit
6700 6c 65 28 27 54 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 5c 6e 53 69 6e 6b 68 6f 72 le('Transported.samples\nSinkhor
6720 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 29 0a 70 6c 2e 79 74 nTransport').pl.xticks([]).pl.yt
6740 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 28 29 0a 70 6c 2e 73 icks([])..pl.tight_layout().pl.s
6760 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 76 79 50 4c c6 f7 0c 9f a1 06 00 00 a1 06 00 00 how().PK........vyPL............
6780 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 64 69 6e 67 3a 20 75 ....plot_OT_1D.py#.-*-.coding:.u
67a0 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 3d tf-8.-*-.""".===================
67c0 3d 0a 31 44 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d =.1D.optimal.transport.=========
67e0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 6c 6c 75 73 74 ===========..This.example.illust
6800 72 61 74 65 73 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66 20 45 4d 44 20 61 6e 64 rates.the.computation.of.EMD.and
6820 20 53 69 6e 6b 68 6f 72 6e 20 74 72 61 6e 73 70 6f 72 74 20 70 6c 61 6e 73 0a 61 6e 64 20 74 68 .Sinkhorn.transport.plans.and.th
6840 65 69 72 20 76 69 73 75 61 6c 69 7a 61 74 69 6f 6e 2e 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f eir.visualization..."""..#.Autho
6860 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
6880 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
68a0 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
68c0 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
68e0 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 65 74 73 20 69 6d 70 ort.ot.plot.from.ot.datasets.imp
6900 6f 72 74 20 67 65 74 5f 31 44 5f 67 61 75 73 73 20 61 73 20 67 61 75 73 73 0a 0a 23 23 23 23 23 ort.get_1D_gauss.as.gauss..#####
6920 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
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 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.#.----
6980 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 6e 20 3d 20 ---------...#%%.parameters..n.=.
69a0 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 73 0a 100..#.nb.bins..#.bin.positions.
69c0 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 74 36 x.=.np.arange(n,.dtype=np.float6
69e0 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 20 3d 4)..#.Gaussian.distributions.a.=
6a00 20 67 61 75 73 73 28 6e 2c 20 6d 3d 32 30 2c 20 73 3d 35 29 20 20 23 20 6d 3d 20 6d 65 61 6e 2c .gauss(n,.m=20,.s=5)..#.m=.mean,
6a20 20 73 3d 20 73 74 64 0a 62 20 3d 20 67 61 75 73 73 28 6e 2c 20 6d 3d 36 30 2c 20 73 3d 31 30 29 .s=.std.b.=.gauss(n,.m=60,.s=10)
6a40 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 20 3d 20 6f 74 2e 64 69 73 74 28 78 2e 72 65 ..#.loss.matrix.M.=.ot.dist(x.re
6a60 73 68 61 70 65 28 28 6e 2c 20 31 29 29 2c 20 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 shape((n,.1)),.x.reshape((n,.1))
6a80 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ).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 0a ###############################.
6ae0 23 20 50 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 #.Plot.distributions.and.loss.ma
6b00 74 72 69 78 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 trix.#.-------------------------
6b20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 6c 6f 74 20 74 68 65 20 64 69 73 74 72 69 62 75 ---------..#%%.plot.the.distribu
6b40 74 69 6f 6e 73 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 tions..pl.figure(1,.figsize=(6.4
6b60 2c 20 33 29 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 61 2c 20 27 62 27 2c 20 6c 61 62 65 6c 3d 27 ,.3)).pl.plot(x,.a,.'b',.label='
6b80 53 6f 75 72 63 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c Source.distribution').pl.plot(x,
6ba0 20 62 2c 20 27 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 .b,.'r',.label='Target.distribut
6bc0 69 6f 6e 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 29 0a 0a 23 25 25 20 70 6c 6f 74 20 64 69 73 74 ion').pl.legend()..#%%.plot.dist
6be0 72 69 62 75 74 69 6f 6e 73 20 61 6e 64 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 0a 70 6c 2e 66 69 ributions.and.loss.matrix..pl.fi
6c00 67 75 72 65 28 32 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 gure(2,.figsize=(5,.5)).ot.plot.
6c20 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 4d 2c 20 27 43 6f 73 74 20 6d 61 74 72 69 78 plot1D_mat(a,.b,.M,.'Cost.matrix
6c40 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 23 .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 0a 23 20 53 6f 6c 76 65 20 45 4d 44 ####################.#.Solve.EMD
6ca0 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 25 25 20 45 4d 44 0a 0a 47 30 20 3d 20 6f 74 2e .#.---------...#%%.EMD..G0.=.ot.
6cc0 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 2c 20 66 69 67 73 69 emd(a,.b,.M)..pl.figure(3,.figsi
6ce0 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,
6d00 20 62 2c 20 47 30 2c 20 27 4f 54 20 6d 61 74 72 69 78 20 47 30 27 29 0a 0a 23 23 23 23 23 23 23 .b,.G0,.'OT.matrix.G0')..#######
6d20 23 23 23 23 23 23 23 23 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 0a 23 20 53 6f 6c 76 65 20 53 69 6e 6b 68 6f 72 6e 0a 23 20 2d 2d 2d 2d 2d #######.#.Solve.Sinkhorn.#.-----
6d80 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 25 25 20 53 69 6e 6b 68 6f 72 6e 0a 0a 6c 61 6d 62 64 20 ---------...#%%.Sinkhorn..lambd.
6da0 3d 20 31 65 2d 33 0a 47 73 20 3d 20 6f 74 2e 73 69 6e 6b 68 6f 72 6e 28 61 2c 20 62 2c 20 4d 2c =.1e-3.Gs.=.ot.sinkhorn(a,.b,.M,
6dc0 20 6c 61 6d 62 64 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 .lambd,.verbose=True)..pl.figure
6de0 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 (4,.figsize=(5,.5)).ot.plot.plot
6e00 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 47 73 2c 20 27 4f 54 20 6d 61 74 72 69 78 20 53 69 6e 6b 1D_mat(a,.b,.Gs,.'OT.matrix.Sink
6e20 68 6f 72 6e 27 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 77 79 50 4c horn')..pl.show().PK........wyPL
6e40 2b 3f e5 77 26 0d 00 00 26 0d 00 00 15 00 00 00 70 6c 6f 74 5f 62 61 72 79 63 65 6e 74 65 72 5f +?.w&...&.......plot_barycenter_
6e60 31 44 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 1D.py#.-*-.coding:.utf-8.-*-."""
6e80 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 0a .==============================.
6ea0 31 44 20 57 61 73 73 65 72 73 74 65 69 6e 20 62 61 72 79 63 65 6e 74 65 72 20 64 65 6d 6f 0a 3d 1D.Wasserstein.barycenter.demo.=
6ec0 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 54 =============================..T
6ee0 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 70 his.example.illustrates.the.comp
6f00 75 74 61 74 69 6f 6e 20 6f 66 20 72 65 67 75 6c 61 72 69 7a 65 64 20 57 61 73 73 65 72 73 79 65 utation.of.regularized.Wassersye
6f20 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 5d in.Barycenter.as.proposed.in.[3]
6f40 2e 0a 0a 0a 5b 33 5d 20 42 65 6e 61 6d 6f 75 2c 20 4a 2e 20 44 2e 2c 20 43 61 72 6c 69 65 72 2c ....[3].Benamou,.J..D.,.Carlier,
6f60 20 47 2e 2c 20 43 75 74 75 72 69 2c 20 4d 2e 2c 20 4e 65 6e 6e 61 2c 20 4c 2e 2c 20 26 20 50 65 .G.,.Cuturi,.M.,.Nenna,.L.,.&.Pe
6f80 79 72 c3 a9 2c 20 47 2e 20 28 32 30 31 35 29 2e 0a 49 74 65 72 61 74 69 76 65 20 42 72 65 67 6d yr..,.G..(2015)..Iterative.Bregm
6fa0 61 6e 20 70 72 6f 6a 65 63 74 69 6f 6e 73 20 66 6f 72 20 72 65 67 75 6c 61 72 69 7a 65 64 20 74 an.projections.for.regularized.t
6fc0 72 61 6e 73 70 6f 72 74 61 74 69 6f 6e 20 70 72 6f 62 6c 65 6d 73 0a 53 49 41 4d 20 4a 6f 75 72 ransportation.problems.SIAM.Jour
6fe0 6e 61 6c 20 6f 6e 20 53 63 69 65 6e 74 69 66 69 63 20 43 6f 6d 70 75 74 69 6e 67 2c 20 33 37 28 nal.on.Scientific.Computing,.37(
7000 32 29 2c 20 41 31 31 31 31 2d 41 31 31 33 38 2e 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a 2),.A1111-A1138..."""..#.Author:
7020 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
7040 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..
7060 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
7080 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 23 20 6e 65 63 tlib.pylab.as.pl.import.ot.#.nec
70a0 65 73 73 61 72 79 20 66 6f 72 20 33 64 20 70 6c 6f 74 20 65 76 65 6e 20 69 66 20 6e 6f 74 20 75 essary.for.3d.plot.even.if.not.u
70c0 73 65 64 0a 66 72 6f 6d 20 6d 70 6c 5f 74 6f 6f 6c 6b 69 74 73 2e 6d 70 6c 6f 74 33 64 20 69 6d sed.from.mpl_toolkits.mplot3d.im
70e0 70 6f 72 74 20 41 78 65 73 33 44 20 20 23 20 6e 6f 71 61 0a 66 72 6f 6d 20 6d 61 74 70 6c 6f 74 port.Axes3D..#.noqa.from.matplot
7100 6c 69 62 2e 63 6f 6c 6c 65 63 74 69 6f 6e 73 20 69 6d 70 6f 72 74 20 50 6f 6c 79 43 6f 6c 6c 65 lib.collections.import.PolyColle
7120 63 74 69 6f 6e 0a 0a 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 ction..#.#.Generate.data.#.-----
7140 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 6e 20 3d 20 31 30 --------..#%%.parameters..n.=.10
7160 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 73 0a 78 20 0..#.nb.bins..#.bin.positions.x.
7180 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 74 36 34 29 =.np.arange(n,.dtype=np.float64)
71a0 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 31 20 3d 20 ..#.Gaussian.distributions.a1.=.
71c0 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 31 44 5f 67 61 75 73 73 28 6e 2c 20 6d 3d 32 30 ot.datasets.get_1D_gauss(n,.m=20
71e0 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 32 20 3d 20 6f ,.s=5)..#.m=.mean,.s=.std.a2.=.o
7200 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 31 44 5f 67 61 75 73 73 28 6e 2c 20 6d 3d 36 30 2c t.datasets.get_1D_gauss(n,.m=60,
7220 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 20 63 6f 6e 74 61 .s=8)..#.creating.matrix.A.conta
7240 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 20 6e 70 2e 76 ining.all.distributions.A.=.np.v
7260 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 75 74 69 6f 6e stack((a1,.a2)).T.n_distribution
7280 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 69 78 20 2b 20 s.=.A.shape[1]..#.loss.matrix.+.
72a0 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 64 69 73 74 30 normalization.M.=.ot.utils.dist0
72c0 28 6e 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 29 0a 0a 23 0a 23 20 50 6c 6f 74 20 64 61 74 61 0a (n).M./=.M.max()..#.#.Plot.data.
72e0 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 6c 6f 74 20 74 68 65 20 64 69 73 74 72 69 #.---------..#%%.plot.the.distri
7300 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 69 7a 65 3d 28 36 butions..pl.figure(1,.figsize=(6
7320 2e 34 2c 20 33 29 29 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6e 5f 64 69 73 74 72 69 62 .4,.3)).for.i.in.range(n_distrib
7340 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 29 utions):.....pl.plot(x,.A[:,.i])
7360 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 70 6c 2e 74 69 .pl.title('Distributions').pl.ti
7380 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 23 0a 23 20 42 61 72 79 63 65 6e 74 65 72 20 63 6f 6d ght_layout()..#.#.Barycenter.com
73a0 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 2d 2d 2d putation.#.---------------------
73c0 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 0a 0a 61 -..#%%.barycenter.computation..a
73e0 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 67 68 74 lpha.=.0.2..#.0<=alpha<=1.weight
7400 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 61 5d 29 s.=.np.array([1.-.alpha,.alpha])
7420 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 69 67 68 ..#.l2bary.bary_l2.=.A.dot(weigh
7440 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 0a 62 61 ts)..#.wasserstein.reg.=.1e-3.ba
7460 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(
7480 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 65 28 32 A,.M,.reg,.weights)..pl.figure(2
74a0 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 29 0a 66 ).pl.clf().pl.subplot(2,.1,.1).f
74c0 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 3a 0a or.i.in.range(n_distributions):.
74e0 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 6c 65 ....pl.plot(x,.A[:,.i]).pl.title
7500 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 28 32 2c ('Distributions')..pl.subplot(2,
7520 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 27 2c 20 .1,.2).pl.plot(x,.bary_l2,.'r',.
7540 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 61 73 73 label='l2').pl.plot(x,.bary_wass
7560 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 6c 2e 6c ,.'g',.label='Wasserstein').pl.l
7580 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 29 0a egend().pl.title('Barycenters').
75a0 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 23 0a 23 20 42 61 72 79 63 65 6e 74 72 pl.tight_layout()..#.#.Barycentr
75c0 69 63 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ic.interpolation.#.-------------
75e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 62 61 72 79 63 65 6e 74 65 72 20 69 6e 74 ------------..#%%.barycenter.int
7600 65 72 70 6f 6c 61 74 69 6f 6e 0a 0a 6e 5f 61 6c 70 68 61 20 3d 20 31 31 0a 61 6c 70 68 61 5f 6c erpolation..n_alpha.=.11.alpha_l
7620 69 73 74 20 3d 20 6e 70 2e 6c 69 6e 73 70 61 63 65 28 30 2c 20 31 2c 20 6e 5f 61 6c 70 68 61 29 ist.=.np.linspace(0,.1,.n_alpha)
7640 0a 0a 0a 42 5f 6c 32 20 3d 20 6e 70 2e 7a 65 72 6f 73 28 28 6e 2c 20 6e 5f 61 6c 70 68 61 29 29 ...B_l2.=.np.zeros((n,.n_alpha))
7660 0a 0a 42 5f 77 61 73 73 20 3d 20 6e 70 2e 63 6f 70 79 28 42 5f 6c 32 29 0a 0a 66 6f 72 20 69 20 ..B_wass.=.np.copy(B_l2)..for.i.
7680 69 6e 20 72 61 6e 67 65 28 30 2c 20 6e 5f 61 6c 70 68 61 29 3a 0a 20 20 20 20 61 6c 70 68 61 20 in.range(0,.n_alpha):.....alpha.
76a0 3d 20 61 6c 70 68 61 5f 6c 69 73 74 5b 69 5d 0a 20 20 20 20 77 65 69 67 68 74 73 20 3d 20 6e 70 =.alpha_list[i].....weights.=.np
76c0 2e 61 72 72 61 79 28 5b 31 20 2d 20 61 6c 70 68 61 2c 20 61 6c 70 68 61 5d 29 0a 20 20 20 20 42 .array([1.-.alpha,.alpha]).....B
76e0 5f 6c 32 5b 3a 2c 20 69 5d 20 3d 20 41 2e 64 6f 74 28 77 65 69 67 68 74 73 29 0a 20 20 20 20 42 _l2[:,.i].=.A.dot(weights).....B
7700 5f 77 61 73 73 5b 3a 2c 20 69 5d 20 3d 20 6f 74 2e 62 72 65 67 6d 61 6e 2e 62 61 72 79 63 65 6e _wass[:,.i].=.ot.bregman.barycen
7720 74 65 72 28 41 2c 20 4d 2c 20 72 65 67 2c 20 77 65 69 67 68 74 73 29 0a 0a 23 25 25 20 70 6c 6f ter(A,.M,.reg,.weights)..#%%.plo
7740 74 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 0a 0a 70 6c 2e 66 69 67 75 72 65 28 33 29 0a 0a 63 t.interpolation..pl.figure(3)..c
7760 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 29 0a map.=.pl.cm.get_cmap('viridis').
7780 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 20 69 verts.=.[].zs.=.alpha_list.for.i
77a0 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 20 42 ,.z.in.enumerate(zs):.....ys.=.B
77c0 5f 6c 32 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 69 73 74 28 _l2[:,.i].....verts.append(list(
77e0 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 67 63 61 28 zip(x,.ys)))..ax.=.pl.gcf().gca(
7800 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 79 43 6f 6c projection='3d')..poly.=.PolyCol
7820 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 6d 61 70 28 lection(verts,.facecolors=[cmap(
7840 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 79 2e 73 65 a).for.a.in.alpha_list]).poly.se
7860 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 6f 6e 33 64 t_alpha(0.7).ax.add_collection3d
7880 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 65 74 5f 78 (poly,.zs=zs,.zdir='y').ax.set_x
78a0 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 6e 29 0a 61 label('x').ax.set_xlim3d(0,.n).a
78c0 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 2e 73 65 74 x.set_ylabel('$\\alpha$').ax.set
78e0 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 27 27 29 0a _ylim3d(0,.1).ax.set_zlabel('').
7900 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 2a 20 31 2e ax.set_zlim3d(0,.B_l2.max().*.1.
7920 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 65 72 70 6f 01).pl.title('Barycenter.interpo
7940 6c 61 74 69 6f 6e 20 77 69 74 68 20 6c 32 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 lation.with.l2').pl.tight_layout
7960 28 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 34 29 0a 63 6d 61 70 20 3d 20 70 6c 2e 63 6d 2e 67 65 ()..pl.figure(4).cmap.=.pl.cm.ge
7980 74 5f 63 6d 61 70 28 27 76 69 72 69 64 69 73 27 29 0a 76 65 72 74 73 20 3d 20 5b 5d 0a 7a 73 20 t_cmap('viridis').verts.=.[].zs.
79a0 3d 20 61 6c 70 68 61 5f 6c 69 73 74 0a 66 6f 72 20 69 2c 20 7a 20 69 6e 20 65 6e 75 6d 65 72 61 =.alpha_list.for.i,.z.in.enumera
79c0 74 65 28 7a 73 29 3a 0a 20 20 20 20 79 73 20 3d 20 42 5f 77 61 73 73 5b 3a 2c 20 69 5d 0a 20 20 te(zs):.....ys.=.B_wass[:,.i]...
79e0 20 20 76 65 72 74 73 2e 61 70 70 65 6e 64 28 6c 69 73 74 28 7a 69 70 28 78 2c 20 79 73 29 29 29 ..verts.append(list(zip(x,.ys)))
7a00 0a 0a 61 78 20 3d 20 70 6c 2e 67 63 66 28 29 2e 67 63 61 28 70 72 6f 6a 65 63 74 69 6f 6e 3d 27 ..ax.=.pl.gcf().gca(projection='
7a20 33 64 27 29 0a 0a 70 6f 6c 79 20 3d 20 50 6f 6c 79 43 6f 6c 6c 65 63 74 69 6f 6e 28 76 65 72 74 3d')..poly.=.PolyCollection(vert
7a40 73 2c 20 66 61 63 65 63 6f 6c 6f 72 73 3d 5b 63 6d 61 70 28 61 29 20 66 6f 72 20 61 20 69 6e 20 s,.facecolors=[cmap(a).for.a.in.
7a60 61 6c 70 68 61 5f 6c 69 73 74 5d 29 0a 70 6f 6c 79 2e 73 65 74 5f 61 6c 70 68 61 28 30 2e 37 29 alpha_list]).poly.set_alpha(0.7)
7a80 0a 61 78 2e 61 64 64 5f 63 6f 6c 6c 65 63 74 69 6f 6e 33 64 28 70 6f 6c 79 2c 20 7a 73 3d 7a 73 .ax.add_collection3d(poly,.zs=zs
7aa0 2c 20 7a 64 69 72 3d 27 79 27 29 0a 61 78 2e 73 65 74 5f 78 6c 61 62 65 6c 28 27 78 27 29 0a 61 ,.zdir='y').ax.set_xlabel('x').a
7ac0 78 2e 73 65 74 5f 78 6c 69 6d 33 64 28 30 2c 20 6e 29 0a 61 78 2e 73 65 74 5f 79 6c 61 62 65 6c x.set_xlim3d(0,.n).ax.set_ylabel
7ae0 28 27 24 5c 5c 61 6c 70 68 61 24 27 29 0a 61 78 2e 73 65 74 5f 79 6c 69 6d 33 64 28 30 2c 20 31 ('$\\alpha$').ax.set_ylim3d(0,.1
7b00 29 0a 61 78 2e 73 65 74 5f 7a 6c 61 62 65 6c 28 27 27 29 0a 61 78 2e 73 65 74 5f 7a 6c 69 6d 33 ).ax.set_zlabel('').ax.set_zlim3
7b20 64 28 30 2c 20 42 5f 6c 32 2e 6d 61 78 28 29 20 2a 20 31 2e 30 31 29 0a 70 6c 2e 74 69 74 6c 65 d(0,.B_l2.max().*.1.01).pl.title
7b40 28 27 42 61 72 79 63 65 6e 74 65 72 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 20 77 69 74 68 20 ('Barycenter.interpolation.with.
7b60 57 61 73 73 65 72 73 74 65 69 6e 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a Wasserstein').pl.tight_layout().
7b80 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 77 79 50 4c 60 f3 2a fb 00 11 00 .pl.show().PK........wyPL`.*....
7ba0 00 00 11 00 00 14 00 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 63 6c 61 73 73 65 73 2e 70 79 23 20 2d .........plot_otda_classes.py#.-
7bc0 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 3d 3d *-.coding:.utf-8.-*-.""".=======
7be0 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 6e 20 =================.OT.for.domain.
7c00 61 64 61 70 74 61 74 69 6f 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d adaptation.=====================
7c20 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 6e 74 72 6f 64 75 63 65 73 20 61 20 64 ===..This.example.introduces.a.d
7c40 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 20 69 6e 20 61 20 32 44 20 73 65 74 74 69 6e 67 omain.adaptation.in.a.2D.setting
7c60 20 61 6e 64 20 74 68 65 20 34 20 4f 54 44 41 0a 61 70 70 72 6f 61 63 68 65 73 20 63 75 72 72 65 .and.the.4.OTDA.approaches.curre
7c80 6e 74 6c 79 20 73 75 70 70 6f 72 74 65 64 20 69 6e 20 50 4f 54 2e 0a 0a 22 22 22 0a 0a 23 20 41 ntly.supported.in.POT..."""..#.A
7ca0 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 6d 61 uthors:.Remi.Flamary.<remi.flama
7cc0 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 6c 61 ry@unice.fr>.#..........Stanisla
7ce0 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 63 6f s.Chambon.<stan.chambon@gmail.co
7d00 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 6d 70 m>.#.#.License:.MIT.License..imp
7d20 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
7d40 74 20 6f 74 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 t.ot...#########################
7d60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7d80 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
7da0 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 6e 5f 73 6f 75 72 63 65 5f .data.#.-------------..n_source_
7dc0 73 61 6d 70 6c 65 73 20 3d 20 31 35 30 0a 6e 5f 74 61 72 67 65 74 5f 73 61 6d 70 6c 65 73 20 3d samples.=.150.n_target_samples.=
7de0 20 31 35 30 0a 0a 58 73 2c 20 79 73 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 64 .150..Xs,.ys.=.ot.datasets.get_d
7e00 61 74 61 5f 63 6c 61 73 73 69 66 28 27 33 67 61 75 73 73 27 2c 20 6e 5f 73 6f 75 72 63 65 5f 73 ata_classif('3gauss',.n_source_s
7e20 61 6d 70 6c 65 73 29 0a 58 74 2c 20 79 74 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 amples).Xt,.yt.=.ot.datasets.get
7e40 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 27 33 67 61 75 73 73 32 27 2c 20 6e 5f 74 61 72 67 65 _data_classif('3gauss2',.n_targe
7e60 74 5f 73 61 6d 70 6c 65 73 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 t_samples)...###################
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 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 49 6e ###########################.#.In
7ec0 73 74 61 6e 74 69 61 74 65 20 74 68 65 20 64 69 66 66 65 72 65 6e 74 20 74 72 61 6e 73 70 6f 72 stantiate.the.different.transpor
7ee0 74 20 61 6c 67 6f 72 69 74 68 6d 73 20 61 6e 64 20 66 69 74 20 74 68 65 6d 0a 23 20 2d 2d 2d 2d t.algorithms.and.fit.them.#.----
7f00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d --------------------------------
7f20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 20 45 4d 44 20 54 -----------------------..#.EMD.T
7f40 72 61 6e 73 70 6f 72 74 0a 6f 74 5f 65 6d 64 20 3d 20 6f 74 2e 64 61 2e 45 4d 44 54 72 61 6e 73 ransport.ot_emd.=.ot.da.EMDTrans
7f60 70 6f 72 74 28 29 0a 6f 74 5f 65 6d 64 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a port().ot_emd.fit(Xs=Xs,.Xt=Xt).
7f80 0a 23 20 53 69 6e 6b 68 6f 72 6e 20 54 72 61 6e 73 70 6f 72 74 0a 6f 74 5f 73 69 6e 6b 68 6f 72 .#.Sinkhorn.Transport.ot_sinkhor
7fa0 6e 20 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 28 72 65 67 5f n.=.ot.da.SinkhornTransport(reg_
7fc0 65 3d 31 65 2d 31 29 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 e=1e-1).ot_sinkhorn.fit(Xs=Xs,.X
7fe0 74 3d 58 74 29 0a 0a 23 20 53 69 6e 6b 68 6f 72 6e 20 54 72 61 6e 73 70 6f 72 74 20 77 69 74 68 t=Xt)..#.Sinkhorn.Transport.with
8000 20 47 72 6f 75 70 20 6c 61 73 73 6f 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 6f 74 5f 6c .Group.lasso.regularization.ot_l
8020 70 6c 31 20 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b 68 6f 72 6e 4c 70 6c 31 54 72 61 6e 73 70 6f 72 pl1.=.ot.da.SinkhornLpl1Transpor
8040 74 28 72 65 67 5f 65 3d 31 65 2d 31 2c 20 72 65 67 5f 63 6c 3d 31 65 30 29 0a 6f 74 5f 6c 70 6c t(reg_e=1e-1,.reg_cl=1e0).ot_lpl
8060 31 2e 66 69 74 28 58 73 3d 58 73 2c 20 79 73 3d 79 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 53 69 1.fit(Xs=Xs,.ys=ys,.Xt=Xt)..#.Si
8080 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
80a0 6f 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 20 6c 31 6c 32 0a 6f 74 5f 6c 31 6c 32 20 3d 20 o.regularization.l1l2.ot_l1l2.=.
80c0 6f 74 2e 64 61 2e 53 69 6e 6b 68 6f 72 6e 4c 31 6c 32 54 72 61 6e 73 70 6f 72 74 28 72 65 67 5f ot.da.SinkhornL1l2Transport(reg_
80e0 65 3d 31 65 2d 31 2c 20 72 65 67 5f 63 6c 3d 32 65 30 2c 20 6d 61 78 5f 69 74 65 72 3d 32 30 2c e=1e-1,.reg_cl=2e0,.max_iter=20,
8100 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
8120 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 6f 74 5f 6c 31 6c 32 2e 66 69 74 .......verbose=True).ot_l1l2.fit
8140 28 58 73 3d 58 73 2c 20 79 73 3d 79 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 74 72 61 6e 73 70 6f (Xs=Xs,.ys=ys,.Xt=Xt)..#.transpo
8160 72 74 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 20 6f 6e 74 6f 20 74 61 72 67 65 74 20 73 61 rt.source.samples.onto.target.sa
8180 6d 70 6c 65 73 0a 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 20 3d 20 6f 74 5f 65 6d 64 2e 74 72 61 mples.transp_Xs_emd.=.ot_emd.tra
81a0 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e nsform(Xs=Xs).transp_Xs_sinkhorn
81c0 20 3d 20 6f 74 5f 73 69 6e 6b 68 6f 72 6e 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a .=.ot_sinkhorn.transform(Xs=Xs).
81e0 74 72 61 6e 73 70 5f 58 73 5f 6c 70 6c 31 20 3d 20 6f 74 5f 6c 70 6c 31 2e 74 72 61 6e 73 66 6f transp_Xs_lpl1.=.ot_lpl1.transfo
8200 72 6d 28 58 73 3d 58 73 29 0a 74 72 61 6e 73 70 5f 58 73 5f 6c 31 6c 32 20 3d 20 6f 74 5f 6c 31 rm(Xs=Xs).transp_Xs_l1l2.=.ot_l1
8220 6c 32 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 l2.transform(Xs=Xs)...##########
8240 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
8260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
8280 23 23 23 23 0a 23 20 46 69 67 20 31 20 3a 20 70 6c 6f 74 73 20 73 6f 75 72 63 65 20 61 6e 64 20 ####.#.Fig.1.:.plots.source.and.
82a0 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d target.samples.#.---------------
82c0 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 67 ------------------------..pl.fig
82e0 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 31 30 2c 20 35 29 29 0a 70 6c 2e 73 75 62 70 6c ure(1,.figsize=(10,.5)).pl.subpl
8300 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 30 5d 2c ot(1,.2,.1).pl.scatter(Xs[:,.0],
8320 20 58 73 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 .Xs[:,.1],.c=ys,.marker='+',.lab
8340 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b el='Source.samples').pl.xticks([
8360 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 ]).pl.yticks([]).pl.legend(loc=0
8380 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 20 20 73 61 6d 70 6c 65 73 27 29 0a 0a 70 ).pl.title('Source..samples')..p
83a0 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 28 58 74 l.subplot(1,.2,.2).pl.scatter(Xt
83c0 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='
83e0 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
8400 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 6c 65 67 65 6e ticks([]).pl.yticks([]).pl.legen
8420 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 d(loc=0).pl.title('Target.sample
8440 73 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 s').pl.tight_layout()...########
8460 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
8480 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
84a0 23 23 23 23 23 23 0a 23 20 46 69 67 20 32 20 3a 20 70 6c 6f 74 20 6f 70 74 69 6d 61 6c 20 63 6f ######.#.Fig.2.:.plot.optimal.co
84c0 75 70 6c 69 6e 67 73 20 61 6e 64 20 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 0a uplings.and.transported.samples.
84e0 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 #.------------------------------
8500 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 61 72 61 6d 5f ------------------------..param_
8520 69 6d 67 20 3d 20 7b 27 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 27 3a 20 27 6e 65 61 72 65 73 74 img.=.{'interpolation':.'nearest
8540 27 2c 20 27 63 6d 61 70 27 3a 20 27 73 70 65 63 74 72 61 6c 27 7d 0a 0a 70 6c 2e 66 69 67 75 72 ',.'cmap':.'spectral'}..pl.figur
8560 65 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 31 35 2c 20 38 29 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 e(2,.figsize=(15,.8)).pl.subplot
8580 28 32 2c 20 34 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 65 6d 64 2e 63 6f 75 70 6c (2,.4,.1).pl.imshow(ot_emd.coupl
85a0 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 5d 29 ing_,.**param_img).pl.xticks([])
85c0 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 6c .pl.yticks([]).pl.title('Optimal
85e0 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 75 .coupling\nEMDTransport')..pl.su
8600 62 70 6c 6f 74 28 32 2c 20 34 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 73 69 6e 6b bplot(2,.4,.2).pl.imshow(ot_sink
8620 68 6f 72 6e 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 2a 2a 70 61 72 61 6d 5f 69 6d 67 29 0a 70 6c 2e horn.coupling_,.**param_img).pl.
8640 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
8660 65 28 27 4f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 5c 6e 53 69 6e 6b 68 6f 72 6e 54 72 61 e('Optimal.coupling\nSinkhornTra
8680 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 34 2c 20 33 29 0a 70 6c nsport')..pl.subplot(2,.4,.3).pl
86a0 2e 69 6d 73 68 6f 77 28 6f 74 5f 6c 70 6c 31 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 2a 2a 70 61 72 .imshow(ot_lpl1.coupling_,.**par
86c0 61 6d 5f 69 6d 67 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 am_img).pl.xticks([]).pl.yticks(
86e0 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
8700 53 69 6e 6b 68 6f 72 6e 4c 70 6c 31 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 SinkhornLpl1Transport')..pl.subp
8720 6c 6f 74 28 32 2c 20 34 2c 20 34 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 6c 31 6c 32 2e 63 lot(2,.4,.4).pl.imshow(ot_l1l2.c
8740 6f 75 70 6c 69 6e 67 5f 2c 20 2a 2a 70 61 72 61 6d 5f 69 6d 67 29 0a 70 6c 2e 78 74 69 63 6b 73 oupling_,.**param_img).pl.xticks
8760 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 70 74 ([]).pl.yticks([]).pl.title('Opt
8780 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 5c 6e 53 69 6e 6b 68 6f 72 6e 4c 31 6c 32 54 72 61 6e 73 imal.coupling\nSinkhornL1l2Trans
87a0 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 34 2c 20 35 29 0a 70 6c 2e 73 port')..pl.subplot(2,.4,.5).pl.s
87c0 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c catter(Xt[:,.0],.Xt[:,.1],.c=yt,
87e0 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 .marker='o',............label='T
8800 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 30 2e 33 29 0a 70 6c 2e 73 63 arget.samples',.alpha=0.3).pl.sc
8820 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 atter(transp_Xs_emd[:,.0],.trans
8840 70 5f 58 73 5f 65 6d 64 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 p_Xs_emd[:,.1],.c=ys,...........
8860 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
8880 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
88a0 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
88c0 70 6c 65 73 5c 6e 45 6d 64 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c ples\nEmdTransport').pl.legend(l
88e0 6f 63 3d 22 6c 6f 77 65 72 20 6c 65 66 74 22 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 oc="lower.left")..pl.subplot(2,.
8900 34 2c 20 36 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 4,.6).pl.scatter(Xt[:,.0],.Xt[:,
8920 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 .1],.c=yt,.marker='o',..........
8940 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d ..label='Target.samples',.alpha=
8960 30 2e 33 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 0.3).pl.scatter(transp_Xs_sinkho
8980 72 6e 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 5b 3a 2c 20 rn[:,.0],.transp_Xs_sinkhorn[:,.
89a0 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 2c 1],.c=ys,............marker='+',
89c0 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 70 .label='Transp.samples',.s=30).p
89e0 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
8a00 74 6c 65 28 27 54 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 5c 6e 53 69 6e 6b 68 6f tle('Transported.samples\nSinkho
8a20 72 6e 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 34 2c 20 rnTransport')..pl.subplot(2,.4,.
8a40 37 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 7).pl.scatter(Xt[:,.0],.Xt[:,.1]
8a60 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 6c ,.c=yt,.marker='o',............l
8a80 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 33 abel='Target.samples',.alpha=0.3
8aa0 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 6c 70 6c 31 5b 3a 2c 20 30 ).pl.scatter(transp_Xs_lpl1[:,.0
8ac0 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 6c 70 6c 31 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 ],.transp_Xs_lpl1[:,.1],.c=ys,..
8ae0 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 54 72 61 ..........marker='+',.label='Tra
8b00 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 20 73 3d 33 30 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d nsp.samples',.s=30).pl.xticks([]
8b20 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 72 61 6e 73 70 ).pl.yticks([]).pl.title('Transp
8b40 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 5c 6e 53 69 6e 6b 68 6f 72 6e 4c 70 6c 31 54 72 61 6e 73 orted.samples\nSinkhornLpl1Trans
8b60 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 34 2c 20 38 29 0a 70 6c 2e 73 port')..pl.subplot(2,.4,.8).pl.s
8b80 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c catter(Xt[:,.0],.Xt[:,.1],.c=yt,
8ba0 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 .marker='o',............label='T
8bc0 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 30 2e 33 29 0a 70 6c 2e 73 63 arget.samples',.alpha=0.3).pl.sc
8be0 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 6c 31 6c 32 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e atter(transp_Xs_l1l2[:,.0],.tran
8c00 73 70 5f 58 73 5f 6c 31 6c 32 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 sp_Xs_l1l2[:,.1],.c=ys,.........
8c20 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 6d ...marker='+',.label='Transp.sam
8c40 70 6c 65 73 27 2c 20 73 3d 33 30 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 ples',.s=30).pl.xticks([]).pl.yt
8c60 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 72 61 6e 73 70 6f 72 74 65 64 20 73 icks([]).pl.title('Transported.s
8c80 61 6d 70 6c 65 73 5c 6e 53 69 6e 6b 68 6f 72 6e 4c 31 6c 32 54 72 61 6e 73 70 6f 72 74 27 29 0a amples\nSinkhornL1l2Transport').
8ca0 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 pl.tight_layout()..pl.show().PK.
8cc0 04 14 00 00 00 00 00 77 79 50 4c 1a d1 23 82 4f 10 00 00 4f 10 00 00 22 00 00 00 70 6c 6f 74 5f .......wyPL..#.O...O..."...plot_
8ce0 6f 74 64 61 5f 6d 61 70 70 69 6e 67 5f 63 6f 6c 6f 72 73 5f 69 6d 61 67 65 73 2e 70 79 23 20 2d otda_mapping_colors_images.py#.-
8d00 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 3d 3d *-.coding:.utf-8.-*-.""".=======
8d20 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 ================================
8d40 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4f 54 20 66 6f 72 20 69 6d 61 67 65 20 63 6f 6c 6f ==============.OT.for.image.colo
8d60 72 20 61 64 61 70 74 61 74 69 6f 6e 20 77 69 74 68 20 6d 61 70 70 69 6e 67 20 65 73 74 69 6d 61 r.adaptation.with.mapping.estima
8d80 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.===========================
8da0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 4f 54 20 66 ==========================..OT.f
8dc0 6f 72 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 20 77 69 74 68 20 69 6d 61 67 65 20 or.domain.adaptation.with.image.
8de0 63 6f 6c 6f 72 20 61 64 61 70 74 61 74 69 6f 6e 20 5b 36 5d 20 77 69 74 68 20 6d 61 70 70 69 6e color.adaptation.[6].with.mappin
8e00 67 0a 65 73 74 69 6d 61 74 69 6f 6e 20 5b 38 5d 2e 0a 0a 5b 36 5d 20 46 65 72 72 61 64 61 6e 73 g.estimation.[8]...[6].Ferradans
8e20 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 47 2e 2c 20 ,.S.,.Papadakis,.N.,.Peyre,.G.,.
8e40 26 20 41 75 6a 6f 6c 2c 20 4a 2e 20 46 2e 20 28 32 30 31 34 29 2e 20 52 65 67 75 6c 61 72 69 7a &.Aujol,.J..F..(2014)..Regulariz
8e60 65 64 0a 20 20 20 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 ed.....discrete.optimal.transpor
8e80 74 2e 20 53 49 41 4d 20 4a 6f 75 72 6e 61 6c 20 6f 6e 20 49 6d 61 67 69 6e 67 20 53 63 69 65 6e t..SIAM.Journal.on.Imaging.Scien
8ea0 63 65 73 2c 20 37 28 33 29 2c 0a 20 20 20 20 31 38 35 33 2d 31 38 38 32 2e 0a 5b 38 5d 20 4d 2e ces,.7(3),.....1853-1882..[8].M.
8ec0 20 50 65 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 .Perrot,.N..Courty,.R..Flamary,.
8ee0 41 2e 20 48 61 62 72 61 72 64 2c 20 22 4d 61 70 70 69 6e 67 20 65 73 74 69 6d 61 74 69 6f 6e 20 A..Habrard,."Mapping.estimation.
8f00 66 6f 72 0a 20 20 20 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 for.....discrete.optimal.transpo
8f20 72 74 22 2c 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 69 rt",.Neural.Information.Processi
8f40 6e 67 20 53 79 73 74 65 6d 73 20 28 4e 49 50 53 29 2c 0a 20 20 20 20 32 30 31 36 2e 0a 0a 22 22 ng.Systems.(NIPS),.....2016...""
8f60 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 20 3c 72 65 6d 69 "..#.Authors:.Remi.Flamary.<remi
8f80 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 20 20 20 20 53 74 .flamary@unice.fr>.#..........St
8fa0 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 62 6f 6e 40 67 6d anislas.Chambon.<stan.chambon@gm
8fc0 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 4c 69 63 65 6e 73 ail.com>.#.#.License:.MIT.Licens
8fe0 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 66 72 6f 6d 20 73 63 69 70 79 e..import.numpy.as.np.from.scipy
9000 20 69 6d 70 6f 72 74 20 6e 64 69 6d 61 67 65 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 .import.ndimage.import.matplotli
9020 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 72 20 3d 20 6e 70 2e b.pylab.as.pl.import.ot..r.=.np.
9040 72 61 6e 64 6f 6d 2e 52 61 6e 64 6f 6d 53 74 61 74 65 28 34 32 29 0a 0a 0a 64 65 66 20 69 6d 32 random.RandomState(42)...def.im2
9060 6d 61 74 28 49 29 3a 0a 20 20 20 20 22 22 22 43 6f 6e 76 65 72 74 73 20 61 6e 64 20 69 6d 61 67 mat(I):....."""Converts.and.imag
9080 65 20 74 6f 20 6d 61 74 72 69 78 20 28 6f 6e 65 20 70 69 78 65 6c 20 70 65 72 20 6c 69 6e 65 29 e.to.matrix.(one.pixel.per.line)
90a0 22 22 22 0a 20 20 20 20 72 65 74 75 72 6e 20 49 2e 72 65 73 68 61 70 65 28 28 49 2e 73 68 61 70 """.....return.I.reshape((I.shap
90c0 65 5b 30 5d 20 2a 20 49 2e 73 68 61 70 65 5b 31 5d 2c 20 49 2e 73 68 61 70 65 5b 32 5d 29 29 0a e[0].*.I.shape[1],.I.shape[2])).
90e0 0a 0a 64 65 66 20 6d 61 74 32 69 6d 28 58 2c 20 73 68 61 70 65 29 3a 0a 20 20 20 20 22 22 22 43 ..def.mat2im(X,.shape):....."""C
9100 6f 6e 76 65 72 74 73 20 62 61 63 6b 20 61 20 6d 61 74 72 69 78 20 74 6f 20 61 6e 20 69 6d 61 67 onverts.back.a.matrix.to.an.imag
9120 65 22 22 22 0a 20 20 20 20 72 65 74 75 72 6e 20 58 2e 72 65 73 68 61 70 65 28 73 68 61 70 65 29 e""".....return.X.reshape(shape)
9140 0a 0a 0a 64 65 66 20 6d 69 6e 6d 61 78 28 49 29 3a 0a 20 20 20 20 72 65 74 75 72 6e 20 6e 70 2e ...def.minmax(I):.....return.np.
9160 63 6c 69 70 28 49 2c 20 30 2c 20 31 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 clip(I,.0,.1)...################
9180 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
91a0 23 23 23 23 23 23 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 ##############################.#
91c0 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.#.-------------..
91e0 23 20 4c 6f 61 64 69 6e 67 20 69 6d 61 67 65 73 0a 49 31 20 3d 20 6e 64 69 6d 61 67 65 2e 69 6d #.Loading.images.I1.=.ndimage.im
9200 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 70 67 27 29 2e 61 73 read('../data/ocean_day.jpg').as
9220 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 20 3d 20 6e 64 69 6d type(np.float64)./.256.I2.=.ndim
9240 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 5f 73 75 6e 73 65 74 age.imread('../data/ocean_sunset
9260 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 36 0a .jpg').astype(np.float64)./.256.
9280 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 49 32 ..X1.=.im2mat(I1).X2.=.im2mat(I2
92a0 29 0a 0a 23 20 74 72 61 69 6e 69 6e 67 20 73 61 6d 70 6c 65 73 0a 6e 62 20 3d 20 31 30 30 30 0a )..#.training.samples.nb.=.1000.
92c0 69 64 78 31 20 3d 20 72 2e 72 61 6e 64 69 6e 74 28 58 31 2e 73 68 61 70 65 5b 30 5d 2c 20 73 69 idx1.=.r.randint(X1.shape[0],.si
92e0 7a 65 3d 28 6e 62 2c 29 29 0a 69 64 78 32 20 3d 20 72 2e 72 61 6e 64 69 6e 74 28 58 32 2e 73 68 ze=(nb,)).idx2.=.r.randint(X2.sh
9300 61 70 65 5b 30 5d 2c 20 73 69 7a 65 3d 28 6e 62 2c 29 29 0a 0a 58 73 20 3d 20 58 31 5b 69 64 78 ape[0],.size=(nb,))..Xs.=.X1[idx
9320 31 2c 20 3a 5d 0a 58 74 20 3d 20 58 32 5b 69 64 78 32 2c 20 3a 5d 0a 0a 0a 23 23 23 23 23 23 23 1,.:].Xt.=.X2[idx2,.:]...#######
9340 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
9360 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
9380 23 23 23 23 23 23 23 0a 23 20 44 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 20 66 6f 72 20 #######.#.Domain.adaptation.for.
93a0 70 69 78 65 6c 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20 74 72 61 6e 73 66 65 72 0a 23 20 2d 2d pixel.distribution.transfer.#.--
93c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d --------------------------------
93e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 20 45 4d 44 54 72 61 6e 73 70 6f 72 74 0a ---------------..#.EMDTransport.
9400 6f 74 5f 65 6d 64 20 3d 20 6f 74 2e 64 61 2e 45 4d 44 54 72 61 6e 73 70 6f 72 74 28 29 0a 6f 74 ot_emd.=.ot.da.EMDTransport().ot
9420 5f 65 6d 64 2e 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 _emd.fit(Xs=Xs,.Xt=Xt).transp_Xs
9440 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 31 29 0a 49 _emd.=.ot_emd.transform(Xs=X1).I
9460 6d 61 67 65 5f 65 6d 64 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 74 72 61 6e 73 70 5f mage_emd.=.minmax(mat2im(transp_
9480 58 73 5f 65 6d 64 2c 20 49 31 2e 73 68 61 70 65 29 29 0a 0a 23 20 53 69 6e 6b 68 6f 72 6e 54 72 Xs_emd,.I1.shape))..#.SinkhornTr
94a0 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
94c0 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
94e0 6b 68 6f 72 6e 2e 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 khorn.fit(Xs=Xs,.Xt=Xt).transp_X
9500 73 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 5f 65 6d 64 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 s_sinkhorn.=.ot_emd.transform(Xs
9520 3d 58 31 29 0a 49 6d 61 67 65 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 =X1).Image_sinkhorn.=.minmax(mat
9540 32 69 6d 28 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 2c 20 49 31 2e 73 68 61 70 65 2im(transp_Xs_sinkhorn,.I1.shape
9560 29 29 0a 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 20 3d 20 6f 74 2e 64 61 2e 4d 61 ))..ot_mapping_linear.=.ot.da.Ma
9580 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 28 0a 20 20 20 20 6d 75 3d 31 65 30 2c 20 65 74 61 3d ppingTransport(.....mu=1e0,.eta=
95a0 31 65 2d 38 2c 20 62 69 61 73 3d 54 72 75 65 2c 20 6d 61 78 5f 69 74 65 72 3d 32 30 2c 20 76 65 1e-8,.bias=True,.max_iter=20,.ve
95c0 72 62 6f 73 65 3d 54 72 75 65 29 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 2e 66 69 rbose=True).ot_mapping_linear.fi
95e0 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 58 31 74 6c 20 3d 20 6f 74 5f 6d 61 70 70 69 t(Xs=Xs,.Xt=Xt)..X1tl.=.ot_mappi
9600 6e 67 5f 6c 69 6e 65 61 72 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 31 29 0a 49 6d 61 67 65 ng_linear.transform(Xs=X1).Image
9620 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 _mapping_linear.=.minmax(mat2im(
9640 58 31 74 6c 2c 20 49 31 2e 73 68 61 70 65 29 29 0a 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 67 61 75 X1tl,.I1.shape))..ot_mapping_gau
9660 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 72 74 28 0a ssian.=.ot.da.MappingTransport(.
9680 20 20 20 20 6d 75 3d 31 65 30 2c 20 65 74 61 3d 31 65 2d 32 2c 20 73 69 67 6d 61 3d 31 2c 20 62 ....mu=1e0,.eta=1e-2,.sigma=1,.b
96a0 69 61 73 3d 46 61 6c 73 65 2c 20 6d 61 78 5f 69 74 65 72 3d 31 30 2c 20 76 65 72 62 6f 73 65 3d ias=False,.max_iter=10,.verbose=
96c0 54 72 75 65 29 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 True).ot_mapping_gaussian.fit(Xs
96e0 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 58 31 74 6e 20 3d 20 6f 74 5f 6d 61 70 70 69 6e 67 5f 67 =Xs,.Xt=Xt)..X1tn.=.ot_mapping_g
9700 61 75 73 73 69 61 6e 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 31 29 20 20 23 20 75 73 65 20 aussian.transform(Xs=X1)..#.use.
9720 74 68 65 20 65 73 74 69 6d 61 74 65 64 20 6d 61 70 70 69 6e 67 0a 49 6d 61 67 65 5f 6d 61 70 70 the.estimated.mapping.Image_mapp
9740 69 6e 67 5f 67 61 75 73 73 69 61 6e 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 58 31 74 ing_gaussian.=.minmax(mat2im(X1t
9760 6e 2c 20 49 31 2e 73 68 61 70 65 29 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 n,.I1.shape))...################
9780 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
97a0 23 23 23 23 23 23 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 ##############################.#
97c0 20 50 6c 6f 74 20 6f 72 69 67 69 6e 61 6c 20 69 6d 61 67 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d .Plot.original.images.#.--------
97e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 ------------..pl.figure(1,.figsi
9800 7a 65 3d 28 36 2e 34 2c 20 33 29 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 ze=(6.4,.3)).pl.subplot(1,.2,.1)
9820 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c .pl.imshow(I1).pl.axis('off').pl
9840 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 31 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c .title('Image.1')..pl.subplot(1,
9860 20 32 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 .2,.2).pl.imshow(I2).pl.axis('of
9880 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 32 27 29 0a 70 6c 2e 74 69 67 68 74 f').pl.title('Image.2').pl.tight
98a0 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 23 _layout()...####################
98c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
98e0 23 23 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 ##########################.#.Plo
9900 74 20 70 69 78 65 6c 20 76 61 6c 75 65 73 20 64 69 73 74 72 69 62 75 74 69 6f 6e 0a 23 20 2d 2d t.pixel.values.distribution.#.--
9920 2d 2d 2d 2d 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 ----------------------------..pl
9940 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 35 29 29 0a 0a 70 6c .figure(2,.figsize=(6.4,.5))..pl
9960 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 73 5b .subplot(1,.2,.1).pl.scatter(Xs[
9980 3a 2c 20 30 5d 2c 20 58 73 5b 3a 2c 20 32 5d 2c 20 63 3d 58 73 29 0a 70 6c 2e 61 78 69 73 28 5b :,.0],.Xs[:,.2],.c=Xs).pl.axis([
99a0 30 2c 20 31 2c 20 30 2c 20 31 5d 29 0a 70 6c 2e 78 6c 61 62 65 6c 28 27 52 65 64 27 29 0a 70 6c 0,.1,.0,.1]).pl.xlabel('Red').pl
99c0 2e 79 6c 61 62 65 6c 28 27 42 6c 75 65 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 .ylabel('Blue').pl.title('Image.
99e0 31 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 32 29 0a 70 6c 2e 73 63 61 74 1')..pl.subplot(1,.2,.2).pl.scat
9a00 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 32 5d 2c 20 63 3d 58 74 29 0a 70 6c ter(Xt[:,.0],.Xt[:,.2],.c=Xt).pl
9a20 2e 61 78 69 73 28 5b 30 2c 20 31 2c 20 30 2c 20 31 5d 29 0a 70 6c 2e 78 6c 61 62 65 6c 28 27 52 .axis([0,.1,.0,.1]).pl.xlabel('R
9a40 65 64 27 29 0a 70 6c 2e 79 6c 61 62 65 6c 28 27 42 6c 75 65 27 29 0a 70 6c 2e 74 69 74 6c 65 28 ed').pl.ylabel('Blue').pl.title(
9a60 27 49 6d 61 67 65 20 32 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 0a 23 'Image.2').pl.tight_layout()...#
9a80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
9aa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
9ac0 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 74 72 61 6e 73 66 6f 72 6d 65 64 #############.#.Plot.transformed
9ae0 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 2d 2d .images.#.----------------------
9b00 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 31 30 2c 20 35 29 29 -..pl.figure(2,.figsize=(10,.5))
9b20 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 ..pl.subplot(2,.3,.1).pl.imshow(
9b40 49 31 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 2e I1).pl.axis('off').pl.title('Im.
9b60 20 31 27 29 0a 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 .1')..pl.subplot(2,.3,.4).pl.ims
9b80 68 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 how(I2).pl.axis('off').pl.title(
9ba0 27 49 6d 2e 20 32 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 32 29 0a 70 6c 'Im..2')..pl.subplot(2,.3,.2).pl
9bc0 2e 69 6d 73 68 6f 77 28 49 6d 61 67 65 5f 65 6d 64 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 .imshow(Image_emd).pl.axis('off'
9be0 29 0a 70 6c 2e 74 69 74 6c 65 28 27 45 6d 64 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 ).pl.title('EmdTransport')..pl.s
9c00 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 35 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 6d 61 67 65 5f ubplot(2,.3,.5).pl.imshow(Image_
9c20 73 69 6e 6b 68 6f 72 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 sinkhorn).pl.axis('off').pl.titl
9c40 65 28 27 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 e('SinkhornTransport')..pl.subpl
9c60 6f 74 28 32 2c 20 33 2c 20 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 6d 61 67 65 5f 6d 61 70 70 ot(2,.3,.3).pl.imshow(Image_mapp
9c80 69 6e 67 5f 6c 69 6e 65 61 72 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 ing_linear).pl.axis('off').pl.ti
9ca0 74 6c 65 28 27 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 20 28 6c 69 6e 65 61 72 29 27 29 tle('MappingTransport.(linear)')
9cc0 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 36 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 ..pl.subplot(2,.3,.6).pl.imshow(
9ce0 49 6d 61 67 65 5f 6d 61 70 70 69 6e 67 5f 67 61 75 73 73 69 61 6e 29 0a 70 6c 2e 61 78 69 73 28 Image_mapping_gaussian).pl.axis(
9d00 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 'off').pl.title('MappingTranspor
9d20 74 20 28 67 61 75 73 73 69 61 6e 29 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 t.(gaussian)').pl.tight_layout()
9d40 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 77 79 50 4c 10 25 96 fd 88 13 ..pl.show().PK........wyPL.%....
9d60 00 00 88 13 00 00 13 00 00 00 70 6c 6f 74 5f 4f 54 5f 4c 31 5f 76 73 5f 4c 32 2e 70 79 23 20 2d ..........plot_OT_L1_vs_L2.py#.-
9d80 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 3d 3d *-.coding:.utf-8.-*-.""".=======
9da0 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 ================================
9dc0 3d 3d 3d 0a 32 44 20 4f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 20 66 6f 72 20 64 69 66 ===.2D.Optimal.transport.for.dif
9de0 66 65 72 65 6e 74 20 6d 65 74 72 69 63 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ferent.metrics.=================
9e00 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 32 44 20 4f 54 =========================..2D.OT
9e20 20 6f 6e 20 65 6d 70 69 72 69 63 61 6c 20 64 69 73 74 72 69 62 75 74 69 6f 20 20 77 69 74 68 20 .on.empirical.distributio..with.
9e40 64 69 66 66 65 72 65 6e 74 20 67 6f 75 6e 64 20 6d 65 74 72 69 63 2e 0a 0a 53 74 6f 6c 65 20 74 different.gound.metric...Stole.t
9e60 68 65 20 66 69 67 75 72 65 20 69 64 65 61 20 66 72 6f 6d 20 46 69 67 2e 20 31 20 61 6e 64 20 32 he.figure.idea.from.Fig..1.and.2
9e80 20 69 6e 0a 68 74 74 70 73 3a 2f 2f 61 72 78 69 76 2e 6f 72 67 2f 70 64 66 2f 31 37 30 36 2e 30 .in.https://arxiv.org/pdf/1706.0
9ea0 37 36 35 30 2e 70 64 66 0a 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a 20 52 65 6d 69 20 46 7650.pdf..."""..#.Author:.Remi.F
9ec0 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 23 lamary.<remi.flamary@unice.fr>.#
9ee0 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 20 .#.License:.MIT.License..import.
9f00 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 79 numpy.as.np.import.matplotlib.py
9f20 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 74 20 6f 74 2e 70 6c lab.as.pl.import.ot.import.ot.pl
9f40 6f 74 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ot..############################
9f60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
9f80 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 74 20 31 20 3a ##################.#.Dataset.1.:
9fa0 20 75 6e 69 66 6f 72 6d 20 73 61 6d 70 6c 69 6e 67 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .uniform.sampling.#.------------
9fc0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 6e 20 3d 20 32 30 20 20 23 20 6e 62 20 73 ----------------..n.=.20..#.nb.s
9fe0 61 6d 70 6c 65 73 0a 78 73 20 3d 20 6e 70 2e 7a 65 72 6f 73 28 28 6e 2c 20 32 29 29 0a 78 73 5b amples.xs.=.np.zeros((n,.2)).xs[
a000 3a 2c 20 30 5d 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 29 20 2b 20 31 0a 78 73 5b 3a 2c 20 31 :,.0].=.np.arange(n).+.1.xs[:,.1
a020 5d 20 3d 20 28 6e 70 2e 61 72 61 6e 67 65 28 6e 29 20 2b 20 31 29 20 2a 20 2d 30 2e 30 30 31 20 ].=.(np.arange(n).+.1).*.-0.001.
a040 20 23 20 74 6f 20 6d 61 6b 65 20 69 74 20 73 74 72 69 63 74 6c 79 20 63 6f 6e 76 65 78 2e 2e 2e .#.to.make.it.strictly.convex...
a060 0a 0a 78 74 20 3d 20 6e 70 2e 7a 65 72 6f 73 28 28 6e 2c 20 32 29 29 0a 78 74 5b 3a 2c 20 31 5d ..xt.=.np.zeros((n,.2)).xt[:,.1]
a080 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 29 20 2b 20 31 0a 0a 61 2c 20 62 20 3d 20 6f 74 2e 75 .=.np.arange(n).+.1..a,.b.=.ot.u
a0a0 6e 69 66 28 6e 29 2c 20 6f 74 2e 75 6e 69 66 28 6e 29 20 20 23 20 75 6e 69 66 6f 72 6d 20 64 69 nif(n),.ot.unif(n)..#.uniform.di
a0c0 73 74 72 69 62 75 74 69 6f 6e 20 6f 6e 20 73 61 6d 70 6c 65 73 0a 0a 23 20 6c 6f 73 73 20 6d 61 stribution.on.samples..#.loss.ma
a0e0 74 72 69 78 0a 4d 31 20 3d 20 6f 74 2e 64 69 73 74 28 78 73 2c 20 78 74 2c 20 6d 65 74 72 69 63 trix.M1.=.ot.dist(xs,.xt,.metric
a100 3d 27 65 75 63 6c 69 64 65 61 6e 27 29 0a 4d 31 20 2f 3d 20 4d 31 2e 6d 61 78 28 29 0a 0a 23 20 ='euclidean').M1./=.M1.max()..#.
a120 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 32 20 3d 20 6f 74 2e 64 69 73 74 28 78 73 2c 20 78 74 2c loss.matrix.M2.=.ot.dist(xs,.xt,
a140 20 6d 65 74 72 69 63 3d 27 73 71 65 75 63 6c 69 64 65 61 6e 27 29 0a 4d 32 20 2f 3d 20 4d 32 2e .metric='sqeuclidean').M2./=.M2.
a160 6d 61 78 28 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 70 20 3d 20 6e 70 2e 73 71 72 max()..#.loss.matrix.Mp.=.np.sqr
a180 74 28 6f 74 2e 64 69 73 74 28 78 73 2c 20 78 74 2c 20 6d 65 74 72 69 63 3d 27 65 75 63 6c 69 64 t(ot.dist(xs,.xt,.metric='euclid
a1a0 65 61 6e 27 29 29 0a 4d 70 20 2f 3d 20 4d 70 2e 6d 61 78 28 29 0a 0a 23 20 44 61 74 61 0a 70 6c ean')).Mp./=.Mp.max()..#.Data.pl
a1c0 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 37 2c 20 33 29 29 0a 70 6c 2e 63 6c .figure(1,.figsize=(7,.3)).pl.cl
a1e0 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],.
a200 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
a220 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',.
a240 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(
a260 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
a280 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
a2a0 74 72 69 63 65 73 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 37 2c 20 trices.pl.figure(2,.figsize=(7,.
a2c0 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
a2e0 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').
a300 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
a320 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
a340 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(
a360 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
a380 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
a3a0 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('
a3c0 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
a3e0 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()..#######################
a400 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
a420 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
a440 74 20 31 20 3a 20 50 6c 6f 74 20 4f 54 20 4d 61 74 72 69 63 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d t.1.:.Plot.OT.Matrices.#.-------
a460 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 44 0a ---------------------...#%%.EMD.
a480 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 65 6d G1.=.ot.emd(a,.b,.M1).G2.=.ot.em
a4a0 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 4d 70 d(a,.b,.M2).Gp.=.ot.emd(a,.b,.Mp
a4c0 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 33 2c 20 66 69 )..#.OT.matrices.pl.figure(3,.fi
a4e0 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 2c 20 gsize=(7,.3))..pl.subplot(1,.3,.
a500 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 78 73 1).ot.plot.plot2D_samples_mat(xs
a520 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 6f 74 ,.xt,.G1,.c=[.5,..5,.1]).pl.plot
a540 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c (xs[:,.0],.xs[:,.1],.'+b',.label
a560 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c ='Source.samples').pl.plot(xt[:,
a580 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 .0],.xt[:,.1],.'xr',.label='Targ
a5a0 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 23 20 et.samples').pl.axis('equal').#.
a5c0 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 45 75 pl.legend(loc=0).pl.title('OT.Eu
a5e0 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 0a 6f clidean')..pl.subplot(1,.3,.2).o
a600 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 78 74 t.plot.plot2D_samples_mat(xs,.xt
a620 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 73 5b ,.G2,.c=[.5,..5,.1]).pl.plot(xs[
a640 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 53 6f :,.0],.xs[:,.1],.'+b',.label='So
a660 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 5d 2c urce.samples').pl.plot(xt[:,.0],
a680 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 20 73 .xt[:,.1],.'xr',.label='Target.s
a6a0 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 2e 6c amples').pl.axis('equal').#.pl.l
a6c0 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 72 65 egend(loc=0).pl.title('OT.square
a6e0 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 2c 20 d.Euclidean')..pl.subplot(1,.3,.
a700 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 78 73 3).ot.plot.plot2D_samples_mat(xs
a720 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 6f 74 ,.xt,.Gp,.c=[.5,..5,.1]).pl.plot
a740 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c (xs[:,.0],.xs[:,.1],.'+b',.label
a760 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c ='Source.samples').pl.plot(xt[:,
a780 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 .0],.xt[:,.1],.'xr',.label='Targ
a7a0 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 23 20 et.samples').pl.axis('equal').#.
a7c0 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 73 71 pl.legend(loc=0).pl.title('OT.sq
a7e0 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 28 29 rt.Euclidean').pl.tight_layout()
a800 0a 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 23 23 23 23 23 ..pl.show()...##################
a820 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
a840 23 23 23 23 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 ############################.#.D
a860 61 74 61 73 65 74 20 32 20 3a 20 50 61 72 74 69 61 6c 20 63 69 72 63 6c 65 0a 23 20 2d 2d 2d 2d ataset.2.:.Partial.circle.#.----
a880 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 35 30 20 20 ----------------------..n.=.50..
a8a0 23 20 6e 62 20 73 61 6d 70 6c 65 73 0a 78 74 6f 74 20 3d 20 6e 70 2e 7a 65 72 6f 73 28 28 6e 20 #.nb.samples.xtot.=.np.zeros((n.
a8c0 2b 20 31 2c 20 32 29 29 0a 78 74 6f 74 5b 3a 2c 20 30 5d 20 3d 20 6e 70 2e 63 6f 73 28 0a 20 20 +.1,.2)).xtot[:,.0].=.np.cos(...
a8e0 20 20 28 6e 70 2e 61 72 61 6e 67 65 28 6e 20 2b 20 31 29 20 2b 20 31 2e 30 29 20 2a 20 30 2e 39 ..(np.arange(n.+.1).+.1.0).*.0.9
a900 20 2f 20 28 6e 20 2b 20 32 29 20 2a 20 32 20 2a 20 6e 70 2e 70 69 29 0a 78 74 6f 74 5b 3a 2c 20 ./.(n.+.2).*.2.*.np.pi).xtot[:,.
a920 31 5d 20 3d 20 6e 70 2e 73 69 6e 28 0a 20 20 20 20 28 6e 70 2e 61 72 61 6e 67 65 28 6e 20 2b 20 1].=.np.sin(.....(np.arange(n.+.
a940 31 29 20 2b 20 31 2e 30 29 20 2a 20 30 2e 39 20 2f 20 28 6e 20 2b 20 32 29 20 2a 20 32 20 2a 20 1).+.1.0).*.0.9./.(n.+.2).*.2.*.
a960 6e 70 2e 70 69 29 0a 0a 78 73 20 3d 20 78 74 6f 74 5b 3a 6e 2c 20 3a 5d 0a 78 74 20 3d 20 78 74 np.pi)..xs.=.xtot[:n,.:].xt.=.xt
a980 6f 74 5b 31 3a 2c 20 3a 5d 0a 0a 61 2c 20 62 20 3d 20 6f 74 2e 75 6e 69 66 28 6e 29 2c 20 6f 74 ot[1:,.:]..a,.b.=.ot.unif(n),.ot
a9a0 2e 75 6e 69 66 28 6e 29 20 20 23 20 75 6e 69 66 6f 72 6d 20 64 69 73 74 72 69 62 75 74 69 6f 6e .unif(n)..#.uniform.distribution
a9c0 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 31 20 3d 20 .on.samples..#.loss.matrix.M1.=.
a9e0 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 61 ot.dist(xs,.xt,.metric='euclidea
aa00 6e 27 29 0a 4d 31 20 2f 3d 20 4d 31 2e 6d 61 78 28 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 n').M1./=.M1.max()..#.loss.matri
aa20 78 0a 4d 32 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 27 73 x.M2.=.ot.dist(xs,.xt,.metric='s
aa40 71 65 75 63 6c 69 64 65 61 6e 27 29 0a 4d 32 20 2f 3d 20 4d 32 2e 6d 61 78 28 29 0a 0a 23 20 6c qeuclidean').M2./=.M2.max()..#.l
aa60 6f 73 73 20 6d 61 74 72 69 78 0a 4d 70 20 3d 20 6e 70 2e 73 71 72 74 28 6f 74 2e 64 69 73 74 28 oss.matrix.Mp.=.np.sqrt(ot.dist(
aa80 78 73 2c 20 78 74 2c 20 6d 65 74 72 69 63 3d 27 65 75 63 6c 69 64 65 61 6e 27 29 29 0a 4d 70 20 xs,.xt,.metric='euclidean')).Mp.
aaa0 2f 3d 20 4d 70 2e 6d 61 78 28 29 0a 0a 0a 23 20 44 61 74 61 0a 70 6c 2e 66 69 67 75 72 65 28 34 /=.Mp.max()...#.Data.pl.figure(4
aac0 2c 20 66 69 67 73 69 7a 65 3d 28 37 2c 20 33 29 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 2e 70 6c ,.figsize=(7,.3)).pl.clf().pl.pl
aae0 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
ab00 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[
ab20 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
ab40 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').
ab60 70 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 20 61 6e 64 20 74 72 61 67 65 74 20 64 69 73 74 pl.title('Source.and.traget.dist
ab80 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 0a 23 20 43 6f 73 74 20 6d 61 74 72 69 63 65 73 0a 70 6c ributions')...#.Cost.matrices.pl
aba0 2e 66 69 67 75 72 65 28 35 2c 20 66 69 67 73 69 7a 65 3d 28 37 2c 20 33 29 29 0a 0a 70 6c 2e 73 .figure(5,.figsize=(7,.3))..pl.s
abc0 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 4d 31 2c 20 69 6e ubplot(1,.3,.1).pl.imshow(M1,.in
abe0 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(
ac00 27 45 75 63 6c 69 64 65 61 6e 20 63 6f 73 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 'Euclidean.cost')..pl.subplot(1,
ac20 20 33 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 4d 32 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 .3,.2).pl.imshow(M2,.interpolati
ac40 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 71 75 61 72 65 64 20 on='nearest').pl.title('Squared.
ac60 45 75 63 6c 69 64 65 61 6e 20 63 6f 73 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 Euclidean.cost')..pl.subplot(1,.
ac80 33 2c 20 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 4d 70 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 3,.3).pl.imshow(Mp,.interpolatio
aca0 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 71 72 74 20 45 75 63 6c n='nearest').pl.title('Sqrt.Eucl
acc0 69 64 65 61 6e 20 63 6f 73 74 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a idean.cost').pl.tight_layout()..
ace0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
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 0a 23 20 44 61 74 61 73 65 74 20 32 20 3a 20 50 6c 6f ##############.#.Dataset.2.:.Plo
ad40 74 20 20 4f 54 20 4d 61 74 72 69 63 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d t..OT.Matrices.#.---------------
ad60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 25 25 20 45 4d 44 0a 47 31 20 3d 20 6f 74 --------------...#%%.EMD.G1.=.ot
ad80 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 31 29 0a 47 32 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c .emd(a,.b,.M1).G2.=.ot.emd(a,.b,
ada0 20 4d 32 29 0a 47 70 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 70 29 0a 0a 23 20 4f 54 .M2).Gp.=.ot.emd(a,.b,.Mp)..#.OT
adc0 20 6d 61 74 72 69 63 65 73 0a 70 6c 2e 66 69 67 75 72 65 28 36 2c 20 66 69 67 73 69 7a 65 3d 28 .matrices.pl.figure(6,.figsize=(
ade0 37 2c 20 33 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 31 29 0a 6f 74 2e 70 7,.3))..pl.subplot(1,.3,.1).ot.p
ae00 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 78 74 2c 20 47 lot.plot2D_samples_mat(xs,.xt,.G
ae20 31 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 73 5b 3a 2c 20 1,.c=[.5,..5,.1]).pl.plot(xs[:,.
ae40 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 0],.xs[:,.1],.'+b',.label='Sourc
ae60 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 e.samples').pl.plot(xt[:,.0],.xt
ae80 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 [:,.1],.'xr',.label='Target.samp
aea0 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 2e 6c 65 67 65 les').pl.axis('equal').#.pl.lege
aec0 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 45 75 63 6c 69 64 65 61 6e nd(loc=0).pl.title('OT.Euclidean
aee0 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 32 29 0a 6f 74 2e 70 6c 6f 74 2e ')..pl.subplot(1,.3,.2).ot.plot.
af00 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 78 73 2c 20 78 74 2c 20 47 32 2c 20 63 plot2D_samples_mat(xs,.xt,.G2,.c
af20 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 =[.5,..5,.1]).pl.plot(xs[:,.0],.
af40 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 xs[:,.1],.'+b',.label='Source.sa
af60 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 mples').pl.plot(xt[:,.0],.xt[:,.
af80 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 1],.'xr',.label='Target.samples'
afa0 29 0a 70 6c 2e 61 78 69 73 28 27 65 71 75 61 6c 27 29 0a 23 20 70 6c 2e 6c 65 67 65 6e 64 28 6c ).pl.axis('equal').#.pl.legend(l
afc0 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 73 71 75 61 72 65 64 20 45 75 63 6c 69 oc=0).pl.title('OT.squared.Eucli
afe0 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 33 29 0a 6f 74 2e 70 dean')..pl.subplot(1,.3,.3).ot.p
b000 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 78 74 2c 20 47 lot.plot2D_samples_mat(xs,.xt,.G
b020 70 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 73 5b 3a 2c 20 p,.c=[.5,..5,.1]).pl.plot(xs[:,.
b040 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 0],.xs[:,.1],.'+b',.label='Sourc
b060 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 e.samples').pl.plot(xt[:,.0],.xt
b080 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 [:,.1],.'xr',.label='Target.samp
b0a0 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 2e 6c 65 67 65 les').pl.axis('equal').#.pl.lege
b0c0 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 72 74 20 45 75 63 6c nd(loc=0).pl.title('OT.sqrt.Eucl
b0e0 69 64 65 61 6e 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 idean').pl.tight_layout()..pl.sh
b100 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 77 79 50 4c 8c 4d bd 60 44 09 00 00 44 09 00 00 15 ow().PK........wyPL.M.`D...D....
b120 00 00 00 70 6c 6f 74 5f 4f 54 5f 32 44 5f 73 61 6d 70 6c 65 73 2e 70 79 23 20 2d 2a 2d 20 63 6f ...plot_OT_2D_samples.py#.-*-.co
b140 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.-*-.""".============
b160 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 ================================
b180 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 74 20 62 65 ========.2D.Optimal.transport.be
b1a0 74 77 65 65 6e 20 65 6d 70 69 72 69 63 61 6c 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 3d 3d tween.empirical.distributions.==
b1c0 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 ================================
b1e0 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 74 72 61 74 69 6f 6e ==================..Illustration
b200 20 6f 66 20 32 44 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 20 62 65 74 77 65 65 6e .of.2D.optimal.transport.between
b220 20 64 69 73 63 72 69 62 75 74 69 6f 6e 73 20 74 68 61 74 20 61 72 65 20 77 65 69 67 68 74 65 64 .discributions.that.are.weighted
b240 0a 73 75 6d 20 6f 66 20 64 69 72 61 63 73 2e 20 54 68 65 20 4f 54 20 6d 61 74 72 69 78 20 69 73 .sum.of.diracs..The.OT.matrix.is
b260 20 70 6c 6f 74 74 65 64 20 77 69 74 68 20 74 68 65 20 73 61 6d 70 6c 65 73 2e 0a 0a 22 22 22 0a .plotted.with.the.samples...""".
b280 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 2e 66 6c .#.Author:.Remi.Flamary.<remi.fl
b2a0 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 4d 49 54 amary@unice.fr>.#.#.License:.MIT
b2c0 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 69 6d 70 .License..import.numpy.as.np.imp
b2e0 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
b300 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 23 t.ot..##########################
b320 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
b340 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 20 ####################.#.Generate.
b360 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 61 72 61 6d 65 data.#.-------------..#%%.parame
b380 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 20 3d 20 35 30 ters.and.data.generation..n.=.50
b3a0 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 72 72 61 79 28 ..#.nb.samples..mu_s.=.np.array(
b3c0 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 31 2c 20 30 5d [0,.0]).cov_s.=.np.array([[1,.0]
b3e0 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 28 5b 34 2c 20 ,.[0,.1]])..mu_t.=.np.array([4,.
b400 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 2e 38 5d 2c 20 4]).cov_t.=.np.array([[1,.-.8],.
b420 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 73 2e 67 65 74 [-.8,.1]])..xs.=.ot.datasets.get
b440 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 20 63 6f 76 5f 73 _2D_samples_gauss(n,.mu_s,.cov_s
b460 29 0a 78 74 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 32 44 5f 73 61 6d 70 6c 65 ).xt.=.ot.datasets.get_2D_sample
b480 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 61 2c 20 62 20 3d 20 s_gauss(n,.mu_t,.cov_t)..a,.b.=.
b4a0 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 73 28 28 6e 2c 29 29 np.ones((n,))./.n,.np.ones((n,))
b4c0 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 69 6f 6e 20 6f 6e 20 ./.n..#.uniform.distribution.on.
b4e0 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 3d 20 6f 74 2e 64 69 samples..#.loss.matrix.M.=.ot.di
b500 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 23 23 23 23 23 23 23 st(xs,.xt).M./=.M.max()..#######
b520 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
b540 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
b560 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 2d 0a #######.#.Plot.data.#.---------.
b580 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 75 72 65 28 31 29 0a .#%%.plot.samples..pl.figure(1).
b5a0 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 62 27 pl.plot(xs[:,.0],.xs[:,.1],.'+b'
b5c0 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 6c 6f ,.label='Source.samples').pl.plo
b5e0 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 62 65 t(xt[:,.0],.xt[:,.1],.'xr',.labe
b600 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 28 6c 6f l='Target.samples').pl.legend(lo
b620 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 20 74 61 72 67 65 74 c=0).pl.title('Source.and.target
b640 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 72 65 28 32 29 0a 70 .distributions')..pl.figure(2).p
b660 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 3d 27 6e 65 61 72 65 l.imshow(M,.interpolation='neare
b680 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 78 20 4d 27 29 0a 0a st').pl.title('Cost.matrix.M')..
b6a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
b6c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
b6e0 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 45 4d 44 0a 23 20 2d ##############.#.Compute.EMD.#.-
b700 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 20 6f 74 2e 65 6d 64 ----------..#%%.EMD..G0.=.ot.emd
b720 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 6c 2e 69 6d 73 68 6f (a,.b,.M)..pl.figure(3).pl.imsho
b740 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 65 73 74 27 29 0a 70 w(G0,.interpolation='nearest').p
b760 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 70 6c 2e 66 69 67 75 l.title('OT.matrix.G0')..pl.figu
b780 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 6c 65 73 5f 6d 61 74 re(4).ot.plot.plot2D_samples_mat
b7a0 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 5d 29 0a 70 6c 2e 70 (xs,.xt,.G0,.c=[.5,..5,.1]).pl.p
b7c0 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 6c 61 lot(xs[:,.0],.xs[:,.1],.'+b',.la
b7e0 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 78 74 bel='Source.samples').pl.plot(xt
b800 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 27 54 [:,.0],.xt[:,.1],.'xr',.label='T
b820 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 arget.samples').pl.legend(loc=0)
b840 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 20 73 61 6d 70 6c 65 .pl.title('OT.matrix.with.sample
b860 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 23 23 23 23 23 23 23 s')...##########################
b880 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
b8a0 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 53 ####################.#.Compute.S
b8c0 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 2d 0a 0a 23 25 25 20 inkhorn.#.----------------..#%%.
b8e0 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 64 20 3d 20 31 65 2d sinkhorn..#.reg.term.lambd.=.1e-
b900 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 20 4d 2c 20 6c 61 6d 3..Gs.=.ot.sinkhorn(a,.b,.M,.lam
b920 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 6f 77 28 47 73 2c 20 bd)..pl.figure(5).pl.imshow(Gs,.
b940 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 74 69 74 6c interpolation='nearest').pl.titl
b960 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 70 6c 2e 66 69 67 75 e('OT.matrix.sinkhorn')..pl.figu
b980 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 6c 65 73 5f 6d 61 74 re(6).ot.plot.plot2D_samples_mat
b9a0 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 35 2c 20 31 5d 29 0a (xs,.xt,.Gs,.color=[.5,..5,.1]).
b9c0 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 62 27 pl.plot(xs[:,.0],.xs[:,.1],.'+b'
b9e0 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 6c 6f ,.label='Source.samples').pl.plo
ba00 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 62 65 t(xt[:,.0],.xt[:,.1],.'xr',.labe
ba20 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 28 6c 6f l='Target.samples').pl.legend(lo
ba40 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 53 69 6e 6b 68 6f 72 c=0).pl.title('OT.matrix.Sinkhor
ba60 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 28 29 0a 50 4b 03 04 n.with.samples')..pl.show().PK..
ba80 14 00 00 00 00 00 77 79 50 4c 6f e7 38 bd f1 0f 00 00 f1 0f 00 00 14 00 00 00 70 6c 6f 74 5f 6f ......wyPLo.8.............plot_o
baa0 74 64 61 5f 6d 61 70 70 69 6e 67 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d tda_mapping.py#.-*-.coding:.utf-
bac0 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.-*-.""".======================
bae0 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 6d 61 70 70 69 6e 67 =====================.OT.mapping
bb00 20 65 73 74 69 6d 61 74 69 6f 6e 20 66 6f 72 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f .estimation.for.domain.adaptatio
bb20 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 3d 3d 3d n.==============================
bb40 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 70 72 65 73 =============..This.example.pres
bb60 65 6e 74 73 20 68 6f 77 20 74 6f 20 75 73 65 20 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 ents.how.to.use.MappingTransport
bb80 20 74 6f 20 65 73 74 69 6d 61 74 65 20 61 74 20 74 68 65 20 73 61 6d 65 0a 74 69 6d 65 20 62 6f .to.estimate.at.the.same.time.bo
bba0 74 68 20 74 68 65 20 63 6f 75 70 6c 69 6e 67 20 74 72 61 6e 73 70 6f 72 74 20 61 6e 64 20 61 70 th.the.coupling.transport.and.ap
bbc0 70 72 6f 78 69 6d 61 74 65 20 74 68 65 20 74 72 61 6e 73 70 6f 72 74 20 6d 61 70 20 77 69 74 68 proximate.the.transport.map.with
bbe0 20 65 69 74 68 65 72 0a 61 20 6c 69 6e 65 61 72 20 6f 72 20 61 20 6b 65 72 6e 65 6c 69 7a 65 64 .either.a.linear.or.a.kernelized
bc00 20 6d 61 70 70 69 6e 67 20 61 73 20 69 6e 74 72 6f 64 75 63 65 64 20 69 6e 20 5b 38 5d 2e 0a 0a .mapping.as.introduced.in.[8]...
bc20 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 20 52 2e 20 46 6c 61 [8].M..Perrot,.N..Courty,.R..Fla
bc40 6d 61 72 79 2c 20 41 2e 20 48 61 62 72 61 72 64 2c 0a 20 20 20 20 22 4d 61 70 70 69 6e 67 20 65 mary,.A..Habrard,....."Mapping.e
bc60 73 74 69 6d 61 74 69 6f 6e 20 66 6f 72 20 64 69 73 63 72 65 74 65 20 6f 70 74 69 6d 61 6c 20 74 stimation.for.discrete.optimal.t
bc80 72 61 6e 73 70 6f 72 74 22 2c 0a 20 20 20 20 4e 65 75 72 61 6c 20 49 6e 66 6f 72 6d 61 74 69 6f ransport",.....Neural.Informatio
bca0 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 20 32 30 31 n.Processing.Systems.(NIPS),.201
bcc0 36 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 20 6.."""..#.Authors:.Remi.Flamary.
bce0 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 20 <remi.flamary@unice.fr>.#.......
bd00 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 62 ...Stanislas.Chambon.<stan.chamb
bd20 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 4c on@gmail.com>.#.#.License:.MIT.L
bd40 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 icense..import.numpy.as.np.impor
bd60 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.
bd80 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 23 23 ot...###########################
bda0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
bdc0 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 20 64 ###################.#.Generate.d
bde0 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 6e 5f 73 6f 75 72 63 65 5f 73 61 ata.#.-------------..n_source_sa
be00 6d 70 6c 65 73 20 3d 20 31 30 30 0a 6e 5f 74 61 72 67 65 74 5f 73 61 6d 70 6c 65 73 20 3d 20 31 mples.=.100.n_target_samples.=.1
be20 30 30 0a 74 68 65 74 61 20 3d 20 32 20 2a 20 6e 70 2e 70 69 20 2f 20 32 30 0a 6e 6f 69 73 65 5f 00.theta.=.2.*.np.pi./.20.noise_
be40 6c 65 76 65 6c 20 3d 20 30 2e 31 0a 0a 58 73 2c 20 79 73 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 level.=.0.1..Xs,.ys.=.ot.dataset
be60 73 2e 67 65 74 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 0a 20 20 20 20 27 67 61 75 73 73 72 6f s.get_data_classif(.....'gaussro
be80 74 27 2c 20 6e 5f 73 6f 75 72 63 65 5f 73 61 6d 70 6c 65 73 2c 20 6e 7a 3d 6e 6f 69 73 65 5f 6c t',.n_source_samples,.nz=noise_l
bea0 65 76 65 6c 29 0a 58 73 5f 6e 65 77 2c 20 5f 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 evel).Xs_new,._.=.ot.datasets.ge
bec0 74 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 0a 20 20 20 20 27 67 61 75 73 73 72 6f 74 27 2c 20 t_data_classif(.....'gaussrot',.
bee0 6e 5f 73 6f 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 n_source_samples,.nz=noise_level
bf00 29 0a 58 74 2c 20 79 74 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 64 61 74 61 5f ).Xt,.yt.=.ot.datasets.get_data_
bf20 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 74 61 72 67 65 classif(.....'gaussrot',.n_targe
bf40 74 5f 73 61 6d 70 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 t_samples,.theta=theta,.nz=noise
bf60 5f 6c 65 76 65 6c 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 _level)..#.one.of.the.target.mod
bf80 65 20 63 68 61 6e 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 e.changes.its.variance.(no.linea
bfa0 72 20 6d 61 70 70 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 r.mapping).Xt[yt.==.2].*=.3.Xt.=
bfc0 20 58 74 20 2b 20 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 .Xt.+.4..#######################
bfe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
c000 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 64 #######################.#.Plot.d
c020 61 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 31 ata.#.---------..pl.figure(1,.(1
c040 30 2c 20 35 29 29 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 0,.5)).pl.clf().pl.scatter(Xs[:,
c060 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 65 72 3d 27 2b 27 2c .0],.Xs[:,.1],.c=ys,.marker='+',
c080 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 73 63 61 74 .label='Source.samples').pl.scat
c0a0 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 61 ter(Xt[:,.0],.Xt[:,.1],.c=yt,.ma
c0c0 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 70 6c 65 73 27 rker='o',.label='Target.samples'
c0e0 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 75 ).pl.legend(loc=0).pl.title('Sou
c100 72 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 rce.and.target.distributions')..
c120 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 .###############################
c140 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
c160 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 68 ###############.#.Instantiate.th
c180 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 73 e.different.transport.algorithms
c1a0 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 2d .and.fit.them.#.----------------
c1c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d --------------------------------
c1e0 2d 2d 2d 2d 2d 2d 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 -----------..#.MappingTransport.
c200 77 69 74 68 20 6c 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 with.linear.kernel.ot_mapping_li
c220 6e 65 61 72 20 3d 20 6f 74 2e 64 61 2e 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 28 0a 20 near.=.ot.da.MappingTransport(..
c240 20 20 20 6b 65 72 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 ...kernel="linear",.mu=1e0,.eta=
c260 31 65 2d 38 2c 20 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 1e-8,.bias=True,.....max_iter=20
c280 2c 20 76 65 72 62 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 ,.verbose=True)..ot_mapping_line
c2a0 61 72 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 66 6f 72 20 6f 72 69 67 ar.fit(Xs=Xs,.Xt=Xt)..#.for.orig
c2c0 69 6e 61 6c 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 2c 20 74 72 61 6e 73 66 6f 72 6d 20 61 inal.source.samples,.transform.a
c2e0 70 70 6c 69 65 73 20 62 61 72 79 63 65 6e 74 72 69 63 20 6d 61 70 70 69 6e 67 0a 74 72 61 6e 73 pplies.barycentric.mapping.trans
c300 70 5f 58 73 5f 6c 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 p_Xs_linear.=.ot_mapping_linear.
c320 74 72 61 6e 73 66 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 transform(Xs=Xs)..#.for.out.of.s
c340 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
c360 20 74 68 65 20 6c 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 .the.linear.mapping.transp_Xs_li
c380 6e 65 61 72 5f 6e 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 near_new.=.ot_mapping_linear.tra
c3a0 6e 73 66 6f 72 6d 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 nsform(Xs=Xs_new)...#.MappingTra
c3c0 6e 73 70 6f 72 74 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 nsport.with.gaussian.kernel.ot_m
c3e0 61 70 70 69 6e 67 5f 67 61 75 73 73 69 61 6e 20 3d 20 6f 74 2e 64 61 2e 4d 61 70 70 69 6e 67 54 apping_gaussian.=.ot.da.MappingT
c400 72 61 6e 73 70 6f 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 ransport(.....kernel="gaussian",
c420 20 65 74 61 3d 31 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 .eta=1e-5,.mu=1e-1,.bias=True,.s
c440 69 67 6d 61 3d 31 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 igma=1,.....max_iter=10,.verbose
c460 3d 54 72 75 65 29 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 =True).ot_mapping_gaussian.fit(X
c480 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 6f 75 s=Xs,.Xt=Xt)..#.for.original.sou
c4a0 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 20 62 rce.samples,.transform.applies.b
c4c0 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 67 61 75 arycentric.mapping.transp_Xs_gau
c4e0 73 73 69 61 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 ssian.=.ot_mapping_gaussian.tran
c500 73 66 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 sform(Xs=Xs)..#.for.out.of.sourc
c520 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 20 74 68 65 e.samples,.transform.applies.the
c540 20 67 61 75 73 73 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 .gaussian.mapping.transp_Xs_gaus
c560 73 69 61 6e 5f 6e 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 sian_new.=.ot_mapping_gaussian.t
c580 72 61 6e 73 66 6f 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 ransform(Xs=Xs_new)...##########
c5a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
c5c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
c5e0 23 23 23 23 0a 23 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 ####.#.Plot.transported.samples.
c600 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 0a 0a 70 6c 2e 66 #.------------------------..pl.f
c620 69 67 75 72 65 28 32 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 igure(2).pl.clf().pl.subplot(2,.
c640 32 2c 20 31 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 2,.1).pl.scatter(Xt[:,.0],.Xt[:,
c660 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 .1],.c=yt,.marker='o',..........
c680 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d ..label='Target.samples',.alpha=
c6a0 2e 32 29 0a 70 6c 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 .2).pl.scatter(transp_Xs_linear[
c6c0 3a 2c 20 30 5d 2c 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 :,.0],.transp_Xs_linear[:,.1],.c
c6e0 3d 79 73 2c 20 6d 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 =ys,.marker='+',............labe
c700 6c 3d 27 4d 61 70 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 l='Mapped.source.samples').pl.ti
c720 74 6c 65 28 22 42 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 tle("Bary..mapping.(linear)").pl
c740 2e 6c 65 67 65 6e 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 .legend(loc=0)..pl.subplot(2,.2,
c760 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 31 .2).pl.scatter(Xt[:,.0],.Xt[:,.1
c780 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',............
c7a0 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 2e 32 label='Target.samples',.alpha=.2
c7c0 29 0a 70 6c 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 5f 6e 65 ).pl.scatter(transp_Xs_linear_ne
c7e0 77 5b 3a 2c 20 30 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 w[:,.0],.transp_Xs_linear_new[:,
c800 20 31 5d 2c 0a 20 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 .1],............c=ys,.marker='+'
c820 2c 20 6c 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 ,.label='Learned.mapping').pl.ti
c840 74 6c 65 28 22 45 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 tle("Estim..mapping.(linear)")..
c860 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 33 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 pl.subplot(2,.2,.3).pl.scatter(X
c880 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=
c8a0 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 'o',............label='Target.sa
c8c0 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 2e 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 mples',.alpha=.2).pl.scatter(tra
c8e0 6e 73 70 5f 58 73 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 nsp_Xs_gaussian[:,.0],.transp_Xs
c900 5f 67 61 75 73 73 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 _gaussian[:,.1],.c=ys,..........
c920 20 20 6d 61 72 6b 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 ..marker='+',.label='barycentric
c940 20 6d 61 70 70 69 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 .mapping').pl.title("Bary..mappi
c960 6e 67 20 28 6b 65 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 ng.(kernel)")..pl.subplot(2,.2,.
c980 34 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 5d 4).pl.scatter(Xt[:,.0],.Xt[:,.1]
c9a0 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 6c ,.c=yt,.marker='o',............l
c9c0 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 2e 32 29 abel='Target.samples',.alpha=.2)
c9e0 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 67 61 75 73 73 69 61 6e 5f 6e .pl.scatter(transp_Xs_gaussian_n
ca00 65 77 5b 3a 2c 20 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 ew[:,.0],.transp_Xs_gaussian_new
ca20 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d [:,.1],.c=ys,............marker=
ca40 27 2b 27 2c 20 6c 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 '+',.label='Learned.mapping').pl
ca60 2e 74 69 74 6c 65 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 .title("Estim..mapping.(kernel)"
ca80 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 ).pl.tight_layout()..pl.show().P
caa0 4b 03 04 14 00 00 00 00 00 77 79 50 4c c9 85 61 a8 64 09 00 00 64 09 00 00 13 00 00 00 70 6c 6f K........wyPL..a.d...d.......plo
cac0 74 5f 63 6f 6d 70 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 t_compute_emd.py#.-*-.coding:.ut
cae0 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 0a 50 6c f-8.-*-.""".=================.Pl
cb00 6f 74 20 6d 75 6c 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 ot.multiple.EMD.================
cb20 3d 0a 0a 53 68 6f 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 =..Shows.how.to.compute.multiple
cb40 20 45 4d 44 20 61 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 .EMD.and.Sinkhorn.with.two.diffe
cb60 72 6e 74 0a 67 72 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 rnt.ground.metrics.and.plot.thei
cb80 72 20 76 61 6c 75 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 r.values.for.diffeent.distributi
cba0 6f 6e 73 2e 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 61 ons...."""..#.Author:.Remi.Flama
cbc0 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 4c ry.<remi.flamary@unice.fr>.#.#.L
cbe0 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 70 icense:.MIT.License..import.nump
cc00 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 20 y.as.np.import.matplotlib.pylab.
cc20 61 73 20 70 6c 0a 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 as.pl.import.ot.from.ot.datasets
cc40 20 69 6d 70 6f 72 74 20 67 65 74 5f 31 44 5f 67 61 75 73 73 20 61 73 20 67 61 75 73 73 0a 0a 0a .import.get_1D_gauss.as.gauss...
cc60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
cc80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
cca0 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 23 ##############.#.Generate.data.#
ccc0 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 0a .-------------..#%%.parameters..
cce0 6e 20 3d 20 31 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 n.=.100..#.nb.bins.n_target.=.50
cd00 20 20 23 20 6e 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 ..#.nb.target.distributions...#.
cd20 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 28 6e 2c 20 64 bin.positions.x.=.np.arange(n,.d
cd40 74 79 70 65 3d 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 type=np.float64)..lst_m.=.np.lin
cd60 73 70 61 63 65 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 space(20,.90,.n_target)..#.Gauss
cd80 69 61 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 ian.distributions.a.=.gauss(n,.m
cda0 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 0a 42 20 =20,.s=5)..#.m=.mean,.s=.std..B.
cdc0 3d 20 6e 70 2e 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 =.np.zeros((n,.n_target))..for.i
cde0 2c 20 6d 20 69 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 ,.m.in.enumerate(lst_m):.....B[:
ce00 2c 20 69 5d 20 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 ,.i].=.gauss(n,.m=m,.s=5)..#.los
ce20 73 20 6d 61 74 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 s.matrix.and.normalization.M.=.o
ce40 74 2e 64 69 73 74 28 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 2c 20 78 2e 72 65 73 68 t.dist(x.reshape((n,.1)),.x.resh
ce60 61 70 65 28 28 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 ape((n,.1)),.'euclidean').M./=.M
ce80 2e 6d 61 78 28 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 .max().M2.=.ot.dist(x.reshape((n
cea0 2c 20 31 29 29 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 ,.1)),.x.reshape((n,.1)),.'sqeuc
cec0 6c 69 64 65 61 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 lidean').M2./=.M2.max()..#######
cee0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
cf00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
cf20 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 2d 0a #######.#.Plot.data.#.---------.
cf40 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 6c 2e .#%%.plot.the.distributions..pl.
cf60 66 69 67 75 72 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 figure(1).pl.subplot(2,.1,.1).pl
cf80 2e 70 6c 6f 74 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 .plot(x,.a,.'b',.label='Source.d
cfa0 69 73 74 72 69 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 istribution').pl.title('Source.d
cfc0 69 73 74 72 69 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 istribution').pl.subplot(2,.1,.2
cfe0 29 0a 70 6c 2e 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 ).pl.plot(x,.B,.label='Target.di
d000 73 74 72 69 62 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 stributions').pl.title('Target.d
d020 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 28 29 istributions').pl.tight_layout()
d040 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 ...#############################
d060 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
d080 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 45 4d 44 20 #################.#.Compute.EMD.
d0a0 66 6f 72 20 74 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 for.the.different.losses.#.-----
d0c0 2d 2d 2d 2d 2d 2d 2d 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 -------------------------------.
d0e0 0a 23 25 25 20 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 .#%%.Compute.and.plot.distributi
d100 6f 6e 73 20 61 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 ons.and.loss.matrix..d_emd.=.ot.
d120 65 6d 64 32 28 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 emd2(a,.B,.M)..#.direct.computat
d140 69 6f 6e 20 6f 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 ion.of.EMD.d_emd2.=.ot.emd2(a,.B
d160 2c 20 4d 32 29 20 20 23 20 64 69 72 65 63 74 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66 20 45 ,.M2)..#.direct.computation.of.E
d180 4d 44 20 77 69 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 MD.with.loss.M2...pl.figure(2).p
d1a0 6c 2e 70 6c 6f 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 l.plot(d_emd,.label='Euclidean.E
d1c0 4d 44 27 29 0a 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 MD').pl.plot(d_emd2,.label='Squa
d1e0 72 65 64 20 45 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 red.Euclidean.EMD').pl.title('EM
d200 44 20 64 69 73 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 D.distances').pl.legend()..#####
d220 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
d240 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
d260 23 23 23 23 23 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 #########.#.Compute.Sinkhorn.for
d280 20 74 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 .the.different.losses.#.--------
d2a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d --------------------------------
d2c0 2d 0a 0a 23 25 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 -..#%%.reg.=.1e-2.d_sinkhorn.=.o
d2e0 74 2e 73 69 6e 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 t.sinkhorn2(a,.B,.M,.reg).d_sink
d300 68 6f 72 6e 32 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 horn2.=.ot.sinkhorn2(a,.B,.M2,.r
d320 65 67 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 70 6c eg)..pl.figure(2).pl.clf().pl.pl
d340 6f 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 ot(d_emd,.label='Euclidean.EMD')
d360 0a 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 .pl.plot(d_emd2,.label='Squared.
d380 45 75 63 6c 69 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 Euclidean.EMD').pl.plot(d_sinkho
d3a0 72 6e 2c 20 27 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 rn,.'+',.label='Euclidean.Sinkho
d3c0 72 6e 27 29 0a 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 rn').pl.plot(d_sinkhorn2,.'+',.l
d3e0 61 62 65 6c 3d 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 abel='Squared.Euclidean.Sinkhorn
d400 27 29 0a 70 6c 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 ').pl.title('EMD.distances').pl.
d420 6c 65 67 65 6e 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 77 79 legend()..pl.show().PK........wy
d440 50 4c 99 da 74 4f 0d 0e 00 00 0d 0e 00 00 19 00 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 63 6f 6c 6f PL..tO............plot_otda_colo
d460 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 20 2d r_images.py#.-*-.coding:.utf-8.-
d480 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d *-.""".=========================
d4a0 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 74 69 ====.OT.for.image.color.adaptati
d4c0 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 3d 3d on.=============================
d4e0 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 6f 66 ..This.example.presents.a.way.of
d500 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 77 6f .transferring.colors.between.two
d520 20 69 6d 61 67 65 0a 77 69 74 68 20 4f 70 74 69 6d 61 6c 20 54 72 61 6e 73 70 6f 72 74 20 61 73 .image.with.Optimal.Transport.as
d540 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 64 61 6e .introduced.in.[6]..[6].Ferradan
d560 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 47 2e 2c s,.S.,.Papadakis,.N.,.Peyre,.G.,
d580 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 61 72 69 .&.Aujol,.J..F..(2014)..Regulari
d5a0 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 74 2e 0a zed.discrete.optimal.transport..
d5c0 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 63 65 73 SIAM.Journal.on.Imaging.Sciences
d5e0 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 68 6f 72 ,.7(3),.1853-1882.."""..#.Author
d600 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 75 6e s:.Remi.Flamary.<remi.flamary@un
d620 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 68 61 ice.fr>.#..........Stanislas.Cha
d640 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 23 0a mbon.<stan.chambon@gmail.com>.#.
d660 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e #.License:.MIT.License..import.n
d680 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 6e 64 69 umpy.as.np.from.scipy.import.ndi
d6a0 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 61 73 20 mage.import.matplotlib.pylab.as.
d6c0 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 52 61 6e pl.import.ot...r.=.np.random.Ran
d6e0 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 0a 20 20 domState(42)...def.im2mat(I):...
d700 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 20 6d 61 74 72 69 .."""Converts.and.image.to.matri
d720 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 72 65 x.(one.pixel.per.line)""".....re
d740 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 2e 73 turn.I.reshape((I.shape[0].*.I.s
d760 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 74 32 hape[1],.I.shape[2]))...def.mat2
d780 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 62 61 im(X,.shape):....."""Converts.ba
d7a0 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 20 72 ck.a.matrix.to.an.image""".....r
d7c0 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 69 6e eturn.X.reshape(shape)...def.min
d7e0 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 30 2c max(I):.....return.np.clip(I,.0,
d800 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 23 23 .1)...##########################
d820 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
d840 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 20 ####################.#.Generate.
d860 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 67 20 data.#.-------------..#.Loading.
d880 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 2f 64 images.I1.=.ndimage.imread('../d
d8a0 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 66 6c ata/ocean_day.jpg').astype(np.fl
d8c0 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 61 64 oat64)./.256.I2.=.ndimage.imread
d8e0 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 73 74 ('../data/ocean_sunset.jpg').ast
d900 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 32 6d ype(np.float64)./.256..X1.=.im2m
d920 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 6e 69 at(I1).X2.=.im2mat(I2)..#.traini
d940 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 72 61 ng.samples.nb.=.1000.idx1.=.r.ra
d960 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 0a 69 ndint(X1.shape[0],.size=(nb,)).i
d980 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 69 7a dx2.=.r.randint(X2.shape[0],.siz
d9a0 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 3d 20 e=(nb,))..Xs.=.X1[idx1,.:].Xt.=.
d9c0 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 23 23 X2[idx2,.:]...##################
d9e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
da00 23 23 23 23 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 ############################.#.P
da20 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 2d 2d lot.original.image.#.-----------
da40 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 3d 28 --------..pl.figure(1,.figsize=(
da60 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 70 6c 6.4,.3))..pl.subplot(1,.2,.1).pl
da80 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
daa0 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 32 2c tle('Image.1')..pl.subplot(1,.2,
dac0 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 27 29 .2).pl.imshow(I2).pl.axis('off')
dae0 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 23 23 .pl.title('Image.2')...#########
db00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
db20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
db40 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 0a 23 #####.#.Scatter.plot.of.colors.#
db60 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 67 75 .----------------------..pl.figu
db80 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 62 70 re(2,.figsize=(6.4,.3))..pl.subp
dba0 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 30 5d lot(1,.2,.1).pl.scatter(Xs[:,.0]
dbc0 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 31 2c ,.Xs[:,.2],.c=Xs).pl.axis([0,.1,
dbe0 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 61 62 .0,.1]).pl.xlabel('Red').pl.ylab
dc00 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 0a 0a el('Blue').pl.title('Image.1')..
dc20 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 28 58 pl.subplot(1,.2,.2).pl.scatter(X
dc40 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 69 73 t[:,.0],.Xt[:,.2],.c=Xt).pl.axis
dc60 28 5b 30 2c 20 31 2c 20 30 2c 20 31 5d 29 0a 70 6c 2e 78 6c 61 62 65 6c 28 27 52 65 64 27 29 0a ([0,.1,.0,.1]).pl.xlabel('Red').
dc80 70 6c 2e 79 6c 61 62 65 6c 28 27 42 6c 75 65 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 pl.ylabel('Blue').pl.title('Imag
dca0 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 23 23 e.2').pl.tight_layout()...######
dcc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
dce0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
dd00 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 65 ########.#.Instantiate.the.diffe
dd20 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 69 rent.transport.algorithms.and.fi
dd40 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 2d t.them.#.-----------------------
dd60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d --------------------------------
dd80 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 6f 74 ----..#.EMDTransport.ot_emd.=.ot
dda0 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 58 73 .da.EMDTransport().ot_emd.fit(Xs
ddc0 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 72 74 =Xs,.Xt=Xt)..#.SinkhornTransport
dde0 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 72 61 .ot_sinkhorn.=.ot.da.SinkhornTra
de00 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 2e 66 nsport(reg_e=1e-1).ot_sinkhorn.f
de20 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 20 62 it(Xs=Xs,.Xt=Xt)..#.prediction.b
de40 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 6d 70 etween.images.(using.out.of.samp
de60 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 70 5f le.prediction.as.in.[6]).transp_
de80 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 31 29 Xs_emd.=.ot_emd.transform(Xs=X1)
dea0 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 65 5f .transp_Xt_emd.=.ot_emd.inverse_
dec0 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 6e 6b transform(Xt=X2)..transp_Xs_sink
dee0 68 6f 72 6e 20 3d 20 6f 74 5f 65 6d 64 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 31 29 0a 74 horn.=.ot_emd.transform(Xs=X1).t
df00 72 61 6e 73 70 5f 58 74 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 5f 65 6d 64 2e 69 6e 76 65 72 ransp_Xt_sinkhorn.=.ot_emd.inver
df20 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 6d 61 se_transform(Xt=X2)..I1t.=.minma
df40 78 28 6d 61 74 32 69 6d 28 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 2c 20 49 31 2e 73 68 61 70 65 x(mat2im(transp_Xs_emd,.I1.shape
df60 29 29 0a 49 32 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 74 )).I2t.=.minmax(mat2im(transp_Xt
df80 5f 65 6d 64 2c 20 49 32 2e 73 68 61 70 65 29 29 0a 0a 49 31 74 65 20 3d 20 6d 69 6e 6d 61 78 28 _emd,.I2.shape))..I1te.=.minmax(
dfa0 6d 61 74 32 69 6d 28 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 2c 20 49 31 2e 73 68 mat2im(transp_Xs_sinkhorn,.I1.sh
dfc0 61 70 65 29 29 0a 49 32 74 65 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 74 72 61 6e 73 ape)).I2te.=.minmax(mat2im(trans
dfe0 70 5f 58 74 5f 73 69 6e 6b 68 6f 72 6e 2c 20 49 32 2e 73 68 61 70 65 29 29 0a 0a 0a 23 23 23 23 p_Xt_sinkhorn,.I2.shape))...####
e000 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
e020 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
e040 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 6e 65 77 20 69 6d 61 67 65 73 0a 23 20 2d ##########.#.Plot.new.images.#.-
e060 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 33 2c 20 66 69 67 --------------..pl.figure(3,.fig
e080 73 69 7a 65 3d 28 38 2c 20 34 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 31 size=(8,.4))..pl.subplot(2,.3,.1
e0a0 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 ).pl.imshow(I1).pl.axis('off').p
e0c0 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 31 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 l.title('Image.1')..pl.subplot(2
e0e0 2c 20 33 2c 20 32 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 ,.3,.2).pl.imshow(I1t).pl.axis('
e100 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 31 20 41 64 61 70 74 27 29 0a off').pl.title('Image.1.Adapt').
e120 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 .pl.subplot(2,.3,.3).pl.imshow(I
e140 31 74 65 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 1te).pl.axis('off').pl.title('Im
e160 61 67 65 20 31 20 41 64 61 70 74 20 28 72 65 67 29 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 age.1.Adapt.(reg)')..pl.subplot(
e180 32 2c 20 33 2c 20 34 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 29 0a 70 6c 2e 61 78 69 73 28 27 2,.3,.4).pl.imshow(I2).pl.axis('
e1a0 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 32 27 29 0a 0a 70 6c 2e 73 75 off').pl.title('Image.2')..pl.su
e1c0 62 70 6c 6f 74 28 32 2c 20 33 2c 20 35 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 74 29 0a 70 6c bplot(2,.3,.5).pl.imshow(I2t).pl
e1e0 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 32 20 41 .axis('off').pl.title('Image.2.A
e200 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 36 29 0a 70 6c 2e 69 dapt')..pl.subplot(2,.3,.6).pl.i
e220 6d 73 68 6f 77 28 49 32 74 65 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 mshow(I2te).pl.axis('off').pl.ti
e240 74 6c 65 28 27 49 6d 61 67 65 20 32 20 41 64 61 70 74 20 28 72 65 67 29 27 29 0a 70 6c 2e 74 69 tle('Image.2.Adapt.(reg)').pl.ti
e260 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 01 02 14 03 14 00 ght_layout()..pl.show().PK......
e280 00 00 00 00 76 79 50 4c d7 f6 2e c0 f2 0a 00 00 f2 0a 00 00 0e 00 00 00 00 00 00 00 00 00 00 00 ....vyPL........................
e2a0 b4 81 00 00 00 00 70 6c 6f 74 5f 67 72 6f 6d 6f 76 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 ......plot_gromov.pyPK..........
e2c0 77 79 50 4c a4 4f 47 3f 0c 0c 00 00 0c 0c 00 00 0b 00 00 00 00 00 00 00 00 00 00 00 b4 81 1e 0b wyPL.OG?........................
e2e0 00 00 70 6c 6f 74 5f 57 44 41 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 77 79 50 4c e5 d4 47 ..plot_WDA.pyPK..........wyPL..G
e300 7d 9d 1c 00 00 9d 1c 00 00 19 00 00 00 00 00 00 00 00 00 00 00 b4 81 53 17 00 00 70 6c 6f 74 5f }......................S...plot_
e320 67 72 6f 6d 6f 76 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 gromov_barycenter.pyPK..........
e340 76 79 50 4c be a0 06 25 7c 0b 00 00 7c 0b 00 00 13 00 00 00 00 00 00 00 00 00 00 00 b4 81 27 34 vyPL...%|...|.................'4
e360 00 00 70 6c 6f 74 5f 6f 70 74 69 6d 5f 4f 54 72 65 67 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 ..plot_optim_OTreg.pyPK.........
e380 00 77 79 50 4c 66 5a 12 7c 0a 15 00 00 0a 15 00 00 0f 00 00 00 00 00 00 00 00 00 00 00 b4 81 d4 .wyPLfZ.|.......................
e3a0 3f 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 64 32 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 77 79 ?..plot_otda_d2.pyPK..........wy
e3c0 50 4c 0a ea dc a4 21 12 00 00 21 12 00 00 1c 00 00 00 00 00 00 00 00 00 00 00 b4 81 0b 55 00 00 PL....!...!..................U..
e3e0 70 6c 6f 74 5f 6f 74 64 61 5f 73 65 6d 69 5f 73 75 70 65 72 76 69 73 65 64 2e 70 79 50 4b 01 02 plot_otda_semi_supervised.pyPK..
e400 14 03 14 00 00 00 00 00 76 79 50 4c c6 f7 0c 9f a1 06 00 00 a1 06 00 00 0d 00 00 00 00 00 00 00 ........vyPL....................
e420 00 00 00 00 b4 81 66 67 00 00 70 6c 6f 74 5f 4f 54 5f 31 44 2e 70 79 50 4b 01 02 14 03 14 00 00 ......fg..plot_OT_1D.pyPK.......
e440 00 00 00 77 79 50 4c 2b 3f e5 77 26 0d 00 00 26 0d 00 00 15 00 00 00 00 00 00 00 00 00 00 00 b4 ...wyPL+?.w&...&................
e460 81 32 6e 00 00 70 6c 6f 74 5f 62 61 72 79 63 65 6e 74 65 72 5f 31 44 2e 70 79 50 4b 01 02 14 03 .2n..plot_barycenter_1D.pyPK....
e480 14 00 00 00 00 00 77 79 50 4c 60 f3 2a fb 00 11 00 00 00 11 00 00 14 00 00 00 00 00 00 00 00 00 ......wyPL`.*...................
e4a0 00 00 b4 81 8b 7b 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 63 6c 61 73 73 65 73 2e 70 79 50 4b 01 02 .....{..plot_otda_classes.pyPK..
e4c0 14 03 14 00 00 00 00 00 77 79 50 4c 1a d1 23 82 4f 10 00 00 4f 10 00 00 22 00 00 00 00 00 00 00 ........wyPL..#.O...O...".......
e4e0 00 00 00 00 b4 81 bd 8c 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 6d 61 70 70 69 6e 67 5f 63 6f 6c 6f ..........plot_otda_mapping_colo
e500 72 73 5f 69 6d 61 67 65 73 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 77 79 50 4c 10 25 96 fd rs_images.pyPK..........wyPL.%..
e520 88 13 00 00 88 13 00 00 13 00 00 00 00 00 00 00 00 00 00 00 b4 81 4c 9d 00 00 70 6c 6f 74 5f 4f ......................L...plot_O
e540 54 5f 4c 31 5f 76 73 5f 4c 32 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 77 79 50 4c 8c 4d bd T_L1_vs_L2.pyPK..........wyPL.M.
e560 60 44 09 00 00 44 09 00 00 15 00 00 00 00 00 00 00 00 00 00 00 b4 81 05 b1 00 00 70 6c 6f 74 5f `D...D.....................plot_
e580 4f 54 5f 32 44 5f 73 61 6d 70 6c 65 73 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 77 79 50 4c OT_2D_samples.pyPK..........wyPL
e5a0 6f e7 38 bd f1 0f 00 00 f1 0f 00 00 14 00 00 00 00 00 00 00 00 00 00 00 b4 81 7c ba 00 00 70 6c o.8.......................|...pl
e5c0 6f 74 5f 6f 74 64 61 5f 6d 61 70 70 69 6e 67 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 77 79 ot_otda_mapping.pyPK..........wy
e5e0 50 4c c9 85 61 a8 64 09 00 00 64 09 00 00 13 00 00 00 00 00 00 00 00 00 00 00 b4 81 9f ca 00 00 PL..a.d...d.....................
e600 70 6c 6f 74 5f 63 6f 6d 70 75 74 65 5f 65 6d 64 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 77 plot_compute_emd.pyPK..........w
e620 79 50 4c 99 da 74 4f 0d 0e 00 00 0d 0e 00 00 19 00 00 00 00 00 00 00 00 00 00 00 b4 81 34 d4 00 yPL..tO......................4..
e640 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 00 .plot_otda_color_images.pyPK....
e660 00 00 0f 00 0f 00 e2 03 00 00 78 e2 00 00 00 00 ..........x.....