summaryrefslogtreecommitdiff
path: root/docs/source/auto_examples/auto_examples_python.zip
blob: 273c751baf41de7395b0253de52d338370431f02 (plain)
ofshex dumpascii
0000 50 4b 03 04 14 00 00 00 00 00 cb 86 1e 4b ba bc 41 39 c9 08 00 00 c9 08 00 00 19 00 00 00 61 75 PK...........K..A9............au
0020 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 57 44 41 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 to_examples/plot_WDA.py#.-*-.cod
0040 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 3d ing:.utf-8.-*-.""".=============
0060 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 57 61 73 73 65 72 73 74 65 69 6e ====================.Wasserstein
0080 20 44 69 73 63 72 69 6d 69 6e 61 6e 74 20 41 6e 61 6c 79 73 69 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d .Discriminant.Analysis.=========
00a0 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 22 22 22 0a 0a 23 ========================.."""..#
00c0 20 41 75 74 68 6f 72 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d .Author:.Remi.Flamary.<remi.flam
00e0 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c ary@unice.fr>.#.#.License:.MIT.L
0100 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
0120 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 0a 66 72 6f 6d 20 6f t.matplotlib.pylab.as.pl..from.o
0140 74 2e 64 72 20 69 6d 70 6f 72 74 20 77 64 61 2c 20 66 64 61 0a 0a 0a 23 25 25 20 70 61 72 61 6d t.dr.import.wda,.fda...#%%.param
0160 65 74 65 72 73 0a 0a 6e 20 3d 20 31 30 30 30 20 20 23 20 6e 62 20 73 61 6d 70 6c 65 73 20 69 6e eters..n.=.1000..#.nb.samples.in
0180 20 73 6f 75 72 63 65 20 61 6e 64 20 74 61 72 67 65 74 20 64 61 74 61 73 65 74 73 0a 6e 7a 20 3d .source.and.target.datasets.nz.=
01a0 20 30 2e 32 0a 0a 23 20 67 65 6e 65 72 61 74 65 20 63 69 72 63 6c 65 20 64 61 74 61 73 65 74 0a .0.2..#.generate.circle.dataset.
01c0 74 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 28 6e 29 20 2a 20 32 20 2a 20 6e 70 2e 70 t.=.np.random.rand(n).*.2.*.np.p
01e0 69 0a 79 73 20 3d 20 6e 70 2e 66 6c 6f 6f 72 28 28 6e 70 2e 61 72 61 6e 67 65 28 6e 29 20 2a 20 i.ys.=.np.floor((np.arange(n).*.
0200 31 2e 30 20 2f 20 6e 20 2a 20 33 29 29 20 2b 20 31 0a 78 73 20 3d 20 6e 70 2e 63 6f 6e 63 61 74 1.0./.n.*.3)).+.1.xs.=.np.concat
0220 65 6e 61 74 65 28 0a 20 20 20 20 28 6e 70 2e 63 6f 73 28 74 29 2e 72 65 73 68 61 70 65 28 28 2d enate(.....(np.cos(t).reshape((-
0240 31 2c 20 31 29 29 2c 20 6e 70 2e 73 69 6e 28 74 29 2e 72 65 73 68 61 70 65 28 28 2d 31 2c 20 31 1,.1)),.np.sin(t).reshape((-1,.1
0260 29 29 29 2c 20 31 29 0a 78 73 20 3d 20 78 73 20 2a 20 79 73 2e 72 65 73 68 61 70 65 28 2d 31 2c ))),.1).xs.=.xs.*.ys.reshape(-1,
0280 20 31 29 20 2b 20 6e 7a 20 2a 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 6e 28 6e 2c 20 32 29 .1).+.nz.*.np.random.randn(n,.2)
02a0 0a 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 32 20 2a 20 6e 70 ..t.=.np.random.rand(n).*.2.*.np
02c0 2e 70 69 0a 79 74 20 3d 20 6e 70 2e 66 6c 6f 6f 72 28 28 6e 70 2e 61 72 61 6e 67 65 28 6e 29 20 .pi.yt.=.np.floor((np.arange(n).
02e0 2a 20 31 2e 30 20 2f 20 6e 20 2a 20 33 29 29 20 2b 20 31 0a 78 74 20 3d 20 6e 70 2e 63 6f 6e 63 *.1.0./.n.*.3)).+.1.xt.=.np.conc
0300 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 73 68 61 70 65 28 atenate(.....(np.cos(t).reshape(
0320 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 65 28 28 2d 31 2c (-1,.1)),.np.sin(t).reshape((-1,
0340 20 31 29 29 29 2c 20 31 29 0a 78 74 20 3d 20 78 74 20 2a 20 79 74 2e 72 65 73 68 61 70 65 28 2d .1))),.1).xt.=.xt.*.yt.reshape(-
0360 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 64 6e 28 6e 2c 20 1,.1).+.nz.*.np.random.randn(n,.
0380 32 29 0a 0a 6e 62 6e 6f 69 73 65 20 3d 20 38 0a 0a 78 73 20 3d 20 6e 70 2e 68 73 74 61 63 6b 28 2)..nbnoise.=.8..xs.=.np.hstack(
03a0 28 78 73 2c 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 6e 28 6e 2c 20 6e 62 6e 6f 69 73 65 29 (xs,.np.random.randn(n,.nbnoise)
03c0 29 29 0a 78 74 20 3d 20 6e 70 2e 68 73 74 61 63 6b 28 28 78 74 2c 20 6e 70 2e 72 61 6e 64 6f 6d )).xt.=.np.hstack((xt,.np.random
03e0 2e 72 61 6e 64 6e 28 6e 2c 20 6e 62 6e 6f 69 73 65 29 29 29 0a 0a 23 25 25 20 70 6c 6f 74 20 73 .randn(n,.nbnoise)))..#%%.plot.s
0400 61 6d 70 6c 65 73 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 amples.pl.figure(1,.figsize=(6.4
0420 2c 20 33 2e 35 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0a 70 6c 2e ,.3.5))..pl.subplot(1,.2,.1).pl.
0440 73 63 61 74 74 65 72 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 scatter(xt[:,.0],.xt[:,.1],.c=ys
0460 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 ,.marker='+',.label='Source.samp
0480 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 6c 65 28 les').pl.legend(loc=0).pl.title(
04a0 27 44 69 73 63 72 69 6d 69 6e 61 6e 74 20 64 69 6d 65 6e 73 69 6f 6e 73 27 29 0a 0a 70 6c 2e 73 'Discriminant.dimensions')..pl.s
04c0 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 78 74 5b 3a 2c ubplot(1,.2,.2).pl.scatter(xt[:,
04e0 20 32 5d 2c 20 78 74 5b 3a 2c 20 33 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c .2],.xt[:,.3],.c=ys,.marker='+',
0500 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 65 .label='Source.samples').pl.lege
0520 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 74 68 65 72 20 64 69 6d 65 6e 73 nd(loc=0).pl.title('Other.dimens
0540 69 6f 6e 73 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 23 25 25 20 43 6f ions').pl.tight_layout()..#%%.Co
0560 6d 70 75 74 65 20 46 44 41 0a 70 20 3d 20 32 0a 0a 50 66 64 61 2c 20 70 72 6f 6a 66 64 61 20 3d mpute.FDA.p.=.2..Pfda,.projfda.=
0580 20 66 64 61 28 78 73 2c 20 79 73 2c 20 70 29 0a 0a 23 25 25 20 43 6f 6d 70 75 74 65 20 57 44 41 .fda(xs,.ys,.p)..#%%.Compute.WDA
05a0 0a 70 20 3d 20 32 0a 72 65 67 20 3d 20 31 65 30 0a 6b 20 3d 20 31 30 0a 6d 61 78 69 74 65 72 20 .p.=.2.reg.=.1e0.k.=.10.maxiter.
05c0 3d 20 31 30 30 0a 0a 50 77 64 61 2c 20 70 72 6f 6a 77 64 61 20 3d 20 77 64 61 28 78 73 2c 20 79 =.100..Pwda,.projwda.=.wda(xs,.y
05e0 73 2c 20 70 2c 20 72 65 67 2c 20 6b 2c 20 6d 61 78 69 74 65 72 3d 6d 61 78 69 74 65 72 29 0a 0a s,.p,.reg,.k,.maxiter=maxiter)..
0600 23 25 25 20 70 6c 6f 74 20 73 61 6d 70 6c 65 73 0a 0a 78 73 70 20 3d 20 70 72 6f 6a 66 64 61 28 #%%.plot.samples..xsp.=.projfda(
0620 78 73 29 0a 78 74 70 20 3d 20 70 72 6f 6a 66 64 61 28 78 74 29 0a 0a 78 73 70 77 20 3d 20 70 72 xs).xtp.=.projfda(xt)..xspw.=.pr
0640 6f 6a 77 64 61 28 78 73 29 0a 78 74 70 77 20 3d 20 70 72 6f 6a 77 64 61 28 78 74 29 0a 0a 70 6c ojwda(xs).xtpw.=.projwda(xt)..pl
0660 2e 66 69 67 75 72 65 28 32 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 31 29 0a .figure(2)..pl.subplot(2,.2,.1).
0680 70 6c 2e 73 63 61 74 74 65 72 28 78 73 70 5b 3a 2c 20 30 5d 2c 20 78 73 70 5b 3a 2c 20 31 5d 2c pl.scatter(xsp[:,.0],.xsp[:,.1],
06a0 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 50 72 6f 6a 65 63 .c=ys,.marker='+',.label='Projec
06c0 74 65 64 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 ted.samples').pl.legend(loc=0).p
06e0 6c 2e 74 69 74 6c 65 28 27 50 72 6f 6a 65 63 74 65 64 20 74 72 61 69 6e 69 6e 67 20 73 61 6d 70 l.title('Projected.training.samp
0700 6c 65 73 20 46 44 41 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 les.FDA')..pl.subplot(2,.2,.2).p
0720 6c 2e 73 63 61 74 74 65 72 28 78 74 70 5b 3a 2c 20 30 5d 2c 20 78 74 70 5b 3a 2c 20 31 5d 2c 20 l.scatter(xtp[:,.0],.xtp[:,.1],.
0740 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 50 72 6f 6a 65 63 74 c=ys,.marker='+',.label='Project
0760 65 64 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c ed.samples').pl.legend(loc=0).pl
0780 2e 74 69 74 6c 65 28 27 50 72 6f 6a 65 63 74 65 64 20 74 65 73 74 20 73 61 6d 70 6c 65 73 20 46 .title('Projected.test.samples.F
07a0 44 41 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 73 63 61 DA')..pl.subplot(2,.2,.3).pl.sca
07c0 74 74 65 72 28 78 73 70 77 5b 3a 2c 20 30 5d 2c 20 78 73 70 77 5b 3a 2c 20 31 5d 2c 20 63 3d 79 tter(xspw[:,.0],.xspw[:,.1],.c=y
07e0 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 50 72 6f 6a 65 63 74 65 64 20 s,.marker='+',.label='Projected.
0800 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 samples').pl.legend(loc=0).pl.ti
0820 74 6c 65 28 27 50 72 6f 6a 65 63 74 65 64 20 74 72 61 69 6e 69 6e 67 20 73 61 6d 70 6c 65 73 20 tle('Projected.training.samples.
0840 57 44 41 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 34 29 0a 70 6c 2e 73 63 WDA')..pl.subplot(2,.2,.4).pl.sc
0860 61 74 74 65 72 28 78 74 70 77 5b 3a 2c 20 30 5d 2c 20 78 74 70 77 5b 3a 2c 20 31 5d 2c 20 63 3d atter(xtpw[:,.0],.xtpw[:,.1],.c=
0880 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 50 72 6f 6a 65 63 74 65 64 ys,.marker='+',.label='Projected
08a0 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 .samples').pl.legend(loc=0).pl.t
08c0 69 74 6c 65 28 27 50 72 6f 6a 65 63 74 65 64 20 74 65 73 74 20 73 61 6d 70 6c 65 73 20 57 44 41 itle('Projected.test.samples.WDA
08e0 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a ').pl.tight_layout()..pl.show().
0900 50 4b 03 04 14 00 00 00 00 00 a9 83 e3 4a e7 a1 46 a7 95 0c 00 00 95 0c 00 00 22 00 00 00 61 75 PK...........J..F........."...au
0920 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 4f 54 44 41 5f 6d 61 70 70 69 6e 67 2e 70 79 to_examples/plot_OTDA_mapping.py
0940 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d #.-*-.coding:.utf-8.-*-.""".====
0960 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================================
0980 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4f 54 20 6d 61 70 70 69 6e 67 20 65 73 74 69 6d 61 74 69 6f ===========.OT.mapping.estimatio
09a0 6e 20 66 6f 72 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 20 5b 38 5d 0a 3d 3d 3d 3d n.for.domain.adaptation.[8].====
09c0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================================
09e0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 5b 38 5d 20 4d 2e 20 50 65 72 72 6f 74 2c 20 4e 2e 20 43 ===========..[8].M..Perrot,.N..C
0a00 6f 75 72 74 79 2c 20 52 2e 20 46 6c 61 6d 61 72 79 2c 20 41 2e 20 48 61 62 72 61 72 64 2c 20 22 ourty,.R..Flamary,.A..Habrard,."
0a20 4d 61 70 70 69 6e 67 20 65 73 74 69 6d 61 74 69 6f 6e 20 66 6f 72 0a 20 20 20 20 64 69 73 63 72 Mapping.estimation.for.....discr
0a40 65 74 65 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 22 2c 20 4e 65 75 72 61 6c 20 49 ete.optimal.transport",.Neural.I
0a60 6e 66 6f 72 6d 61 74 69 6f 6e 20 50 72 6f 63 65 73 73 69 6e 67 20 53 79 73 74 65 6d 73 20 28 4e nformation.Processing.Systems.(N
0a80 49 50 53 29 2c 20 32 30 31 36 2e 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 IPS),.2016.."""..import.numpy.as
0aa0 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 70 .np.import.matplotlib.pylab.as.p
0ac0 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 0a 0a 0a 23 25 25 20 64 61 74 61 73 65 74 20 67 65 6e 65 72 l.import.ot....#%%.dataset.gener
0ae0 61 74 69 6f 6e 0a 0a 6e 70 2e 72 61 6e 64 6f 6d 2e 73 65 65 64 28 30 29 20 23 20 6d 61 6b 65 73 ation..np.random.seed(0).#.makes
0b00 20 65 78 61 6d 70 6c 65 20 72 65 70 72 6f 64 75 63 69 62 6c 65 0a 0a 6e 3d 31 30 30 20 23 20 6e .example.reproducible..n=100.#.n
0b20 62 20 73 61 6d 70 6c 65 73 20 69 6e 20 73 6f 75 72 63 65 20 61 6e 64 20 74 61 72 67 65 74 20 64 b.samples.in.source.and.target.d
0b40 61 74 61 73 65 74 73 0a 74 68 65 74 61 3d 32 2a 6e 70 2e 70 69 2f 32 30 0a 6e 7a 3d 30 2e 31 0a atasets.theta=2*np.pi/20.nz=0.1.
0b60 78 73 2c 79 73 3d 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 xs,ys=ot.datasets.get_data_class
0b80 69 66 28 27 67 61 75 73 73 72 6f 74 27 2c 6e 2c 6e 7a 3d 6e 7a 29 0a 78 74 2c 79 74 3d 6f 74 2e if('gaussrot',n,nz=nz).xt,yt=ot.
0ba0 64 61 74 61 73 65 74 73 2e 67 65 74 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 27 67 61 75 73 73 datasets.get_data_classif('gauss
0bc0 72 6f 74 27 2c 6e 2c 74 68 65 74 61 3d 74 68 65 74 61 2c 6e 7a 3d 6e 7a 29 0a 0a 23 20 6f 6e 65 rot',n,theta=theta,nz=nz)..#.one
0be0 20 6f 66 20 74 68 65 20 74 61 72 67 65 74 20 6d 6f 64 65 20 63 68 61 6e 67 65 73 20 69 74 73 20 .of.the.target.mode.changes.its.
0c00 76 61 72 69 61 6e 63 65 20 28 6e 6f 20 6c 69 6e 65 61 72 20 6d 61 70 70 69 6e 67 29 0a 78 74 5b variance.(no.linear.mapping).xt[
0c20 79 74 3d 3d 32 5d 2a 3d 33 0a 78 74 3d 78 74 2b 34 0a 0a 0a 23 25 25 20 70 6c 6f 74 20 73 61 6d yt==2]*=3.xt=xt+4...#%%.plot.sam
0c40 70 6c 65 73 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 28 38 2c 35 29 29 0a 70 6c 2e 63 6c 66 28 ples..pl.figure(1,(8,5)).pl.clf(
0c60 29 0a 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 73 5b 3a 2c 30 5d 2c 78 73 5b 3a 2c 31 5d 2c 63 3d )..pl.scatter(xs[:,0],xs[:,1],c=
0c80 79 73 2c 6d 61 72 6b 65 72 3d 27 2b 27 2c 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 ys,marker='+',label='Source.samp
0ca0 6c 65 73 27 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 74 5b 3a 2c 30 5d 2c 78 74 5b 3a 2c 31 5d les').pl.scatter(xt[:,0],xt[:,1]
0cc0 2c 63 3d 79 74 2c 6d 61 72 6b 65 72 3d 27 6f 27 2c 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 ,c=yt,marker='o',label='Target.s
0ce0 61 6d 70 6c 65 73 27 29 0a 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 amples')..pl.legend(loc=0).pl.ti
0d00 74 6c 65 28 27 53 6f 75 72 63 65 20 61 6e 64 20 74 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 tle('Source.and.target.distribut
0d20 69 6f 6e 73 27 29 0a 0a 0a 0a 23 25 25 20 4f 54 20 6c 69 6e 65 61 72 20 6d 61 70 70 69 6e 67 20 ions')....#%%.OT.linear.mapping.
0d40 65 73 74 69 6d 61 74 69 6f 6e 0a 0a 65 74 61 3d 31 65 2d 38 20 20 20 23 20 71 75 61 64 72 61 74 estimation..eta=1e-8...#.quadrat
0d60 69 63 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 20 66 6f 72 20 72 65 67 72 65 73 73 69 6f 6e ic.regularization.for.regression
0d80 0a 6d 75 3d 31 65 30 20 20 20 20 20 23 20 77 65 69 67 68 74 20 6f 66 20 74 68 65 20 4f 54 20 6c .mu=1e0.....#.weight.of.the.OT.l
0da0 69 6e 65 61 72 20 74 65 72 6d 0a 62 69 61 73 3d 54 72 75 65 20 20 23 20 65 73 74 69 6d 61 74 65 inear.term.bias=True..#.estimate
0dc0 20 61 20 62 69 61 73 0a 0a 6f 74 5f 6d 61 70 70 69 6e 67 3d 6f 74 2e 64 61 2e 4f 54 44 41 5f 6d .a.bias..ot_mapping=ot.da.OTDA_m
0de0 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 28 29 0a 6f 74 5f 6d 61 70 70 69 6e 67 2e 66 69 74 28 78 apping_linear().ot_mapping.fit(x
0e00 73 2c 78 74 2c 6d 75 3d 6d 75 2c 65 74 61 3d 65 74 61 2c 62 69 61 73 3d 62 69 61 73 2c 6e 75 6d s,xt,mu=mu,eta=eta,bias=bias,num
0e20 49 74 65 72 6d 61 78 20 3d 20 32 30 2c 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 0a 78 73 74 3d Itermax.=.20,verbose=True)..xst=
0e40 6f 74 5f 6d 61 70 70 69 6e 67 2e 70 72 65 64 69 63 74 28 78 73 29 20 23 20 75 73 65 20 74 68 65 ot_mapping.predict(xs).#.use.the
0e60 20 65 73 74 69 6d 61 74 65 64 20 6d 61 70 70 69 6e 67 0a 78 73 74 30 3d 6f 74 5f 6d 61 70 70 69 .estimated.mapping.xst0=ot_mappi
0e80 6e 67 2e 69 6e 74 65 72 70 28 29 20 20 20 23 20 75 73 65 20 62 61 72 79 63 65 6e 74 72 69 63 20 ng.interp()...#.use.barycentric.
0ea0 6d 61 70 70 69 6e 67 0a 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 28 31 30 2c 37 29 29 0a 70 6c mapping...pl.figure(2,(10,7)).pl
0ec0 2e 63 6c 66 28 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 32 2c 31 29 0a 70 6c 2e 73 63 61 74 .clf().pl.subplot(2,2,1).pl.scat
0ee0 74 65 72 28 78 74 5b 3a 2c 30 5d 2c 78 74 5b 3a 2c 31 5d 2c 63 3d 79 74 2c 6d 61 72 6b 65 72 3d ter(xt[:,0],xt[:,1],c=yt,marker=
0f00 27 6f 27 2c 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 61 6c 70 68 61 'o',label='Target.samples',alpha
0f20 3d 2e 33 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 73 74 30 5b 3a 2c 30 5d 2c 78 73 74 30 5b 3a =.3).pl.scatter(xst0[:,0],xst0[:
0f40 2c 31 5d 2c 63 3d 79 73 2c 6d 61 72 6b 65 72 3d 27 2b 27 2c 6c 61 62 65 6c 3d 27 62 61 72 79 63 ,1],c=ys,marker='+',label='baryc
0f60 65 6e 74 72 69 63 20 6d 61 70 70 69 6e 67 27 29 0a 70 6c 2e 74 69 74 6c 65 28 22 62 61 72 79 63 entric.mapping').pl.title("baryc
0f80 65 6e 74 72 69 63 20 6d 61 70 70 69 6e 67 22 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 32 entric.mapping")..pl.subplot(2,2
0fa0 2c 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 74 5b 3a 2c 30 5d 2c 78 74 5b 3a 2c 31 5d 2c 63 ,2).pl.scatter(xt[:,0],xt[:,1],c
0fc0 3d 79 74 2c 6d 61 72 6b 65 72 3d 27 6f 27 2c 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d =yt,marker='o',label='Target.sam
0fe0 70 6c 65 73 27 2c 61 6c 70 68 61 3d 2e 33 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 73 74 5b 3a ples',alpha=.3).pl.scatter(xst[:
1000 2c 30 5d 2c 78 73 74 5b 3a 2c 31 5d 2c 63 3d 79 73 2c 6d 61 72 6b 65 72 3d 27 2b 27 2c 6c 61 62 ,0],xst[:,1],c=ys,marker='+',lab
1020 65 6c 3d 27 4c 65 61 72 6e 65 64 20 6d 61 70 70 69 6e 67 27 29 0a 70 6c 2e 74 69 74 6c 65 28 22 el='Learned.mapping').pl.title("
1040 4c 65 61 72 6e 65 64 20 6d 61 70 70 69 6e 67 22 29 0a 0a 0a 0a 23 25 25 20 4b 65 72 6e 65 6c 20 Learned.mapping")....#%%.Kernel.
1060 6d 61 70 70 69 6e 67 20 65 73 74 69 6d 61 74 69 6f 6e 0a 0a 65 74 61 3d 31 65 2d 35 20 20 20 23 mapping.estimation..eta=1e-5...#
1080 20 71 75 61 64 72 61 74 69 63 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 20 66 6f 72 20 72 65 .quadratic.regularization.for.re
10a0 67 72 65 73 73 69 6f 6e 0a 6d 75 3d 31 65 2d 31 20 20 20 20 20 23 20 77 65 69 67 68 74 20 6f 66 gression.mu=1e-1.....#.weight.of
10c0 20 74 68 65 20 4f 54 20 6c 69 6e 65 61 72 20 74 65 72 6d 0a 62 69 61 73 3d 54 72 75 65 20 20 23 .the.OT.linear.term.bias=True..#
10e0 20 65 73 74 69 6d 61 74 65 20 61 20 62 69 61 73 0a 73 69 67 6d 61 3d 31 20 20 20 20 23 20 73 69 .estimate.a.bias.sigma=1....#.si
1100 67 6d 61 20 62 61 6e 64 77 69 64 74 68 20 66 6f 74 20 67 61 75 73 73 69 61 6e 20 6b 65 72 6e 65 gma.bandwidth.fot.gaussian.kerne
1120 6c 0a 0a 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 6b 65 72 6e 65 6c 3d 6f 74 2e 64 61 2e 4f 54 44 41 l...ot_mapping_kernel=ot.da.OTDA
1140 5f 6d 61 70 70 69 6e 67 5f 6b 65 72 6e 65 6c 28 29 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 6b 65 72 _mapping_kernel().ot_mapping_ker
1160 6e 65 6c 2e 66 69 74 28 78 73 2c 78 74 2c 6d 75 3d 6d 75 2c 65 74 61 3d 65 74 61 2c 73 69 67 6d nel.fit(xs,xt,mu=mu,eta=eta,sigm
1180 61 3d 73 69 67 6d 61 2c 62 69 61 73 3d 62 69 61 73 2c 6e 75 6d 49 74 65 72 6d 61 78 20 3d 20 31 a=sigma,bias=bias,numItermax.=.1
11a0 30 2c 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 0a 78 73 74 5f 6b 65 72 6e 65 6c 3d 6f 74 5f 6d 0,verbose=True)..xst_kernel=ot_m
11c0 61 70 70 69 6e 67 5f 6b 65 72 6e 65 6c 2e 70 72 65 64 69 63 74 28 78 73 29 20 23 20 75 73 65 20 apping_kernel.predict(xs).#.use.
11e0 74 68 65 20 65 73 74 69 6d 61 74 65 64 20 6d 61 70 70 69 6e 67 0a 78 73 74 30 5f 6b 65 72 6e 65 the.estimated.mapping.xst0_kerne
1200 6c 3d 6f 74 5f 6d 61 70 70 69 6e 67 5f 6b 65 72 6e 65 6c 2e 69 6e 74 65 72 70 28 29 20 20 20 23 l=ot_mapping_kernel.interp()...#
1220 20 75 73 65 20 62 61 72 79 63 65 6e 74 72 69 63 20 6d 61 70 70 69 6e 67 0a 0a 0a 23 25 25 20 50 .use.barycentric.mapping...#%%.P
1240 6c 6f 74 74 69 6e 67 20 74 68 65 20 6d 61 70 70 65 64 20 73 61 6d 70 6c 65 73 0a 0a 70 6c 2e 66 lotting.the.mapped.samples..pl.f
1260 69 67 75 72 65 28 32 2c 28 31 30 2c 37 29 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 2e 73 75 62 70 igure(2,(10,7)).pl.clf().pl.subp
1280 6c 6f 74 28 32 2c 32 2c 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 74 5b 3a 2c 30 5d 2c 78 74 lot(2,2,1).pl.scatter(xt[:,0],xt
12a0 5b 3a 2c 31 5d 2c 63 3d 79 74 2c 6d 61 72 6b 65 72 3d 27 6f 27 2c 6c 61 62 65 6c 3d 27 54 61 72 [:,1],c=yt,marker='o',label='Tar
12c0 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 61 6c 70 68 61 3d 2e 32 29 0a 70 6c 2e 73 63 61 74 74 65 get.samples',alpha=.2).pl.scatte
12e0 72 28 78 73 74 30 5b 3a 2c 30 5d 2c 78 73 74 30 5b 3a 2c 31 5d 2c 63 3d 79 73 2c 6d 61 72 6b 65 r(xst0[:,0],xst0[:,1],c=ys,marke
1300 72 3d 27 2b 27 2c 6c 61 62 65 6c 3d 27 4d 61 70 70 65 64 20 73 6f 75 72 63 65 20 73 61 6d 70 6c r='+',label='Mapped.source.sampl
1320 65 73 27 29 0a 70 6c 2e 74 69 74 6c 65 28 22 42 61 72 79 2e 20 6d 61 70 70 69 6e 67 20 28 6c 69 es').pl.title("Bary..mapping.(li
1340 6e 65 61 72 29 22 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 0a 70 6c 2e 73 75 62 near)").pl.legend(loc=0)..pl.sub
1360 70 6c 6f 74 28 32 2c 32 2c 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 74 5b 3a 2c 30 5d 2c 78 plot(2,2,2).pl.scatter(xt[:,0],x
1380 74 5b 3a 2c 31 5d 2c 63 3d 79 74 2c 6d 61 72 6b 65 72 3d 27 6f 27 2c 6c 61 62 65 6c 3d 27 54 61 t[:,1],c=yt,marker='o',label='Ta
13a0 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 61 6c 70 68 61 3d 2e 32 29 0a 70 6c 2e 73 63 61 74 74 rget.samples',alpha=.2).pl.scatt
13c0 65 72 28 78 73 74 5b 3a 2c 30 5d 2c 78 73 74 5b 3a 2c 31 5d 2c 63 3d 79 73 2c 6d 61 72 6b 65 72 er(xst[:,0],xst[:,1],c=ys,marker
13e0 3d 27 2b 27 2c 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
1400 2e 74 69 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 .title("Estim..mapping.(linear)"
1420 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 32 2c 33 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 )..pl.subplot(2,2,3).pl.scatter(
1440 78 74 5b 3a 2c 30 5d 2c 78 74 5b 3a 2c 31 5d 2c 63 3d 79 74 2c 6d 61 72 6b 65 72 3d 27 6f 27 2c xt[:,0],xt[:,1],c=yt,marker='o',
1460 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 61 6c 70 68 61 3d 2e 32 29 label='Target.samples',alpha=.2)
1480 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 73 74 30 5f 6b 65 72 6e 65 6c 5b 3a 2c 30 5d 2c 78 73 74 .pl.scatter(xst0_kernel[:,0],xst
14a0 30 5f 6b 65 72 6e 65 6c 5b 3a 2c 31 5d 2c 63 3d 79 73 2c 6d 61 72 6b 65 72 3d 27 2b 27 2c 6c 61 0_kernel[:,1],c=ys,marker='+',la
14c0 62 65 6c 3d 27 62 61 72 79 63 65 6e 74 72 69 63 20 6d 61 70 70 69 6e 67 27 29 0a 70 6c 2e 74 69 bel='barycentric.mapping').pl.ti
14e0 74 6c 65 28 22 42 61 72 79 2e 20 6d 61 70 70 69 6e 67 20 28 6b 65 72 6e 65 6c 29 22 29 0a 0a 70 tle("Bary..mapping.(kernel)")..p
1500 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 32 2c 34 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 74 5b 3a l.subplot(2,2,4).pl.scatter(xt[:
1520 2c 30 5d 2c 78 74 5b 3a 2c 31 5d 2c 63 3d 79 74 2c 6d 61 72 6b 65 72 3d 27 6f 27 2c 6c 61 62 65 ,0],xt[:,1],c=yt,marker='o',labe
1540 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 61 6c 70 68 61 3d 2e 32 29 0a 70 6c 2e l='Target.samples',alpha=.2).pl.
1560 73 63 61 74 74 65 72 28 78 73 74 5f 6b 65 72 6e 65 6c 5b 3a 2c 30 5d 2c 78 73 74 5f 6b 65 72 6e scatter(xst_kernel[:,0],xst_kern
1580 65 6c 5b 3a 2c 31 5d 2c 63 3d 79 73 2c 6d 61 72 6b 65 72 3d 27 2b 27 2c 6c 61 62 65 6c 3d 27 4c el[:,1],c=ys,marker='+',label='L
15a0 65 61 72 6e 65 64 20 6d 61 70 70 69 6e 67 27 29 0a 70 6c 2e 74 69 74 6c 65 28 22 45 73 74 69 6d earned.mapping').pl.title("Estim
15c0 2e 20 6d 61 70 70 69 6e 67 20 28 6b 65 72 6e 65 6c 29 22 29 0a 50 4b 03 04 14 00 00 00 00 00 cb ..mapping.(kernel)").PK.........
15e0 86 1e 4b ac 48 87 7e b4 05 00 00 b4 05 00 00 21 00 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 ..K.H.~........!...auto_examples
1600 2f 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 64 69 6e 67 /plot_optim_OTreg.py#.-*-.coding
1620 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d :.utf-8.-*-.""".================
1640 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 65 64 20 4f ==================.Regularized.O
1660 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 3d 3d 3d 3d T.with.generic.solver.==========
1680 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 0a 22 22 22 0a 0a ========================..."""..
16a0 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
16c0 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 25 25 tlib.pylab.as.pl.import.ot...#%%
16e0 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 6e 20 3d 20 31 30 30 20 20 23 20 6e 62 20 62 69 6e 73 0a .parameters..n.=.100..#.nb.bins.
1700 0a 23 20 62 69 6e 20 70 6f 73 69 74 69 6f 6e 73 0a 78 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e .#.bin.positions.x.=.np.arange(n
1720 2c 20 64 74 79 70 65 3d 6e 70 2e 66 6c 6f 61 74 36 34 29 0a 0a 23 20 47 61 75 73 73 69 61 6e 20 ,.dtype=np.float64)..#.Gaussian.
1740 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 61 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 distributions.a.=.ot.datasets.ge
1760 74 5f 31 44 5f 67 61 75 73 73 28 6e 2c 20 6d 3d 32 30 2c 20 73 3d 35 29 20 20 23 20 6d 3d 20 6d t_1D_gauss(n,.m=20,.s=5)..#.m=.m
1780 65 61 6e 2c 20 73 3d 20 73 74 64 0a 62 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f ean,.s=.std.b.=.ot.datasets.get_
17a0 31 44 5f 67 61 75 73 73 28 6e 2c 20 6d 3d 36 30 2c 20 73 3d 31 30 29 0a 0a 23 20 6c 6f 73 73 20 1D_gauss(n,.m=60,.s=10)..#.loss.
17c0 6d 61 74 72 69 78 0a 4d 20 3d 20 6f 74 2e 64 69 73 74 28 78 2e 72 65 73 68 61 70 65 28 28 6e 2c matrix.M.=.ot.dist(x.reshape((n,
17e0 20 31 29 29 2c 20 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 29 0a 4d 20 2f 3d 20 4d 2e .1)),.x.reshape((n,.1))).M./=.M.
1800 6d 61 78 28 29 0a 0a 23 25 25 20 45 4d 44 0a 0a 47 30 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 max()..#%%.EMD..G0.=.ot.emd(a,.b
1820 2c 20 4d 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 33 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 ,.M)..pl.figure(3,.figsize=(5,.5
1840 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 47 30 2c 20 )).ot.plot.plot1D_mat(a,.b,.G0,.
1860 27 4f 54 20 6d 61 74 72 69 78 20 47 30 27 29 0a 0a 23 25 25 20 45 78 61 6d 70 6c 65 20 77 69 74 'OT.matrix.G0')..#%%.Example.wit
1880 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 61 74 69 6f 6e 0a h.Frobenius.norm.regularization.
18a0 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 20 2a 20 6e 70 2e ..def.f(G):.....return.0.5.*.np.
18c0 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 20 72 65 74 75 72 sum(G**2)...def.df(G):.....retur
18e0 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 2e 6f 70 74 69 6d n.G...reg.=.1e-1..Gl2.=.ot.optim
1900 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 65 72 62 6f 73 65 .cg(a,.b,.M,.reg,.f,.df,.verbose
1920 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 6f 74 2e 70 6c 6f =True)..pl.figure(3).ot.plot.plo
1940 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 72 69 78 20 46 72 t1D_mat(a,.b,.Gl2,.'OT.matrix.Fr
1960 6f 62 2e 20 72 65 67 27 29 0a 0a 23 25 25 20 45 78 61 6d 70 6c 65 20 77 69 74 68 20 65 6e 74 72 ob..reg')..#%%.Example.with.entr
1980 6f 70 69 63 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 0a 0a 64 65 66 20 66 28 47 29 3a 0a opic.regularization...def.f(G):.
19a0 20 20 20 20 72 65 74 75 72 6e 20 6e 70 2e 73 75 6d 28 47 20 2a 20 6e 70 2e 6c 6f 67 28 47 29 29 ....return.np.sum(G.*.np.log(G))
19c0 0a 0a 0a 64 65 66 20 64 66 28 47 29 3a 0a 20 20 20 20 72 65 74 75 72 6e 20 6e 70 2e 6c 6f 67 28 ...def.df(G):.....return.np.log(
19e0 47 29 20 2b 20 31 2e 0a 0a 0a 72 65 67 20 3d 20 31 65 2d 33 0a 0a 47 65 20 3d 20 6f 74 2e 6f 70 G).+.1....reg.=.1e-3..Ge.=.ot.op
1a00 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 65 72 62 tim.cg(a,.b,.M,.reg,.f,.df,.verb
1a20 6f 73 65 3d 54 72 75 65 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d ose=True)..pl.figure(4,.figsize=
1a40 28 35 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c (5,.5)).ot.plot.plot1D_mat(a,.b,
1a60 20 47 65 2c 20 27 4f 54 20 6d 61 74 72 69 78 20 45 6e 74 72 6f 70 2e 20 72 65 67 27 29 0a 0a 23 .Ge,.'OT.matrix.Entrop..reg')..#
1a80 25 25 20 45 78 61 6d 70 6c 65 20 77 69 74 68 20 46 72 6f 62 65 6e 69 75 73 20 6e 6f 72 6d 20 2b %%.Example.with.Frobenius.norm.+
1aa0 20 65 6e 74 72 6f 70 69 63 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 20 77 69 74 68 20 67 63 .entropic.regularization.with.gc
1ac0 67 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 20 2a 20 6e g...def.f(G):.....return.0.5.*.n
1ae0 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 20 72 65 74 p.sum(G**2)...def.df(G):.....ret
1b00 75 72 6e 20 47 0a 0a 0a 72 65 67 31 20 3d 20 31 65 2d 33 0a 72 65 67 32 20 3d 20 31 65 2d 31 0a urn.G...reg1.=.1e-3.reg2.=.1e-1.
1b20 0a 47 65 6c 32 20 3d 20 6f 74 2e 6f 70 74 69 6d 2e 67 63 67 28 61 2c 20 62 2c 20 4d 2c 20 72 65 .Gel2.=.ot.optim.gcg(a,.b,.M,.re
1b40 67 31 2c 20 72 65 67 32 2c 20 66 2c 20 64 66 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 0a g1,.reg2,.f,.df,.verbose=True)..
1b60 70 6c 2e 66 69 67 75 72 65 28 35 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 29 0a 6f 74 2e pl.figure(5,.figsize=(5,.5)).ot.
1b80 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 47 65 6c 32 2c 20 27 4f 54 20 plot.plot1D_mat(a,.b,.Gel2,.'OT.
1ba0 65 6e 74 72 6f 70 69 63 20 2b 20 6d 61 74 72 69 78 20 46 72 6f 62 2e 20 72 65 67 27 29 0a 70 6c entropic.+.matrix.Frob..reg').pl
1bc0 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 a9 83 e3 4a f2 c1 a7 29 f1 09 00 00 f1 09 .show().PK...........J...)......
1be0 00 00 22 00 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 4f 54 44 41 5f 63 6c .."...auto_examples/plot_OTDA_cl
1c00 61 73 73 65 73 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a asses.py#.-*-.coding:.utf-8.-*-.
1c20 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 0a 4f 54 20 """.========================.OT.
1c40 66 6f 72 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d for.domain.adaptation.==========
1c60 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6d 61 74 70 ==============.."""..import.matp
1c80 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 0a lotlib.pylab.as.pl.import.ot....
1ca0 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 6e 3d 31 35 30 20 23 20 6e 62 20 73 61 6d 70 .#%%.parameters..n=150.#.nb.samp
1cc0 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 65 74 les.in.source.and.target.dataset
1ce0 73 0a 0a 78 73 2c 79 73 3d 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 64 61 74 61 5f 63 6c s..xs,ys=ot.datasets.get_data_cl
1d00 61 73 73 69 66 28 27 33 67 61 75 73 73 27 2c 6e 29 0a 78 74 2c 79 74 3d 6f 74 2e 64 61 74 61 73 assif('3gauss',n).xt,yt=ot.datas
1d20 65 74 73 2e 67 65 74 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 27 33 67 61 75 73 73 32 27 2c 6e ets.get_data_classif('3gauss2',n
1d40 29 0a 0a 0a 0a 0a 23 25 25 20 70 6c 6f 74 20 73 61 6d 70 6c 65 73 0a 0a 70 6c 2e 66 69 67 75 72 ).....#%%.plot.samples..pl.figur
1d60 65 28 31 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 32 2c 31 29 0a 70 6c 2e 73 63 61 74 74 e(1)..pl.subplot(2,2,1).pl.scatt
1d80 65 72 28 78 73 5b 3a 2c 30 5d 2c 78 73 5b 3a 2c 31 5d 2c 63 3d 79 73 2c 6d 61 72 6b 65 72 3d 27 er(xs[:,0],xs[:,1],c=ys,marker='
1da0 2b 27 2c 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 +',label='Source.samples').pl.le
1dc0 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 20 20 64 69 gend(loc=0).pl.title('Source..di
1de0 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 32 2c 32 29 stributions')..pl.subplot(2,2,2)
1e00 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 74 5b 3a 2c 30 5d 2c 78 74 5b 3a 2c 31 5d 2c 63 3d 79 74 .pl.scatter(xt[:,0],xt[:,1],c=yt
1e20 2c 6d 61 72 6b 65 72 3d 27 6f 27 2c 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
1e40 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 74 s').pl.legend(loc=0).pl.title('t
1e60 61 72 67 65 74 20 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 0a 23 25 25 20 4f 54 20 arget..distributions')...#%%.OT.
1e80 65 73 74 69 6d 61 74 69 6f 6e 0a 0a 23 20 4c 50 20 70 72 6f 62 6c 65 6d 0a 64 61 5f 65 6d 64 3d estimation..#.LP.problem.da_emd=
1ea0 6f 74 2e 64 61 2e 4f 54 44 41 28 29 20 20 20 20 20 23 20 69 6e 69 74 20 63 6c 61 73 73 0a 64 61 ot.da.OTDA().....#.init.class.da
1ec0 5f 65 6d 64 2e 66 69 74 28 78 73 2c 78 74 29 20 20 20 20 20 20 20 23 20 66 69 74 20 64 69 73 74 _emd.fit(xs,xt).......#.fit.dist
1ee0 72 69 62 75 74 69 6f 6e 73 0a 78 73 74 30 3d 64 61 5f 65 6d 64 2e 69 6e 74 65 72 70 28 29 20 20 ributions.xst0=da_emd.interp()..
1f00 20 20 23 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 20 6f 66 20 73 6f 75 72 63 65 20 73 61 6d 70 ..#.interpolation.of.source.samp
1f20 6c 65 73 0a 0a 0a 23 20 73 69 6e 6b 68 6f 72 6e 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a les...#.sinkhorn.regularization.
1f40 6c 61 6d 62 64 3d 31 65 2d 31 0a 64 61 5f 65 6e 74 72 6f 70 3d 6f 74 2e 64 61 2e 4f 54 44 41 5f lambd=1e-1.da_entrop=ot.da.OTDA_
1f60 73 69 6e 6b 68 6f 72 6e 28 29 0a 64 61 5f 65 6e 74 72 6f 70 2e 66 69 74 28 78 73 2c 78 74 2c 72 sinkhorn().da_entrop.fit(xs,xt,r
1f80 65 67 3d 6c 61 6d 62 64 29 0a 78 73 74 73 3d 64 61 5f 65 6e 74 72 6f 70 2e 69 6e 74 65 72 70 28 eg=lambd).xsts=da_entrop.interp(
1fa0 29 0a 0a 23 20 6e 6f 6e 2d 63 6f 6e 76 65 78 20 47 72 6f 75 70 20 6c 61 73 73 6f 20 72 65 67 75 )..#.non-convex.Group.lasso.regu
1fc0 6c 61 72 69 7a 61 74 69 6f 6e 0a 72 65 67 3d 31 65 2d 31 0a 65 74 61 3d 31 65 30 0a 64 61 5f 6c larization.reg=1e-1.eta=1e0.da_l
1fe0 70 6c 31 3d 6f 74 2e 64 61 2e 4f 54 44 41 5f 6c 70 6c 31 28 29 0a 64 61 5f 6c 70 6c 31 2e 66 69 pl1=ot.da.OTDA_lpl1().da_lpl1.fi
2000 74 28 78 73 2c 79 73 2c 78 74 2c 72 65 67 3d 72 65 67 2c 65 74 61 3d 65 74 61 29 0a 78 73 74 67 t(xs,ys,xt,reg=reg,eta=eta).xstg
2020 3d 64 61 5f 6c 70 6c 31 2e 69 6e 74 65 72 70 28 29 0a 0a 0a 23 20 54 72 75 65 20 47 72 6f 75 70 =da_lpl1.interp()...#.True.Group
2040 20 6c 61 73 73 6f 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 72 65 67 3d 31 65 2d 31 0a 65 .lasso.regularization.reg=1e-1.e
2060 74 61 3d 32 65 30 0a 64 61 5f 6c 31 6c 32 3d 6f 74 2e 64 61 2e 4f 54 44 41 5f 6c 31 6c 32 28 29 ta=2e0.da_l1l2=ot.da.OTDA_l1l2()
2080 0a 64 61 5f 6c 31 6c 32 2e 66 69 74 28 78 73 2c 79 73 2c 78 74 2c 72 65 67 3d 72 65 67 2c 65 74 .da_l1l2.fit(xs,ys,xt,reg=reg,et
20a0 61 3d 65 74 61 2c 6e 75 6d 49 74 65 72 6d 61 78 3d 32 30 2c 76 65 72 62 6f 73 65 3d 54 72 75 65 a=eta,numItermax=20,verbose=True
20c0 29 0a 78 73 74 67 6c 3d 64 61 5f 6c 31 6c 32 2e 69 6e 74 65 72 70 28 29 0a 0a 0a 23 25 25 20 70 ).xstgl=da_l1l2.interp()...#%%.p
20e0 6c 6f 74 20 69 6e 74 65 72 70 6f 6c 61 74 65 64 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 0a lot.interpolated.source.samples.
2100 70 6c 2e 66 69 67 75 72 65 28 34 2c 28 31 35 2c 38 29 29 0a 0a 70 61 72 61 6d 5f 69 6d 67 3d 7b pl.figure(4,(15,8))..param_img={
2120 27 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 27 3a 27 6e 65 61 72 65 73 74 27 2c 27 63 6d 61 70 27 'interpolation':'nearest','cmap'
2140 3a 27 6a 65 74 27 7d 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 34 2c 31 29 0a 70 6c 2e 69 6d :'jet'}..pl.subplot(2,4,1).pl.im
2160 73 68 6f 77 28 64 61 5f 65 6d 64 2e 47 2c 2a 2a 70 61 72 61 6d 5f 69 6d 67 29 0a 70 6c 2e 74 69 show(da_emd.G,**param_img).pl.ti
2180 74 6c 65 28 27 4f 54 20 6d 61 74 72 69 78 27 29 0a 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c tle('OT.matrix')...pl.subplot(2,
21a0 34 2c 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 64 61 5f 65 6e 74 72 6f 70 2e 47 2c 2a 2a 70 61 72 4,2).pl.imshow(da_entrop.G,**par
21c0 61 6d 5f 69 6d 67 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 6d 61 74 72 69 78 20 73 69 6e 6b am_img).pl.title('OT.matrix.sink
21e0 68 6f 72 6e 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 34 2c 33 29 0a 70 6c 2e 69 6d 73 horn')..pl.subplot(2,4,3).pl.ims
2200 68 6f 77 28 64 61 5f 6c 70 6c 31 2e 47 2c 2a 2a 70 61 72 61 6d 5f 69 6d 67 29 0a 70 6c 2e 74 69 how(da_lpl1.G,**param_img).pl.ti
2220 74 6c 65 28 27 4f 54 20 6d 61 74 72 69 78 20 6e 6f 6e 2d 63 6f 6e 76 65 78 20 47 72 6f 75 70 20 tle('OT.matrix.non-convex.Group.
2240 4c 61 73 73 6f 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 34 2c 34 29 0a 70 6c 2e 69 6d Lasso')..pl.subplot(2,4,4).pl.im
2260 73 68 6f 77 28 64 61 5f 6c 31 6c 32 2e 47 2c 2a 2a 70 61 72 61 6d 5f 69 6d 67 29 0a 70 6c 2e 74 show(da_l1l2.G,**param_img).pl.t
2280 69 74 6c 65 28 27 4f 54 20 6d 61 74 72 69 78 20 47 72 6f 75 70 20 4c 61 73 73 6f 27 29 0a 0a 0a itle('OT.matrix.Group.Lasso')...
22a0 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 34 2c 35 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 74 5b pl.subplot(2,4,5).pl.scatter(xt[
22c0 3a 2c 30 5d 2c 78 74 5b 3a 2c 31 5d 2c 63 3d 79 74 2c 6d 61 72 6b 65 72 3d 27 6f 27 2c 6c 61 62 :,0],xt[:,1],c=yt,marker='o',lab
22e0 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 61 6c 70 68 61 3d 30 2e 33 29 0a 70 el='Target.samples',alpha=0.3).p
2300 6c 2e 73 63 61 74 74 65 72 28 78 73 74 30 5b 3a 2c 30 5d 2c 78 73 74 30 5b 3a 2c 31 5d 2c 63 3d l.scatter(xst0[:,0],xst0[:,1],c=
2320 79 73 2c 6d 61 72 6b 65 72 3d 27 2b 27 2c 6c 61 62 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d 70 ys,marker='+',label='Transp.samp
2340 6c 65 73 27 2c 73 3d 33 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6e 74 65 72 70 20 73 61 6d 70 les',s=30).pl.title('Interp.samp
2360 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 0a 70 6c 2e 73 75 62 70 6c les').pl.legend(loc=0)..pl.subpl
2380 6f 74 28 32 2c 34 2c 36 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 74 5b 3a 2c 30 5d 2c 78 74 5b ot(2,4,6).pl.scatter(xt[:,0],xt[
23a0 3a 2c 31 5d 2c 63 3d 79 74 2c 6d 61 72 6b 65 72 3d 27 6f 27 2c 6c 61 62 65 6c 3d 27 54 61 72 67 :,1],c=yt,marker='o',label='Targ
23c0 65 74 20 73 61 6d 70 6c 65 73 27 2c 61 6c 70 68 61 3d 30 2e 33 29 0a 70 6c 2e 73 63 61 74 74 65 et.samples',alpha=0.3).pl.scatte
23e0 72 28 78 73 74 73 5b 3a 2c 30 5d 2c 78 73 74 73 5b 3a 2c 31 5d 2c 63 3d 79 73 2c 6d 61 72 6b 65 r(xsts[:,0],xsts[:,1],c=ys,marke
2400 72 3d 27 2b 27 2c 6c 61 62 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 73 3d 33 r='+',label='Transp.samples',s=3
2420 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6e 74 65 72 70 20 73 61 6d 70 6c 65 73 20 53 69 6e 6b 0).pl.title('Interp.samples.Sink
2440 68 6f 72 6e 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 34 2c 37 29 0a 70 6c 2e 73 63 61 horn')..pl.subplot(2,4,7).pl.sca
2460 74 74 65 72 28 78 74 5b 3a 2c 30 5d 2c 78 74 5b 3a 2c 31 5d 2c 63 3d 79 74 2c 6d 61 72 6b 65 72 tter(xt[:,0],xt[:,1],c=yt,marker
2480 3d 27 6f 27 2c 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 61 6c 70 68 ='o',label='Target.samples',alph
24a0 61 3d 30 2e 33 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 73 74 67 5b 3a 2c 30 5d 2c 78 73 74 67 a=0.3).pl.scatter(xstg[:,0],xstg
24c0 5b 3a 2c 31 5d 2c 63 3d 79 73 2c 6d 61 72 6b 65 72 3d 27 2b 27 2c 6c 61 62 65 6c 3d 27 54 72 61 [:,1],c=ys,marker='+',label='Tra
24e0 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 73 3d 33 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6e 74 nsp.samples',s=30).pl.title('Int
2500 65 72 70 20 73 61 6d 70 6c 65 73 20 6e 6f 6e 2d 63 6f 6e 76 65 78 20 47 72 6f 75 70 20 4c 61 73 erp.samples.non-convex.Group.Las
2520 73 6f 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 34 2c 38 29 0a 70 6c 2e 73 63 61 74 74 so')..pl.subplot(2,4,8).pl.scatt
2540 65 72 28 78 74 5b 3a 2c 30 5d 2c 78 74 5b 3a 2c 31 5d 2c 63 3d 79 74 2c 6d 61 72 6b 65 72 3d 27 er(xt[:,0],xt[:,1],c=yt,marker='
2560 6f 27 2c 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 61 6c 70 68 61 3d o',label='Target.samples',alpha=
2580 30 2e 33 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 73 74 67 6c 5b 3a 2c 30 5d 2c 78 73 74 67 6c 0.3).pl.scatter(xstgl[:,0],xstgl
25a0 5b 3a 2c 31 5d 2c 63 3d 79 73 2c 6d 61 72 6b 65 72 3d 27 2b 27 2c 6c 61 62 65 6c 3d 27 54 72 61 [:,1],c=ys,marker='+',label='Tra
25c0 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 73 3d 33 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6e 74 nsp.samples',s=30).pl.title('Int
25e0 65 72 70 20 73 61 6d 70 6c 65 73 20 47 72 6f 75 70 20 4c 61 73 73 6f 27 29 50 4b 03 04 14 00 00 erp.samples.Group.Lasso')PK.....
2600 00 00 00 34 87 1e 4b d0 88 31 48 54 15 00 00 54 15 00 00 1d 00 00 00 61 75 74 6f 5f 65 78 61 6d ...4..K..1HT...T.......auto_exam
2620 70 6c 65 73 2f 70 6c 6f 74 5f 6f 74 64 61 5f 64 32 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 ples/plot_otda_d2.py#.-*-.coding
2640 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d :.utf-8.-*-.""".================
2660 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4f 54 20 66 6f 72 20 65 6d 70 69 72 69 63 61 6c 20 ==============.OT.for.empirical.
2680 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d distributions.==================
26a0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 6e 74 72 6f ============..This.example.intro
26c0 64 75 63 65 73 20 61 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 20 69 6e 20 61 20 32 duces.a.domain.adaptation.in.a.2
26e0 44 20 73 65 74 74 69 6e 67 2e 20 49 74 20 65 78 70 6c 69 63 69 74 73 0a 74 68 65 20 70 72 6f 62 D.setting..It.explicits.the.prob
2700 6c 65 6d 20 6f 66 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 20 61 6e 64 20 69 6e 74 lem.of.domain.adaptation.and.int
2720 72 6f 64 75 63 65 73 20 73 6f 6d 65 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 0a 61 roduces.some.optimal.transport.a
2740 70 70 72 6f 61 63 68 65 73 20 74 6f 20 73 6f 6c 76 65 20 69 74 2e 0a 0a 51 75 61 6e 74 69 74 69 pproaches.to.solve.it...Quantiti
2760 65 73 20 73 75 63 68 20 61 73 20 6f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 73 2c 20 67 72 es.such.as.optimal.couplings,.gr
2780 65 61 74 65 72 20 63 6f 75 70 6c 69 6e 67 20 63 6f 65 66 66 69 63 69 65 6e 74 73 20 61 6e 64 0a eater.coupling.coefficients.and.
27a0 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 20 61 72 65 20 72 65 70 72 65 73 65 6e transported.samples.are.represen
27c0 74 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 67 69 76 65 20 61 20 76 69 73 75 61 6c 20 75 6e ted.in.order.to.give.a.visual.un
27e0 64 65 72 73 74 61 6e 64 69 6e 67 0a 6f 66 20 77 68 61 74 20 74 68 65 20 74 72 61 6e 73 70 6f 72 derstanding.of.what.the.transpor
2800 74 20 6d 65 74 68 6f 64 73 20 61 72 65 20 64 6f 69 6e 67 2e 0a 22 22 22 0a 0a 23 20 41 75 74 68 t.methods.are.doing.."""..#.Auth
2820 6f 72 73 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 ors:.Remi.Flamary.<remi.flamary@
2840 75 6e 69 63 65 2e 66 72 3e 0a 23 20 20 20 20 20 20 20 20 20 20 53 74 61 6e 69 73 6c 61 73 20 43 unice.fr>.#..........Stanislas.C
2860 68 61 6d 62 6f 6e 20 3c 73 74 61 6e 2e 63 68 61 6d 62 6f 6e 40 67 6d 61 69 6c 2e 63 6f 6d 3e 0a hambon.<stan.chambon@gmail.com>.
2880 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 #.#.License:.MIT.License..import
28a0 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f .matplotlib.pylab.as.pl.import.o
28c0 74 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 t...############################
28e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
2900 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 67 65 6e 65 72 61 74 65 20 64 61 ##################.#.generate.da
2920 74 61 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 ta.#############################
2940 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
2960 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 6e 5f 73 61 6d 70 6c 65 73 5f 73 6f 75 #################..n_samples_sou
2980 72 63 65 20 3d 20 31 35 30 0a 6e 5f 73 61 6d 70 6c 65 73 5f 74 61 72 67 65 74 20 3d 20 31 35 30 rce.=.150.n_samples_target.=.150
29a0 0a 0a 58 73 2c 20 79 73 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 64 61 74 61 5f ..Xs,.ys.=.ot.datasets.get_data_
29c0 63 6c 61 73 73 69 66 28 27 33 67 61 75 73 73 27 2c 20 6e 5f 73 61 6d 70 6c 65 73 5f 73 6f 75 72 classif('3gauss',.n_samples_sour
29e0 63 65 29 0a 58 74 2c 20 79 74 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 64 61 74 ce).Xt,.yt.=.ot.datasets.get_dat
2a00 61 5f 63 6c 61 73 73 69 66 28 27 33 67 61 75 73 73 32 27 2c 20 6e 5f 73 61 6d 70 6c 65 73 5f 74 a_classif('3gauss2',.n_samples_t
2a20 61 72 67 65 74 29 0a 0a 23 20 43 6f 73 74 20 6d 61 74 72 69 78 0a 4d 20 3d 20 6f 74 2e 64 69 73 arget)..#.Cost.matrix.M.=.ot.dis
2a40 74 28 58 73 2c 20 58 74 2c 20 6d 65 74 72 69 63 3d 27 73 71 65 75 63 6c 69 64 65 61 6e 27 29 0a t(Xs,.Xt,.metric='sqeuclidean').
2a60 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ..##############################
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 0a 23 20 49 6e 73 74 61 6e 74 69 61 74 65 20 74 ################.#.Instantiate.t
2ac0 68 65 20 64 69 66 66 65 72 65 6e 74 20 74 72 61 6e 73 70 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d he.different.transport.algorithm
2ae0 73 20 61 6e 64 20 66 69 74 20 74 68 65 6d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 s.and.fit.them.#################
2b00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
2b20 23 23 23 23 23 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 0a 23 #############################..#
2b40 20 45 4d 44 20 54 72 61 6e 73 70 6f 72 74 0a 6f 74 5f 65 6d 64 20 3d 20 6f 74 2e 64 61 2e 45 4d .EMD.Transport.ot_emd.=.ot.da.EM
2b60 44 54 72 61 6e 73 70 6f 72 74 28 29 0a 6f 74 5f 65 6d 64 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 DTransport().ot_emd.fit(Xs=Xs,.X
2b80 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 0a 6f 74 5f 73 t=Xt)..#.Sinkhorn.Transport.ot_s
2ba0 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 6e 73 70 6f 72 inkhorn.=.ot.da.SinkhornTranspor
2bc0 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 69 74 28 58 73 t(reg_e=1e-1).ot_sinkhorn.fit(Xs
2be0 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 73 70 6f 72 =Xs,.Xt=Xt)..#.Sinkhorn.Transpor
2c00 74 20 77 69 74 68 20 47 72 6f 75 70 20 6c 61 73 73 6f 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f t.with.Group.lasso.regularizatio
2c20 6e 0a 6f 74 5f 6c 70 6c 31 20 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b 68 6f 72 6e 4c 70 6c 31 54 72 n.ot_lpl1.=.ot.da.SinkhornLpl1Tr
2c40 61 6e 73 70 6f 72 74 28 72 65 67 5f 65 3d 31 65 2d 31 2c 20 72 65 67 5f 63 6c 3d 31 65 30 29 0a ansport(reg_e=1e-1,.reg_cl=1e0).
2c60 6f 74 5f 6c 70 6c 31 2e 66 69 74 28 58 73 3d 58 73 2c 20 79 73 3d 79 73 2c 20 58 74 3d 58 74 29 ot_lpl1.fit(Xs=Xs,.ys=ys,.Xt=Xt)
2c80 0a 0a 23 20 74 72 61 6e 73 70 6f 72 74 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 20 6f 6e 74 ..#.transport.source.samples.ont
2ca0 6f 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 0a 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 20 3d o.target.samples.transp_Xs_emd.=
2cc0 20 6f 74 5f 65 6d 64 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 74 72 61 6e 73 70 5f .ot_emd.transform(Xs=Xs).transp_
2ce0 58 73 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 5f 73 69 6e 6b 68 6f 72 6e 2e 74 72 61 6e 73 66 Xs_sinkhorn.=.ot_sinkhorn.transf
2d00 6f 72 6d 28 58 73 3d 58 73 29 0a 74 72 61 6e 73 70 5f 58 73 5f 6c 70 6c 31 20 3d 20 6f 74 5f 6c orm(Xs=Xs).transp_Xs_lpl1.=.ot_l
2d20 70 6c 31 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 pl1.transform(Xs=Xs)...#########
2d40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
2d60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
2d80 23 23 23 23 23 0a 23 20 46 69 67 20 31 20 3a 20 70 6c 6f 74 73 20 73 6f 75 72 63 65 20 61 6e 64 #####.#.Fig.1.:.plots.source.and
2da0 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 66 20 70 61 69 72 .target.samples.+.matrix.of.pair
2dc0 77 69 73 65 20 64 69 73 74 61 6e 63 65 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 wise.distance.##################
2de0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
2e00 23 23 23 23 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 0a 70 6c ############################..pl
2e20 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 70 6c 2e .figure(1,.figsize=(10,.10)).pl.
2e40 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 73 5b 3a subplot(2,.2,.1).pl.scatter(Xs[:
2e60 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 27 2b 27 ,.0],.Xs[:,.1],.c=ys,.marker='+'
2e80 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 78 74 69 ,.label='Source.samples').pl.xti
2ea0 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 64 28 cks([]).pl.yticks([]).pl.legend(
2ec0 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 6c 65 73 loc=0).pl.title('Source..samples
2ee0 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 61 74 74 ')..pl.subplot(2,.2,.2).pl.scatt
2f00 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 72 er(Xt[:,.0],.Xt[:,.1],.c=yt,.mar
2f20 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 29 ker='o',.label='Target.samples')
2f40 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.
2f60 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 74 20 73 legend(loc=0).pl.title('Target.s
2f80 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 0a 70 6c amples')..pl.subplot(2,.2,.3).pl
2fa0 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 73 .imshow(M,.interpolation='neares
2fc0 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 0a t').pl.xticks([]).pl.yticks([]).
2fe0 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 64 69 73 pl.title('Matrix.of.pairwise.dis
3000 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 23 23 23 tances').pl.tight_layout()...###
3020 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
3040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
3060 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 70 74 69 ###########.#.Fig.2.:.plots.opti
3080 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 6e 74 20 mal.couplings.for.the.different.
30a0 6d 65 74 68 6f 64 73 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 methods.########################
30c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
30e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 70 6c 2e 66 69 67 75 72 ######################..pl.figur
3100 65 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 31 30 2c 20 36 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f e(2,.figsize=(10,.6))..pl.subplo
3120 74 28 32 2c 20 33 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 t(2,.3,.1).pl.imshow(ot_emd.coup
3140 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 0a ling_,.interpolation='nearest').
3160 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 pl.xticks([]).pl.yticks([]).pl.t
3180 69 74 6c 65 28 27 4f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 5c 6e 45 4d 44 54 72 61 6e 73 itle('Optimal.coupling\nEMDTrans
31a0 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 32 29 0a 70 6c 2e 69 port')..pl.subplot(2,.3,.2).pl.i
31c0 6d 73 68 6f 77 28 6f 74 5f 73 69 6e 6b 68 6f 72 6e 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 69 6e 74 mshow(ot_sinkhorn.coupling_,.int
31e0 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(
3200 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 70 74 69 []).pl.yticks([]).pl.title('Opti
3220 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 5c 6e 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 27 mal.coupling\nSinkhornTransport'
3240 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 )..pl.subplot(2,.3,.3).pl.imshow
3260 28 6f 74 5f 6c 70 6c 31 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f (ot_lpl1.coupling_,.interpolatio
3280 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 n='nearest').pl.xticks([]).pl.yt
32a0 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 70 6c icks([]).pl.title('Optimal.coupl
32c0 69 6e 67 5c 6e 53 69 6e 6b 68 6f 72 6e 4c 70 6c 31 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c ing\nSinkhornLpl1Transport')..pl
32e0 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 34 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 .subplot(2,.3,.4).ot.plot.plot2D
3300 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 58 73 2c 20 58 74 2c 20 6f 74 5f 65 6d 64 2e 63 6f 75 70 _samples_mat(Xs,.Xt,.ot_emd.coup
3320 6c 69 6e 67 5f 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 73 63 61 74 74 65 72 ling_,.c=[.5,..5,.1]).pl.scatter
3340 28 58 73 5b 3a 2c 20 30 5d 2c 20 58 73 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 (Xs[:,.0],.Xs[:,.1],.c=ys,.marke
3360 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 r='+',.label='Source.samples').p
3380 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d l.scatter(Xt[:,.0],.Xt[:,.1],.c=
33a0 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 yt,.marker='o',.label='Target.sa
33c0 6d 70 6c 65 73 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 mples').pl.xticks([]).pl.yticks(
33e0 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4d 61 69 6e 20 63 6f 75 70 6c 69 6e 67 20 63 6f 65 66 []).pl.title('Main.coupling.coef
3400 66 69 63 69 65 6e 74 73 5c 6e 45 4d 44 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 ficients\nEMDTransport')..pl.sub
3420 70 6c 6f 74 28 32 2c 20 33 2c 20 35 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d plot(2,.3,.5).ot.plot.plot2D_sam
3440 70 6c 65 73 5f 6d 61 74 28 58 73 2c 20 58 74 2c 20 6f 74 5f 73 69 6e 6b 68 6f 72 6e 2e 63 6f 75 ples_mat(Xs,.Xt,.ot_sinkhorn.cou
3460 70 6c 69 6e 67 5f 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 73 63 61 74 74 65 pling_,.c=[.5,..5,.1]).pl.scatte
3480 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 58 73 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b r(Xs[:,.0],.Xs[:,.1],.c=ys,.mark
34a0 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a er='+',.label='Source.samples').
34c0 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 pl.scatter(Xt[:,.0],.Xt[:,.1],.c
34e0 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 =yt,.marker='o',.label='Target.s
3500 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 amples').pl.xticks([]).pl.yticks
3520 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4d 61 69 6e 20 63 6f 75 70 6c 69 6e 67 20 63 6f 65 ([]).pl.title('Main.coupling.coe
3540 66 66 69 63 69 65 6e 74 73 5c 6e 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a fficients\nSinkhornTransport')..
3560 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 36 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 pl.subplot(2,.3,.6).ot.plot.plot
3580 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 58 73 2c 20 58 74 2c 20 6f 74 5f 6c 70 6c 31 2e 63 2D_samples_mat(Xs,.Xt,.ot_lpl1.c
35a0 6f 75 70 6c 69 6e 67 5f 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 73 63 61 74 oupling_,.c=[.5,..5,.1]).pl.scat
35c0 74 65 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 58 73 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 ter(Xs[:,.0],.Xs[:,.1],.c=ys,.ma
35e0 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 rker='+',.label='Source.samples'
3600 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 2c ).pl.scatter(Xt[:,.0],.Xt[:,.1],
3620 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 .c=yt,.marker='o',.label='Target
3640 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 .samples').pl.xticks([]).pl.ytic
3660 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4d 61 69 6e 20 63 6f 75 70 6c 69 6e 67 20 63 ks([]).pl.title('Main.coupling.c
3680 6f 65 66 66 69 63 69 65 6e 74 73 5c 6e 53 69 6e 6b 68 6f 72 6e 4c 70 6c 31 54 72 61 6e 73 70 6f oefficients\nSinkhornLpl1Transpo
36a0 72 74 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 rt').pl.tight_layout()...#######
36c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
36e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
3700 23 23 23 23 23 23 23 0a 23 20 46 69 67 20 33 20 3a 20 70 6c 6f 74 20 74 72 61 6e 73 70 6f 72 74 #######.#.Fig.3.:.plot.transport
3720 65 64 20 73 61 6d 70 6c 65 73 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ed.samples.#####################
3740 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
3760 23 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 0a 23 20 64 69 73 #########################..#.dis
3780 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 69 67 75 play.transported.samples.pl.figu
37a0 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 70 6c 6f re(4,.figsize=(10,.4)).pl.subplo
37c0 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 5d 2c 20 t(1,.3,.1).pl.scatter(Xt[:,.0],.
37e0 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 Xt[:,.1],.c=yt,.marker='o',.....
3800 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 .......label='Target.samples',.a
3820 6c 70 68 61 3d 30 2e 35 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 65 lpha=0.5).pl.scatter(transp_Xs_e
3840 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 2c 20 63 md[:,.0],.transp_Xs_emd[:,.1],.c
3860 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
3880 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
38a0 6c 65 28 27 54 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 5c 6e 45 6d 64 54 72 61 6e le('Transported.samples\nEmdTran
38c0 73 70 6f 72 74 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 78 74 69 63 sport').pl.legend(loc=0).pl.xtic
38e0 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
3900 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 2c 20 58 (1,.3,.2).pl.scatter(Xt[:,.0],.X
3920 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',......
3940 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
3960 70 68 61 3d 30 2e 35 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 73 69 pha=0.5).pl.scatter(transp_Xs_si
3980 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 6f 72 6e nkhorn[:,.0],.transp_Xs_sinkhorn
39a0 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=
39c0 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 20 73 3d 33 '+',.label='Transp.samples',.s=3
39e0 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 0).pl.title('Transported.samples
3a00 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 6b 73 28 \nSinkhornTransport').pl.xticks(
3a20 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 28 31 2c []).pl.yticks([])..pl.subplot(1,
3a40 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 74 5b 3a .3,.3).pl.scatter(Xt[:,.0],.Xt[:
3a60 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 20 ,.1],.c=yt,.marker='o',.........
3a80 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 61 ...label='Target.samples',.alpha
3aa0 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 6c 31 5b =0.5).pl.scatter(transp_Xs_lpl1[
3ac0 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 63 3d 79 :,.0],.transp_Xs_lpl1[:,.1],.c=y
3ae0 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d s,............marker='+',.label=
3b00 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 6c 65 'Transp.samples',.s=30).pl.title
3b20 28 27 54 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 5c 6e 53 69 6e 6b 68 6f 72 6e 4c ('Transported.samples\nSinkhornL
3b40 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 70 6c 2e pl1Transport').pl.xticks([]).pl.
3b60 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 0a 70 6c yticks([])..pl.tight_layout().pl
3b80 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 cb 86 1e 4b 1e a6 15 2a 43 04 00 00 43 04 .show().PK...........K...*C...C.
3ba0 00 00 1b 00 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 4f 54 5f 31 44 2e 70 ......auto_examples/plot_OT_1D.p
3bc0 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.-*-.""".===
3be0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 31 44 20 6f 70 74 69 6d 61 6c 20 74 72 61 =================.1D.optimal.tra
3c00 6e 73 70 6f 72 74 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 22 22 22 nsport.====================.."""
3c20 0a 0a 23 20 41 75 74 68 6f 72 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 ..#.Author:.Remi.Flamary.<remi.f
3c40 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 lamary@unice.fr>.#.#.License:.MI
3c60 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d T.License..import.numpy.as.np.im
3c80 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f port.matplotlib.pylab.as.pl.impo
3ca0 72 74 20 6f 74 0a 66 72 6f 6d 20 6f 74 2e 64 61 74 61 73 65 74 73 20 69 6d 70 6f 72 74 20 67 65 rt.ot.from.ot.datasets.import.ge
3cc0 74 5f 31 44 5f 67 61 75 73 73 20 61 73 20 67 61 75 73 73 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 t_1D_gauss.as.gauss..#%%.paramet
3ce0 65 72 73 0a 0a 6e 20 3d 20 31 30 30 20 20 23 20 6e 62 20 62 69 6e 73 0a 0a 23 20 62 69 6e 20 70 ers..n.=.100..#.nb.bins..#.bin.p
3d00 6f 73 69 74 69 6f 6e 73 0a 78 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 2c 20 64 74 79 70 65 3d ositions.x.=.np.arange(n,.dtype=
3d20 6e 70 2e 66 6c 6f 61 74 36 34 29 0a 0a 23 20 47 61 75 73 73 69 61 6e 20 64 69 73 74 72 69 62 75 np.float64)..#.Gaussian.distribu
3d40 74 69 6f 6e 73 0a 61 20 3d 20 67 61 75 73 73 28 6e 2c 20 6d 3d 32 30 2c 20 73 3d 35 29 20 20 23 tions.a.=.gauss(n,.m=20,.s=5)..#
3d60 20 6d 3d 20 6d 65 61 6e 2c 20 73 3d 20 73 74 64 0a 62 20 3d 20 67 61 75 73 73 28 6e 2c 20 6d 3d .m=.mean,.s=.std.b.=.gauss(n,.m=
3d80 36 30 2c 20 73 3d 31 30 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 20 3d 20 6f 74 2e 60,.s=10)..#.loss.matrix.M.=.ot.
3da0 64 69 73 74 28 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 2c 20 78 2e 72 65 73 68 61 70 dist(x.reshape((n,.1)),.x.reshap
3dc0 65 28 28 6e 2c 20 31 29 29 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 29 0a 0a 23 25 25 20 70 6c 6f e((n,.1))).M./=.M.max()..#%%.plo
3de0 74 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 t.the.distributions..pl.figure(1
3e00 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 29 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 61 ,.figsize=(6.4,.3)).pl.plot(x,.a
3e20 2c 20 27 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 64 69 73 74 72 69 62 75 74 69 6f ,.'b',.label='Source.distributio
3e40 6e 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 2c 20 27 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 n').pl.plot(x,.b,.'r',.label='Ta
3e60 72 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 29 0a rget.distribution').pl.legend().
3e80 0a 23 25 25 20 70 6c 6f 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 61 6e 64 20 6c 6f 73 73 .#%%.plot.distributions.and.loss
3ea0 20 6d 61 74 72 69 78 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 35 .matrix..pl.figure(2,.figsize=(5
3ec0 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 4d ,.5)).ot.plot.plot1D_mat(a,.b,.M
3ee0 2c 20 27 43 6f 73 74 20 6d 61 74 72 69 78 20 4d 27 29 0a 0a 23 25 25 20 45 4d 44 0a 0a 47 30 20 ,.'Cost.matrix.M')..#%%.EMD..G0.
3f00 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 33 2c 20 =.ot.emd(a,.b,.M)..pl.figure(3,.
3f20 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
3f40 61 74 28 61 2c 20 62 2c 20 47 30 2c 20 27 4f 54 20 6d 61 74 72 69 78 20 47 30 27 29 0a 0a 23 25 at(a,.b,.G0,.'OT.matrix.G0')..#%
3f60 25 20 53 69 6e 6b 68 6f 72 6e 0a 0a 6c 61 6d 62 64 20 3d 20 31 65 2d 33 0a 47 73 20 3d 20 6f 74 %.Sinkhorn..lambd.=.1e-3.Gs.=.ot
3f80 2e 73 69 6e 6b 68 6f 72 6e 28 61 2c 20 62 2c 20 4d 2c 20 6c 61 6d 62 64 2c 20 76 65 72 62 6f 73 .sinkhorn(a,.b,.M,.lambd,.verbos
3fa0 65 3d 54 72 75 65 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 35 e=True)..pl.figure(4,.figsize=(5
3fc0 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 47 ,.5)).ot.plot.plot1D_mat(a,.b,.G
3fe0 73 2c 20 27 4f 54 20 6d 61 74 72 69 78 20 53 69 6e 6b 68 6f 72 6e 27 29 0a 0a 70 6c 2e 73 68 6f s,.'OT.matrix.Sinkhorn')..pl.sho
4000 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 32 82 e3 4a 58 1b a1 c7 97 10 00 00 97 10 00 00 1d 00 w().PK........2..JX.............
4020 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 4f 54 5f 63 6f 6e 76 2e 70 79 23 ..auto_examples/plot_OT_conv.py#
4040 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d .-*-.coding:.utf-8.-*-.""".=====
4060 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 31 44 20 57 61 73 =========================.1D.Was
4080 73 65 72 73 74 65 69 6e 20 62 61 72 79 63 65 6e 74 65 72 20 64 65 6d 6f 0a 3d 3d 3d 3d 3d 3d 3d serstein.barycenter.demo.=======
40a0 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 0a 40 61 75 74 68 6f =======================...@autho
40c0 72 3a 20 72 66 6c 61 6d 61 72 79 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 r:.rflamary."""..import.numpy.as
40e0 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 70 .np.import.matplotlib.pylab.as.p
4100 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 66 72 6f 6d 20 6d 70 6c 5f 74 6f 6f 6c 6b 69 74 73 2e 6d 70 l.import.ot.from.mpl_toolkits.mp
4120 6c 6f 74 33 64 20 69 6d 70 6f 72 74 20 41 78 65 73 33 44 20 23 6e 65 63 65 73 73 61 72 79 20 66 lot3d.import.Axes3D.#necessary.f
4140 6f 72 20 33 64 20 70 6c 6f 74 20 65 76 65 6e 20 69 66 20 6e 6f 74 20 75 73 65 64 0a 69 6d 70 6f or.3d.plot.even.if.not.used.impo
4160 72 74 20 73 63 69 70 79 20 61 73 20 73 70 0a 69 6d 70 6f 72 74 20 73 63 69 70 79 2e 73 69 67 6e rt.scipy.as.sp.import.scipy.sign
4180 61 6c 20 61 73 20 73 70 73 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 6e 3d 31 30 20 23 al.as.sps.#%%.parameters..n=10.#
41a0 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 3d 6e 70 2e 61 .nb.bins..#.bin.positions.x=np.a
41c0 72 61 6e 67 65 28 6e 2c 64 74 79 70 65 3d 6e 70 2e 66 6c 6f 61 74 36 34 29 0a 0a 78 78 2c 79 79 range(n,dtype=np.float64)..xx,yy
41e0 3d 6e 70 2e 6d 65 73 68 67 72 69 64 28 78 2c 78 29 0a 0a 0a 78 70 6f 73 3d 6e 70 2e 68 73 74 61 =np.meshgrid(x,x)...xpos=np.hsta
4200 63 6b 28 28 78 78 2e 72 65 73 68 61 70 65 28 2d 31 2c 31 29 2c 79 79 2e 72 65 73 68 61 70 65 28 ck((xx.reshape(-1,1),yy.reshape(
4220 2d 31 2c 31 29 29 29 0a 0a 4d 3d 6f 74 2e 64 69 73 74 28 78 70 6f 73 29 0a 0a 0a 49 30 3d 28 28 -1,1)))..M=ot.dist(xpos)...I0=((
4240 78 78 2d 35 29 2a 2a 32 2b 28 79 79 2d 35 29 2a 2a 32 3c 33 2a 2a 32 29 2a 31 2e 30 0a 49 31 3d xx-5)**2+(yy-5)**2<3**2)*1.0.I1=
4260 28 28 78 78 2d 37 29 2a 2a 32 2b 28 79 79 2d 37 29 2a 2a 32 3c 33 2a 2a 32 29 2a 31 2e 30 0a 0a ((xx-7)**2+(yy-7)**2<3**2)*1.0..
4280 49 30 2f 3d 49 30 2e 73 75 6d 28 29 0a 49 31 2f 3d 49 31 2e 73 75 6d 28 29 0a 0a 69 30 3d 49 30 I0/=I0.sum().I1/=I1.sum()..i0=I0
42a0 2e 72 61 76 65 6c 28 29 0a 69 31 3d 49 31 2e 72 61 76 65 6c 28 29 0a 0a 4d 3d 4d 5b 69 30 3e 30 .ravel().i1=I1.ravel()..M=M[i0>0
42c0 2c 3a 5d 5b 3a 2c 69 31 3e 30 5d 2e 63 6f 70 79 28 29 0a 69 30 3d 69 30 5b 69 30 3e 30 5d 0a 69 ,:][:,i1>0].copy().i0=i0[i0>0].i
42e0 31 3d 69 31 5b 69 31 3e 30 5d 0a 49 74 6f 74 3d 6e 70 2e 63 6f 6e 63 61 74 65 6e 61 74 65 28 28 1=i1[i1>0].Itot=np.concatenate((
4300 49 30 5b 3a 2c 3a 2c 6e 70 2e 6e 65 77 61 78 69 73 5d 2c 49 31 5b 3a 2c 3a 2c 6e 70 2e 6e 65 77 I0[:,:,np.newaxis],I1[:,:,np.new
4320 61 78 69 73 5d 29 2c 32 29 0a 0a 0a 23 25 25 20 70 6c 6f 74 20 74 68 65 20 64 69 73 74 72 69 62 axis]),2)...#%%.plot.the.distrib
4340 75 74 69 6f 6e 73 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 utions..pl.figure(1).pl.subplot(
4360 32 2c 32 2c 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 30 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 2,2,1).pl.imshow(I0).pl.subplot(
4380 32 2c 32 2c 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 29 0a 0a 0a 23 25 25 20 62 61 72 79 63 2,2,2).pl.imshow(I1)...#%%.baryc
43a0 65 6e 74 65 72 20 63 6f 6d 70 75 74 61 74 69 6f 6e 0a 0a 61 6c 70 68 61 3d 30 2e 35 20 23 20 30 enter.computation..alpha=0.5.#.0
43c0 3c 3d 61 6c 70 68 61 3c 3d 31 0a 77 65 69 67 68 74 73 3d 6e 70 2e 61 72 72 61 79 28 5b 31 2d 61 <=alpha<=1.weights=np.array([1-a
43e0 6c 70 68 61 2c 61 6c 70 68 61 5d 29 0a 0a 0a 64 65 66 20 63 6f 6e 76 32 28 49 2c 6b 29 3a 0a 20 lpha,alpha])...def.conv2(I,k):..
4400 20 20 20 72 65 74 75 72 6e 20 73 70 2e 6e 64 69 6d 61 67 65 2e 63 6f 6e 76 6f 6c 76 65 31 64 28 ...return.sp.ndimage.convolve1d(
4420 73 70 2e 6e 64 69 6d 61 67 65 2e 63 6f 6e 76 6f 6c 76 65 31 64 28 49 2c 6b 2c 61 78 69 73 3d 31 sp.ndimage.convolve1d(I,k,axis=1
4440 29 2c 6b 2c 61 78 69 73 3d 30 29 0a 0a 64 65 66 20 63 6f 6e 76 32 6e 28 49 2c 6b 29 3a 0a 20 20 ),k,axis=0)..def.conv2n(I,k):...
4460 20 20 72 65 73 3d 6e 70 2e 7a 65 72 6f 73 5f 6c 69 6b 65 28 49 29 0a 20 20 20 20 66 6f 72 20 69 ..res=np.zeros_like(I).....for.i
4480 20 69 6e 20 72 61 6e 67 65 28 49 2e 73 68 61 70 65 5b 32 5d 29 3a 0a 20 20 20 20 20 20 20 20 72 .in.range(I.shape[2]):.........r
44a0 65 73 5b 3a 2c 3a 2c 69 5d 3d 63 6f 6e 76 32 28 49 5b 3a 2c 3a 2c 69 5d 2c 6b 29 0a 20 20 20 20 es[:,:,i]=conv2(I[:,:,i],k).....
44c0 72 65 74 75 72 6e 20 72 65 73 0a 0a 0a 64 65 66 20 67 65 74 5f 31 44 6b 65 72 6e 65 6c 28 72 65 return.res...def.get_1Dkernel(re
44e0 67 2c 74 68 72 3d 31 65 2d 31 36 2c 77 6d 61 78 3d 31 30 32 34 29 3a 0a 20 20 20 20 77 3d 6d 61 g,thr=1e-16,wmax=1024):.....w=ma
4500 78 28 6d 69 6e 28 77 6d 61 78 2c 32 2a 69 6e 74 28 28 2d 6e 70 2e 6c 6f 67 28 74 68 72 29 2a 72 x(min(wmax,2*int((-np.log(thr)*r
4520 65 67 29 2a 2a 28 2e 35 29 29 29 2c 33 29 0a 20 20 20 20 78 3d 6e 70 2e 61 72 61 6e 67 65 28 77 eg)**(.5))),3).....x=np.arange(w
4540 2c 64 74 79 70 65 3d 6e 70 2e 66 6c 6f 61 74 36 34 29 0a 20 20 20 20 72 65 74 75 72 6e 20 6e 70 ,dtype=np.float64).....return.np
4560 2e 65 78 70 28 2d 28 28 78 2d 77 2f 32 29 2a 2a 32 29 2f 72 65 67 29 0a 20 20 20 20 0a 74 68 72 .exp(-((x-w/2)**2)/reg)......thr
4580 3d 31 65 2d 31 36 0a 72 65 67 3d 31 65 30 0a 0a 6b 3d 67 65 74 5f 31 44 6b 65 72 6e 65 6c 28 72 =1e-16.reg=1e0..k=get_1Dkernel(r
45a0 65 67 29 0a 70 6c 2e 66 69 67 75 72 65 28 32 29 0a 70 6c 2e 70 6c 6f 74 28 6b 29 0a 0a 49 30 35 eg).pl.figure(2).pl.plot(k)..I05
45c0 3d 63 6f 6e 76 32 28 49 30 2c 6b 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 29 0a 70 6c 2e 73 75 =conv2(I0,k)..pl.figure(1).pl.su
45e0 62 70 6c 6f 74 28 32 2c 32 2c 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 30 29 0a 70 6c 2e 73 75 bplot(2,2,1).pl.imshow(I0).pl.su
4600 62 70 6c 6f 74 28 32 2c 32 2c 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 30 35 29 0a 0a 23 25 25 bplot(2,2,2).pl.imshow(I05)..#%%
4620 0a 0a 47 3d 6f 74 2e 65 6d 64 28 69 30 2c 69 31 2c 4d 29 0a 72 30 3d 6e 70 2e 73 75 6d 28 4d 2a ..G=ot.emd(i0,i1,M).r0=np.sum(M*
4640 47 29 0a 0a 72 65 67 3d 31 65 2d 31 0a 47 73 3d 6f 74 2e 62 72 65 67 6d 61 6e 2e 73 69 6e 6b 68 G)..reg=1e-1.Gs=ot.bregman.sinkh
4660 6f 72 6e 5f 6b 6e 6f 70 70 28 69 30 2c 69 31 2c 4d 2c 72 65 67 3d 72 65 67 29 0a 72 73 3d 6e 70 orn_knopp(i0,i1,M,reg=reg).rs=np
4680 2e 73 75 6d 28 4d 2a 47 73 29 0a 0a 23 25 25 0a 0a 64 65 66 20 6d 79 6c 6f 67 28 75 29 3a 0a 20 .sum(M*Gs)..#%%..def.mylog(u):..
46a0 20 20 20 74 6d 70 3d 6e 70 2e 6c 6f 67 28 75 29 0a 20 20 20 20 74 6d 70 5b 6e 70 2e 69 73 6e 61 ...tmp=np.log(u).....tmp[np.isna
46c0 6e 28 74 6d 70 29 5d 3d 30 0a 20 20 20 20 72 65 74 75 72 6e 20 74 6d 70 0a 0a 64 65 66 20 73 69 n(tmp)]=0.....return.tmp..def.si
46e0 6e 6b 68 6f 72 6e 5f 63 6f 6e 76 28 61 2c 62 2c 20 72 65 67 2c 20 6e 75 6d 49 74 65 72 6d 61 78 nkhorn_conv(a,b,.reg,.numItermax
4700 20 3d 20 31 30 30 30 2c 20 73 74 6f 70 54 68 72 3d 31 65 2d 39 2c 20 76 65 72 62 6f 73 65 3d 46 .=.1000,.stopThr=1e-9,.verbose=F
4720 61 6c 73 65 2c 20 6c 6f 67 3d 46 61 6c 73 65 2c 2a 2a 6b 77 61 72 67 73 29 3a 0a 0a 0a 20 20 20 alse,.log=False,**kwargs):......
4740 20 61 3d 6e 70 2e 61 73 61 72 72 61 79 28 61 2c 64 74 79 70 65 3d 6e 70 2e 66 6c 6f 61 74 36 34 .a=np.asarray(a,dtype=np.float64
4760 29 0a 20 20 20 20 62 3d 6e 70 2e 61 73 61 72 72 61 79 28 62 2c 64 74 79 70 65 3d 6e 70 2e 66 6c ).....b=np.asarray(b,dtype=np.fl
4780 6f 61 74 36 34 29 0a 20 20 20 20 20 20 20 20 0a 20 20 20 20 0a 20 20 20 20 69 66 20 6c 65 6e 28 oat64)...................if.len(
47a0 62 2e 73 68 61 70 65 29 3e 32 3a 0a 20 20 20 20 20 20 20 20 6e 62 62 3d 62 2e 73 68 61 70 65 5b b.shape)>2:.........nbb=b.shape[
47c0 32 5d 0a 20 20 20 20 20 20 20 20 61 3d 61 5b 3a 2c 3a 2c 6e 70 2e 6e 65 77 61 78 69 73 5d 0a 20 2].........a=a[:,:,np.newaxis]..
47e0 20 20 20 65 6c 73 65 3a 0a 20 20 20 20 20 20 20 20 6e 62 62 3d 30 0a 20 20 20 20 0a 0a 20 20 20 ...else:.........nbb=0..........
4800 20 69 66 20 6c 6f 67 3a 0a 20 20 20 20 20 20 20 20 6c 6f 67 3d 7b 27 65 72 72 27 3a 5b 5d 7d 0a .if.log:.........log={'err':[]}.
4820 0a 20 20 20 20 23 20 77 65 20 61 73 73 75 6d 65 20 74 68 61 74 20 6e 6f 20 64 69 73 74 61 6e 63 .....#.we.assume.that.no.distanc
4840 65 73 20 61 72 65 20 6e 75 6c 6c 20 65 78 63 65 70 74 20 74 68 6f 73 65 20 6f 66 20 74 68 65 20 es.are.null.except.those.of.the.
4860 64 69 61 67 6f 6e 61 6c 20 6f 66 20 64 69 73 74 61 6e 63 65 73 0a 20 20 20 20 69 66 20 6e 62 62 diagonal.of.distances.....if.nbb
4880 3a 0a 20 20 20 20 20 20 20 20 75 20 3d 20 6e 70 2e 6f 6e 65 73 28 28 61 2e 73 68 61 70 65 5b 30 :.........u.=.np.ones((a.shape[0
48a0 5d 2c 61 2e 73 68 61 70 65 5b 31 5d 2c 6e 62 62 29 29 2f 28 6e 70 2e 70 72 6f 64 28 61 2e 73 68 ],a.shape[1],nbb))/(np.prod(a.sh
48c0 61 70 65 5b 3a 32 5d 29 29 0a 20 20 20 20 20 20 20 20 76 20 3d 20 6e 70 2e 6f 6e 65 73 28 28 61 ape[:2])).........v.=.np.ones((a
48e0 2e 73 68 61 70 65 5b 30 5d 2c 61 2e 73 68 61 70 65 5b 31 5d 2c 6e 62 62 29 29 2f 28 6e 70 2e 70 .shape[0],a.shape[1],nbb))/(np.p
4900 72 6f 64 28 62 2e 73 68 61 70 65 5b 3a 32 5d 29 29 0a 20 20 20 20 20 20 20 20 61 30 3d 31 2e 30 rod(b.shape[:2])).........a0=1.0
4920 2f 28 6e 70 2e 70 72 6f 64 28 62 2e 73 68 61 70 65 5b 3a 32 5d 29 29 0a 20 20 20 20 65 6c 73 65 /(np.prod(b.shape[:2])).....else
4940 3a 0a 20 20 20 20 20 20 20 20 75 20 3d 20 6e 70 2e 6f 6e 65 73 28 28 61 2e 73 68 61 70 65 5b 30 :.........u.=.np.ones((a.shape[0
4960 5d 2c 61 2e 73 68 61 70 65 5b 31 5d 29 29 2f 28 6e 70 2e 70 72 6f 64 28 61 2e 73 68 61 70 65 5b ],a.shape[1]))/(np.prod(a.shape[
4980 3a 32 5d 29 29 0a 20 20 20 20 20 20 20 20 76 20 3d 20 6e 70 2e 6f 6e 65 73 28 28 61 2e 73 68 61 :2])).........v.=.np.ones((a.sha
49a0 70 65 5b 30 5d 2c 61 2e 73 68 61 70 65 5b 31 5d 29 29 2f 28 6e 70 2e 70 72 6f 64 28 62 2e 73 68 pe[0],a.shape[1]))/(np.prod(b.sh
49c0 61 70 65 5b 3a 32 5d 29 29 0a 20 20 20 20 20 20 20 20 61 30 3d 31 2e 30 2f 28 6e 70 2e 70 72 6f ape[:2])).........a0=1.0/(np.pro
49e0 64 28 62 2e 73 68 61 70 65 5b 3a 32 5d 29 29 0a 20 20 20 20 20 20 20 20 0a 20 20 20 20 20 20 20 d(b.shape[:2])).................
4a00 20 0a 20 20 20 20 6b 3d 67 65 74 5f 31 44 6b 65 72 6e 65 6c 28 72 65 67 29 0a 20 20 20 20 0a 20 ......k=get_1Dkernel(reg).......
4a20 20 20 20 69 66 20 6e 62 62 3a 0a 20 20 20 20 20 20 20 20 4b 3d 6c 61 6d 62 64 61 20 49 3a 20 63 ...if.nbb:.........K=lambda.I:.c
4a40 6f 6e 76 32 6e 28 49 2c 6b 29 0a 20 20 20 20 65 6c 73 65 3a 0a 20 20 20 20 20 20 20 20 4b 3d 6c onv2n(I,k).....else:.........K=l
4a60 61 6d 62 64 61 20 49 3a 20 63 6f 6e 76 32 28 49 2c 6b 29 0a 0a 20 20 20 20 63 70 74 20 3d 20 30 ambda.I:.conv2(I,k)......cpt.=.0
4a80 0a 20 20 20 20 65 72 72 3d 31 0a 20 20 20 20 77 68 69 6c 65 20 28 65 72 72 3e 73 74 6f 70 54 68 .....err=1.....while.(err>stopTh
4aa0 72 20 61 6e 64 20 63 70 74 3c 6e 75 6d 49 74 65 72 6d 61 78 29 3a 0a 20 20 20 20 20 20 20 20 75 r.and.cpt<numItermax):.........u
4ac0 70 72 65 76 20 3d 20 75 0a 20 20 20 20 20 20 20 20 76 70 72 65 76 20 3d 20 76 0a 20 20 20 20 20 prev.=.u.........vprev.=.v......
4ae0 20 20 20 0a 20 20 20 20 20 20 20 20 76 20 3d 20 6e 70 2e 64 69 76 69 64 65 28 62 2c 20 4b 28 75 ............v.=.np.divide(b,.K(u
4b00 29 29 0a 20 20 20 20 20 20 20 20 75 20 3d 20 6e 70 2e 64 69 76 69 64 65 28 61 2c 20 4b 28 76 29 )).........u.=.np.divide(a,.K(v)
4b20 29 0a 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 70 2e 61 6e 79 28 6e 70 2e 69 73 6e 61 6e 28 75 )..........if.(np.any(np.isnan(u
4b40 29 29 20 6f 72 20 6e 70 2e 61 6e 79 28 6e 70 2e 69 73 6e 61 6e 28 76 29 29 20 0a 20 20 20 20 20 )).or.np.any(np.isnan(v)).......
4b60 20 20 20 20 20 20 20 6f 72 20 6e 70 2e 61 6e 79 28 6e 70 2e 69 73 69 6e 66 28 75 29 29 20 6f 72 .......or.np.any(np.isinf(u)).or
4b80 20 6e 70 2e 61 6e 79 28 6e 70 2e 69 73 69 6e 66 28 76 29 29 29 3a 0a 20 20 20 20 20 20 20 20 20 .np.any(np.isinf(v))):..........
4ba0 20 20 20 23 20 77 65 20 68 61 76 65 20 72 65 61 63 68 65 64 20 74 68 65 20 6d 61 63 68 69 6e 65 ...#.we.have.reached.the.machine
4bc0 20 70 72 65 63 69 73 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 63 6f 6d 65 20 62 61 .precision.............#.come.ba
4be0 63 6b 20 74 6f 20 70 72 65 76 69 6f 75 73 20 73 6f 6c 75 74 69 6f 6e 20 61 6e 64 20 71 75 69 74 ck.to.previous.solution.and.quit
4c00 20 6c 6f 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 28 27 57 61 72 6e 69 6e 67 .loop.............print('Warning
4c20 3a 20 6e 75 6d 65 72 69 63 61 6c 20 65 72 72 6f 72 73 20 61 74 20 69 74 65 72 61 74 69 6f 6e 27 :.numerical.errors.at.iteration'
4c40 2c 20 63 70 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 20 3d 20 75 70 72 65 76 0a 20 20 20 ,.cpt).............u.=.uprev....
4c60 20 20 20 20 20 20 20 20 20 76 20 3d 20 76 70 72 65 76 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 .........v.=.vprev.............b
4c80 72 65 61 6b 0a 20 20 20 20 20 20 20 20 69 66 20 63 70 74 25 31 30 3d 3d 30 3a 0a 20 20 20 20 20 reak.........if.cpt%10==0:......
4ca0 20 20 20 20 20 20 20 23 20 77 65 20 63 61 6e 20 73 70 65 65 64 20 75 70 20 74 68 65 20 70 72 6f .......#.we.can.speed.up.the.pro
4cc0 63 65 73 73 20 62 79 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20 6f cess.by.checking.for.the.error.o
4ce0 6e 6c 79 20 61 6c 6c 20 74 68 65 20 31 30 74 68 20 69 74 65 72 61 74 69 6f 6e 73 0a 0a 20 20 20 nly.all.the.10th.iterations.....
4d00 20 20 20 20 20 20 20 20 20 65 72 72 20 3d 20 6e 70 2e 73 75 6d 28 28 75 2d 75 70 72 65 76 29 2a .........err.=.np.sum((u-uprev)*
4d20 2a 32 29 2f 6e 70 2e 73 75 6d 28 28 75 29 2a 2a 32 29 2b 6e 70 2e 73 75 6d 28 28 76 2d 76 70 72 *2)/np.sum((u)**2)+np.sum((v-vpr
4d40 65 76 29 2a 2a 32 29 2f 6e 70 2e 73 75 6d 28 28 76 29 2a 2a 32 29 0a 0a 20 20 20 20 20 20 20 20 ev)**2)/np.sum((v)**2)..........
4d60 20 20 20 20 69 66 20 6c 6f 67 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 67 5b ....if.log:.................log[
4d80 27 65 72 72 27 5d 2e 61 70 70 65 6e 64 28 65 72 72 29 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 'err'].append(err)..............
4da0 69 66 20 76 65 72 62 6f 73 65 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 63 if.verbose:.................if.c
4dc0 70 74 25 32 30 30 20 3d 3d 30 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 pt%200.==0:.....................
4de0 70 72 69 6e 74 28 27 7b 3a 35 73 7d 7c 7b 3a 31 32 73 7d 27 2e 66 6f 72 6d 61 74 28 27 49 74 2e print('{:5s}|{:12s}'.format('It.
4e00 27 2c 27 45 72 72 27 29 2b 27 5c 6e 27 2b 27 2d 27 2a 31 39 29 0a 20 20 20 20 20 20 20 20 20 20 ','Err')+'\n'+'-'*19)...........
4e20 20 20 20 20 20 20 70 72 69 6e 74 28 27 7b 3a 35 64 7d 7c 7b 3a 38 65 7d 7c 27 2e 66 6f 72 6d 61 ......print('{:5d}|{:8e}|'.forma
4e40 74 28 63 70 74 2c 65 72 72 29 29 0a 20 20 20 20 20 20 20 20 63 70 74 20 3d 20 63 70 74 20 2b 31 t(cpt,err)).........cpt.=.cpt.+1
4e60 0a 20 20 20 20 69 66 20 6c 6f 67 3a 0a 20 20 20 20 20 20 20 20 6c 6f 67 5b 27 75 27 5d 3d 75 0a .....if.log:.........log['u']=u.
4e80 20 20 20 20 20 20 20 20 6c 6f 67 5b 27 76 27 5d 3d 76 0a 20 20 20 20 20 20 20 20 0a 20 20 20 20 ........log['v']=v..............
4ea0 69 66 20 6e 62 62 3a 20 23 72 65 74 75 72 6e 20 6f 6e 6c 79 20 6c 6f 73 73 20 0a 20 20 20 20 20 if.nbb:.#return.only.loss.......
4ec0 20 20 20 72 65 73 3d 6e 70 2e 7a 65 72 6f 73 28 28 6e 62 62 29 29 0a 20 20 20 20 20 20 20 20 66 ...res=np.zeros((nbb)).........f
4ee0 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6e 62 62 29 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 or.i.in.range(nbb):.............
4f00 72 65 73 5b 69 5d 3d 6e 70 2e 73 75 6d 28 75 5b 3a 2c 69 5d 2e 72 65 73 68 61 70 65 28 28 2d 31 res[i]=np.sum(u[:,i].reshape((-1
4f20 2c 31 29 29 2a 4b 2a 76 5b 3a 2c 69 5d 2e 72 65 73 68 61 70 65 28 28 31 2c 2d 31 29 29 2a 4d 29 ,1))*K*v[:,i].reshape((1,-1))*M)
4f40 0a 20 20 20 20 20 20 20 20 69 66 20 6c 6f 67 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 .........if.log:.............ret
4f60 75 72 6e 20 72 65 73 2c 6c 6f 67 0a 20 20 20 20 20 20 20 20 65 6c 73 65 3a 0a 20 20 20 20 20 20 urn.res,log.........else:.......
4f80 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 20 20 20 20 20 20 20 20 0a 20 20 20 20 20 20 20 ......return.res................
4fa0 20 0a 20 20 20 20 65 6c 73 65 3a 20 23 20 72 65 74 75 72 6e 20 4f 54 20 6d 61 74 72 69 78 0a 20 ......else:.#.return.OT.matrix..
4fc0 20 20 20 20 20 20 20 72 65 73 3d 72 65 67 2a 61 30 2a 6e 70 2e 73 75 6d 28 61 2a 6d 79 6c 6f 67 .......res=reg*a0*np.sum(a*mylog
4fe0 28 75 2b 28 75 3d 3d 30 29 29 2b 62 2a 6d 79 6c 6f 67 28 76 2b 28 76 3d 3d 30 29 29 29 0a 20 20 (u+(u==0))+b*mylog(v+(v==0)))...
5000 20 20 20 20 20 20 69 66 20 6c 6f 67 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 20 ......if.log:...................
5020 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 2c 6c 6f 67 0a 20 20 20 20 20 20 20 20 65 6c .......return.res,log.........el
5040 73 65 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 0a 0a 72 65 67 3d se:.............return.res..reg=
5060 31 65 30 0a 72 2c 6c 6f 67 3d 73 69 6e 6b 68 6f 72 6e 5f 63 6f 6e 76 28 49 30 2c 49 31 2c 72 65 1e0.r,log=sinkhorn_conv(I0,I1,re
5080 67 2c 76 65 72 62 6f 73 65 3d 54 72 75 65 2c 6c 6f 67 3d 54 72 75 65 29 0a 61 3d 49 30 0a 62 3d g,verbose=True,log=True).a=I0.b=
50a0 49 31 0a 75 3d 6c 6f 67 5b 27 75 27 5d 0a 76 3d 6c 6f 67 5b 27 76 27 5d 0a 23 25 25 20 62 61 72 I1.u=log['u'].v=log['v'].#%%.bar
50c0 79 63 65 6e 74 65 72 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 0a 50 4b 03 04 14 00 00 00 00 00 ycenter.interpolation.PK........
50e0 cb 86 1e 4b fc 6c a8 1a 46 0b 00 00 46 0b 00 00 23 00 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 ...K.l..F...F...#...auto_example
5100 73 2f 70 6c 6f 74 5f 62 61 72 79 63 65 6e 74 65 72 5f 31 44 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 s/plot_barycenter_1D.py#.-*-.cod
5120 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 3d ing:.utf-8.-*-.""".=============
5140 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 31 44 20 57 61 73 73 65 72 73 74 65 69 6e =================.1D.Wasserstein
5160 20 62 61 72 79 63 65 6e 74 65 72 20 64 65 6d 6f 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d .barycenter.demo.===============
5180 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a 20 ===============.."""..#.Author:.
51a0 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
51c0 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 69 .fr>.#.#.License:.MIT.License..i
51e0 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 mport.numpy.as.np.import.matplot
5200 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 65 lib.pylab.as.pl.import.ot.#.nece
5220 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 73 ssary.for.3d.plot.even.if.not.us
5240 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 70 ed.from.mpl_toolkits.mplot3d.imp
5260 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 6c ort.Axes3D..#.noqa.from.matplotl
5280 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 63 ib.collections.import.PolyCollec
52a0 74 69 6f 6e 0a 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 6e 20 3d 20 31 30 30 20 20 tion...#%%.parameters..n.=.100..
52c0 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 3d 20 6e #.nb.bins..#.bin.positions.x.=.n
52e0 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 0a 0a 23 p.arange(n,.dtype=np.float64)..#
5300 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 6f 74 2e .Gaussian.distributions.a1.=.ot.
5320 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 2c 20 73 datasets.get_1D_gauss(n,.m=20,.s
5340 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 74 2e 64 =5)..#.m=.mean,.s=.std.a2.=.ot.d
5360 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 20 73 3d atasets.get_1D_gauss(n,.m=60,.s=
5380 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 69 6e 69 8)..#.creating.matrix.A.containi
53a0 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 73 74 61 ng.all.distributions.A.=.np.vsta
53c0 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 73 20 3d ck((a1,.a2)).T.n_distributions.=
53e0 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 6e 6f 72 .A.shape[1]..#.loss.matrix.+.nor
5400 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 28 6e 29 malization.M.=.ot.utils.dist0(n)
5420 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 29 0a 0a 23 25 25 20 70 6c 6f 74 20 74 68 65 20 64 69 73 74 .M./=.M.max()..#%%.plot.the.dist
5440 72 69 62 75 74 69 6f 6e 73 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d ributions..pl.figure(1,.figsize=
5460 28 36 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 (6.4,.3)).for.i.in.range(n_distr
5480 69 62 75 74 69 6f 6e 73 29 3a 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 2c 20 41 5b 3a 2c 20 69 ibutions):.....pl.plot(x,.A[:,.i
54a0 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 44 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 70 6c 2e ]).pl.title('Distributions').pl.
54c0 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 23 25 25 20 62 61 72 79 63 65 6e 74 65 72 20 63 tight_layout()..#%%.barycenter.c
54e0 6f 6d 70 75 74 61 74 69 6f 6e 0a 0a 61 6c 70 68 61 20 3d 20 30 2e 32 20 20 23 20 30 3c 3d 61 6c omputation..alpha.=.0.2..#.0<=al
5500 70 68 61 3c 3d 31 0a 77 65 69 67 68 74 73 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 31 20 2d 20 61 pha<=1.weights.=.np.array([1.-.a
5520 6c 70 68 61 2c 20 61 6c 70 68 61 5d 29 0a 0a 23 20 6c 32 62 61 72 79 0a 62 61 72 79 5f 6c 32 20 lpha,.alpha])..#.l2bary.bary_l2.
5540 3d 20 41 2e 64 6f 74 28 77 65 69 67 68 74 73 29 0a 0a 23 20 77 61 73 73 65 72 73 74 65 69 6e 0a =.A.dot(weights)..#.wasserstein.
5560 72 65 67 20 3d 20 31 65 2d 33 0a 62 61 72 79 5f 77 61 73 73 20 3d 20 6f 74 2e 62 72 65 67 6d 61 reg.=.1e-3.bary_wass.=.ot.bregma
5580 6e 2e 62 61 72 79 63 65 6e 74 65 72 28 41 2c 20 4d 2c 20 72 65 67 2c 20 77 65 69 67 68 74 73 29 n.barycenter(A,.M,.reg,.weights)
55a0 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 2e 73 75 62 70 6c ..pl.figure(2).pl.clf().pl.subpl
55c0 6f 74 28 32 2c 20 31 2c 20 31 29 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6e 5f 64 69 73 ot(2,.1,.1).for.i.in.range(n_dis
55e0 74 72 69 62 75 74 69 6f 6e 73 29 3a 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 2c 20 41 5b 3a 2c tributions):.....pl.plot(x,.A[:,
5600 20 69 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 44 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a .i]).pl.title('Distributions')..
5620 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 31 2c 20 32 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 pl.subplot(2,.1,.2).pl.plot(x,.b
5640 61 72 79 5f 6c 32 2c 20 27 72 27 2c 20 6c 61 62 65 6c 3d 27 6c 32 27 29 0a 70 6c 2e 70 6c 6f 74 ary_l2,.'r',.label='l2').pl.plot
5660 28 78 2c 20 62 61 72 79 5f 77 61 73 73 2c 20 27 67 27 2c 20 6c 61 62 65 6c 3d 27 57 61 73 73 65 (x,.bary_wass,.'g',.label='Wasse
5680 72 73 74 65 69 6e 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 29 0a 70 6c 2e 74 69 74 6c 65 28 27 42 rstein').pl.legend().pl.title('B
56a0 61 72 79 63 65 6e 74 65 72 73 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a arycenters').pl.tight_layout()..
56c0 23 25 25 20 62 61 72 79 63 65 6e 74 65 72 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 0a 0a 6e 5f #%%.barycenter.interpolation..n_
56e0 61 6c 70 68 61 20 3d 20 31 31 0a 61 6c 70 68 61 5f 6c 69 73 74 20 3d 20 6e 70 2e 6c 69 6e 73 70 alpha.=.11.alpha_list.=.np.linsp
5700 61 63 65 28 30 2c 20 31 2c 20 6e 5f 61 6c 70 68 61 29 0a 0a 0a 42 5f 6c 32 20 3d 20 6e 70 2e 7a ace(0,.1,.n_alpha)...B_l2.=.np.z
5720 65 72 6f 73 28 28 6e 2c 20 6e 5f 61 6c 70 68 61 29 29 0a 0a 42 5f 77 61 73 73 20 3d 20 6e 70 2e eros((n,.n_alpha))..B_wass.=.np.
5740 63 6f 70 79 28 42 5f 6c 32 29 0a 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 30 2c 20 6e 5f copy(B_l2)..for.i.in.range(0,.n_
5760 61 6c 70 68 61 29 3a 0a 20 20 20 20 61 6c 70 68 61 20 3d 20 61 6c 70 68 61 5f 6c 69 73 74 5b 69 alpha):.....alpha.=.alpha_list[i
5780 5d 0a 20 20 20 20 77 65 69 67 68 74 73 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 31 20 2d 20 61 6c ].....weights.=.np.array([1.-.al
57a0 70 68 61 2c 20 61 6c 70 68 61 5d 29 0a 20 20 20 20 42 5f 6c 32 5b 3a 2c 20 69 5d 20 3d 20 41 2e pha,.alpha]).....B_l2[:,.i].=.A.
57c0 64 6f 74 28 77 65 69 67 68 74 73 29 0a 20 20 20 20 42 5f 77 61 73 73 5b 3a 2c 20 69 5d 20 3d 20 dot(weights).....B_wass[:,.i].=.
57e0 6f 74 2e 62 72 65 67 6d 61 6e 2e 62 61 72 79 63 65 6e 74 65 72 28 41 2c 20 4d 2c 20 72 65 67 2c ot.bregman.barycenter(A,.M,.reg,
5800 20 77 65 69 67 68 74 73 29 0a 0a 23 25 25 20 70 6c 6f 74 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f .weights)..#%%.plot.interpolatio
5820 6e 0a 0a 70 6c 2e 66 69 67 75 72 65 28 33 29 0a 0a 63 6d 61 70 20 3d 20 70 6c 2e 63 6d 2e 67 65 n..pl.figure(3)..cmap.=.pl.cm.ge
5840 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.
5860 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
5880 74 65 28 7a 73 29 3a 0a 20 20 20 20 79 73 20 3d 20 42 5f 6c 32 5b 3a 2c 20 69 5d 0a 20 20 20 20 te(zs):.....ys.=.B_l2[:,.i].....
58a0 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 0a 0a verts.append(list(zip(x,.ys)))..
58c0 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 33 64 ax.=.pl.gcf().gca(projection='3d
58e0 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 73 2c ')..poly.=.PolyCollection(verts,
5900 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 61 6c .facecolors=[cmap(a).for.a.in.al
5920 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 0a 61 pha_list]).poly.set_alpha(0.7).a
5940 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 2c 20 x.add_collection3d(poly,.zs=zs,.
5960 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 78 2e zdir='y').ax.set_xlabel('x').ax.
5980 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 28 27 set_xlim3d(0,.n).ax.set_ylabel('
59a0 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 29 0a $\\alpha$').ax.set_ylim3d(0,.1).
59c0 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 64 28 ax.set_zlabel('').ax.set_zlim3d(
59e0 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 28 27 0,.B_l2.max().*.1.01).pl.title('
5a00 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 6c 32 Barycenter.interpolation.with.l2
5a20 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 ').pl.tight_layout()..pl.figure(
5a40 34 29 0a 63 6d 61 70 20 3d 20 70 6c 2e 63 6d 2e 67 65 74 5f 63 6d 61 70 28 27 76 69 72 69 64 69 4).cmap.=.pl.cm.get_cmap('viridi
5a60 73 27 29 0a 76 65 72 74 73 20 3d 20 5b 5d 0a 7a 73 20 3d 20 61 6c 70 68 61 5f 6c 69 73 74 0a 66 s').verts.=.[].zs.=.alpha_list.f
5a80 6f 72 20 69 2c 20 7a 20 69 6e 20 65 6e 75 6d 65 72 61 74 65 28 7a 73 29 3a 0a 20 20 20 20 79 73 or.i,.z.in.enumerate(zs):.....ys
5aa0 20 3d 20 42 5f 77 61 73 73 5b 3a 2c 20 69 5d 0a 20 20 20 20 76 65 72 74 73 2e 61 70 70 65 6e 64 .=.B_wass[:,.i].....verts.append
5ac0 28 6c 69 73 74 28 7a 69 70 28 78 2c 20 79 73 29 29 29 0a 0a 61 78 20 3d 20 70 6c 2e 67 63 66 28 (list(zip(x,.ys)))..ax.=.pl.gcf(
5ae0 29 2e 67 63 61 28 70 72 6f 6a 65 63 74 69 6f 6e 3d 27 33 64 27 29 0a 0a 70 6f 6c 79 20 3d 20 50 ).gca(projection='3d')..poly.=.P
5b00 6f 6c 79 43 6f 6c 6c 65 63 74 69 6f 6e 28 76 65 72 74 73 2c 20 66 61 63 65 63 6f 6c 6f 72 73 3d olyCollection(verts,.facecolors=
5b20 5b 63 6d 61 70 28 61 29 20 66 6f 72 20 61 20 69 6e 20 61 6c 70 68 61 5f 6c 69 73 74 5d 29 0a 70 [cmap(a).for.a.in.alpha_list]).p
5b40 6f 6c 79 2e 73 65 74 5f 61 6c 70 68 61 28 30 2e 37 29 0a 61 78 2e 61 64 64 5f 63 6f 6c 6c 65 63 oly.set_alpha(0.7).ax.add_collec
5b60 74 69 6f 6e 33 64 28 70 6f 6c 79 2c 20 7a 73 3d 7a 73 2c 20 7a 64 69 72 3d 27 79 27 29 0a 61 78 tion3d(poly,.zs=zs,.zdir='y').ax
5b80 2e 73 65 74 5f 78 6c 61 62 65 6c 28 27 78 27 29 0a 61 78 2e 73 65 74 5f 78 6c 69 6d 33 64 28 30 .set_xlabel('x').ax.set_xlim3d(0
5ba0 2c 20 6e 29 0a 61 78 2e 73 65 74 5f 79 6c 61 62 65 6c 28 27 24 5c 5c 61 6c 70 68 61 24 27 29 0a ,.n).ax.set_ylabel('$\\alpha$').
5bc0 61 78 2e 73 65 74 5f 79 6c 69 6d 33 64 28 30 2c 20 31 29 0a 61 78 2e 73 65 74 5f 7a 6c 61 62 65 ax.set_ylim3d(0,.1).ax.set_zlabe
5be0 6c 28 27 27 29 0a 61 78 2e 73 65 74 5f 7a 6c 69 6d 33 64 28 30 2c 20 42 5f 6c 32 2e 6d 61 78 28 l('').ax.set_zlim3d(0,.B_l2.max(
5c00 29 20 2a 20 31 2e 30 31 29 0a 70 6c 2e 74 69 74 6c 65 28 27 42 61 72 79 63 65 6e 74 65 72 20 69 ).*.1.01).pl.title('Barycenter.i
5c20 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 20 77 69 74 68 20 57 61 73 73 65 72 73 74 65 69 6e 27 29 0a nterpolation.with.Wasserstein').
5c40 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.
5c60 04 14 00 00 00 00 00 cb 86 1e 4b b7 26 0b b3 8b 11 00 00 8b 11 00 00 22 00 00 00 61 75 74 6f 5f ..........K.&.........."...auto_
5c80 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 6f 74 64 61 5f 63 6c 61 73 73 65 73 2e 70 79 23 20 2d examples/plot_otda_classes.py#.-
5ca0 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.-*-.""".=======
5cc0 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.
5ce0 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.=====================
5d00 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
5d20 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
5d40 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
5d60 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
5d80 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
5da0 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
5dc0 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
5de0 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
5e00 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
5e20 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...#########################
5e40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
5e60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 67 65 6e 65 72 61 74 65 #####################.#.generate
5e80 20 64 61 74 61 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 .data.##########################
5ea0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
5ec0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 6e 5f 73 6f 75 72 63 65 5f 73 ####################..n_source_s
5ee0 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 20 amples.=.150.n_target_samples.=.
5f00 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 61 150..Xs,.ys.=.ot.datasets.get_da
5f20 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 61 ta_classif('3gauss',.n_source_sa
5f40 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 5f mples).Xt,.yt.=.ot.datasets.get_
5f60 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 74 data_classif('3gauss2',.n_target
5f80 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 23 _samples)...####################
5fa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
5fc0 23 23 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 73 ##########################.#.Ins
5fe0 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 74 tantiate.the.different.transport
6000 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 23 23 23 23 23 23 .algorithms.and.fit.them.#######
6020 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
6040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
6060 23 23 23 23 23 23 23 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.
6080 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
60a0 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
60c0 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
60e0 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
6100 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
6120 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
6140 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
6160 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
6180 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=
61a0 79 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 53 69 6e 6b 68 6f 72 6e 20 54 72 61 6e 73 70 6f 72 74 ys,.Xt=Xt)..#.Sinkhorn.Transport
61c0 20 77 69 74 68 20 47 72 6f 75 70 20 6c 61 73 73 6f 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e .with.Group.lasso.regularization
61e0 20 6c 31 6c 32 0a 6f 74 5f 6c 31 6c 32 20 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b 68 6f 72 6e 4c 31 .l1l2.ot_l1l2.=.ot.da.SinkhornL1
6200 6c 32 54 72 61 6e 73 70 6f 72 74 28 72 65 67 5f 65 3d 31 65 2d 31 2c 20 72 65 67 5f 63 6c 3d 32 l2Transport(reg_e=1e-1,.reg_cl=2
6220 65 30 2c 20 6d 61 78 5f 69 74 65 72 3d 32 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e0,.max_iter=20,................
6240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 3d 54 .......................verbose=T
6260 72 75 65 29 0a 6f 74 5f 6c 31 6c 32 2e 66 69 74 28 58 73 3d 58 73 2c 20 79 73 3d 79 73 2c 20 58 rue).ot_l1l2.fit(Xs=Xs,.ys=ys,.X
6280 74 3d 58 74 29 0a 0a 23 20 74 72 61 6e 73 70 6f 72 74 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 t=Xt)..#.transport.source.sample
62a0 73 20 6f 6e 74 6f 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 0a 74 72 61 6e 73 70 5f 58 73 5f s.onto.target.samples.transp_Xs_
62c0 65 6d 64 20 3d 20 6f 74 5f 65 6d 64 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 74 72 emd.=.ot_emd.transform(Xs=Xs).tr
62e0 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 5f 73 69 6e 6b 68 6f 72 6e 2e 74 ansp_Xs_sinkhorn.=.ot_sinkhorn.t
6300 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 74 72 61 6e 73 70 5f 58 73 5f 6c 70 6c 31 20 3d ransform(Xs=Xs).transp_Xs_lpl1.=
6320 20 6f 74 5f 6c 70 6c 31 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 74 72 61 6e 73 70 .ot_lpl1.transform(Xs=Xs).transp
6340 5f 58 73 5f 6c 31 6c 32 20 3d 20 6f 74 5f 6c 31 6c 32 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d _Xs_l1l2.=.ot_l1l2.transform(Xs=
6360 58 73 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 Xs)...##########################
6380 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
63a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 67 20 31 20 3a 20 70 ####################.#.Fig.1.:.p
63c0 6c 6f 74 73 20 73 6f 75 72 63 65 20 61 6e 64 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 0a 23 lots.source.and.target.samples.#
63e0 23 23 23 23 23 23 23 23 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 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 #############..pl.figure(1,.figs
6440 69 7a 65 3d 28 31 30 2c 20 35 29 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 ize=(10,.5)).pl.subplot(1,.2,.1)
6460 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 58 73 5b 3a 2c 20 31 5d 2c 20 .pl.scatter(Xs[:,.0],.Xs[:,.1],.
6480 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 c=ys,.marker='+',.label='Source.
64a0 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b samples').pl.xticks([]).pl.ytick
64c0 73 28 5b 5d 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 s([]).pl.legend(loc=0).pl.title(
64e0 27 53 6f 75 72 63 65 20 20 73 61 6d 70 6c 65 73 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 'Source..samples')..pl.subplot(1
6500 2c 20 32 2c 20 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b ,.2,.2).pl.scatter(Xt[:,.0],.Xt[
6520 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 20 6c 61 62 65 6c 3d 27 :,.1],.c=yt,.marker='o',.label='
6540 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 Target.samples').pl.xticks([]).p
6560 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c l.yticks([]).pl.legend(loc=0).pl
6580 2e 74 69 74 6c 65 28 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 74 69 67 68 .title('Target.samples').pl.tigh
65a0 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 t_layout()...###################
65c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
65e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 ###########################.#.Fi
6600 67 20 32 20 3a 20 70 6c 6f 74 20 6f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 73 20 61 6e 64 g.2.:.plot.optimal.couplings.and
6620 20 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 0a 23 23 23 23 23 23 23 23 23 23 23 .transported.samples.###########
6640 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
6660 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
6680 23 23 23 0a 0a 70 61 72 61 6d 5f 69 6d 67 20 3d 20 7b 27 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e ###..param_img.=.{'interpolation
66a0 27 3a 20 27 6e 65 61 72 65 73 74 27 2c 20 27 63 6d 61 70 27 3a 20 27 73 70 65 63 74 72 61 6c 27 ':.'nearest',.'cmap':.'spectral'
66c0 7d 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 35 2c 20 38 29 29 }..pl.figure(2,.figsize=(15,.8))
66e0 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 34 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f .pl.subplot(2,.4,.1).pl.imshow(o
6700 74 5f 65 6d 64 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 t_emd.coupling_,.**param_img).pl
6720 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 .xticks([]).pl.yticks([]).pl.tit
6740 6c 65 28 27 4f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 5c 6e 45 4d 44 54 72 61 6e 73 70 6f le('Optimal.coupling\nEMDTranspo
6760 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 34 2c 20 32 29 0a 70 6c 2e 69 6d 73 rt')..pl.subplot(2,.4,.2).pl.ims
6780 68 6f 77 28 6f 74 5f 73 69 6e 6b 68 6f 72 6e 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 2a 2a 70 61 72 how(ot_sinkhorn.coupling_,.**par
67a0 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(
67c0 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
67e0 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 SinkhornTransport')..pl.subplot(
6800 32 2c 20 34 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 2,.4,.3).pl.imshow(ot_lpl1.coupl
6820 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([])
6840 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
6860 20 63 6f 75 70 6c 69 6e 67 5c 6e 53 69 6e 6b 68 6f 72 6e 4c 70 6c 31 54 72 61 6e 73 70 6f 72 74 .coupling\nSinkhornLpl1Transport
6880 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 34 2c 20 34 29 0a 70 6c 2e 69 6d 73 68 6f ')..pl.subplot(2,.4,.4).pl.imsho
68a0 77 28 6f 74 5f 6c 31 6c 32 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 2a 2a 70 61 72 61 6d 5f 69 6d 67 w(ot_l1l2.coupling_,.**param_img
68c0 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c ).pl.xticks([]).pl.yticks([]).pl
68e0 2e 74 69 74 6c 65 28 27 4f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 5c 6e 53 69 6e 6b 68 6f .title('Optimal.coupling\nSinkho
6900 72 6e 4c 31 6c 32 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 rnL1l2Transport')..pl.subplot(2,
6920 20 34 2c 20 35 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 .4,.5).pl.scatter(Xt[:,.0],.Xt[:
6940 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 20 ,.1],.c=yt,.marker='o',.........
6960 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 61 ...label='Target.samples',.alpha
6980 3d 30 2e 33 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 5b 3a =0.3).pl.scatter(transp_Xs_emd[:
69a0 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 2c 20 63 3d 79 73 2c ,.0],.transp_Xs_emd[:,.1],.c=ys,
69c0 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 54 ............marker='+',.label='T
69e0 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 20 73 3d 33 30 29 0a 70 6c 2e 78 74 69 63 6b 73 28 ransp.samples',.s=30).pl.xticks(
6a00 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 72 61 6e []).pl.yticks([]).pl.title('Tran
6a20 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 5c 6e 45 6d 64 54 72 61 6e 73 70 6f 72 74 27 29 0a sported.samples\nEmdTransport').
6a40 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 22 6c 6f 77 65 72 20 6c 65 66 74 22 29 0a 0a 70 6c 2e pl.legend(loc="lower.left")..pl.
6a60 73 75 62 70 6c 6f 74 28 32 2c 20 34 2c 20 36 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a subplot(2,.4,.6).pl.scatter(Xt[:
6a80 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'
6aa0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c ,............label='Target.sampl
6ac0 65 73 27 2c 20 61 6c 70 68 61 3d 30 2e 33 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 es',.alpha=0.3).pl.scatter(trans
6ae0 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 73 p_Xs_sinkhorn[:,.0],.transp_Xs_s
6b00 69 6e 6b 68 6f 72 6e 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 inkhorn[:,.1],.c=ys,............
6b20 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 65 marker='+',.label='Transp.sample
6b40 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 6b s',.s=30).pl.xticks([]).pl.ytick
6b60 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 70 s([]).pl.title('Transported.samp
6b80 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 0a 70 6c 2e 73 75 62 les\nSinkhornTransport')..pl.sub
6ba0 70 6c 6f 74 28 32 2c 20 34 2c 20 37 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 plot(2,.4,.7).pl.scatter(Xt[:,.0
6bc0 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',..
6be0 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'
6c00 2c 20 61 6c 70 68 61 3d 30 2e 33 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 ,.alpha=0.3).pl.scatter(transp_X
6c20 73 5f 6c 70 6c 31 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 6c 70 6c 31 5b 3a 2c 20 s_lpl1[:,.0],.transp_Xs_lpl1[:,.
6c40 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='+',
6c60 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
6c80 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
6ca0 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
6cc0 72 6e 4c 70 6c 31 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c rnLpl1Transport')..pl.subplot(2,
6ce0 20 34 2c 20 38 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 .4,.8).pl.scatter(Xt[:,.0],.Xt[:
6d00 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 20 ,.1],.c=yt,.marker='o',.........
6d20 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 61 ...label='Target.samples',.alpha
6d40 3d 30 2e 33 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 6c 31 6c 32 5b =0.3).pl.scatter(transp_Xs_l1l2[
6d60 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 6c 31 6c 32 5b 3a 2c 20 31 5d 2c 20 63 3d 79 :,.0],.transp_Xs_l1l2[:,.1],.c=y
6d80 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d s,............marker='+',.label=
6da0 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 78 74 69 63 6b 'Transp.samples',.s=30).pl.xtick
6dc0 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 54 72 s([]).pl.yticks([]).pl.title('Tr
6de0 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 5c 6e 53 69 6e 6b 68 6f 72 6e 4c 31 6c 32 54 ansported.samples\nSinkhornL1l2T
6e00 72 61 6e 73 70 6f 72 74 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c ransport').pl.tight_layout()..pl
6e20 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 34 87 1e 4b 2c a6 a3 c4 4a 11 00 00 4a 11 .show().PK........4..K,...J...J.
6e40 00 00 30 00 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 6f 74 64 61 5f 6d 61 ..0...auto_examples/plot_otda_ma
6e60 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 2a 2d 20 63 6f 64 69 pping_colors_images.py#.-*-.codi
6e80 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ng:.utf-8.-*-.""".==============
6ea0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================================
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 3d 3d 3d ================================
6ee0 3d 3d 3d 3d 3d 3d 0a 4f 54 20 66 6f 72 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 20 ======.OT.for.domain.adaptation.
6f00 77 69 74 68 20 69 6d 61 67 65 20 63 6f 6c 6f 72 20 61 64 61 70 74 61 74 69 6f 6e 20 5b 36 5d 20 with.image.color.adaptation.[6].
6f20 77 69 74 68 20 6d 61 70 70 69 6e 67 20 65 73 74 69 6d 61 74 69 6f 6e 20 5b 38 5d 0a 3d 3d 3d 3d with.mapping.estimation.[8].====
6f40 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================================
6f60 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================================
6f80 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 5b 36 5d 20 46 65 72 72 61 64 61 6e 73 2c ================..[6].Ferradans,
6fa0 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 26 .S.,.Papadakis,.N.,.Peyre,.G.,.&
6fc0 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 65 .Aujol,.J..F..(2014)..Regularize
6fe0 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 74 d.....discrete.optimal.transport
7000 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 63 ..SIAM.Journal.on.Imaging.Scienc
7020 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 20 es,.7(3),.....1853-1882..[8].M..
7040 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 41 Perrot,.N..Courty,.R..Flamary,.A
7060 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 66 ..Habrard,."Mapping.estimation.f
7080 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 72 or.....discrete.optimal.transpor
70a0 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 6e t",.Neural.Information.Processin
70c0 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 22 g.Systems.(NIPS),.....2016..."""
70e0 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 2e ..#.Authors:.Remi.Flamary.<remi.
7100 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 61 flamary@unice.fr>.#..........Sta
7120 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 61 nislas.Chambon.<stan.chambon@gma
7140 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 65 il.com>.#.#.License:.MIT.License
7160 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 20 ..import.numpy.as.np.from.scipy.
7180 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 62 import.ndimage.import.matplotlib
71a0 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 72 .pylab.as.pl.import.ot..r.=.np.r
71c0 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 6d andom.RandomState(42)...def.im2m
71e0 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 65 at(I):....."""Converts.and.image
7200 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 22 .to.matrix.(one.pixel.per.line)"
7220 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 65 "".....return.I.reshape((I.shape
7240 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 0a [0].*.I.shape[1],.I.shape[2]))..
7260 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 6f .def.mat2im(X,.shape):....."""Co
7280 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 65 nverts.back.a.matrix.to.an.image
72a0 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 0a """.....return.X.reshape(shape).
72c0 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 63 ..def.minmax(I):.....return.np.c
72e0 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 23 lip(I,.0,.1)...#################
7300 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7320 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 #############################.#.
7340 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 Generate.data.##################
7360 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7380 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23 20 ############################..#.
73a0 4c 6f 61 64 69 6e 67 20 69 6d 61 67 65 73 0a 49 31 20 3d 20 6e 64 69 6d 61 67 65 2e 69 6d 72 65 Loading.images.I1.=.ndimage.imre
73c0 61 64 28 27 2e 2e 2f 64 61 74 61 2f 6f 63 65 61 6e 5f 64 61 79 2e 6a 70 67 27 29 2e 61 73 74 79 ad('../data/ocean_day.jpg').asty
73e0 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 20 2f 20 32 35 36 0a 49 32 20 3d 20 6e 64 69 6d 61 67 pe(np.float64)./.256.I2.=.ndimag
7400 65 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 6f 63 65 61 6e 5f 73 75 6e 73 65 74 2e 6a e.imread('../data/ocean_sunset.j
7420 70 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 20 2f 20 32 35 36 0a 0a 0a pg').astype(np.float64)./.256...
7440 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 29 0a X1.=.im2mat(I1).X2.=.im2mat(I2).
7460 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 69 64 .#.training.samples.nb.=.1000.id
7480 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 7a 65 x1.=.r.randint(X1.shape[0],.size
74a0 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 61 70 =(nb,)).idx2.=.r.randint(X2.shap
74c0 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 31 2c e[0],.size=(nb,))..Xs.=.X1[idx1,
74e0 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 23 23 .:].Xt.=.X2[idx2,.:]...#########
7500 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7520 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7540 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 70 69 #####.#.Domain.adaptation.for.pi
7560 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 23 23 23 23 23 xel.distribution.transfer.######
7580 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
75a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
75c0 23 23 23 23 23 23 23 23 0a 0a 23 20 45 4d 44 54 72 61 6e 73 70 6f 72 74 0a 6f 74 5f 65 6d 64 20 ########..#.EMDTransport.ot_emd.
75e0 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
7600 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 20 3d 20 t(Xs=Xs,.Xt=Xt).transp_Xs_emd.=.
7620 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 6d 61 67 65 5f 65 6d ot_emd.transform(Xs=X1).Image_em
7640 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 58 73 5f 65 6d 64 2c d.=.minmax(mat2im(transp_Xs_emd,
7660 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 61 6e 73 70 6f 72 74 .I1.shape))..#.SinkhornTransport
7680 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
76a0 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
76c0 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 it(Xs=Xs,.Xt=Xt).transp_Xs_sinkh
76e0 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 49 6d orn.=.ot_emd.transform(Xs=X1).Im
7700 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 32 69 6d 28 74 72 61 age_sinkhorn.=.minmax(mat2im(tra
7720 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 29 29 0a 0a 6f 74 5f nsp_Xs_sinkhorn,.I1.shape))..ot_
7740 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 20 3d 20 6f 74 2e 64 61 2e 4d 61 70 70 69 6e 67 54 72 mapping_linear.=.ot.da.MappingTr
7760 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 31 65 2d 38 2c 20 62 ansport(.....mu=1e0,.eta=1e-8,.b
7780 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 72 62 6f 73 65 3d 54 ias=True,.max_iter=20,.verbose=T
77a0 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 74 28 58 73 3d 58 73 rue).ot_mapping_linear.fit(Xs=Xs
77c0 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 6e 67 5f 6c 69 6e 65 ,.Xt=Xt)..X1tl.=.ot_mapping_line
77e0 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 5f 6d 61 70 70 69 6e ar.transform(Xs=X1).Image_mappin
7800 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 58 31 74 6c 2c 20 49 g_linear.=.minmax(mat2im(X1tl,.I
7820 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 73 73 69 61 6e 20 3d 1.shape))..ot_mapping_gaussian.=
7840 20 6f 74 2e 64 61 2e 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 28 0a 20 20 20 20 6d 75 3d .ot.da.MappingTransport(.....mu=
7860 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 69 61 73 3d 46 61 6c 1e0,.eta=1e-2,.sigma=1,.bias=Fal
7880 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 54 72 75 65 29 0a 6f se,.max_iter=10,.verbose=True).o
78a0 74 5f 6d 61 70 70 69 6e 67 5f 67 61 75 73 73 69 61 6e 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 t_mapping_gaussian.fit(Xs=Xs,.Xt
78c0 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 61 75 73 73 69 61 6e =Xt)..X1tn.=.ot_mapping_gaussian
78e0 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 74 68 65 20 65 73 74 .transform(Xs=X1)..#.use.the.est
7900 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 69 6e 67 5f 67 61 75 imated.mapping.Image_mapping_gau
7920 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 6e 2c 20 49 31 2e 73 ssian.=.minmax(mat2im(X1tn,.I1.s
7940 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 23 23 23 23 23 23 23 hape))...#######################
7960 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7980 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 70 6c 6f 74 20 6f #######################.#.plot.o
79a0 72 69 67 69 6e 61 6c 20 69 6d 61 67 65 73 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 riginal.images.#################
79c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
79e0 23 23 23 23 23 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 0a 70 #############################..p
7a00 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 29 29 0a 70 6c l.figure(1,.figsize=(6.4,.3)).pl
7a20 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 29 0a .subplot(1,.2,.1).pl.imshow(I1).
7a40 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 31 pl.axis('off').pl.title('Image.1
7a60 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f ')..pl.subplot(1,.2,.2).pl.imsho
7a80 77 28 49 32 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 w(I2).pl.axis('off').pl.title('I
7aa0 6d 61 67 65 20 32 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 0a 23 23 23 mage.2').pl.tight_layout()...###
7ac0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7ae0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7b00 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 70 6c 6f 74 20 70 69 78 65 6c 20 76 61 6c 75 65 73 20 ###########.#.plot.pixel.values.
7b20 64 69 73 74 72 69 62 75 74 69 6f 6e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 distribution.###################
7b40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7b60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 70 6c 2e ###########################..pl.
7b80 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 2e figure(2,.figsize=(6.4,.5))..pl.
7ba0 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 3a subplot(1,.2,.1).pl.scatter(Xs[:
7bc0 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 30 ,.0],.Xs[:,.2],.c=Xs).pl.axis([0
7be0 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 2e ,.1,.0,.1]).pl.xlabel('Red').pl.
7c00 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 31 ylabel('Blue').pl.title('Image.1
7c20 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 74 ')..pl.subplot(1,.2,.2).pl.scatt
7c40 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 2e er(Xt[:,.0],.Xt[:,.2],.c=Xt).pl.
7c60 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 65 axis([0,.1,.0,.1]).pl.xlabel('Re
7c80 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 27 d').pl.ylabel('Blue').pl.title('
7ca0 49 6d 61 67 65 20 32 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 0a 23 23 Image.2').pl.tight_layout()...##
7cc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7ce0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7d00 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 70 6c 6f 74 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 ############.#.plot.transformed.
7d20 69 6d 61 67 65 73 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 images.#########################
7d40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
7d60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 70 6c 2e 66 69 67 75 72 65 #####################..pl.figure
7d80 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 31 30 2c 20 35 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 (2,.figsize=(10,.5))..pl.subplot
7da0 28 32 2c 20 33 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 29 0a 70 6c 2e 61 78 69 73 28 (2,.3,.1).pl.imshow(I1).pl.axis(
7dc0 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 2e 20 31 27 29 0a 0a 70 6c 2e 73 75 62 'off').pl.title('Im..1')..pl.sub
7de0 70 6c 6f 74 28 32 2c 20 33 2c 20 34 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 29 0a 70 6c 2e 61 plot(2,.3,.4).pl.imshow(I2).pl.a
7e00 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 2e 20 32 27 29 0a 0a 70 6c xis('off').pl.title('Im..2')..pl
7e20 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 6d 61 67 .subplot(2,.3,.2).pl.imshow(Imag
7e40 65 5f 65 6d 64 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 e_emd).pl.axis('off').pl.title('
7e60 45 6d 64 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c EmdTransport')..pl.subplot(2,.3,
7e80 20 35 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 6d 61 67 65 5f 73 69 6e 6b 68 6f 72 6e 29 0a 70 6c .5).pl.imshow(Image_sinkhorn).pl
7ea0 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 69 6e 6b 68 6f 72 6e 54 .axis('off').pl.title('SinkhornT
7ec0 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 33 29 0a ransport')..pl.subplot(2,.3,.3).
7ee0 70 6c 2e 69 6d 73 68 6f 77 28 49 6d 61 67 65 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 29 0a pl.imshow(Image_mapping_linear).
7f00 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 4d 61 70 70 69 6e 67 pl.axis('off').pl.title('Mapping
7f20 54 72 61 6e 73 70 6f 72 74 20 28 6c 69 6e 65 61 72 29 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 Transport.(linear)')..pl.subplot
7f40 28 32 2c 20 33 2c 20 36 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 6d 61 67 65 5f 6d 61 70 70 69 6e (2,.3,.6).pl.imshow(Image_mappin
7f60 67 5f 67 61 75 73 73 69 61 6e 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 g_gaussian).pl.axis('off').pl.ti
7f80 74 6c 65 28 27 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 20 28 67 61 75 73 73 69 61 6e 29 tle('MappingTransport.(gaussian)
7fa0 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a ').pl.tight_layout()..pl.show().
7fc0 50 4b 03 04 14 00 00 00 00 00 6a 7b 82 49 25 c9 d6 13 1c 06 00 00 1c 06 00 00 28 00 00 00 61 75 PK........j{.I%...........(...au
7fe0 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 64 65 6d 6f 5f 4f 54 5f 32 44 5f 73 61 6d 70 6c 65 73 6c 61 to_examples/demo_OT_2D_samplesla
8000 72 67 65 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 rge.py#.-*-.coding:.utf-8.-*-.""
8020 22 0a 44 65 6d 6f 20 66 6f 72 20 32 44 20 4f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 20 ".Demo.for.2D.Optimal.transport.
8040 62 65 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 between.empirical.distributions.
8060 0a 40 61 75 74 68 6f 72 3a 20 72 66 6c 61 6d 61 72 79 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6e .@author:.rflamary."""..import.n
8080 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c umpy.as.np.import.matplotlib.pyl
80a0 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 65 ab.as.pl.import.ot..#%%.paramete
80c0 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 3d 35 30 30 30 20 23 rs.and.data.generation..n=5000.#
80e0 20 6e 62 20 73 61 6d 70 6c 65 73 0a 0a 6d 75 5f 73 3d 6e 70 2e 61 72 72 61 79 28 5b 30 2c 30 5d .nb.samples..mu_s=np.array([0,0]
8100 29 0a 63 6f 76 5f 73 3d 6e 70 2e 61 72 72 61 79 28 5b 5b 31 2c 30 5d 2c 5b 30 2c 31 5d 5d 29 0a ).cov_s=np.array([[1,0],[0,1]]).
8120 0a 6d 75 5f 74 3d 6e 70 2e 61 72 72 61 79 28 5b 34 2c 34 5d 29 0a 63 6f 76 5f 74 3d 6e 70 2e 61 .mu_t=np.array([4,4]).cov_t=np.a
8140 72 72 61 79 28 5b 5b 31 2c 2d 2e 38 5d 2c 5b 2d 2e 38 2c 31 5d 5d 29 0a 0a 78 73 3d 6f 74 2e 64 rray([[1,-.8],[-.8,1]])..xs=ot.d
8160 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 2c 6d atasets.get_2D_samples_gauss(n,m
8180 75 5f 73 2c 63 6f 76 5f 73 29 0a 78 74 3d 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 32 44 u_s,cov_s).xt=ot.datasets.get_2D
81a0 5f 73 61 6d 70 6c 65 73 5f 67 61 75 73 73 28 6e 2c 6d 75 5f 74 2c 63 6f 76 5f 74 29 0a 0a 61 2c _samples_gauss(n,mu_t,cov_t)..a,
81c0 62 20 3d 20 6f 74 2e 75 6e 69 66 28 6e 29 2c 6f 74 2e 75 6e 69 66 28 6e 29 20 23 20 75 6e 69 66 b.=.ot.unif(n),ot.unif(n).#.unif
81e0 6f 72 6d 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6f 6e 20 73 61 6d 70 6c 65 73 0a 0a 23 20 6c orm.distribution.on.samples..#.l
8200 6f 73 73 20 6d 61 74 72 69 78 0a 4d 3d 6f 74 2e 64 69 73 74 28 78 73 2c 78 74 29 0a 4d 2f 3d 4d oss.matrix.M=ot.dist(xs,xt).M/=M
8220 2e 6d 61 78 28 29 0a 0a 23 25 25 20 70 6c 6f 74 20 73 61 6d 70 6c 65 73 0a 0a 23 70 6c 2e 66 69 .max()..#%%.plot.samples..#pl.fi
8240 67 75 72 65 28 31 29 0a 23 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 30 5d 2c 78 73 5b 3a 2c 31 5d gure(1).#pl.plot(xs[:,0],xs[:,1]
8260 2c 27 2b 62 27 2c 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 23 70 ,'+b',label='Source.samples').#p
8280 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 30 5d 2c 78 74 5b 3a 2c 31 5d 2c 27 78 72 27 2c 6c 61 62 65 l.plot(xt[:,0],xt[:,1],'xr',labe
82a0 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 23 70 6c 2e 6c 65 67 65 6e 64 28 6c l='Target.samples').#pl.legend(l
82c0 6f 63 3d 30 29 0a 23 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 oc=0).#pl.title('Source.and.trag
82e0 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 23 0a 23 70 6c 2e 66 69 67 75 72 65 28 et.distributions').#.#pl.figure(
8300 32 29 0a 23 70 6c 2e 69 6d 73 68 6f 77 28 4d 2c 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 2).#pl.imshow(M,interpolation='n
8320 65 61 72 65 73 74 27 29 0a 23 70 6c 2e 74 69 74 6c 65 28 27 43 6f 73 74 20 6d 61 74 72 69 78 20 earest').#pl.title('Cost.matrix.
8340 4d 27 29 0a 23 0a 0a 23 25 25 20 45 4d 44 0a 0a 47 30 3d 6f 74 2e 65 6d 64 28 61 2c 62 2c 4d 29 M').#..#%%.EMD..G0=ot.emd(a,b,M)
8360 0a 0a 23 70 6c 2e 66 69 67 75 72 65 28 33 29 0a 23 70 6c 2e 69 6d 73 68 6f 77 28 47 30 2c 69 6e ..#pl.figure(3).#pl.imshow(G0,in
8380 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 23 70 6c 2e 74 69 74 6c 65 terpolation='nearest').#pl.title
83a0 28 27 4f 54 20 6d 61 74 72 69 78 20 47 30 27 29 0a 23 0a 23 70 6c 2e 66 69 67 75 72 65 28 34 29 ('OT.matrix.G0').#.#pl.figure(4)
83c0 0a 23 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 78 73 2c .#ot.plot.plot2D_samples_mat(xs,
83e0 78 74 2c 47 30 2c 63 3d 5b 2e 35 2c 2e 35 2c 31 5d 29 0a 23 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a xt,G0,c=[.5,.5,1]).#pl.plot(xs[:
8400 2c 30 5d 2c 78 73 5b 3a 2c 31 5d 2c 27 2b 62 27 2c 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 ,0],xs[:,1],'+b',label='Source.s
8420 61 6d 70 6c 65 73 27 29 0a 23 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 30 5d 2c 78 74 5b 3a 2c 31 amples').#pl.plot(xt[:,0],xt[:,1
8440 5d 2c 27 78 72 27 2c 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 23 ],'xr',label='Target.samples').#
8460 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 23 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 6d pl.legend(loc=0).#pl.title('OT.m
8480 61 74 72 69 78 20 77 69 74 68 20 73 61 6d 70 6c 65 73 27 29 0a 0a 0a 23 25 25 20 73 69 6e 6b 68 atrix.with.samples')...#%%.sinkh
84a0 6f 72 6e 0a 0a 23 20 72 65 67 20 74 65 72 6d 0a 6c 61 6d 62 64 3d 35 65 2d 33 0a 0a 47 73 3d 6f orn..#.reg.term.lambd=5e-3..Gs=o
84c0 74 2e 73 69 6e 6b 68 6f 72 6e 28 61 2c 62 2c 4d 2c 6c 61 6d 62 64 29 0a 0a 23 70 6c 2e 66 69 67 t.sinkhorn(a,b,M,lambd)..#pl.fig
84e0 75 72 65 28 35 29 0a 23 70 6c 2e 69 6d 73 68 6f 77 28 47 73 2c 69 6e 74 65 72 70 6f 6c 61 74 69 ure(5).#pl.imshow(Gs,interpolati
8500 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 23 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 6d 61 74 72 on='nearest').#pl.title('OT.matr
8520 69 78 20 73 69 6e 6b 68 6f 72 6e 27 29 0a 23 0a 23 70 6c 2e 66 69 67 75 72 65 28 36 29 0a 23 6f ix.sinkhorn').#.#pl.figure(6).#o
8540 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 78 74 2c t.plot.plot2D_samples_mat(xs,xt,
8560 47 73 2c 63 6f 6c 6f 72 3d 5b 2e 35 2c 2e 35 2c 31 5d 29 0a 23 70 6c 2e 70 6c 6f 74 28 78 73 5b Gs,color=[.5,.5,1]).#pl.plot(xs[
8580 3a 2c 30 5d 2c 78 73 5b 3a 2c 31 5d 2c 27 2b 62 27 2c 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 :,0],xs[:,1],'+b',label='Source.
85a0 73 61 6d 70 6c 65 73 27 29 0a 23 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 30 5d 2c 78 74 5b 3a 2c samples').#pl.plot(xt[:,0],xt[:,
85c0 31 5d 2c 27 78 72 27 2c 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 1],'xr',label='Target.samples').
85e0 23 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 23 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 #pl.legend(loc=0).#pl.title('OT.
8600 6d 61 74 72 69 78 20 53 69 6e 6b 68 6f 72 6e 20 77 69 74 68 20 73 61 6d 70 6c 65 73 27 29 0a 23 matrix.Sinkhorn.with.samples').#
8620 0a 0a 50 4b 03 04 14 00 00 00 00 00 cb 86 1e 4b bc ce 2e 7c c3 0b 00 00 c3 0b 00 00 21 00 00 00 ..PK...........K...|........!...
8640 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 4f 54 5f 4c 31 5f 76 73 5f 4c 32 2e 70 auto_examples/plot_OT_L1_vs_L2.p
8660 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.-*-.""".===
8680 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================================
86a0 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 66 6f 72 =======.2D.Optimal.transport.for
86c0 20 64 69 66 66 65 72 65 6e 74 20 6d 65 74 72 69 63 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d .different.metrics.=============
86e0 3d 3d 3d 3d 3d 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 53 =============================..S
8700 74 6f 6c 65 20 74 68 65 20 66 69 67 75 72 65 20 69 64 65 61 20 66 72 6f 6d 20 46 69 67 2e 20 31 tole.the.figure.idea.from.Fig..1
8720 20 61 6e 64 20 32 20 69 6e 0a 68 74 74 70 73 3a 2f 2f 61 72 78 69 76 2e 6f 72 67 2f 70 64 66 2f .and.2.in.https://arxiv.org/pdf/
8740 31 37 30 36 2e 30 37 36 35 30 2e 70 64 66 0a 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a 20 1706.07650.pdf..."""..#.Author:.
8760 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
8780 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 69 .fr>.#.#.License:.MIT.License..i
87a0 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 mport.numpy.as.np.import.matplot
87c0 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 23 25 25 20 70 lib.pylab.as.pl.import.ot..#%%.p
87e0 61 72 61 6d 65 74 65 72 73 20 61 6e 64 20 64 61 74 61 20 67 65 6e 65 72 61 74 69 6f 6e 0a 0a 66 arameters.and.data.generation..f
8800 6f 72 20 64 61 74 61 20 69 6e 20 72 61 6e 67 65 28 32 29 3a 0a 0a 20 20 20 20 69 66 20 64 61 74 or.data.in.range(2):......if.dat
8820 61 3a 0a 20 20 20 20 20 20 20 20 6e 20 3d 20 32 30 20 20 23 20 6e 62 20 73 61 6d 70 6c 65 73 0a a:.........n.=.20..#.nb.samples.
8840 20 20 20 20 20 20 20 20 78 73 20 3d 20 6e 70 2e 7a 65 72 6f 73 28 28 6e 2c 20 32 29 29 0a 20 20 ........xs.=.np.zeros((n,.2))...
8860 20 20 20 20 20 20 78 73 5b 3a 2c 20 30 5d 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 29 20 2b 20 ......xs[:,.0].=.np.arange(n).+.
8880 31 0a 20 20 20 20 20 20 20 20 78 73 5b 3a 2c 20 31 5d 20 3d 20 28 6e 70 2e 61 72 61 6e 67 65 28 1.........xs[:,.1].=.(np.arange(
88a0 6e 29 20 2b 20 31 29 20 2a 20 2d 30 2e 30 30 31 20 20 23 20 74 6f 20 6d 61 6b 65 20 69 74 20 73 n).+.1).*.-0.001..#.to.make.it.s
88c0 74 72 69 63 74 6c 79 20 63 6f 6e 76 65 78 2e 2e 2e 0a 0a 20 20 20 20 20 20 20 20 78 74 20 3d 20 trictly.convex.............xt.=.
88e0 6e 70 2e 7a 65 72 6f 73 28 28 6e 2c 20 32 29 29 0a 20 20 20 20 20 20 20 20 78 74 5b 3a 2c 20 31 np.zeros((n,.2)).........xt[:,.1
8900 5d 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 29 20 2b 20 31 0a 20 20 20 20 65 6c 73 65 3a 0a 0a ].=.np.arange(n).+.1.....else:..
8920 20 20 20 20 20 20 20 20 6e 20 3d 20 35 30 20 20 23 20 6e 62 20 73 61 6d 70 6c 65 73 0a 20 20 20 ........n.=.50..#.nb.samples....
8940 20 20 20 20 20 78 74 6f 74 20 3d 20 6e 70 2e 7a 65 72 6f 73 28 28 6e 20 2b 20 31 2c 20 32 29 29 .....xtot.=.np.zeros((n.+.1,.2))
8960 0a 20 20 20 20 20 20 20 20 78 74 6f 74 5b 3a 2c 20 30 5d 20 3d 20 6e 70 2e 63 6f 73 28 0a 20 20 .........xtot[:,.0].=.np.cos(...
8980 20 20 20 20 20 20 20 20 20 20 28 6e 70 2e 61 72 61 6e 67 65 28 6e 20 2b 20 31 29 20 2b 20 31 2e ..........(np.arange(n.+.1).+.1.
89a0 30 29 20 2a 20 30 2e 39 20 2f 20 28 6e 20 2b 20 32 29 20 2a 20 32 20 2a 20 6e 70 2e 70 69 29 0a 0).*.0.9./.(n.+.2).*.2.*.np.pi).
89c0 20 20 20 20 20 20 20 20 78 74 6f 74 5b 3a 2c 20 31 5d 20 3d 20 6e 70 2e 73 69 6e 28 0a 20 20 20 ........xtot[:,.1].=.np.sin(....
89e0 20 20 20 20 20 20 20 20 20 28 6e 70 2e 61 72 61 6e 67 65 28 6e 20 2b 20 31 29 20 2b 20 31 2e 30 .........(np.arange(n.+.1).+.1.0
8a00 29 20 2a 20 30 2e 39 20 2f 20 28 6e 20 2b 20 32 29 20 2a 20 32 20 2a 20 6e 70 2e 70 69 29 0a 0a ).*.0.9./.(n.+.2).*.2.*.np.pi)..
8a20 20 20 20 20 20 20 20 20 78 73 20 3d 20 78 74 6f 74 5b 3a 6e 2c 20 3a 5d 0a 20 20 20 20 20 20 20 ........xs.=.xtot[:n,.:]........
8a40 20 78 74 20 3d 20 78 74 6f 74 5b 31 3a 2c 20 3a 5d 0a 0a 20 20 20 20 61 2c 20 62 20 3d 20 6f 74 .xt.=.xtot[1:,.:]......a,.b.=.ot
8a60 2e 75 6e 69 66 28 6e 29 2c 20 6f 74 2e 75 6e 69 66 28 6e 29 20 20 23 20 75 6e 69 66 6f 72 6d 20 .unif(n),.ot.unif(n)..#.uniform.
8a80 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6f 6e 20 73 61 6d 70 6c 65 73 0a 0a 20 20 20 20 23 20 6c distribution.on.samples......#.l
8aa0 6f 73 73 20 6d 61 74 72 69 78 0a 20 20 20 20 4d 31 20 3d 20 6f 74 2e 64 69 73 74 28 78 73 2c 20 oss.matrix.....M1.=.ot.dist(xs,.
8ac0 78 74 2c 20 6d 65 74 72 69 63 3d 27 65 75 63 6c 69 64 65 61 6e 27 29 0a 20 20 20 20 4d 31 20 2f xt,.metric='euclidean').....M1./
8ae0 3d 20 4d 31 2e 6d 61 78 28 29 0a 0a 20 20 20 20 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 20 20 =.M1.max()......#.loss.matrix...
8b00 20 20 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 ..M2.=.ot.dist(xs,.xt,.metric='s
8b20 71 65 75 63 6c 69 64 65 61 6e 27 29 0a 20 20 20 20 4d 32 20 2f 3d 20 4d 32 2e 6d 61 78 28 29 0a qeuclidean').....M2./=.M2.max().
8b40 0a 20 20 20 20 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 20 20 20 20 4d 70 20 3d 20 6e 70 2e 73 .....#.loss.matrix.....Mp.=.np.s
8b60 71 72 74 28 6f 74 2e 64 69 73 74 28 78 73 2c 20 78 74 2c 20 6d 65 74 72 69 63 3d 27 65 75 63 6c qrt(ot.dist(xs,.xt,.metric='eucl
8b80 69 64 65 61 6e 27 29 29 0a 20 20 20 20 4d 70 20 2f 3d 20 4d 70 2e 6d 61 78 28 29 0a 0a 20 20 20 idean')).....Mp./=.Mp.max().....
8ba0 20 23 25 25 20 70 6c 6f 74 20 73 61 6d 70 6c 65 73 0a 0a 20 20 20 20 70 6c 2e 66 69 67 75 72 65 .#%%.plot.samples......pl.figure
8bc0 28 31 20 2b 20 33 20 2a 20 64 61 74 61 2c 20 66 69 67 73 69 7a 65 3d 28 37 2c 20 33 29 29 0a 20 (1.+.3.*.data,.figsize=(7,.3))..
8be0 20 20 20 70 6c 2e 63 6c 66 28 29 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d ...pl.clf().....pl.plot(xs[:,.0]
8c00 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 65 20 ,.xs[:,.1],.'+b',.label='Source.
8c20 73 61 6d 70 6c 65 73 27 29 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 samples').....pl.plot(xt[:,.0],.
8c40 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 xt[:,.1],.'xr',.label='Target.sa
8c60 6d 70 6c 65 73 27 29 0a 20 20 20 20 70 6c 2e 61 78 69 73 28 27 65 71 75 61 6c 27 29 0a 20 20 20 mples').....pl.axis('equal')....
8c80 20 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 .pl.title('Source.and.traget.dis
8ca0 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 20 20 20 20 70 6c 2e 66 69 67 75 72 65 28 32 20 2b 20 tributions')......pl.figure(2.+.
8cc0 33 20 2a 20 64 61 74 61 2c 20 66 69 67 73 69 7a 65 3d 28 37 2c 20 33 29 29 0a 0a 20 20 20 20 70 3.*.data,.figsize=(7,.3))......p
8ce0 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 31 29 0a 20 20 20 20 70 6c 2e 69 6d 73 68 6f 77 l.subplot(1,.3,.1).....pl.imshow
8d00 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 20 20 (M1,.interpolation='nearest')...
8d20 20 20 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 20 20 ..pl.title('Euclidean.cost')....
8d40 20 20 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 32 29 0a 20 20 20 20 70 6c 2e 69 6d 73 ..pl.subplot(1,.3,.2).....pl.ims
8d60 68 6f 77 28 4d 32 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 how(M2,.interpolation='nearest')
8d80 0a 20 20 20 20 70 6c 2e 74 69 74 6c 65 28 27 53 71 75 61 72 65 64 20 45 75 63 6c 69 64 65 61 6e .....pl.title('Squared.Euclidean
8da0 20 63 6f 73 74 27 29 0a 0a 20 20 20 20 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 33 29 .cost')......pl.subplot(1,.3,.3)
8dc0 0a 20 20 20 20 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 6e .....pl.imshow(Mp,.interpolation
8de0 3d 27 6e 65 61 72 65 73 74 27 29 0a 20 20 20 20 70 6c 2e 74 69 74 6c 65 28 27 53 71 72 74 20 45 ='nearest').....pl.title('Sqrt.E
8e00 75 63 6c 69 64 65 61 6e 20 63 6f 73 74 27 29 0a 20 20 20 20 70 6c 2e 74 69 67 68 74 5f 6c 61 79 uclidean.cost').....pl.tight_lay
8e20 6f 75 74 28 29 0a 0a 20 20 20 20 23 25 25 20 45 4d 44 0a 20 20 20 20 47 31 20 3d 20 6f 74 2e 65 out()......#%%.EMD.....G1.=.ot.e
8e40 6d 64 28 61 2c 20 62 2c 20 4d 31 29 0a 20 20 20 20 47 32 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 md(a,.b,.M1).....G2.=.ot.emd(a,.
8e60 62 2c 20 4d 32 29 0a 20 20 20 20 47 70 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 70 29 b,.M2).....Gp.=.ot.emd(a,.b,.Mp)
8e80 0a 0a 20 20 20 20 70 6c 2e 66 69 67 75 72 65 28 33 20 2b 20 33 20 2a 20 64 61 74 61 2c 20 66 69 ......pl.figure(3.+.3.*.data,.fi
8ea0 67 73 69 7a 65 3d 28 37 2c 20 33 29 29 0a 0a 20 20 20 20 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c gsize=(7,.3))......pl.subplot(1,
8ec0 20 33 2c 20 31 29 0a 20 20 20 20 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 .3,.1).....ot.plot.plot2D_sample
8ee0 73 5f 6d 61 74 28 78 73 2c 20 78 74 2c 20 47 31 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 s_mat(xs,.xt,.G1,.c=[.5,..5,.1])
8f00 0a 20 20 20 20 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 .....pl.plot(xs[:,.0],.xs[:,.1],
8f20 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 20 .'+b',.label='Source.samples')..
8f40 20 20 20 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 ...pl.plot(xt[:,.0],.xt[:,.1],.'
8f60 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 20 20 20 xr',.label='Target.samples')....
8f80 20 70 6c 2e 61 78 69 73 28 27 65 71 75 61 6c 27 29 0a 20 20 20 20 23 20 70 6c 2e 6c 65 67 65 6e .pl.axis('equal').....#.pl.legen
8fa0 64 28 6c 6f 63 3d 30 29 0a 20 20 20 20 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 45 75 63 6c 69 64 d(loc=0).....pl.title('OT.Euclid
8fc0 65 61 6e 27 29 0a 0a 20 20 20 20 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 32 29 0a 20 ean')......pl.subplot(1,.3,.2)..
8fe0 20 20 20 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 ...ot.plot.plot2D_samples_mat(xs
9000 2c 20 78 74 2c 20 47 32 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 20 20 20 20 70 6c 2e ,.xt,.G2,.c=[.5,..5,.1]).....pl.
9020 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c plot(xs[:,.0],.xs[:,.1],.'+b',.l
9040 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 20 20 20 20 70 6c 2e 70 6c abel='Source.samples').....pl.pl
9060 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 ot(xt[:,.0],.xt[:,.1],.'xr',.lab
9080 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 20 20 20 20 70 6c 2e 61 78 69 73 el='Target.samples').....pl.axis
90a0 28 27 65 71 75 61 6c 27 29 0a 20 20 20 20 23 20 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 ('equal').....#.pl.legend(loc=0)
90c0 0a 20 20 20 20 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 64 .....pl.title('OT.squared.Euclid
90e0 65 61 6e 27 29 0a 0a 20 20 20 20 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 33 29 0a 20 ean')......pl.subplot(1,.3,.3)..
9100 20 20 20 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 ...ot.plot.plot2D_samples_mat(xs
9120 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 20 20 20 20 70 6c 2e ,.xt,.Gp,.c=[.5,..5,.1]).....pl.
9140 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c plot(xs[:,.0],.xs[:,.1],.'+b',.l
9160 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 20 20 20 20 70 6c 2e 70 6c abel='Source.samples').....pl.pl
9180 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 ot(xt[:,.0],.xt[:,.1],.'xr',.lab
91a0 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 20 20 20 20 70 6c 2e 61 78 69 73 el='Target.samples').....pl.axis
91c0 28 27 65 71 75 61 6c 27 29 0a 20 20 20 20 23 20 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 ('equal').....#.pl.legend(loc=0)
91e0 0a 20 20 20 20 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 73 71 72 74 20 45 75 63 6c 69 64 65 61 6e .....pl.title('OT.sqrt.Euclidean
9200 27 29 0a 20 20 20 20 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 ').....pl.tight_layout()..pl.sho
9220 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 cb 86 1e 4b 7b 03 bf 32 03 07 00 00 03 07 00 00 23 00 w().PK...........K{..2........#.
9240 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 4f 54 5f 32 44 5f 73 61 6d 70 6c ..auto_examples/plot_OT_2D_sampl
9260 65 73 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 es.py#.-*-.coding:.utf-8.-*-."""
9280 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 .===============================
92a0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 32 44 20 4f 70 74 69 6d 61 6c =====================.2D.Optimal
92c0 20 74 72 61 6e 73 70 6f 72 74 20 62 65 74 77 65 65 6e 20 65 6d 70 69 72 69 63 61 6c 20 64 69 73 .transport.between.empirical.dis
92e0 74 72 69 62 75 74 69 6f 6e 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d tributions.=====================
9300 3d 3d 3d 3d 3d 3d 3d 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 ===============================.
9320 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 ."""..#.Author:.Remi.Flamary.<re
9340 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 mi.flamary@unice.fr>.#.#.License
9360 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e :.MIT.License..import.numpy.as.n
9380 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a p.import.matplotlib.pylab.as.pl.
93a0 69 6d 70 6f 72 74 20 6f 74 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 20 61 6e 64 20 64 61 import.ot..#%%.parameters.and.da
93c0 74 61 20 67 65 6e 65 72 61 74 69 6f 6e 0a 0a 6e 20 3d 20 35 30 20 20 23 20 6e 62 20 73 61 6d 70 ta.generation..n.=.50..#.nb.samp
93e0 6c 65 73 0a 0a 6d 75 5f 73 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 30 2c 20 30 5d 29 0a 63 6f 76 les..mu_s.=.np.array([0,.0]).cov
9400 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 0a _s.=.np.array([[1,.0],.[0,.1]]).
9420 0a 6d 75 5f 74 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 34 2c 20 34 5d 29 0a 63 6f 76 5f 74 20 3d .mu_t.=.np.array([4,.4]).cov_t.=
9440 20 6e 70 2e 61 72 72 61 79 28 5b 5b 31 2c 20 2d 2e 38 5d 2c 20 5b 2d 2e 38 2c 20 31 5d 5d 29 0a .np.array([[1,.-.8],.[-.8,.1]]).
9460 0a 78 73 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 32 44 5f 73 61 6d 70 6c 65 73 .xs.=.ot.datasets.get_2D_samples
9480 5f 67 61 75 73 73 28 6e 2c 20 6d 75 5f 73 2c 20 63 6f 76 5f 73 29 0a 78 74 20 3d 20 6f 74 2e 64 _gauss(n,.mu_s,.cov_s).xt.=.ot.d
94a0 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 2c 20 atasets.get_2D_samples_gauss(n,.
94c0 6d 75 5f 74 2c 20 63 6f 76 5f 74 29 0a 0a 61 2c 20 62 20 3d 20 6e 70 2e 6f 6e 65 73 28 28 6e 2c mu_t,.cov_t)..a,.b.=.np.ones((n,
94e0 29 29 20 2f 20 6e 2c 20 6e 70 2e 6f 6e 65 73 28 28 6e 2c 29 29 20 2f 20 6e 20 20 23 20 75 6e 69 ))./.n,.np.ones((n,))./.n..#.uni
9500 66 6f 72 6d 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6f 6e 20 73 61 6d 70 6c 65 73 0a 0a 23 20 form.distribution.on.samples..#.
9520 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 73 2c 20 78 74 29 0a loss.matrix.M.=.ot.dist(xs,.xt).
9540 4d 20 2f 3d 20 4d 2e 6d 61 78 28 29 0a 0a 23 25 25 20 70 6c 6f 74 20 73 61 6d 70 6c 65 73 0a 0a M./=.M.max()..#%%.plot.samples..
9560 70 6c 2e 66 69 67 75 72 65 28 31 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 pl.figure(1).pl.plot(xs[:,.0],.x
9580 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d s[:,.1],.'+b',.label='Source.sam
95a0 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 ples').pl.plot(xt[:,.0],.xt[:,.1
95c0 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 ],.'xr',.label='Target.samples')
95e0 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 72 .pl.legend(loc=0).pl.title('Sour
9600 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 70 ce.and.target.distributions')..p
9620 6c 2e 66 69 67 75 72 65 28 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 4d 2c 20 69 6e 74 65 72 70 6f l.figure(2).pl.imshow(M,.interpo
9640 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 43 6f 73 74 lation='nearest').pl.title('Cost
9660 20 6d 61 74 72 69 78 20 4d 27 29 0a 0a 0a 23 25 25 20 45 4d 44 0a 0a 47 30 20 3d 20 6f 74 2e 65 .matrix.M')...#%%.EMD..G0.=.ot.e
9680 6d 64 28 61 2c 20 62 2c 20 4d 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 33 29 0a 70 6c 2e 69 6d 73 md(a,.b,.M)..pl.figure(3).pl.ims
96a0 68 6f 77 28 47 30 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 how(G0,.interpolation='nearest')
96c0 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 6d 61 74 72 69 78 20 47 30 27 29 0a 0a 70 6c 2e 66 69 .pl.title('OT.matrix.G0')..pl.fi
96e0 67 75 72 65 28 34 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d gure(4).ot.plot.plot2D_samples_m
9700 61 74 28 78 73 2c 20 78 74 2c 20 47 30 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c at(xs,.xt,.G0,.c=[.5,..5,.1]).pl
9720 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 .plot(xs[:,.0],.xs[:,.1],.'+b',.
9740 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 label='Source.samples').pl.plot(
9760 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d xt[:,.0],.xt[:,.1],.'xr',.label=
9780 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 'Target.samples').pl.legend(loc=
97a0 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 6d 61 74 72 69 78 20 77 69 74 68 20 73 61 6d 70 0).pl.title('OT.matrix.with.samp
97c0 6c 65 73 27 29 0a 0a 0a 23 25 25 20 73 69 6e 6b 68 6f 72 6e 0a 0a 23 20 72 65 67 20 74 65 72 6d les')...#%%.sinkhorn..#.reg.term
97e0 0a 6c 61 6d 62 64 20 3d 20 31 65 2d 33 0a 0a 47 73 20 3d 20 6f 74 2e 73 69 6e 6b 68 6f 72 6e 28 .lambd.=.1e-3..Gs.=.ot.sinkhorn(
9800 61 2c 20 62 2c 20 4d 2c 20 6c 61 6d 62 64 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 35 29 0a 70 6c a,.b,.M,.lambd)..pl.figure(5).pl
9820 2e 69 6d 73 68 6f 77 28 47 73 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 .imshow(Gs,.interpolation='neare
9840 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 6d 61 74 72 69 78 20 73 69 6e 6b 68 6f 72 st').pl.title('OT.matrix.sinkhor
9860 6e 27 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 36 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 n')..pl.figure(6).ot.plot.plot2D
9880 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 78 73 2c 20 78 74 2c 20 47 73 2c 20 63 6f 6c 6f 72 3d 5b _samples_mat(xs,.xt,.Gs,.color=[
98a0 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 78 73 .5,..5,.1]).pl.plot(xs[:,.0],.xs
98c0 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 [:,.1],.'+b',.label='Source.samp
98e0 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d les').pl.plot(xt[:,.0],.xt[:,.1]
9900 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a ,.'xr',.label='Target.samples').
9920 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 6d 61 pl.legend(loc=0).pl.title('OT.ma
9940 74 72 69 78 20 53 69 6e 6b 68 6f 72 6e 20 77 69 74 68 20 73 61 6d 70 6c 65 73 27 29 0a 0a 70 6c trix.Sinkhorn.with.samples')..pl
9960 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 a9 83 e3 4a ec af 42 31 2e 0a 00 00 2e 0a .show().PK...........J..B1......
9980 00 00 1d 00 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 4f 54 44 41 5f 32 44 ......auto_examples/plot_OTDA_2D
99a0 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d .py#.-*-.coding:.utf-8.-*-.""".=
99c0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4f 54 =============================.OT
99e0 20 66 6f 72 20 65 6d 70 69 72 69 63 61 6c 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 3d 3d 3d .for.empirical.distributions.===
9a00 3d 3d 3d 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 22 22 22 ===========================.."""
9a20 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
9a40 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 0a lotlib.pylab.as.pl.import.ot....
9a60 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 6e 3d 31 35 30 20 23 20 6e 62 20 62 69 6e 73 0a #%%.parameters..n=150.#.nb.bins.
9a80 0a 78 73 2c 79 73 3d 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 .xs,ys=ot.datasets.get_data_clas
9aa0 73 69 66 28 27 33 67 61 75 73 73 27 2c 6e 29 0a 78 74 2c 79 74 3d 6f 74 2e 64 61 74 61 73 65 74 sif('3gauss',n).xt,yt=ot.dataset
9ac0 73 2e 67 65 74 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 27 33 67 61 75 73 73 32 27 2c 6e 29 0a s.get_data_classif('3gauss2',n).
9ae0 0a 61 2c 62 20 3d 20 6f 74 2e 75 6e 69 66 28 6e 29 2c 6f 74 2e 75 6e 69 66 28 6e 29 0a 23 20 6c .a,b.=.ot.unif(n),ot.unif(n).#.l
9b00 6f 73 73 20 6d 61 74 72 69 78 0a 4d 3d 6f 74 2e 64 69 73 74 28 78 73 2c 78 74 29 0a 23 4d 2f 3d oss.matrix.M=ot.dist(xs,xt).#M/=
9b20 4d 2e 6d 61 78 28 29 0a 0a 23 25 25 20 70 6c 6f 74 20 73 61 6d 70 6c 65 73 0a 0a 70 6c 2e 66 69 M.max()..#%%.plot.samples..pl.fi
9b40 67 75 72 65 28 31 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 32 2c 31 29 0a 70 6c 2e 73 63 gure(1)..pl.subplot(2,2,1).pl.sc
9b60 61 74 74 65 72 28 78 73 5b 3a 2c 30 5d 2c 78 73 5b 3a 2c 31 5d 2c 63 3d 79 73 2c 6d 61 72 6b 65 atter(xs[:,0],xs[:,1],c=ys,marke
9b80 72 3d 27 2b 27 2c 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 r='+',label='Source.samples').pl
9ba0 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 20 .legend(loc=0).pl.title('Source.
9bc0 20 64 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 32 .distributions')..pl.subplot(2,2
9be0 2c 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 74 5b 3a 2c 30 5d 2c 78 74 5b 3a 2c 31 5d 2c 63 ,2).pl.scatter(xt[:,0],xt[:,1],c
9c00 3d 79 74 2c 6d 61 72 6b 65 72 3d 27 6f 27 2c 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d =yt,marker='o',label='Target.sam
9c20 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 6c 65 ples').pl.legend(loc=0).pl.title
9c40 28 27 74 61 72 67 65 74 20 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 70 6c 2e 66 69 ('target..distributions')..pl.fi
9c60 67 75 72 65 28 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 4d 2c 69 6e 74 65 72 70 6f 6c 61 74 69 6f gure(2).pl.imshow(M,interpolatio
9c80 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 43 6f 73 74 20 6d 61 74 72 n='nearest').pl.title('Cost.matr
9ca0 69 78 20 4d 27 29 0a 0a 0a 23 25 25 20 4f 54 20 65 73 74 69 6d 61 74 69 6f 6e 0a 0a 23 20 45 4d ix.M')...#%%.OT.estimation..#.EM
9cc0 44 0a 47 30 3d 6f 74 2e 65 6d 64 28 61 2c 62 2c 4d 29 0a 0a 23 20 73 69 6e 6b 68 6f 72 6e 0a 6c D.G0=ot.emd(a,b,M)..#.sinkhorn.l
9ce0 61 6d 62 64 3d 31 65 2d 31 0a 47 73 3d 6f 74 2e 73 69 6e 6b 68 6f 72 6e 28 61 2c 62 2c 4d 2c 6c ambd=1e-1.Gs=ot.sinkhorn(a,b,M,l
9d00 61 6d 62 64 29 0a 0a 0a 23 20 47 72 6f 75 70 20 6c 61 73 73 6f 20 72 65 67 75 6c 61 72 69 7a 61 ambd)...#.Group.lasso.regulariza
9d20 74 69 6f 6e 0a 72 65 67 3d 31 65 2d 31 0a 65 74 61 3d 31 65 30 0a 47 67 3d 6f 74 2e 64 61 2e 73 tion.reg=1e-1.eta=1e0.Gg=ot.da.s
9d40 69 6e 6b 68 6f 72 6e 5f 6c 70 6c 31 5f 6d 6d 28 61 2c 79 73 2e 61 73 74 79 70 65 28 6e 70 2e 69 inkhorn_lpl1_mm(a,ys.astype(np.i
9d60 6e 74 29 2c 62 2c 4d 2c 72 65 67 2c 65 74 61 29 0a 0a 0a 23 25 25 20 76 69 73 75 20 6d 61 74 72 nt),b,M,reg,eta)...#%%.visu.matr
9d80 69 63 65 73 0a 0a 70 6c 2e 66 69 67 75 72 65 28 33 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 ices..pl.figure(3)..pl.subplot(2
9da0 2c 33 2c 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 47 30 2c 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e ,3,1).pl.imshow(G0,interpolation
9dc0 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 6d 61 74 72 69 78 20 ='nearest').pl.title('OT.matrix.
9de0 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 33 2c 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 ')..pl.subplot(2,3,2).pl.imshow(
9e00 47 73 2c 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 Gs,interpolation='nearest').pl.t
9e20 69 74 6c 65 28 27 4f 54 20 6d 61 74 72 69 78 20 53 69 6e 6b 68 6f 72 6e 27 29 0a 0a 70 6c 2e 73 itle('OT.matrix.Sinkhorn')..pl.s
9e40 75 62 70 6c 6f 74 28 32 2c 33 2c 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 47 67 2c 69 6e 74 65 72 ubplot(2,3,3).pl.imshow(Gg,inter
9e60 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 4f 54 polation='nearest').pl.title('OT
9e80 20 6d 61 74 72 69 78 20 47 72 6f 75 70 20 6c 61 73 73 6f 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f .matrix.Group.lasso')..pl.subplo
9ea0 74 28 32 2c 33 2c 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 t(2,3,4).ot.plot.plot2D_samples_
9ec0 6d 61 74 28 78 73 2c 78 74 2c 47 30 2c 63 3d 5b 2e 35 2c 2e 35 2c 31 5d 29 0a 70 6c 2e 73 63 61 mat(xs,xt,G0,c=[.5,.5,1]).pl.sca
9ee0 74 74 65 72 28 78 73 5b 3a 2c 30 5d 2c 78 73 5b 3a 2c 31 5d 2c 63 3d 79 73 2c 6d 61 72 6b 65 72 tter(xs[:,0],xs[:,1],c=ys,marker
9f00 3d 27 2b 27 2c 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.
9f20 73 63 61 74 74 65 72 28 78 74 5b 3a 2c 30 5d 2c 78 74 5b 3a 2c 31 5d 2c 63 3d 79 74 2c 6d 61 72 scatter(xt[:,0],xt[:,1],c=yt,mar
9f40 6b 65 72 3d 27 6f 27 2c 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a ker='o',label='Target.samples').
9f60 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 33 2c 35 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 ..pl.subplot(2,3,5).ot.plot.plot
9f80 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 78 73 2c 78 74 2c 47 73 2c 63 3d 5b 2e 35 2c 2e 35 2D_samples_mat(xs,xt,Gs,c=[.5,.5
9fa0 2c 31 5d 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 73 5b 3a 2c 30 5d 2c 78 73 5b 3a 2c 31 5d 2c ,1]).pl.scatter(xs[:,0],xs[:,1],
9fc0 63 3d 79 73 2c 6d 61 72 6b 65 72 3d 27 2b 27 2c 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 c=ys,marker='+',label='Source.sa
9fe0 6d 70 6c 65 73 27 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 74 5b 3a 2c 30 5d 2c 78 74 5b 3a 2c mples').pl.scatter(xt[:,0],xt[:,
a000 31 5d 2c 63 3d 79 74 2c 6d 61 72 6b 65 72 3d 27 6f 27 2c 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 1],c=yt,marker='o',label='Target
a020 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 33 2c 36 29 0a 6f 74 .samples')..pl.subplot(2,3,6).ot
a040 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 78 74 2c 47 .plot.plot2D_samples_mat(xs,xt,G
a060 67 2c 63 3d 5b 2e 35 2c 2e 35 2c 31 5d 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 73 5b 3a 2c 30 g,c=[.5,.5,1]).pl.scatter(xs[:,0
a080 5d 2c 78 73 5b 3a 2c 31 5d 2c 63 3d 79 73 2c 6d 61 72 6b 65 72 3d 27 2b 27 2c 6c 61 62 65 6c 3d ],xs[:,1],c=ys,marker='+',label=
a0a0 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 74 5b 'Source.samples').pl.scatter(xt[
a0c0 3a 2c 30 5d 2c 78 74 5b 3a 2c 31 5d 2c 63 3d 79 74 2c 6d 61 72 6b 65 72 3d 27 6f 27 2c 6c 61 62 :,0],xt[:,1],c=yt,marker='o',lab
a0e0 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 0a 23 25 25 20 73 61 6d 70 6c 65 el='Target.samples')..#%%.sample
a100 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 0a 0a 78 73 74 30 3d 6e 2a 47 30 2e 64 6f 74 28 78 74 .interpolation..xst0=n*G0.dot(xt
a120 29 0a 78 73 74 73 3d 6e 2a 47 73 2e 64 6f 74 28 78 74 29 0a 78 73 74 67 3d 6e 2a 47 67 2e 64 6f ).xsts=n*Gs.dot(xt).xstg=n*Gg.do
a140 74 28 78 74 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 34 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 t(xt)..pl.figure(4).pl.subplot(2
a160 2c 33 2c 31 29 0a 0a 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 74 5b 3a 2c 30 5d 2c 78 74 5b 3a 2c ,3,1)...pl.scatter(xt[:,0],xt[:,
a180 31 5d 2c 63 3d 79 74 2c 6d 61 72 6b 65 72 3d 27 6f 27 2c 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 1],c=yt,marker='o',label='Target
a1a0 20 73 61 6d 70 6c 65 73 27 2c 61 6c 70 68 61 3d 30 2e 35 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 .samples',alpha=0.5).pl.scatter(
a1c0 78 73 74 30 5b 3a 2c 30 5d 2c 78 73 74 30 5b 3a 2c 31 5d 2c 63 3d 79 73 2c 6d 61 72 6b 65 72 3d xst0[:,0],xst0[:,1],c=ys,marker=
a1e0 27 2b 27 2c 6c 61 62 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 73 3d 33 30 29 '+',label='Transp.samples',s=30)
a200 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6e 74 65 72 70 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c .pl.title('Interp.samples').pl.l
a220 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 33 2c 32 29 0a egend(loc=0)..pl.subplot(2,3,2).
a240 0a 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 74 5b 3a 2c 30 5d 2c 78 74 5b 3a 2c 31 5d 2c 63 3d 79 ..pl.scatter(xt[:,0],xt[:,1],c=y
a260 74 2c 6d 61 72 6b 65 72 3d 27 6f 27 2c 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c t,marker='o',label='Target.sampl
a280 65 73 27 2c 61 6c 70 68 61 3d 30 2e 35 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 73 74 73 5b 3a es',alpha=0.5).pl.scatter(xsts[:
a2a0 2c 30 5d 2c 78 73 74 73 5b 3a 2c 31 5d 2c 63 3d 79 73 2c 6d 61 72 6b 65 72 3d 27 2b 27 2c 6c 61 ,0],xsts[:,1],c=ys,marker='+',la
a2c0 62 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 73 3d 33 30 29 0a 70 6c 2e 74 69 bel='Transp.samples',s=30).pl.ti
a2e0 74 6c 65 28 27 49 6e 74 65 72 70 20 73 61 6d 70 6c 65 73 20 53 69 6e 6b 68 6f 72 6e 27 29 0a 0a tle('Interp.samples.Sinkhorn')..
a300 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 33 2c 33 29 0a 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 74 pl.subplot(2,3,3)..pl.scatter(xt
a320 5b 3a 2c 30 5d 2c 78 74 5b 3a 2c 31 5d 2c 63 3d 79 74 2c 6d 61 72 6b 65 72 3d 27 6f 27 2c 6c 61 [:,0],xt[:,1],c=yt,marker='o',la
a340 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 61 6c 70 68 61 3d 30 2e 35 29 0a bel='Target.samples',alpha=0.5).
a360 70 6c 2e 73 63 61 74 74 65 72 28 78 73 74 67 5b 3a 2c 30 5d 2c 78 73 74 67 5b 3a 2c 31 5d 2c 63 pl.scatter(xstg[:,0],xstg[:,1],c
a380 3d 79 73 2c 6d 61 72 6b 65 72 3d 27 2b 27 2c 6c 61 62 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d =ys,marker='+',label='Transp.sam
a3a0 70 6c 65 73 27 2c 73 3d 33 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6e 74 65 72 70 20 73 61 6d ples',s=30).pl.title('Interp.sam
a3c0 70 6c 65 73 20 47 72 6f 75 70 6c 61 73 73 6f 27 29 50 4b 03 04 14 00 00 00 00 00 34 87 1e 4b d9 ples.Grouplasso')PK........4..K.
a3e0 cf 46 53 c4 10 00 00 c4 10 00 00 22 00 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f .FS........"...auto_examples/plo
a400 74 5f 6f 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 t_otda_mapping.py#.-*-.coding:.u
a420 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.-*-.""".===================
a440 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4f 54 20 ============================.OT.
a460 6d 61 70 70 69 6e 67 20 65 73 74 69 6d 61 74 69 6f 6e 20 66 6f 72 20 64 6f 6d 61 69 6e 20 61 64 mapping.estimation.for.domain.ad
a480 61 70 74 61 74 69 6f 6e 20 5b 38 5d 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d aptation.[8].===================
a4a0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 ============================..Th
a4c0 69 73 20 65 78 61 6d 70 6c 65 20 70 72 65 73 65 6e 74 73 20 68 6f 77 20 74 6f 20 75 73 65 20 4d is.example.presents.how.to.use.M
a4e0 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 20 74 6f 20 65 73 74 69 6d 61 74 65 20 61 74 20 74 appingTransport.to.estimate.at.t
a500 68 65 20 73 61 6d 65 0a 74 69 6d 65 20 62 6f 74 68 20 74 68 65 20 63 6f 75 70 6c 69 6e 67 20 74 he.same.time.both.the.coupling.t
a520 72 61 6e 73 70 6f 72 74 20 61 6e 64 20 61 70 70 72 6f 78 69 6d 61 74 65 20 74 68 65 20 74 72 61 ransport.and.approximate.the.tra
a540 6e 73 70 6f 72 74 20 6d 61 70 20 77 69 74 68 20 65 69 74 68 65 72 0a 61 20 6c 69 6e 65 61 72 20 nsport.map.with.either.a.linear.
a560 6f 72 20 61 20 6b 65 72 6e 65 6c 69 7a 65 64 20 6d 61 70 70 69 6e 67 20 61 73 20 69 6e 74 72 6f or.a.kernelized.mapping.as.intro
a580 64 75 63 65 64 20 69 6e 20 5b 38 5d 0a 0a 5b 38 5d 20 4d 2e 20 50 65 72 72 6f 74 2c 20 4e 2e 20 duced.in.[8]..[8].M..Perrot,.N..
a5a0 43 6f 75 72 74 79 2c 20 52 2e 20 46 6c 61 6d 61 72 79 2c 20 41 2e 20 48 61 62 72 61 72 64 2c 0a Courty,.R..Flamary,.A..Habrard,.
a5c0 20 20 20 20 22 4d 61 70 70 69 6e 67 20 65 73 74 69 6d 61 74 69 6f 6e 20 66 6f 72 20 64 69 73 63 ...."Mapping.estimation.for.disc
a5e0 72 65 74 65 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 22 2c 0a 20 20 20 20 4e 65 75 rete.optimal.transport",.....Neu
a600 72 61 6c 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 50 72 6f 63 65 73 73 69 6e 67 20 53 79 73 74 65 ral.Information.Processing.Syste
a620 6d 73 20 28 4e 49 50 53 29 2c 20 32 30 31 36 2e 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 73 3a ms.(NIPS),.2016.."""..#.Authors:
a640 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
a660 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 6d 62 e.fr>.#..........Stanislas.Chamb
a680 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 23 20 on.<stan.chambon@gmail.com>.#.#.
a6a0 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d License:.MIT.License..import.num
a6c0 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 py.as.np.import.matplotlib.pylab
a6e0 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 .as.pl.import.ot...#############
a700 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
a720 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
a740 23 0a 23 20 67 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 #.#.generate.data.##############
a760 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
a780 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
a7a0 0a 0a 6e 5f 73 6f 75 72 63 65 5f 73 61 6d 70 6c 65 73 20 3d 20 31 30 30 0a 6e 5f 74 61 72 67 65 ..n_source_samples.=.100.n_targe
a7c0 74 5f 73 61 6d 70 6c 65 73 20 3d 20 31 30 30 0a 74 68 65 74 61 20 3d 20 32 20 2a 20 6e 70 2e 70 t_samples.=.100.theta.=.2.*.np.p
a7e0 69 20 2f 20 32 30 0a 6e 6f 69 73 65 5f 6c 65 76 65 6c 20 3d 20 30 2e 31 0a 0a 58 73 2c 20 79 73 i./.20.noise_level.=.0.1..Xs,.ys
a800 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 69 66 28 .=.ot.datasets.get_data_classif(
a820 0a 20 20 20 20 27 67 61 75 73 73 72 6f 74 27 2c 20 6e 5f 73 6f 75 72 63 65 5f 73 61 6d 70 6c 65 .....'gaussrot',.n_source_sample
a840 73 2c 20 6e 7a 3d 6e 6f 69 73 65 5f 6c 65 76 65 6c 29 0a 58 73 5f 6e 65 77 2c 20 5f 20 3d 20 6f s,.nz=noise_level).Xs_new,._.=.o
a860 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 0a 20 20 20 t.datasets.get_data_classif(....
a880 20 27 67 61 75 73 73 72 6f 74 27 2c 20 6e 5f 73 6f 75 72 63 65 5f 73 61 6d 70 6c 65 73 2c 20 6e .'gaussrot',.n_source_samples,.n
a8a0 7a 3d 6e 6f 69 73 65 5f 6c 65 76 65 6c 29 0a 58 74 2c 20 79 74 20 3d 20 6f 74 2e 64 61 74 61 73 z=noise_level).Xt,.yt.=.ot.datas
a8c0 65 74 73 2e 67 65 74 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 0a 20 20 20 20 27 67 61 75 73 73 ets.get_data_classif(.....'gauss
a8e0 72 6f 74 27 2c 20 6e 5f 74 61 72 67 65 74 5f 73 61 6d 70 6c 65 73 2c 20 74 68 65 74 61 3d 74 68 rot',.n_target_samples,.theta=th
a900 65 74 61 2c 20 6e 7a 3d 6e 6f 69 73 65 5f 6c 65 76 65 6c 29 0a 0a 23 20 6f 6e 65 20 6f 66 20 74 eta,.nz=noise_level)..#.one.of.t
a920 68 65 20 74 61 72 67 65 74 20 6d 6f 64 65 20 63 68 61 6e 67 65 73 20 69 74 73 20 76 61 72 69 61 he.target.mode.changes.its.varia
a940 6e 63 65 20 28 6e 6f 20 6c 69 6e 65 61 72 20 6d 61 70 70 69 6e 67 29 0a 58 74 5b 79 74 20 3d 3d nce.(no.linear.mapping).Xt[yt.==
a960 20 32 5d 20 2a 3d 20 33 0a 58 74 20 3d 20 58 74 20 2b 20 34 0a 0a 0a 23 23 23 23 23 23 23 23 23 .2].*=.3.Xt.=.Xt.+.4...#########
a980 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
a9a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
a9c0 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 72 65 6e #####.#.Instantiate.the.differen
a9e0 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 74 20 74 t.transport.algorithms.and.fit.t
aa00 68 65 6d 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 hem.############################
aa20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
aa40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23 20 4d 61 70 70 69 6e 67 54 72 61 ##################..#.MappingTra
aa60 6e 73 70 6f 72 74 20 77 69 74 68 20 6c 69 6e 65 61 72 20 6b 65 72 6e 65 6c 0a 6f 74 5f 6d 61 70 nsport.with.linear.kernel.ot_map
aa80 70 69 6e 67 5f 6c 69 6e 65 61 72 20 3d 20 6f 74 2e 64 61 2e 4d 61 70 70 69 6e 67 54 72 61 6e 73 ping_linear.=.ot.da.MappingTrans
aaa0 70 6f 72 74 28 0a 20 20 20 20 6b 65 72 6e 65 6c 3d 22 6c 69 6e 65 61 72 22 2c 20 6d 75 3d 31 65 port(.....kernel="linear",.mu=1e
aac0 30 2c 20 65 74 61 3d 31 65 2d 38 2c 20 62 69 61 73 3d 54 72 75 65 2c 0a 20 20 20 20 6d 61 78 5f 0,.eta=1e-8,.bias=True,.....max_
aae0 69 74 65 72 3d 32 30 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 0a 6f 74 5f 6d 61 70 70 69 iter=20,.verbose=True)..ot_mappi
ab00 6e 67 5f 6c 69 6e 65 61 72 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 66 ng_linear.fit(Xs=Xs,.Xt=Xt)..#.f
ab20 6f 72 20 6f 72 69 67 69 6e 61 6c 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 2c 20 74 72 61 6e or.original.source.samples,.tran
ab40 73 66 6f 72 6d 20 61 70 70 6c 69 65 73 20 62 61 72 79 63 65 6e 74 72 69 63 20 6d 61 70 70 69 6e sform.applies.barycentric.mappin
ab60 67 0a 74 72 61 6e 73 70 5f 58 73 5f 6c 69 6e 65 61 72 20 3d 20 6f 74 5f 6d 61 70 70 69 6e 67 5f g.transp_Xs_linear.=.ot_mapping_
ab80 6c 69 6e 65 61 72 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 0a 23 20 66 6f 72 20 6f linear.transform(Xs=Xs)..#.for.o
aba0 75 74 20 6f 66 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 2c 20 74 72 61 6e 73 66 6f 72 6d 20 ut.of.source.samples,.transform.
abc0 61 70 70 6c 69 65 73 20 74 68 65 20 6c 69 6e 65 61 72 20 6d 61 70 70 69 6e 67 0a 74 72 61 6e 73 applies.the.linear.mapping.trans
abe0 70 5f 58 73 5f 6c 69 6e 65 61 72 5f 6e 65 77 20 3d 20 6f 74 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e p_Xs_linear_new.=.ot_mapping_lin
ac00 65 61 72 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 5f 6e 65 77 29 0a 0a 0a 23 20 4d 61 70 ear.transform(Xs=Xs_new)...#.Map
ac20 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 20 77 69 74 68 20 67 61 75 73 73 69 61 6e 20 6b 65 72 6e pingTransport.with.gaussian.kern
ac40 65 6c 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 67 61 75 73 73 69 61 6e 20 3d 20 6f 74 2e 64 61 2e 4d el.ot_mapping_gaussian.=.ot.da.M
ac60 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 28 0a 20 20 20 20 6b 65 72 6e 65 6c 3d 22 67 61 75 appingTransport(.....kernel="gau
ac80 73 73 69 61 6e 22 2c 20 65 74 61 3d 31 65 2d 35 2c 20 6d 75 3d 31 65 2d 31 2c 20 62 69 61 73 3d ssian",.eta=1e-5,.mu=1e-1,.bias=
aca0 54 72 75 65 2c 20 73 69 67 6d 61 3d 31 2c 0a 20 20 20 20 6d 61 78 5f 69 74 65 72 3d 31 30 2c 20 True,.sigma=1,.....max_iter=10,.
acc0 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 67 61 75 73 73 69 61 verbose=True).ot_mapping_gaussia
ace0 6e 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 66 6f 72 20 6f 72 69 67 69 n.fit(Xs=Xs,.Xt=Xt)..#.for.origi
ad00 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 70 nal.source.samples,.transform.ap
ad20 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 70 plies.barycentric.mapping.transp
ad40 5f 58 73 5f 67 61 75 73 73 69 61 6e 20 3d 20 6f 74 5f 6d 61 70 70 69 6e 67 5f 67 61 75 73 73 69 _Xs_gaussian.=.ot_mapping_gaussi
ad60 61 6e 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 0a 23 20 66 6f 72 20 6f 75 74 20 6f an.transform(Xs=Xs)..#.for.out.o
ad80 66 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 2c 20 74 72 61 6e 73 66 6f 72 6d 20 61 70 70 6c f.source.samples,.transform.appl
ada0 69 65 73 20 74 68 65 20 67 61 75 73 73 69 61 6e 20 6d 61 70 70 69 6e 67 0a 74 72 61 6e 73 70 5f ies.the.gaussian.mapping.transp_
adc0 58 73 5f 67 61 75 73 73 69 61 6e 5f 6e 65 77 20 3d 20 6f 74 5f 6d 61 70 70 69 6e 67 5f 67 61 75 Xs_gaussian_new.=.ot_mapping_gau
ade0 73 73 69 61 6e 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 5f 6e 65 77 29 0a 0a 0a 23 23 23 ssian.transform(Xs=Xs_new)...###
ae00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
ae20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
ae40 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 70 6c 6f 74 20 64 61 74 61 0a 23 23 23 23 23 23 23 23 ###########.#.plot.data.########
ae60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
ae80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
aea0 23 23 23 23 23 23 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 28 31 30 2c 20 35 29 29 0a 70 6c ######..pl.figure(1,.(10,.5)).pl
aec0 2e 63 6c 66 28 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 58 73 5b 3a .clf().pl.scatter(Xs[:,.0],.Xs[:
aee0 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 53 ,.1],.c=ys,.marker='+',.label='S
af00 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 2c ource.samples').pl.scatter(Xt[:,
af20 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c .0],.Xt[:,.1],.c=yt,.marker='o',
af40 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 65 .label='Target.samples').pl.lege
af60 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 20 61 6e 64 20 74 nd(loc=0).pl.title('Source.and.t
af80 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 0a 23 23 23 23 23 23 23 23 arget.distributions')...########
afa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
afc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
afe0 23 23 23 23 23 23 0a 23 20 70 6c 6f 74 20 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 ######.#.plot.transported.sample
b000 73 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 s.##############################
b020 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
b040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 29 0a 70 ################..pl.figure(2).p
b060 6c 2e 63 6c 66 28 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 l.clf().pl.subplot(2,.2,.1).pl.s
b080 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,
b0a0 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
b0c0 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 2e 32 29 0a 70 6c 2e 73 63 61 arget.samples',.alpha=.2).pl.sca
b0e0 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 6c 69 6e 65 61 72 5b 3a 2c 20 30 5d 2c 20 74 72 61 tter(transp_Xs_linear[:,.0],.tra
b100 6e 73 70 5f 58 73 5f 6c 69 6e 65 61 72 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 nsp_Xs_linear[:,.1],.c=ys,.marke
b120 72 3d 27 2b 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 4d 61 70 70 65 64 20 r='+',............label='Mapped.
b140 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 74 69 74 6c 65 28 22 42 61 72 79 2e source.samples').pl.title("Bary.
b160 20 6d 61 70 70 69 6e 67 20 28 6c 69 6e 65 61 72 29 22 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f .mapping.(linear)").pl.legend(lo
b180 63 3d 30 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 32 29 0a 70 6c 2e 73 63 61 c=0)..pl.subplot(2,.2,.2).pl.sca
b1a0 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d tter(Xt[:,.0],.Xt[:,.1],.c=yt,.m
b1c0 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 arker='o',............label='Tar
b1e0 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 2e 32 29 0a 70 6c 2e 73 63 61 74 74 get.samples',.alpha=.2).pl.scatt
b200 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 6c 69 6e 65 61 72 5f 6e 65 77 5b 3a 2c 20 30 5d 2c 20 74 er(transp_Xs_linear_new[:,.0],.t
b220 72 61 6e 73 70 5f 58 73 5f 6c 69 6e 65 61 72 5f 6e 65 77 5b 3a 2c 20 31 5d 2c 0a 20 20 20 20 20 ransp_Xs_linear_new[:,.1],......
b240 20 20 20 20 20 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 4c ......c=ys,.marker='+',.label='L
b260 65 61 72 6e 65 64 20 6d 61 70 70 69 6e 67 27 29 0a 70 6c 2e 74 69 74 6c 65 28 22 45 73 74 69 6d earned.mapping').pl.title("Estim
b280 2e 20 6d 61 70 70 69 6e 67 20 28 6c 69 6e 65 61 72 29 22 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 ..mapping.(linear)")..pl.subplot
b2a0 28 32 2c 20 32 2c 20 33 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 (2,.2,.3).pl.scatter(Xt[:,.0],.X
b2c0 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',......
b2e0 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
b300 70 68 61 3d 2e 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 67 61 75 pha=.2).pl.scatter(transp_Xs_gau
b320 73 73 69 61 6e 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 67 61 75 73 73 69 61 6e 5b ssian[:,.0],.transp_Xs_gaussian[
b340 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 :,.1],.c=ys,............marker='
b360 2b 27 2c 20 6c 61 62 65 6c 3d 27 62 61 72 79 63 65 6e 74 72 69 63 20 6d 61 70 70 69 6e 67 27 29 +',.label='barycentric.mapping')
b380 0a 70 6c 2e 74 69 74 6c 65 28 22 42 61 72 79 2e 20 6d 61 70 70 69 6e 67 20 28 6b 65 72 6e 65 6c .pl.title("Bary..mapping.(kernel
b3a0 29 22 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 34 29 0a 70 6c 2e 73 63 61 74 )")..pl.subplot(2,.2,.4).pl.scat
b3c0 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
b3e0 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 rker='o',............label='Targ
b400 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 2e 32 29 0a 70 6c 2e 73 63 61 74 74 65 et.samples',.alpha=.2).pl.scatte
b420 72 28 74 72 61 6e 73 70 5f 58 73 5f 67 61 75 73 73 69 61 6e 5f 6e 65 77 5b 3a 2c 20 30 5d 2c 20 r(transp_Xs_gaussian_new[:,.0],.
b440 74 72 61 6e 73 70 5f 58 73 5f 67 61 75 73 73 69 61 6e 5f 6e 65 77 5b 3a 2c 20 31 5d 2c 20 63 3d transp_Xs_gaussian_new[:,.1],.c=
b460 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 6c ys,............marker='+',.label
b480 3d 27 4c 65 61 72 6e 65 64 20 6d 61 70 70 69 6e 67 27 29 0a 70 6c 2e 74 69 74 6c 65 28 22 45 73 ='Learned.mapping').pl.title("Es
b4a0 74 69 6d 2e 20 6d 61 70 70 69 6e 67 20 28 6b 65 72 6e 65 6c 29 22 29 0a 70 6c 2e 74 69 67 68 74 tim..mapping.(kernel)").pl.tight
b4c0 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 cb _layout()..pl.show().PK.........
b4e0 86 1e 4b 7a 65 86 67 c9 06 00 00 c9 06 00 00 21 00 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 ..Kze.g........!...auto_examples
b500 2f 70 6c 6f 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 /plot_compute_emd.py#.-*-.coding
b520 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d :.utf-8.-*-.""".================
b540 3d 3d 3d 3d 0a 31 44 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 0a 3d 3d 3d 3d 3d 3d ====.1D.optimal.transport.======
b560 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a 20 52 ==============.."""..#.Author:.R
b580 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e emi.Flamary.<remi.flamary@unice.
b5a0 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 69 6d fr>.#.#.License:.MIT.License..im
b5c0 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c port.numpy.as.np.import.matplotl
b5e0 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 66 72 6f 6d 20 6f 74 ib.pylab.as.pl.import.ot.from.ot
b600 2e 64 61 74 61 73 65 74 73 20 69 6d 70 6f 72 74 20 67 65 74 5f 31 44 5f 67 61 75 73 73 20 61 73 .datasets.import.get_1D_gauss.as
b620 20 67 61 75 73 73 0a 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 6e 20 3d 20 31 30 30 .gauss...#%%.parameters..n.=.100
b640 20 20 23 20 6e 62 20 62 69 6e 73 0a 6e 5f 74 61 72 67 65 74 20 3d 20 35 30 20 20 23 20 6e 62 20 ..#.nb.bins.n_target.=.50..#.nb.
b660 74 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 0a 23 20 62 69 6e 20 70 6f 73 target.distributions...#.bin.pos
b680 69 74 69 6f 6e 73 0a 78 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 2c 20 64 74 79 70 65 3d 6e 70 itions.x.=.np.arange(n,.dtype=np
b6a0 2e 66 6c 6f 61 74 36 34 29 0a 0a 6c 73 74 5f 6d 20 3d 20 6e 70 2e 6c 69 6e 73 70 61 63 65 28 32 .float64)..lst_m.=.np.linspace(2
b6c0 30 2c 20 39 30 2c 20 6e 5f 74 61 72 67 65 74 29 0a 0a 23 20 47 61 75 73 73 69 61 6e 20 64 69 73 0,.90,.n_target)..#.Gaussian.dis
b6e0 74 72 69 62 75 74 69 6f 6e 73 0a 61 20 3d 20 67 61 75 73 73 28 6e 2c 20 6d 3d 32 30 2c 20 73 3d tributions.a.=.gauss(n,.m=20,.s=
b700 35 29 20 20 23 20 6d 3d 20 6d 65 61 6e 2c 20 73 3d 20 73 74 64 0a 0a 42 20 3d 20 6e 70 2e 7a 65 5)..#.m=.mean,.s=.std..B.=.np.ze
b720 72 6f 73 28 28 6e 2c 20 6e 5f 74 61 72 67 65 74 29 29 0a 0a 66 6f 72 20 69 2c 20 6d 20 69 6e 20 ros((n,.n_target))..for.i,.m.in.
b740 65 6e 75 6d 65 72 61 74 65 28 6c 73 74 5f 6d 29 3a 0a 20 20 20 20 42 5b 3a 2c 20 69 5d 20 3d 20 enumerate(lst_m):.....B[:,.i].=.
b760 67 61 75 73 73 28 6e 2c 20 6d 3d 6d 2c 20 73 3d 35 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 gauss(n,.m=m,.s=5)..#.loss.matri
b780 78 20 61 6e 64 20 6e 6f 72 6d 61 6c 69 7a 61 74 69 6f 6e 0a 4d 20 3d 20 6f 74 2e 64 69 73 74 28 x.and.normalization.M.=.ot.dist(
b7a0 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 2c 20 78 2e 72 65 73 68 61 70 65 28 28 6e 2c x.reshape((n,.1)),.x.reshape((n,
b7c0 20 31 29 29 2c 20 27 65 75 63 6c 69 64 65 61 6e 27 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 29 0a .1)),.'euclidean').M./=.M.max().
b7e0 4d 32 20 3d 20 6f 74 2e 64 69 73 74 28 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 2c 20 M2.=.ot.dist(x.reshape((n,.1)),.
b800 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 2c 20 27 73 71 65 75 63 6c 69 64 65 61 6e 27 x.reshape((n,.1)),.'sqeuclidean'
b820 29 0a 4d 32 20 2f 3d 20 4d 32 2e 6d 61 78 28 29 0a 23 25 25 20 70 6c 6f 74 20 74 68 65 20 64 69 ).M2./=.M2.max().#%%.plot.the.di
b840 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 29 0a 70 6c 2e 73 75 62 stributions..pl.figure(1).pl.sub
b860 70 6c 6f 74 28 32 2c 20 31 2c 20 31 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 61 2c 20 27 62 27 2c plot(2,.1,.1).pl.plot(x,.a,.'b',
b880 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 27 29 0a 70 6c .label='Source.distribution').pl
b8a0 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 27 29 0a 70 6c .title('Source.distribution').pl
b8c0 2e 73 75 62 70 6c 6f 74 28 32 2c 20 31 2c 20 32 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 42 2c 20 .subplot(2,.1,.2).pl.plot(x,.B,.
b8e0 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 70 6c label='Target.distributions').pl
b900 2e 74 69 74 6c 65 28 27 54 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 70 .title('Target.distributions').p
b920 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 23 25 25 20 43 6f 6d 70 75 74 65 20 61 6e l.tight_layout()..#%%.Compute.an
b940 64 20 70 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 d.plot.distributions.and.loss.ma
b960 74 72 69 78 0a 0a 64 5f 65 6d 64 20 3d 20 6f 74 2e 65 6d 64 32 28 61 2c 20 42 2c 20 4d 29 20 20 trix..d_emd.=.ot.emd2(a,.B,.M)..
b980 23 20 64 69 72 65 63 74 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66 20 45 4d 44 0a 64 5f 65 6d #.direct.computation.of.EMD.d_em
b9a0 64 32 20 3d 20 6f 74 2e 65 6d 64 32 28 61 2c 20 42 2c 20 4d 32 29 20 20 23 20 64 69 72 65 63 74 d2.=.ot.emd2(a,.B,.M2)..#.direct
b9c0 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66 20 45 4d 44 20 77 69 74 68 20 6c 6f 73 73 20 4d 33 .computation.of.EMD.with.loss.M3
b9e0 0a 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 29 0a 70 6c 2e 70 6c 6f 74 28 64 5f 65 6d 64 2c 20 6c ...pl.figure(2).pl.plot(d_emd,.l
ba00 61 62 65 6c 3d 27 45 75 63 6c 69 64 65 61 6e 20 45 4d 44 27 29 0a 70 6c 2e 70 6c 6f 74 28 64 5f abel='Euclidean.EMD').pl.plot(d_
ba20 65 6d 64 32 2c 20 6c 61 62 65 6c 3d 27 53 71 75 61 72 65 64 20 45 75 63 6c 69 64 65 61 6e 20 45 emd2,.label='Squared.Euclidean.E
ba40 4d 44 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 MD').pl.title('EMD.distances').p
ba60 6c 2e 6c 65 67 65 6e 64 28 29 0a 0a 23 25 25 0a 72 65 67 20 3d 20 31 65 2d 32 0a 64 5f 73 69 6e l.legend()..#%%.reg.=.1e-2.d_sin
ba80 6b 68 6f 72 6e 20 3d 20 6f 74 2e 73 69 6e 6b 68 6f 72 6e 32 28 61 2c 20 42 2c 20 4d 2c 20 72 65 khorn.=.ot.sinkhorn2(a,.B,.M,.re
baa0 67 29 0a 64 5f 73 69 6e 6b 68 6f 72 6e 32 20 3d 20 6f 74 2e 73 69 6e 6b 68 6f 72 6e 32 28 61 2c g).d_sinkhorn2.=.ot.sinkhorn2(a,
bac0 20 42 2c 20 4d 32 2c 20 72 65 67 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 29 0a 70 6c 2e 63 6c .B,.M2,.reg)..pl.figure(2).pl.cl
bae0 66 28 29 0a 70 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 f().pl.plot(d_emd,.label='Euclid
bb00 65 61 6e 20 45 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 ean.EMD').pl.plot(d_emd2,.label=
bb20 27 53 71 75 61 72 65 64 20 45 75 63 6c 69 64 65 61 6e 20 45 4d 44 27 29 0a 70 6c 2e 70 6c 6f 74 'Squared.Euclidean.EMD').pl.plot
bb40 28 64 5f 73 69 6e 6b 68 6f 72 6e 2c 20 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 45 75 63 6c 69 64 65 (d_sinkhorn,.'+',.label='Euclide
bb60 61 6e 20 53 69 6e 6b 68 6f 72 6e 27 29 0a 70 6c 2e 70 6c 6f 74 28 64 5f 73 69 6e 6b 68 6f 72 6e an.Sinkhorn').pl.plot(d_sinkhorn
bb80 32 2c 20 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 53 71 75 61 72 65 64 20 45 75 63 6c 69 64 65 61 6e 2,.'+',.label='Squared.Euclidean
bba0 20 53 69 6e 6b 68 6f 72 6e 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 45 4d 44 20 64 69 73 74 61 6e .Sinkhorn').pl.title('EMD.distan
bbc0 63 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 ces').pl.legend()..pl.show().PK.
bbe0 04 14 00 00 00 00 00 6a 7b 82 49 d4 40 d8 69 2e 05 00 00 2e 05 00 00 20 00 00 00 61 75 74 6f 5f .......j{.I.@.i............auto_
bc00 65 78 61 6d 70 6c 65 73 2f 64 65 6d 6f 5f 4f 54 5f 31 44 5f 74 65 73 74 2e 70 79 23 20 2d 2a 2d examples/demo_OT_1D_test.py#.-*-
bc20 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 44 65 6d 6f 20 66 6f 72 20 .coding:.utf-8.-*-.""".Demo.for.
bc40 31 44 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 0a 0a 40 61 75 74 68 6f 72 3a 20 72 1D.optimal.transport..@author:.r
bc60 66 6c 61 6d 61 72 79 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a flamary."""..import.numpy.as.np.
bc80 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d import.matplotlib.pylab.as.pl.im
bca0 70 6f 72 74 20 6f 74 0a 66 72 6f 6d 20 6f 74 2e 64 61 74 61 73 65 74 73 20 69 6d 70 6f 72 74 20 port.ot.from.ot.datasets.import.
bcc0 67 65 74 5f 31 44 5f 67 61 75 73 73 20 61 73 20 67 61 75 73 73 0a 0a 0a 23 25 25 20 70 61 72 61 get_1D_gauss.as.gauss...#%%.para
bce0 6d 65 74 65 72 73 0a 0a 6e 3d 31 30 30 20 23 20 6e 62 20 62 69 6e 73 0a 0a 23 20 62 69 6e 20 70 meters..n=100.#.nb.bins..#.bin.p
bd00 6f 73 69 74 69 6f 6e 73 0a 78 3d 6e 70 2e 61 72 61 6e 67 65 28 6e 2c 64 74 79 70 65 3d 6e 70 2e ositions.x=np.arange(n,dtype=np.
bd20 66 6c 6f 61 74 36 34 29 0a 0a 23 20 47 61 75 73 73 69 61 6e 20 64 69 73 74 72 69 62 75 74 69 6f float64)..#.Gaussian.distributio
bd40 6e 73 0a 61 3d 67 61 75 73 73 28 6e 2c 6d 3d 6e 2a 2e 32 2c 73 3d 35 29 20 23 20 6d 3d 20 6d 65 ns.a=gauss(n,m=n*.2,s=5).#.m=.me
bd60 61 6e 2c 20 73 3d 20 73 74 64 0a 62 3d 67 61 75 73 73 28 6e 2c 6d 3d 6e 2a 2e 36 2c 73 3d 31 30 an,.s=.std.b=gauss(n,m=n*.6,s=10
bd80 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 3d 6f 74 2e 64 69 73 74 28 78 2e 72 65 73 )..#.loss.matrix.M=ot.dist(x.res
bda0 68 61 70 65 28 28 6e 2c 31 29 29 2c 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 31 29 29 29 0a 4d 2f hape((n,1)),x.reshape((n,1))).M/
bdc0 3d 4d 2e 6d 61 78 28 29 0a 0a 23 25 25 20 70 6c 6f 74 20 74 68 65 20 64 69 73 74 72 69 62 75 74 =M.max()..#%%.plot.the.distribut
bde0 69 6f 6e 73 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 61 2c 27 ions..pl.figure(1).pl.plot(x,a,'
be00 62 27 2c 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 27 29 0a b',label='Source.distribution').
be20 70 6c 2e 70 6c 6f 74 28 78 2c 62 2c 27 72 27 2c 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 64 69 pl.plot(x,b,'r',label='Target.di
be40 73 74 72 69 62 75 74 69 6f 6e 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 29 0a 0a 23 25 25 20 70 6c stribution').pl.legend()..#%%.pl
be60 6f 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 61 6e 64 20 6c 6f 73 73 20 6d 61 74 72 69 78 ot.distributions.and.loss.matrix
be80 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 ..pl.figure(2).ot.plot.plot1D_ma
bea0 74 28 61 2c 62 2c 4d 2c 27 43 6f 73 74 20 6d 61 74 72 69 78 20 4d 27 29 0a 0a 23 25 25 20 45 4d t(a,b,M,'Cost.matrix.M')..#%%.EM
bec0 44 0a 0a 47 30 3d 6f 74 2e 65 6d 64 28 61 2c 62 2c 4d 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 33 D..G0=ot.emd(a,b,M)..pl.figure(3
bee0 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 62 2c 47 30 2c 27 4f 54 20 ).ot.plot.plot1D_mat(a,b,G0,'OT.
bf00 6d 61 74 72 69 78 20 47 30 27 29 0a 0a 23 25 25 20 53 69 6e 6b 68 6f 72 6e 0a 0a 6c 61 6d 62 64 matrix.G0')..#%%.Sinkhorn..lambd
bf20 3d 31 65 2d 33 0a 47 73 3d 6f 74 2e 73 69 6e 6b 68 6f 72 6e 28 61 2c 62 2c 4d 2c 6c 61 6d 62 64 =1e-3.Gs=ot.sinkhorn(a,b,M,lambd
bf40 2c 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 29 0a 6f 74 2e ,verbose=True)..pl.figure(4).ot.
bf60 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 62 2c 47 73 2c 27 4f 54 20 6d 61 74 72 69 plot.plot1D_mat(a,b,Gs,'OT.matri
bf80 78 20 53 69 6e 6b 68 6f 72 6e 27 29 0a 0a 23 25 25 20 53 69 6e 6b 68 6f 72 6e 0a 0a 6c 61 6d 62 x.Sinkhorn')..#%%.Sinkhorn..lamb
bfa0 64 3d 31 65 2d 34 0a 47 73 73 2c 6c 6f 67 3d 6f 74 2e 62 72 65 67 6d 61 6e 2e 73 69 6e 6b 68 6f d=1e-4.Gss,log=ot.bregman.sinkho
bfc0 72 6e 5f 73 74 61 62 69 6c 69 7a 65 64 28 61 2c 62 2c 4d 2c 6c 61 6d 62 64 2c 76 65 72 62 6f 73 rn_stabilized(a,b,M,lambd,verbos
bfe0 65 3d 54 72 75 65 2c 6c 6f 67 3d 54 72 75 65 29 0a 47 73 73 32 2c 6c 6f 67 32 3d 6f 74 2e 62 72 e=True,log=True).Gss2,log2=ot.br
c000 65 67 6d 61 6e 2e 73 69 6e 6b 68 6f 72 6e 5f 73 74 61 62 69 6c 69 7a 65 64 28 61 2c 62 2c 4d 2c egman.sinkhorn_stabilized(a,b,M,
c020 6c 61 6d 62 64 2c 76 65 72 62 6f 73 65 3d 54 72 75 65 2c 6c 6f 67 3d 54 72 75 65 2c 77 61 72 6d lambd,verbose=True,log=True,warm
c040 73 74 61 72 74 3d 6c 6f 67 5b 27 77 61 72 6d 73 74 61 72 74 27 5d 29 0a 0a 70 6c 2e 66 69 67 75 start=log['warmstart'])..pl.figu
c060 72 65 28 35 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 62 2c 47 73 73 re(5).ot.plot.plot1D_mat(a,b,Gss
c080 2c 27 4f 54 20 6d 61 74 72 69 78 20 53 69 6e 6b 68 6f 72 6e 20 73 74 61 62 69 6c 69 7a 65 64 27 ,'OT.matrix.Sinkhorn.stabilized'
c0a0 29 0a 0a 23 25 25 20 53 69 6e 6b 68 6f 72 6e 0a 0a 6c 61 6d 62 64 3d 31 65 2d 31 31 0a 47 73 73 )..#%%.Sinkhorn..lambd=1e-11.Gss
c0c0 3d 6f 74 2e 62 72 65 67 6d 61 6e 2e 73 69 6e 6b 68 6f 72 6e 5f 65 70 73 69 6c 6f 6e 5f 73 63 61 =ot.bregman.sinkhorn_epsilon_sca
c0e0 6c 69 6e 67 28 61 2c 62 2c 4d 2c 6c 61 6d 62 64 2c 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 0a ling(a,b,M,lambd,verbose=True)..
c100 70 6c 2e 66 69 67 75 72 65 28 35 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 pl.figure(5).ot.plot.plot1D_mat(
c120 61 2c 62 2c 47 73 73 2c 27 4f 54 20 6d 61 74 72 69 78 20 53 69 6e 6b 68 6f 72 6e 20 73 74 61 62 a,b,Gss,'OT.matrix.Sinkhorn.stab
c140 69 6c 69 7a 65 64 27 29 0a 50 4b 03 04 14 00 00 00 00 00 a9 83 e3 4a a5 25 9f a1 06 0a 00 00 06 ilized').PK...........J.%.......
c160 0a 00 00 27 00 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 4f 54 44 41 5f 63 ...'...auto_examples/plot_OTDA_c
c180 6f 6c 6f 72 5f 69 6d 61 67 65 73 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d olor_images.py#.-*-.coding:.utf-
c1a0 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.-*-.""".======================
c1c0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================================
c1e0 3d 3d 0a 4f 54 20 66 6f 72 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 20 77 69 74 68 ==.OT.for.domain.adaptation.with
c200 20 69 6d 61 67 65 20 63 6f 6c 6f 72 20 61 64 61 70 74 61 74 69 6f 6e 20 5b 36 5d 0a 3d 3d 3d 3d .image.color.adaptation.[6].====
c220 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================================
c240 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 5b 36 5d 20 46 65 72 72 61 64 ====================..[6].Ferrad
c260 61 6e 73 2c 20 53 2e 2c 20 50 61 70 61 64 61 6b 69 73 2c 20 4e 2e 2c 20 50 65 79 72 65 2c 20 47 ans,.S.,.Papadakis,.N.,.Peyre,.G
c280 2e 2c 20 26 20 41 75 6a 6f 6c 2c 20 4a 2e 20 46 2e 20 28 32 30 31 34 29 2e 20 52 65 67 75 6c 61 .,.&.Aujol,.J..F..(2014)..Regula
c2a0 72 69 7a 65 64 20 64 69 73 63 72 65 74 65 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 rized.discrete.optimal.transport
c2c0 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 63 ..SIAM.Journal.on.Imaging.Scienc
c2e0 65 73 2c 20 37 28 33 29 2c 20 31 38 35 33 2d 31 38 38 32 2e 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 es,.7(3),.1853-1882.."""..import
c300 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 73 63 69 70 79 2e 6e 64 69 6d 61 67 .numpy.as.np.import.scipy.ndimag
c320 65 20 61 73 20 73 70 69 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 e.as.spi.import.matplotlib.pylab
c340 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 0a 0a 23 25 25 20 4c 6f 61 64 69 6e 67 20 69 .as.pl.import.ot...#%%.Loading.i
c360 6d 61 67 65 73 0a 0a 49 31 3d 73 70 69 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 6f 63 mages..I1=spi.imread('../data/oc
c380 65 61 6e 5f 64 61 79 2e 6a 70 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 ean_day.jpg').astype(np.float64)
c3a0 2f 32 35 36 0a 49 32 3d 73 70 69 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 6f 63 65 61 /256.I2=spi.imread('../data/ocea
c3c0 6e 5f 73 75 6e 73 65 74 2e 6a 70 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 n_sunset.jpg').astype(np.float64
c3e0 29 2f 32 35 36 0a 0a 23 25 25 20 50 6c 6f 74 20 69 6d 61 67 65 73 0a 0a 70 6c 2e 66 69 67 75 72 )/256..#%%.Plot.images..pl.figur
c400 65 28 31 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 32 2c 31 29 0a 70 6c 2e 69 6d 73 68 6f e(1)..pl.subplot(1,2,1).pl.imsho
c420 77 28 49 31 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 31 27 29 0a 0a 70 6c 2e 73 75 w(I1).pl.title('Image.1')..pl.su
c440 62 70 6c 6f 74 28 31 2c 32 2c 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 29 0a 70 6c 2e 74 69 bplot(1,2,2).pl.imshow(I2).pl.ti
c460 74 6c 65 28 27 49 6d 61 67 65 20 32 27 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 0a 23 25 25 20 49 tle('Image.2')..pl.show()..#%%.I
c480 6d 61 67 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 61 6e 64 20 64 61 74 61 73 65 74 20 67 65 6e 65 mage.conversion.and.dataset.gene
c4a0 72 61 74 69 6f 6e 0a 0a 64 65 66 20 69 6d 32 6d 61 74 28 49 29 3a 0a 20 20 20 20 22 22 22 43 6f ration..def.im2mat(I):....."""Co
c4c0 6e 76 65 72 74 73 20 61 6e 64 20 69 6d 61 67 65 20 74 6f 20 6d 61 74 72 69 78 20 28 6f 6e 65 20 nverts.and.image.to.matrix.(one.
c4e0 70 69 78 65 6c 20 70 65 72 20 6c 69 6e 65 29 22 22 22 0a 20 20 20 20 72 65 74 75 72 6e 20 49 2e pixel.per.line)""".....return.I.
c500 72 65 73 68 61 70 65 28 28 49 2e 73 68 61 70 65 5b 30 5d 2a 49 2e 73 68 61 70 65 5b 31 5d 2c 49 reshape((I.shape[0]*I.shape[1],I
c520 2e 73 68 61 70 65 5b 32 5d 29 29 0a 0a 64 65 66 20 6d 61 74 32 69 6d 28 58 2c 73 68 61 70 65 29 .shape[2]))..def.mat2im(X,shape)
c540 3a 0a 20 20 20 20 22 22 22 43 6f 6e 76 65 72 74 73 20 62 61 63 6b 20 61 20 6d 61 74 72 69 78 20 :....."""Converts.back.a.matrix.
c560 74 6f 20 61 6e 20 69 6d 61 67 65 22 22 22 0a 20 20 20 20 72 65 74 75 72 6e 20 58 2e 72 65 73 68 to.an.image""".....return.X.resh
c580 61 70 65 28 73 68 61 70 65 29 0a 0a 58 31 3d 69 6d 32 6d 61 74 28 49 31 29 0a 58 32 3d 69 6d 32 ape(shape)..X1=im2mat(I1).X2=im2
c5a0 6d 61 74 28 49 32 29 0a 0a 23 20 74 72 61 69 6e 69 6e 67 20 73 61 6d 70 6c 65 73 0a 6e 62 3d 31 mat(I2)..#.training.samples.nb=1
c5c0 30 30 30 0a 69 64 78 31 3d 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 69 6e 74 28 58 31 2e 73 68 000.idx1=np.random.randint(X1.sh
c5e0 61 70 65 5b 30 5d 2c 73 69 7a 65 3d 28 6e 62 2c 29 29 0a 69 64 78 32 3d 6e 70 2e 72 61 6e 64 6f ape[0],size=(nb,)).idx2=np.rando
c600 6d 2e 72 61 6e 64 69 6e 74 28 58 32 2e 73 68 61 70 65 5b 30 5d 2c 73 69 7a 65 3d 28 6e 62 2c 29 m.randint(X2.shape[0],size=(nb,)
c620 29 0a 0a 78 73 3d 58 31 5b 69 64 78 31 2c 3a 5d 0a 78 74 3d 58 32 5b 69 64 78 32 2c 3a 5d 0a 0a )..xs=X1[idx1,:].xt=X2[idx2,:]..
c640 23 25 25 20 50 6c 6f 74 20 69 6d 61 67 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 0a 70 #%%.Plot.image.distributions...p
c660 6c 2e 66 69 67 75 72 65 28 32 2c 28 31 30 2c 35 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 l.figure(2,(10,5))..pl.subplot(1
c680 2c 32 2c 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 73 5b 3a 2c 30 5d 2c 78 73 5b 3a 2c 32 5d ,2,1).pl.scatter(xs[:,0],xs[:,2]
c6a0 2c 63 3d 78 73 29 0a 70 6c 2e 61 78 69 73 28 5b 30 2c 31 2c 30 2c 31 5d 29 0a 70 6c 2e 78 6c 61 ,c=xs).pl.axis([0,1,0,1]).pl.xla
c6c0 62 65 6c 28 27 52 65 64 27 29 0a 70 6c 2e 79 6c 61 62 65 6c 28 27 42 6c 75 65 27 29 0a 70 6c 2e bel('Red').pl.ylabel('Blue').pl.
c6e0 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 32 title('Image.1')..pl.subplot(1,2
c700 2c 32 29 0a 23 70 6c 2e 69 6d 73 68 6f 77 28 49 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 74 ,2).#pl.imshow(I2).pl.scatter(xt
c720 5b 3a 2c 30 5d 2c 78 74 5b 3a 2c 32 5d 2c 63 3d 78 74 29 0a 70 6c 2e 61 78 69 73 28 5b 30 2c 31 [:,0],xt[:,2],c=xt).pl.axis([0,1
c740 2c 30 2c 31 5d 29 0a 70 6c 2e 78 6c 61 62 65 6c 28 27 52 65 64 27 29 0a 70 6c 2e 79 6c 61 62 65 ,0,1]).pl.xlabel('Red').pl.ylabe
c760 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 32 27 29 0a 0a 70 l('Blue').pl.title('Image.2')..p
c780 6c 2e 73 68 6f 77 28 29 0a 0a 0a 0a 23 25 25 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f l.show()....#%%.domain.adaptatio
c7a0 6e 20 62 65 74 77 65 65 6e 20 69 6d 61 67 65 73 0a 0a 23 20 4c 50 20 70 72 6f 62 6c 65 6d 0a 64 n.between.images..#.LP.problem.d
c7c0 61 5f 65 6d 64 3d 6f 74 2e 64 61 2e 4f 54 44 41 28 29 20 20 20 20 20 23 20 69 6e 69 74 20 63 6c a_emd=ot.da.OTDA().....#.init.cl
c7e0 61 73 73 0a 64 61 5f 65 6d 64 2e 66 69 74 28 78 73 2c 78 74 29 20 20 20 20 20 20 20 23 20 66 69 ass.da_emd.fit(xs,xt).......#.fi
c800 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 0a 23 20 73 69 6e 6b 68 6f 72 6e 20 72 65 67 t.distributions...#.sinkhorn.reg
c820 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 6c 61 6d 62 64 3d 31 65 2d 31 0a 64 61 5f 65 6e 74 72 6f 70 ularization.lambd=1e-1.da_entrop
c840 3d 6f 74 2e 64 61 2e 4f 54 44 41 5f 73 69 6e 6b 68 6f 72 6e 28 29 0a 64 61 5f 65 6e 74 72 6f 70 =ot.da.OTDA_sinkhorn().da_entrop
c860 2e 66 69 74 28 78 73 2c 78 74 2c 72 65 67 3d 6c 61 6d 62 64 29 0a 0a 0a 0a 23 25 25 20 70 72 65 .fit(xs,xt,reg=lambd)....#%%.pre
c880 64 69 63 74 69 6f 6e 20 62 65 74 77 65 65 6e 20 69 6d 61 67 65 73 20 28 75 73 69 6e 67 20 6f 75 diction.between.images.(using.ou
c8a0 74 20 6f 66 20 73 61 6d 70 6c 65 20 70 72 65 64 69 63 74 69 6f 6e 20 61 73 20 69 6e 20 5b 36 5d t.of.sample.prediction.as.in.[6]
c8c0 29 0a 0a 58 31 74 3d 64 61 5f 65 6d 64 2e 70 72 65 64 69 63 74 28 58 31 29 0a 58 32 74 3d 64 61 )..X1t=da_emd.predict(X1).X2t=da
c8e0 5f 65 6d 64 2e 70 72 65 64 69 63 74 28 58 32 2c 2d 31 29 0a 0a 0a 58 31 74 65 3d 64 61 5f 65 6e _emd.predict(X2,-1)...X1te=da_en
c900 74 72 6f 70 2e 70 72 65 64 69 63 74 28 58 31 29 0a 58 32 74 65 3d 64 61 5f 65 6e 74 72 6f 70 2e trop.predict(X1).X2te=da_entrop.
c920 70 72 65 64 69 63 74 28 58 32 2c 2d 31 29 0a 0a 0a 64 65 66 20 6d 69 6e 6d 61 78 28 49 29 3a 0a predict(X2,-1)...def.minmax(I):.
c940 20 20 20 20 72 65 74 75 72 6e 20 6e 70 2e 6d 69 6e 69 6d 75 6d 28 6e 70 2e 6d 61 78 69 6d 75 6d ....return.np.minimum(np.maximum
c960 28 49 2c 30 29 2c 31 29 0a 0a 49 31 74 3d 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 58 31 74 2c (I,0),1)..I1t=minmax(mat2im(X1t,
c980 49 31 2e 73 68 61 70 65 29 29 0a 49 32 74 3d 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 58 32 74 I1.shape)).I2t=minmax(mat2im(X2t
c9a0 2c 49 32 2e 73 68 61 70 65 29 29 0a 0a 49 31 74 65 3d 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 ,I2.shape))..I1te=minmax(mat2im(
c9c0 58 31 74 65 2c 49 31 2e 73 68 61 70 65 29 29 0a 49 32 74 65 3d 6d 69 6e 6d 61 78 28 6d 61 74 32 X1te,I1.shape)).I2te=minmax(mat2
c9e0 69 6d 28 58 32 74 65 2c 49 32 2e 73 68 61 70 65 29 29 0a 0a 23 25 25 20 70 6c 6f 74 20 61 6c 6c im(X2te,I2.shape))..#%%.plot.all
ca00 20 69 6d 61 67 65 73 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 28 31 30 2c 38 29 29 0a 0a 70 6c .images..pl.figure(2,(10,8))..pl
ca20 2e 73 75 62 70 6c 6f 74 28 32 2c 33 2c 31 29 0a 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 29 0a 70 .subplot(2,3,1)..pl.imshow(I1).p
ca40 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
ca60 2c 33 2c 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 74 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 ,3,2).pl.imshow(I1t).pl.title('I
ca80 6d 61 67 65 20 31 20 41 64 61 70 74 27 29 0a 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 33 2c mage.1.Adapt')...pl.subplot(2,3,
caa0 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 74 65 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 3).pl.imshow(I1te).pl.title('Ima
cac0 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 32 ge.1.Adapt.(reg)')..pl.subplot(2
cae0 2c 33 2c 34 29 0a 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 ,3,4)..pl.imshow(I2).pl.title('I
cb00 6d 61 67 65 20 32 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 33 2c 35 29 0a 70 6c 2e 69 mage.2')..pl.subplot(2,3,5).pl.i
cb20 6d 73 68 6f 77 28 49 32 74 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 32 20 41 64 61 mshow(I2t).pl.title('Image.2.Ada
cb40 70 74 27 29 0a 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 33 2c 36 29 0a 70 6c 2e 69 6d 73 68 pt')...pl.subplot(2,3,6).pl.imsh
cb60 6f 77 28 49 32 74 65 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 32 20 41 64 61 70 74 ow(I2te).pl.title('Image.2.Adapt
cb80 20 28 72 65 67 29 27 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 a9 83 .(reg)')..pl.show().PK..........
cba0 e3 4a f7 ba 1e e3 6d 0d 00 00 6d 0d 00 00 2f 00 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f .J....m...m.../...auto_examples/
cbc0 70 6c 6f 74 5f 4f 54 44 41 5f 6d 61 70 70 69 6e 67 5f 63 6f 6c 6f 72 5f 69 6d 61 67 65 73 2e 70 plot_OTDA_mapping_color_images.p
cbe0 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.-*-.""".===
cc00 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================================
cc20 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================================
cc40 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.
cc60 61 64 61 70 74 61 74 69 6f 6e 20 77 69 74 68 20 69 6d 61 67 65 20 63 6f 6c 6f 72 20 61 64 61 70 adaptation.with.image.color.adap
cc80 74 61 74 69 6f 6e 20 5b 36 5d 20 77 69 74 68 20 6d 61 70 70 69 6e 67 20 65 73 74 69 6d 61 74 69 tation.[6].with.mapping.estimati
cca0 6f 6e 20 5b 38 5d 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 on.[8].=========================
ccc0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================================
cce0 3d 3d 3d 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 5b 36 5d ===========================..[6]
cd00 20 46 65 72 72 61 64 61 6e 73 2c 20 53 2e 2c 20 50 61 70 61 64 61 6b 69 73 2c 20 4e 2e 2c 20 50 .Ferradans,.S.,.Papadakis,.N.,.P
cd20 65 79 72 65 2c 20 47 2e 2c 20 26 20 41 75 6a 6f 6c 2c 20 4a 2e 20 46 2e 20 28 32 30 31 34 29 2e eyre,.G.,.&.Aujol,.J..F..(2014).
cd40 20 52 65 67 75 6c 61 72 69 7a 65 64 0a 20 20 20 20 64 69 73 63 72 65 74 65 20 6f 70 74 69 6d 61 .Regularized.....discrete.optima
cd60 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 49 6d 61 l.transport..SIAM.Journal.on.Ima
cd80 67 69 6e 67 20 53 63 69 65 6e 63 65 73 2c 20 37 28 33 29 2c 20 31 38 35 33 2d 31 38 38 32 2e 0a ging.Sciences,.7(3),.1853-1882..
cda0 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
cdc0 6d 61 72 79 2c 20 41 2e 20 48 61 62 72 61 72 64 2c 20 22 4d 61 70 70 69 6e 67 20 65 73 74 69 6d mary,.A..Habrard,."Mapping.estim
cde0 61 74 69 6f 6e 20 66 6f 72 0a 20 20 20 20 64 69 73 63 72 65 74 65 20 6f 70 74 69 6d 61 6c 20 74 ation.for.....discrete.optimal.t
ce00 72 61 6e 73 70 6f 72 74 22 2c 20 4e 65 75 72 61 6c 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 50 72 ransport",.Neural.Information.Pr
ce20 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 36 2e 0a 0a ocessing.Systems.(NIPS),.2016...
ce40 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 73 """..import.numpy.as.np.import.s
ce60 63 69 70 79 2e 6e 64 69 6d 61 67 65 20 61 73 20 73 70 69 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c cipy.ndimage.as.spi.import.matpl
ce80 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 25 otlib.pylab.as.pl.import.ot...#%
cea0 25 20 4c 6f 61 64 69 6e 67 20 69 6d 61 67 65 73 0a 0a 49 31 3d 73 70 69 2e 69 6d 72 65 61 64 28 %.Loading.images..I1=spi.imread(
cec0 27 2e 2e 2f 64 61 74 61 2f 6f 63 65 61 6e 5f 64 61 79 2e 6a 70 67 27 29 2e 61 73 74 79 70 65 28 '../data/ocean_day.jpg').astype(
cee0 6e 70 2e 66 6c 6f 61 74 36 34 29 2f 32 35 36 0a 49 32 3d 73 70 69 2e 69 6d 72 65 61 64 28 27 2e np.float64)/256.I2=spi.imread('.
cf00 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 79 70 65 ./data/ocean_sunset.jpg').astype
cf20 28 6e 70 2e 66 6c 6f 61 74 36 34 29 2f 32 35 36 0a 0a 23 25 25 20 50 6c 6f 74 20 69 6d 61 67 65 (np.float64)/256..#%%.Plot.image
cf40 73 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 32 2c s..pl.figure(1)..pl.subplot(1,2,
cf60 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 1).pl.imshow(I1).pl.title('Image
cf80 20 31 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 32 2c 32 29 0a 70 6c 2e 69 6d 73 68 6f .1')..pl.subplot(1,2,2).pl.imsho
cfa0 77 28 49 32 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 68 w(I2).pl.title('Image.2')..pl.sh
cfc0 6f 77 28 29 0a 0a 23 25 25 20 49 6d 61 67 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 61 6e 64 20 64 ow()..#%%.Image.conversion.and.d
cfe0 61 74 61 73 65 74 20 67 65 6e 65 72 61 74 69 6f 6e 0a 0a 64 65 66 20 69 6d 32 6d 61 74 28 49 29 ataset.generation..def.im2mat(I)
d000 3a 0a 20 20 20 20 22 22 22 43 6f 6e 76 65 72 74 73 20 61 6e 64 20 69 6d 61 67 65 20 74 6f 20 6d :....."""Converts.and.image.to.m
d020 61 74 72 69 78 20 28 6f 6e 65 20 70 69 78 65 6c 20 70 65 72 20 6c 69 6e 65 29 22 22 22 0a 20 20 atrix.(one.pixel.per.line)"""...
d040 20 20 72 65 74 75 72 6e 20 49 2e 72 65 73 68 61 70 65 28 28 49 2e 73 68 61 70 65 5b 30 5d 2a 49 ..return.I.reshape((I.shape[0]*I
d060 2e 73 68 61 70 65 5b 31 5d 2c 49 2e 73 68 61 70 65 5b 32 5d 29 29 0a 0a 64 65 66 20 6d 61 74 32 .shape[1],I.shape[2]))..def.mat2
d080 69 6d 28 58 2c 73 68 61 70 65 29 3a 0a 20 20 20 20 22 22 22 43 6f 6e 76 65 72 74 73 20 62 61 63 im(X,shape):....."""Converts.bac
d0a0 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 65 k.a.matrix.to.an.image""".....re
d0c0 74 75 72 6e 20 58 2e 72 65 73 68 61 70 65 28 73 68 61 70 65 29 0a 0a 58 31 3d 69 6d 32 6d 61 74 turn.X.reshape(shape)..X1=im2mat
d0e0 28 49 31 29 0a 58 32 3d 69 6d 32 6d 61 74 28 49 32 29 0a 0a 23 20 74 72 61 69 6e 69 6e 67 20 73 (I1).X2=im2mat(I2)..#.training.s
d100 61 6d 70 6c 65 73 0a 6e 62 3d 31 30 30 30 0a 69 64 78 31 3d 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 amples.nb=1000.idx1=np.random.ra
d120 6e 64 69 6e 74 28 58 31 2e 73 68 61 70 65 5b 30 5d 2c 73 69 7a 65 3d 28 6e 62 2c 29 29 0a 69 64 ndint(X1.shape[0],size=(nb,)).id
d140 78 32 3d 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 69 6e 74 28 58 32 2e 73 68 61 70 65 5b 30 5d x2=np.random.randint(X2.shape[0]
d160 2c 73 69 7a 65 3d 28 6e 62 2c 29 29 0a 0a 78 73 3d 58 31 5b 69 64 78 31 2c 3a 5d 0a 78 74 3d 58 ,size=(nb,))..xs=X1[idx1,:].xt=X
d180 32 5b 69 64 78 32 2c 3a 5d 0a 0a 23 25 25 20 50 6c 6f 74 20 69 6d 61 67 65 20 64 69 73 74 72 69 2[idx2,:]..#%%.Plot.image.distri
d1a0 62 75 74 69 6f 6e 73 0a 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 28 31 30 2c 35 29 29 0a 0a 70 butions...pl.figure(2,(10,5))..p
d1c0 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 32 2c 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 73 5b 3a l.subplot(1,2,1).pl.scatter(xs[:
d1e0 2c 30 5d 2c 78 73 5b 3a 2c 32 5d 2c 63 3d 78 73 29 0a 70 6c 2e 61 78 69 73 28 5b 30 2c 31 2c 30 ,0],xs[:,2],c=xs).pl.axis([0,1,0
d200 2c 31 5d 29 0a 70 6c 2e 78 6c 61 62 65 6c 28 27 52 65 64 27 29 0a 70 6c 2e 79 6c 61 62 65 6c 28 ,1]).pl.xlabel('Red').pl.ylabel(
d220 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 70 6c 2e 'Blue').pl.title('Image.1')..pl.
d240 73 75 62 70 6c 6f 74 28 31 2c 32 2c 32 29 0a 23 70 6c 2e 69 6d 73 68 6f 77 28 49 32 29 0a 70 6c subplot(1,2,2).#pl.imshow(I2).pl
d260 2e 73 63 61 74 74 65 72 28 78 74 5b 3a 2c 30 5d 2c 78 74 5b 3a 2c 32 5d 2c 63 3d 78 74 29 0a 70 .scatter(xt[:,0],xt[:,2],c=xt).p
d280 6c 2e 61 78 69 73 28 5b 30 2c 31 2c 30 2c 31 5d 29 0a 70 6c 2e 78 6c 61 62 65 6c 28 27 52 65 64 l.axis([0,1,0,1]).pl.xlabel('Red
d2a0 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 27 49 ').pl.ylabel('Blue').pl.title('I
d2c0 6d 61 67 65 20 32 27 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 0a 0a 0a 23 25 25 20 64 6f 6d 61 69 mage.2')..pl.show()....#%%.domai
d2e0 6e 20 61 64 61 70 74 61 74 69 6f 6e 20 62 65 74 77 65 65 6e 20 69 6d 61 67 65 73 0a 64 65 66 20 n.adaptation.between.images.def.
d300 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 6d 69 6e 69 6d 75 6d minmax(I):.....return.np.minimum
d320 28 6e 70 2e 6d 61 78 69 6d 75 6d 28 49 2c 30 29 2c 31 29 0a 23 20 4c 50 20 70 72 6f 62 6c 65 6d (np.maximum(I,0),1).#.LP.problem
d340 0a 64 61 5f 65 6d 64 3d 6f 74 2e 64 61 2e 4f 54 44 41 28 29 20 20 20 20 20 23 20 69 6e 69 74 20 .da_emd=ot.da.OTDA().....#.init.
d360 63 6c 61 73 73 0a 64 61 5f 65 6d 64 2e 66 69 74 28 78 73 2c 78 74 29 20 20 20 20 20 20 20 23 20 class.da_emd.fit(xs,xt).......#.
d380 66 69 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 58 31 74 3d 64 61 5f 65 6d 64 2e 70 72 fit.distributions..X1t=da_emd.pr
d3a0 65 64 69 63 74 28 58 31 29 20 20 23 20 6f 75 74 20 6f 66 20 73 61 6d 70 6c 65 0a 49 31 74 3d 6d edict(X1)..#.out.of.sample.I1t=m
d3c0 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 58 31 74 2c 49 31 2e 73 68 61 70 65 29 29 0a 0a 23 20 73 inmax(mat2im(X1t,I1.shape))..#.s
d3e0 69 6e 6b 68 6f 72 6e 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 6c 61 6d 62 64 3d 31 65 2d inkhorn.regularization.lambd=1e-
d400 31 0a 64 61 5f 65 6e 74 72 6f 70 3d 6f 74 2e 64 61 2e 4f 54 44 41 5f 73 69 6e 6b 68 6f 72 6e 28 1.da_entrop=ot.da.OTDA_sinkhorn(
d420 29 0a 64 61 5f 65 6e 74 72 6f 70 2e 66 69 74 28 78 73 2c 78 74 2c 72 65 67 3d 6c 61 6d 62 64 29 ).da_entrop.fit(xs,xt,reg=lambd)
d440 0a 0a 58 31 74 65 3d 64 61 5f 65 6e 74 72 6f 70 2e 70 72 65 64 69 63 74 28 58 31 29 0a 49 31 74 ..X1te=da_entrop.predict(X1).I1t
d460 65 3d 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 58 31 74 65 2c 49 31 2e 73 68 61 70 65 29 29 0a e=minmax(mat2im(X1te,I1.shape)).
d480 0a 23 20 6c 69 6e 65 61 72 20 6d 61 70 70 69 6e 67 20 65 73 74 69 6d 61 74 69 6f 6e 0a 65 74 61 .#.linear.mapping.estimation.eta
d4a0 3d 31 65 2d 38 20 20 20 23 20 71 75 61 64 72 61 74 69 63 20 72 65 67 75 6c 61 72 69 7a 61 74 69 =1e-8...#.quadratic.regularizati
d4c0 6f 6e 20 66 6f 72 20 72 65 67 72 65 73 73 69 6f 6e 0a 6d 75 3d 31 65 30 20 20 20 20 20 23 20 77 on.for.regression.mu=1e0.....#.w
d4e0 65 69 67 68 74 20 6f 66 20 74 68 65 20 4f 54 20 6c 69 6e 65 61 72 20 74 65 72 6d 0a 62 69 61 73 eight.of.the.OT.linear.term.bias
d500 3d 54 72 75 65 20 20 23 20 65 73 74 69 6d 61 74 65 20 61 20 62 69 61 73 0a 0a 6f 74 5f 6d 61 70 =True..#.estimate.a.bias..ot_map
d520 70 69 6e 67 3d 6f 74 2e 64 61 2e 4f 54 44 41 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 28 29 ping=ot.da.OTDA_mapping_linear()
d540 0a 6f 74 5f 6d 61 70 70 69 6e 67 2e 66 69 74 28 78 73 2c 78 74 2c 6d 75 3d 6d 75 2c 65 74 61 3d .ot_mapping.fit(xs,xt,mu=mu,eta=
d560 65 74 61 2c 62 69 61 73 3d 62 69 61 73 2c 6e 75 6d 49 74 65 72 6d 61 78 20 3d 20 32 30 2c 76 65 eta,bias=bias,numItermax.=.20,ve
d580 72 62 6f 73 65 3d 54 72 75 65 29 0a 0a 58 31 74 6c 3d 6f 74 5f 6d 61 70 70 69 6e 67 2e 70 72 65 rbose=True)..X1tl=ot_mapping.pre
d5a0 64 69 63 74 28 58 31 29 20 23 20 75 73 65 20 74 68 65 20 65 73 74 69 6d 61 74 65 64 20 6d 61 70 dict(X1).#.use.the.estimated.map
d5c0 70 69 6e 67 0a 49 31 74 6c 3d 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 58 31 74 6c 2c 49 31 2e ping.I1tl=minmax(mat2im(X1tl,I1.
d5e0 73 68 61 70 65 29 29 0a 0a 23 20 6e 6f 6e 6c 69 6e 65 61 72 20 6d 61 70 70 69 6e 67 20 65 73 74 shape))..#.nonlinear.mapping.est
d600 69 6d 61 74 69 6f 6e 0a 65 74 61 3d 31 65 2d 32 20 20 20 23 20 71 75 61 64 72 61 74 69 63 20 72 imation.eta=1e-2...#.quadratic.r
d620 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 20 66 6f 72 20 72 65 67 72 65 73 73 69 6f 6e 0a 6d 75 3d egularization.for.regression.mu=
d640 31 65 30 20 20 20 20 20 23 20 77 65 69 67 68 74 20 6f 66 20 74 68 65 20 4f 54 20 6c 69 6e 65 61 1e0.....#.weight.of.the.OT.linea
d660 72 20 74 65 72 6d 0a 62 69 61 73 3d 46 61 6c 73 65 20 20 23 20 65 73 74 69 6d 61 74 65 20 61 20 r.term.bias=False..#.estimate.a.
d680 62 69 61 73 0a 73 69 67 6d 61 3d 31 20 20 20 20 23 20 73 69 67 6d 61 20 62 61 6e 64 77 69 64 74 bias.sigma=1....#.sigma.bandwidt
d6a0 68 20 66 6f 74 20 67 61 75 73 73 69 61 6e 20 6b 65 72 6e 65 6c 0a 0a 0a 6f 74 5f 6d 61 70 70 69 h.fot.gaussian.kernel...ot_mappi
d6c0 6e 67 5f 6b 65 72 6e 65 6c 3d 6f 74 2e 64 61 2e 4f 54 44 41 5f 6d 61 70 70 69 6e 67 5f 6b 65 72 ng_kernel=ot.da.OTDA_mapping_ker
d6e0 6e 65 6c 28 29 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 6b 65 72 6e 65 6c 2e 66 69 74 28 78 73 2c 78 nel().ot_mapping_kernel.fit(xs,x
d700 74 2c 6d 75 3d 6d 75 2c 65 74 61 3d 65 74 61 2c 73 69 67 6d 61 3d 73 69 67 6d 61 2c 62 69 61 73 t,mu=mu,eta=eta,sigma=sigma,bias
d720 3d 62 69 61 73 2c 6e 75 6d 49 74 65 72 6d 61 78 20 3d 20 31 30 2c 76 65 72 62 6f 73 65 3d 54 72 =bias,numItermax.=.10,verbose=Tr
d740 75 65 29 0a 0a 58 31 74 6e 3d 6f 74 5f 6d 61 70 70 69 6e 67 5f 6b 65 72 6e 65 6c 2e 70 72 65 64 ue)..X1tn=ot_mapping_kernel.pred
d760 69 63 74 28 58 31 29 20 23 20 75 73 65 20 74 68 65 20 65 73 74 69 6d 61 74 65 64 20 6d 61 70 70 ict(X1).#.use.the.estimated.mapp
d780 69 6e 67 0a 49 31 74 6e 3d 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 58 31 74 6e 2c 49 31 2e 73 ing.I1tn=minmax(mat2im(X1tn,I1.s
d7a0 68 61 70 65 29 29 0a 23 25 25 20 70 6c 6f 74 20 69 6d 61 67 65 73 0a 0a 0a 70 6c 2e 66 69 67 75 hape)).#%%.plot.images...pl.figu
d7c0 72 65 28 32 2c 28 31 30 2c 38 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 33 2c 31 29 0a re(2,(10,8))..pl.subplot(2,3,1).
d7e0 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 2e 20 31 27 29 .pl.imshow(I1).pl.title('Im..1')
d800 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 33 2c 32 29 0a 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 ..pl.subplot(2,3,2)..pl.imshow(I
d820 32 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 2e 20 32 27 29 0a 0a 0a 70 6c 2e 73 75 62 70 6c 6f 2).pl.title('Im..2')...pl.subplo
d840 74 28 32 2c 33 2c 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 74 29 0a 70 6c 2e 74 69 74 6c 65 t(2,3,3).pl.imshow(I1t).pl.title
d860 28 27 49 6d 2e 20 31 20 49 6e 74 65 72 70 20 4c 50 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 ('Im..1.Interp.LP')..pl.subplot(
d880 32 2c 33 2c 34 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 74 65 29 0a 70 6c 2e 74 69 74 6c 65 28 2,3,4).pl.imshow(I1te).pl.title(
d8a0 27 49 6d 2e 20 31 20 49 6e 74 65 72 70 20 45 6e 74 72 6f 70 27 29 0a 0a 0a 70 6c 2e 73 75 62 70 'Im..1.Interp.Entrop')...pl.subp
d8c0 6c 6f 74 28 32 2c 33 2c 35 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 74 6c 29 0a 70 6c 2e 74 69 lot(2,3,5).pl.imshow(I1tl).pl.ti
d8e0 74 6c 65 28 27 49 6d 2e 20 31 20 4c 69 6e 65 61 72 20 6d 61 70 70 69 6e 67 27 29 0a 0a 70 6c 2e tle('Im..1.Linear.mapping')..pl.
d900 73 75 62 70 6c 6f 74 28 32 2c 33 2c 36 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 74 6e 29 0a 70 subplot(2,3,6).pl.imshow(I1tn).p
d920 6c 2e 74 69 74 6c 65 28 27 49 6d 2e 20 31 20 6e 6f 6e 6c 69 6e 65 61 72 20 6d 61 70 70 69 6e 67 l.title('Im..1.nonlinear.mapping
d940 27 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 cb 86 1e 4b 4a 1b d0 65 ')..pl.show().PK...........KJ..e
d960 5a 0f 00 00 5a 0f 00 00 27 00 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 6f Z...Z...'...auto_examples/plot_o
d980 74 64 61 5f 63 6f 6c 6f 72 5f 69 6d 61 67 65 73 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a tda_color_images.py#.-*-.coding:
d9a0 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d .utf-8.-*-.""".=================
d9c0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================================
d9e0 3d 3d 3d 3d 3d 3d 3d 0a 4f 54 20 66 6f 72 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e =======.OT.for.domain.adaptation
da00 20 77 69 74 68 20 69 6d 61 67 65 20 63 6f 6c 6f 72 20 61 64 61 70 74 61 74 69 6f 6e 20 5b 36 5d .with.image.color.adaptation.[6]
da20 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 .===============================
da40 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 =========================..This.
da60 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 20 74 72 61 6e 73 66 example.presents.a.way.of.transf
da80 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 20 69 6d 61 67 65 0a erring.colors.between.two.image.
daa0 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 20 69 6e 74 72 6f 64 with.Optimal.Transport.as.introd
dac0 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 73 2c 20 53 2e 2c 20 uced.in.[6]..[6].Ferradans,.S.,.
dae0 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 26 20 41 75 6a 6f Papadakis,.N.,.Peyre,.G.,.&.Aujo
db00 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 7a 65 64 20 64 69 73 l,.J..F..(2014)..Regularized.dis
db20 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 53 49 41 4d 20 4a 6f crete.optimal.transport..SIAM.Jo
db40 75 72 6e 61 6c 20 6f 6e 20 49 6d 61 67 69 6e 67 20 53 63 69 65 6e 63 65 73 2c 20 37 28 33 29 2c urnal.on.Imaging.Sciences,.7(3),
db60 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 73 3a 20 52 65 6d 69 .1853-1882.."""..#.Authors:.Remi
db80 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e .Flamary.<remi.flamary@unice.fr>
dba0 0a 23 20 20 20 20 20 20 20 20 20 20 53 74 61 6e 69 73 6c 61 73 20 43 68 61 6d 62 6f 6e 20 3c 73 .#..........Stanislas.Chambon.<s
dbc0 74 61 6e 2e 63 68 61 6d 62 6f 6e 40 67 6d 61 69 6c 2e 63 6f 6d 3e 0a 23 0a 23 20 4c 69 63 65 6e tan.chambon@gmail.com>.#.#.Licen
dbe0 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 se:.MIT.License..import.numpy.as
dc00 20 6e 70 0a 66 72 6f 6d 20 73 63 69 70 79 20 69 6d 70 6f 72 74 20 6e 64 69 6d 61 67 65 0a 69 6d .np.from.scipy.import.ndimage.im
dc20 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f port.matplotlib.pylab.as.pl.impo
dc40 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 64 6f 6d 53 74 61 74 rt.ot...r.=.np.random.RandomStat
dc60 65 28 34 32 29 0a 0a 0a 64 65 66 20 69 6d 32 6d 61 74 28 49 29 3a 0a 20 20 20 20 22 22 22 43 6f e(42)...def.im2mat(I):....."""Co
dc80 6e 76 65 72 74 73 20 61 6e 64 20 69 6d 61 67 65 20 74 6f 20 6d 61 74 72 69 78 20 28 6f 6e 65 20 nverts.and.image.to.matrix.(one.
dca0 70 69 78 65 6c 20 70 65 72 20 6c 69 6e 65 29 22 22 22 0a 20 20 20 20 72 65 74 75 72 6e 20 49 2e pixel.per.line)""".....return.I.
dcc0 72 65 73 68 61 70 65 28 28 49 2e 73 68 61 70 65 5b 30 5d 20 2a 20 49 2e 73 68 61 70 65 5b 31 5d reshape((I.shape[0].*.I.shape[1]
dce0 2c 20 49 2e 73 68 61 70 65 5b 32 5d 29 29 0a 0a 0a 64 65 66 20 6d 61 74 32 69 6d 28 58 2c 20 73 ,.I.shape[2]))...def.mat2im(X,.s
dd00 68 61 70 65 29 3a 0a 20 20 20 20 22 22 22 43 6f 6e 76 65 72 74 73 20 62 61 63 6b 20 61 20 6d 61 hape):....."""Converts.back.a.ma
dd20 74 72 69 78 20 74 6f 20 61 6e 20 69 6d 61 67 65 22 22 22 0a 20 20 20 20 72 65 74 75 72 6e 20 58 trix.to.an.image""".....return.X
dd40 2e 72 65 73 68 61 70 65 28 73 68 61 70 65 29 0a 0a 0a 64 65 66 20 6d 69 6e 6d 61 78 28 49 29 3a .reshape(shape)...def.minmax(I):
dd60 0a 20 20 20 20 72 65 74 75 72 6e 20 6e 70 2e 63 6c 69 70 28 49 2c 20 30 2c 20 31 29 0a 0a 0a 23 .....return.np.clip(I,.0,.1)...#
dd80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
dda0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
ddc0 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 67 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 23 #############.#.generate.data.##
dde0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
de00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
de20 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23 20 4c 6f 61 64 69 6e 67 20 69 6d 61 67 65 73 0a 49 ############..#.Loading.images.I
de40 31 20 3d 20 6e 64 69 6d 61 67 65 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 6f 63 65 61 1.=.ndimage.imread('../data/ocea
de60 6e 5f 64 61 79 2e 6a 70 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 20 2f n_day.jpg').astype(np.float64)./
de80 20 32 35 36 0a 49 32 20 3d 20 6e 64 69 6d 61 67 65 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 .256.I2.=.ndimage.imread('../dat
dea0 61 2f 6f 63 65 61 6e 5f 73 75 6e 73 65 74 2e 6a 70 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 a/ocean_sunset.jpg').astype(np.f
dec0 6c 6f 61 74 36 34 29 20 2f 20 32 35 36 0a 0a 58 31 20 3d 20 69 6d 32 6d 61 74 28 49 31 29 0a 58 loat64)./.256..X1.=.im2mat(I1).X
dee0 32 20 3d 20 69 6d 32 6d 61 74 28 49 32 29 0a 0a 23 20 74 72 61 69 6e 69 6e 67 20 73 61 6d 70 6c 2.=.im2mat(I2)..#.training.sampl
df00 65 73 0a 6e 62 20 3d 20 31 30 30 30 0a 69 64 78 31 20 3d 20 72 2e 72 61 6e 64 69 6e 74 28 58 31 es.nb.=.1000.idx1.=.r.randint(X1
df20 2e 73 68 61 70 65 5b 30 5d 2c 20 73 69 7a 65 3d 28 6e 62 2c 29 29 0a 69 64 78 32 20 3d 20 72 2e .shape[0],.size=(nb,)).idx2.=.r.
df40 72 61 6e 64 69 6e 74 28 58 32 2e 73 68 61 70 65 5b 30 5d 2c 20 73 69 7a 65 3d 28 6e 62 2c 29 29 randint(X2.shape[0],.size=(nb,))
df60 0a 0a 58 73 20 3d 20 58 31 5b 69 64 78 31 2c 20 3a 5d 0a 58 74 20 3d 20 58 32 5b 69 64 78 32 2c ..Xs.=.X1[idx1,.:].Xt.=.X2[idx2,
df80 20 3a 5d 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 .:]...##########################
dfa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
dfc0 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 73 74 61 6e 74 69 61 ####################.#.Instantia
dfe0 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 74 20 61 6c 67 6f 72 te.the.different.transport.algor
e000 69 74 68 6d 73 20 61 6e 64 20 66 69 74 20 74 68 65 6d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 ithms.and.fit.them.#############
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 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
e060 23 0a 0a 23 20 45 4d 44 54 72 61 6e 73 70 6f 72 74 0a 6f 74 5f 65 6d 64 20 3d 20 6f 74 2e 64 61 #..#.EMDTransport.ot_emd.=.ot.da
e080 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 3d 58 73 .EMDTransport().ot_emd.fit(Xs=Xs
e0a0 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 0a 6f 74 ,.Xt=Xt)..#.SinkhornTransport.ot
e0c0 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 6e 73 70 _sinkhorn.=.ot.da.SinkhornTransp
e0e0 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 69 74 28 ort(reg_e=1e-1).ot_sinkhorn.fit(
e100 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 65 74 77 Xs=Xs,.Xt=Xt)..#.prediction.betw
e120 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 6c 65 20 een.images.(using.out.of.sample.
e140 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 58 73 5f prediction.as.in.[6]).transp_Xs_
e160 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 74 72 emd.=.ot_emd.transform(Xs=X1).tr
e180 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 74 72 61 ansp_Xt_emd.=.ot_emd.inverse_tra
e1a0 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 68 6f 72 nsform(Xt=X2)..transp_Xs_sinkhor
e1c0 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 72 61 6e n.=.ot_emd.transform(Xs=X1).tran
e1e0 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 73 65 5f sp_Xt_sinkhorn.=.ot_emd.inverse_
e200 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 78 28 6d transform(Xt=X2)..I1t.=.minmax(m
e220 61 74 32 69 6d 28 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 2c 20 49 31 2e 73 68 61 70 65 29 29 0a at2im(transp_Xs_emd,.I1.shape)).
e240 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 5f 65 6d I2t.=.minmax(mat2im(transp_Xt_em
e260 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 6d 61 74 d,.I2.shape))..I1te.=.minmax(mat
e280 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
e2a0 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 70 5f 58 )).I2te.=.minmax(mat2im(transp_X
e2c0 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 23 23 23 t_sinkhorn,.I2.shape))...#######
e2e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
e300 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
e320 23 23 23 23 23 23 23 0a 23 20 70 6c 6f 74 20 6f 72 69 67 69 6e 61 6c 20 69 6d 61 67 65 0a 23 23 #######.#.plot.original.image.##
e340 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
e360 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
e380 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 ############..pl.figure(1,.figsi
e3a0 7a 65 3d 28 36 2e 34 2c 20 33 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 ze=(6.4,.3))..pl.subplot(1,.2,.1
e3c0 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
e3e0 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 31 l.title('Image.1')..pl.subplot(1
e400 2c 20 32 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 29 0a 70 6c 2e 61 78 69 73 28 27 6f ,.2,.2).pl.imshow(I2).pl.axis('o
e420 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 32 27 29 0a 0a 0a 23 23 23 23 23 ff').pl.title('Image.2')...#####
e440 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
e460 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
e480 23 23 23 23 23 23 23 23 23 0a 23 20 73 63 61 74 74 65 72 20 70 6c 6f 74 20 6f 66 20 63 6f 6c 6f #########.#.scatter.plot.of.colo
e4a0 72 73 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 rs.#############################
e4c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
e4e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 #################..pl.figure(2,.
e500 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 6c 6f 74 28 31 2c figsize=(6.4,.3))..pl.subplot(1,
e520 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 20 58 73 5b 3a .2,.1).pl.scatter(Xs[:,.0],.Xs[:
e540 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 20 30 2c 20 31 5d ,.2],.c=Xs).pl.axis([0,.1,.0,.1]
e560 29 0a 70 6c 2e 78 6c 61 62 65 6c 28 27 52 65 64 27 29 0a 70 6c 2e 79 6c 61 62 65 6c 28 27 42 6c ).pl.xlabel('Red').pl.ylabel('Bl
e580 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 70 6c 2e 73 75 62 ue').pl.title('Image.1')..pl.sub
e5a0 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 5b 3a 2c 20 30 plot(1,.2,.2).pl.scatter(Xt[:,.0
e5c0 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 28 5b 30 2c 20 31 ],.Xt[:,.2],.c=Xt).pl.axis([0,.1
e5e0 2c 20 30 2c 20 31 5d 29 0a 70 6c 2e 78 6c 61 62 65 6c 28 27 52 65 64 27 29 0a 70 6c 2e 79 6c 61 ,.0,.1]).pl.xlabel('Red').pl.yla
e600 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 32 27 29 0a bel('Blue').pl.title('Image.2').
e620 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 pl.tight_layout()...############
e640 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
e660 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
e680 23 23 0a 23 20 70 6c 6f 74 20 6e 65 77 20 69 6d 61 67 65 73 0a 23 23 23 23 23 23 23 23 23 23 23 ##.#.plot.new.images.###########
e6a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
e6c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
e6e0 23 23 23 0a 0a 70 6c 2e 66 69 67 75 72 65 28 33 2c 20 66 69 67 73 69 7a 65 3d 28 38 2c 20 34 29 ###..pl.figure(3,.figsize=(8,.4)
e700 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 68 6f 77 )..pl.subplot(2,.3,.1).pl.imshow
e720 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 74 6c 65 28 27 49 6d (I1).pl.axis('off').pl.title('Im
e740 61 67 65 20 31 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 2e age.1')..pl.subplot(2,.3,.2).pl.
e760 69 6d 73 68 6f 77 28 49 31 74 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 imshow(I1t).pl.axis('off').pl.ti
e780 74 6c 65 28 27 49 6d 61 67 65 20 31 20 41 64 61 70 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 tle('Image.1.Adapt')..pl.subplot
e7a0 28 32 2c 20 33 2c 20 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 74 65 29 0a 70 6c 2e 61 78 69 (2,.3,.3).pl.imshow(I1te).pl.axi
e7c0 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 31 20 41 64 61 70 74 s('off').pl.title('Image.1.Adapt
e7e0 20 28 72 65 67 29 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 .(reg)')..pl.subplot(2,.3,.4).pl
e800 2e 69 6d 73 68 6f 77 28 49 32 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 .imshow(I2).pl.axis('off').pl.ti
e820 74 6c 65 28 27 49 6d 61 67 65 20 32 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c tle('Image.2')..pl.subplot(2,.3,
e840 20 35 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 74 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 .5).pl.imshow(I2t).pl.axis('off'
e860 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 32 20 41 64 61 70 74 27 29 0a 0a 70 6c 2e ).pl.title('Image.2.Adapt')..pl.
e880 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 49 32 74 65 29 subplot(2,.3,.6).pl.imshow(I2te)
e8a0 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 .pl.axis('off').pl.title('Image.
e8c0 32 20 41 64 61 70 74 20 28 72 65 67 29 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 2.Adapt.(reg)').pl.tight_layout(
e8e0 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 01 02 14 03 14 00 00 00 00 00 cb 86 1e 4b ba bc 41 )..pl.show().PK.............K..A
e900 39 c9 08 00 00 c9 08 00 00 19 00 00 00 00 00 00 00 00 00 00 00 b4 81 00 00 00 00 61 75 74 6f 5f 9..........................auto_
e920 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 57 44 41 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 examples/plot_WDA.pyPK..........
e940 a9 83 e3 4a e7 a1 46 a7 95 0c 00 00 95 0c 00 00 22 00 00 00 00 00 00 00 00 00 00 00 b4 81 00 09 ...J..F........."...............
e960 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 4f 54 44 41 5f 6d 61 70 70 69 6e ..auto_examples/plot_OTDA_mappin
e980 67 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 cb 86 1e 4b ac 48 87 7e b4 05 00 00 b4 05 00 00 g.pyPK.............K.H.~........
e9a0 21 00 00 00 00 00 00 00 00 00 00 00 b4 81 d5 15 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f !.................auto_examples/
e9c0 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 00 a9 plot_optim_OTreg.pyPK...........
e9e0 83 e3 4a f2 c1 a7 29 f1 09 00 00 f1 09 00 00 22 00 00 00 00 00 00 00 00 00 00 00 b4 81 c8 1b 00 ..J...)........"................
ea00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 4f 54 44 41 5f 63 6c 61 73 73 65 73 .auto_examples/plot_OTDA_classes
ea20 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 34 87 1e 4b d0 88 31 48 54 15 00 00 54 15 00 00 1d .pyPK..........4..K..1HT...T....
ea40 00 00 00 00 00 00 00 00 00 00 00 b4 81 f9 25 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 ..............%..auto_examples/p
ea60 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 cb 86 1e 4b 1e a6 lot_otda_d2.pyPK.............K..
ea80 15 2a 43 04 00 00 43 04 00 00 1b 00 00 00 00 00 00 00 00 00 00 00 b4 81 88 3b 00 00 61 75 74 6f .*C...C..................;..auto
eaa0 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 4f 54 5f 31 44 2e 70 79 50 4b 01 02 14 03 14 00 00 _examples/plot_OT_1D.pyPK.......
eac0 00 00 00 32 82 e3 4a 58 1b a1 c7 97 10 00 00 97 10 00 00 1d 00 00 00 00 00 00 00 00 00 00 00 b4 ...2..JX........................
eae0 81 04 40 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 4f 54 5f 63 6f 6e 76 2e ..@..auto_examples/plot_OT_conv.
eb00 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 cb 86 1e 4b fc 6c a8 1a 46 0b 00 00 46 0b 00 00 23 00 pyPK.............K.l..F...F...#.
eb20 00 00 00 00 00 00 00 00 00 00 b4 81 d6 50 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c .............P..auto_examples/pl
eb40 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 14 00 00 00 00 00 cb ot_barycenter_1D.pyPK...........
eb60 86 1e 4b b7 26 0b b3 8b 11 00 00 8b 11 00 00 22 00 00 00 00 00 00 00 00 00 00 00 b4 81 5d 5c 00 ..K.&..........".............]\.
eb80 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 6f 74 64 61 5f 63 6c 61 73 73 65 73 .auto_examples/plot_otda_classes
eba0 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 34 87 1e 4b 2c a6 a3 c4 4a 11 00 00 4a 11 00 00 30 .pyPK..........4..K,...J...J...0
ebc0 00 00 00 00 00 00 00 00 00 00 00 b4 81 28 6e 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 .............(n..auto_examples/p
ebe0 6c 6f 74 5f 6f 74 64 61 5f 6d 61 70 70 69 6e 67 5f 63 6f 6c 6f 72 73 5f 69 6d 61 67 65 73 2e 70 lot_otda_mapping_colors_images.p
ec00 79 50 4b 01 02 14 03 14 00 00 00 00 00 6a 7b 82 49 25 c9 d6 13 1c 06 00 00 1c 06 00 00 28 00 00 yPK..........j{.I%...........(..
ec20 00 00 00 00 00 00 00 00 00 b4 81 c0 7f 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 64 65 6d ...............auto_examples/dem
ec40 6f 5f 4f 54 5f 32 44 5f 73 61 6d 70 6c 65 73 6c 61 72 67 65 2e 70 79 50 4b 01 02 14 03 14 00 00 o_OT_2D_sampleslarge.pyPK.......
ec60 00 00 00 cb 86 1e 4b bc ce 2e 7c c3 0b 00 00 c3 0b 00 00 21 00 00 00 00 00 00 00 00 00 00 00 b4 ......K...|........!............
ec80 81 22 86 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 4f 54 5f 4c 31 5f 76 73 ."...auto_examples/plot_OT_L1_vs
eca0 5f 4c 32 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 cb 86 1e 4b 7b 03 bf 32 03 07 00 00 03 07 _L2.pyPK.............K{..2......
ecc0 00 00 23 00 00 00 00 00 00 00 00 00 00 00 b4 81 24 92 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 ..#.............$...auto_example
ece0 73 2f 70 6c 6f 74 5f 4f 54 5f 32 44 5f 73 61 6d 70 6c 65 73 2e 70 79 50 4b 01 02 14 03 14 00 00 s/plot_OT_2D_samples.pyPK.......
ed00 00 00 00 a9 83 e3 4a ec af 42 31 2e 0a 00 00 2e 0a 00 00 1d 00 00 00 00 00 00 00 00 00 00 00 b4 ......J..B1.....................
ed20 81 68 99 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 4f 54 44 41 5f 32 44 2e .h...auto_examples/plot_OTDA_2D.
ed40 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 34 87 1e 4b d9 cf 46 53 c4 10 00 00 c4 10 00 00 22 00 pyPK..........4..K..FS........".
ed60 00 00 00 00 00 00 00 00 00 00 b4 81 d1 a3 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c ................auto_examples/pl
ed80 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 cb 86 ot_otda_mapping.pyPK............
eda0 1e 4b 7a 65 86 67 c9 06 00 00 c9 06 00 00 21 00 00 00 00 00 00 00 00 00 00 00 b4 81 d5 b4 00 00 .Kze.g........!.................
edc0 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 63 6f 6d 70 75 74 65 5f 65 6d 64 2e 70 auto_examples/plot_compute_emd.p
ede0 79 50 4b 01 02 14 03 14 00 00 00 00 00 6a 7b 82 49 d4 40 d8 69 2e 05 00 00 2e 05 00 00 20 00 00 yPK..........j{.I.@.i...........
ee00 00 00 00 00 00 00 00 00 00 b4 81 dd bb 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 64 65 6d ...............auto_examples/dem
ee20 6f 5f 4f 54 5f 31 44 5f 74 65 73 74 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 a9 83 e3 4a a5 o_OT_1D_test.pyPK.............J.
ee40 25 9f a1 06 0a 00 00 06 0a 00 00 27 00 00 00 00 00 00 00 00 00 00 00 b4 81 49 c1 00 00 61 75 74 %..........'.............I...aut
ee60 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 4f 54 44 41 5f 63 6f 6c 6f 72 5f 69 6d 61 67 65 o_examples/plot_OTDA_color_image
ee80 73 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 a9 83 e3 4a f7 ba 1e e3 6d 0d 00 00 6d 0d 00 00 s.pyPK.............J....m...m...
eea0 2f 00 00 00 00 00 00 00 00 00 00 00 b4 81 94 cb 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f /.................auto_examples/
eec0 70 6c 6f 74 5f 4f 54 44 41 5f 6d 61 70 70 69 6e 67 5f 63 6f 6c 6f 72 5f 69 6d 61 67 65 73 2e 70 plot_OTDA_mapping_color_images.p
eee0 79 50 4b 01 02 14 03 14 00 00 00 00 00 cb 86 1e 4b 4a 1b d0 65 5a 0f 00 00 5a 0f 00 00 27 00 00 yPK.............KJ..eZ...Z...'..
ef00 00 00 00 00 00 00 00 00 00 b4 81 4e d9 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f ...........N...auto_examples/plo
ef20 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 00 00 14 00 t_otda_color_images.pyPK........
ef40 14 00 49 06 00 00 ed e8 00 00 00 00 ..I.........