summaryrefslogtreecommitdiff
path: root/docs/source/auto_examples/auto_examples_python.zip
blob: 97377e19c94b8fdc07234f388caa315d097d6514 (plain)
ofshex dumpascii
0000 50 4b 03 04 14 00 00 00 00 00 a9 83 e3 4a 2f 8a 49 ca a0 04 00 00 a0 04 00 00 19 00 00 00 61 75 PK...........J/.I.............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 40 61 75 74 68 6f ========================..@autho
00c0 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
00e0 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
0100 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 66 72 6f 6d 20 6f 74 2e 64 61 74 61 73 65 74 73 20 69 6d 70 l.import.ot.from.ot.datasets.imp
0120 6f 72 74 20 67 65 74 5f 31 44 5f 67 61 75 73 73 20 61 73 20 67 61 75 73 73 0a 66 72 6f 6d 20 6f ort.get_1D_gauss.as.gauss.from.o
0140 74 2e 64 72 20 69 6d 70 6f 72 74 20 77 64 61 0a 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 t.dr.import.wda...#%%.parameters
0160 0a 0a 6e 3d 31 30 30 30 20 23 20 6e 62 20 73 61 6d 70 6c 65 73 20 69 6e 20 73 6f 75 72 63 65 20 ..n=1000.#.nb.samples.in.source.
0180 61 6e 64 20 74 61 72 67 65 74 20 64 61 74 61 73 65 74 73 0a 6e 7a 3d 30 2e 32 0a 78 73 2c 79 73 and.target.datasets.nz=0.2.xs,ys
01a0 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 69 66 28 27 33 =ot.datasets.get_data_classif('3
01c0 67 61 75 73 73 27 2c 6e 2c 6e 7a 29 0a 78 74 2c 79 74 3d 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 gauss',n,nz).xt,yt=ot.datasets.g
01e0 65 74 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 27 33 67 61 75 73 73 27 2c 6e 2c 6e 7a 29 0a 0a et_data_classif('3gauss',n,nz)..
0200 6e 62 6e 6f 69 73 65 3d 38 0a 0a 78 73 3d 6e 70 2e 68 73 74 61 63 6b 28 28 78 73 2c 6e 70 2e 72 nbnoise=8..xs=np.hstack((xs,np.r
0220 61 6e 64 6f 6d 2e 72 61 6e 64 6e 28 6e 2c 6e 62 6e 6f 69 73 65 29 29 29 0a 78 74 3d 6e 70 2e 68 andom.randn(n,nbnoise))).xt=np.h
0240 73 74 61 63 6b 28 28 78 74 2c 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 6e 28 6e 2c 6e 62 6e 6f stack((xt,np.random.randn(n,nbno
0260 69 73 65 29 29 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 67 ise)))..#%%.plot.samples..pl.fig
0280 75 72 65 28 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 ure(1)...pl.scatter(xt[:,0],xt[:
02a0 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 53 6f 75 72 63 ,1],c=ys,marker='+',label='Sourc
02c0 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e e.samples').pl.legend(loc=0).pl.
02e0 74 69 74 6c 65 28 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 title('Discriminant.dimensions')
0300 0a 0a 0a 23 25 25 20 70 6c 6f 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 61 6e 64 20 6c 6f ...#%%.plot.distributions.and.lo
0320 73 73 20 6d 61 74 72 69 78 0a 70 3d 32 0a 72 65 67 3d 31 0a 6b 3d 31 30 0a 6d 61 78 69 74 65 72 ss.matrix.p=2.reg=1.k=10.maxiter
0340 3d 31 30 30 0a 0a 50 2c 70 72 6f 6a 20 3d 20 77 64 61 28 78 73 2c 79 73 2c 70 2c 72 65 67 2c 6b =100..P,proj.=.wda(xs,ys,p,reg,k
0360 2c 6d 61 78 69 74 65 72 3d 6d 61 78 69 74 65 72 29 0a 0a 23 25 25 20 70 6c 6f 74 20 73 61 6d 70 ,maxiter=maxiter)..#%%.plot.samp
0380 6c 65 73 0a 0a 78 73 70 3d 70 72 6f 6a 28 78 73 29 0a 78 74 70 3d 70 72 6f 6a 28 78 74 29 0a 0a les..xsp=proj(xs).xtp=proj(xt)..
03a0 70 6c 2e 66 69 67 75 72 65 28 31 2c 28 31 30 2c 35 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 pl.figure(1,(10,5))..pl.subplot(
03c0 31 2c 32 2c 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 73 70 5b 3a 2c 30 5d 2c 78 73 70 5b 3a 1,2,1).pl.scatter(xsp[:,0],xsp[:
03e0 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 50 72 6f 6a 65 ,1],c=ys,marker='+',label='Proje
0400 63 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 cted.samples').pl.legend(loc=0).
0420 70 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 pl.title('Projected.training.sam
0440 70 6c 65 73 27 29 0a 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 32 2c 32 29 0a 70 6c 2e 73 63 ples')...pl.subplot(1,2,2).pl.sc
0460 61 74 74 65 72 28 78 74 70 5b 3a 2c 30 5d 2c 78 74 70 5b 3a 2c 31 5d 2c 63 3d 79 73 2c 6d 61 72 atter(xtp[:,0],xtp[:,1],c=ys,mar
0480 6b 65 72 3d 27 2b 27 2c 6c 61 62 65 6c 3d 27 50 72 6f 6a 65 63 74 65 64 20 73 61 6d 70 6c 65 73 ker='+',label='Projected.samples
04a0 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 50 72 ').pl.legend(loc=0).pl.title('Pr
04c0 6f 6a 65 63 74 65 64 20 74 65 73 74 20 73 61 6d 70 6c 65 73 27 29 0a 50 4b 03 04 14 00 00 00 00 ojected.test.samples').PK.......
04e0 00 a9 83 e3 4a e7 a1 46 a7 95 0c 00 00 95 0c 00 00 22 00 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c ....J..F........."...auto_exampl
0500 65 73 2f 70 6c 6f 74 5f 4f 54 44 41 5f 6d 61 70 70 69 6e 67 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 es/plot_OTDA_mapping.py#.-*-.cod
0520 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.-*-.""".=============
0540 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================================
0560 3d 3d 0a 4f 54 20 6d 61 70 70 69 6e 67 20 65 73 74 69 6d 61 74 69 6f 6e 20 66 6f 72 20 64 6f 6d ==.OT.mapping.estimation.for.dom
0580 61 69 6e 20 61 64 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 ain.adaptation.[8].=============
05a0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================================
05c0 3d 3d 0a 0a 5b 38 5d 20 4d 2e 20 50 65 72 72 6f 74 2c 20 4e 2e 20 43 6f 75 72 74 79 2c 20 52 2e ==..[8].M..Perrot,.N..Courty,.R.
05e0 20 46 6c 61 6d 61 72 79 2c 20 41 2e 20 48 61 62 72 61 72 64 2c 20 22 4d 61 70 70 69 6e 67 20 65 .Flamary,.A..Habrard,."Mapping.e
0600 73 74 69 6d 61 74 69 6f 6e 20 66 6f 72 0a 20 20 20 20 64 69 73 63 72 65 74 65 20 6f 70 74 69 6d stimation.for.....discrete.optim
0620 61 6c 20 74 72 61 6e 73 70 6f 72 74 22 2c 20 4e 65 75 72 61 6c 20 49 6e 66 6f 72 6d 61 74 69 6f al.transport",.Neural.Informatio
0640 6e 20 50 72 6f 63 65 73 73 69 6e 67 20 53 79 73 74 65 6d 73 20 28 4e 49 50 53 29 2c 20 32 30 31 n.Processing.Systems.(NIPS),.201
0660 36 2e 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 6.."""..import.numpy.as.np.impor
0680 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 t.matplotlib.pylab.as.pl.import.
06a0 6f 74 0a 0a 0a 0a 23 25 25 20 64 61 74 61 73 65 74 20 67 65 6e 65 72 61 74 69 6f 6e 0a 0a 6e 70 ot....#%%.dataset.generation..np
06c0 2e 72 61 6e 64 6f 6d 2e 73 65 65 64 28 30 29 20 23 20 6d 61 6b 65 73 20 65 78 61 6d 70 6c 65 20 .random.seed(0).#.makes.example.
06e0 72 65 70 72 6f 64 75 63 69 62 6c 65 0a 0a 6e 3d 31 30 30 20 23 20 6e 62 20 73 61 6d 70 6c 65 73 reproducible..n=100.#.nb.samples
0700 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 73 0a 74 .in.source.and.target.datasets.t
0720 68 65 74 61 3d 32 2a 6e 70 2e 70 69 2f 32 30 0a 6e 7a 3d 30 2e 31 0a 78 73 2c 79 73 3d 6f 74 2e heta=2*np.pi/20.nz=0.1.xs,ys=ot.
0740 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
0760 72 6f 74 27 2c 6e 2c 6e 7a 3d 6e 7a 29 0a 78 74 2c 79 74 3d 6f 74 2e 64 61 74 61 73 65 74 73 2e rot',n,nz=nz).xt,yt=ot.datasets.
0780 67 65 74 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 27 67 61 75 73 73 72 6f 74 27 2c 6e 2c 74 68 get_data_classif('gaussrot',n,th
07a0 65 74 61 3d 74 68 65 74 61 2c 6e 7a 3d 6e 7a 29 0a 0a 23 20 6f 6e 65 20 6f 66 20 74 68 65 20 74 eta=theta,nz=nz)..#.one.of.the.t
07c0 61 72 67 65 74 20 6d 6f 64 65 20 63 68 61 6e 67 65 73 20 69 74 73 20 76 61 72 69 61 6e 63 65 20 arget.mode.changes.its.variance.
07e0 28 6e 6f 20 6c 69 6e 65 61 72 20 6d 61 70 70 69 6e 67 29 0a 78 74 5b 79 74 3d 3d 32 5d 2a 3d 33 (no.linear.mapping).xt[yt==2]*=3
0800 0a 78 74 3d 78 74 2b 34 0a 0a 0a 23 25 25 20 70 6c 6f 74 20 73 61 6d 70 6c 65 73 0a 0a 70 6c 2e .xt=xt+4...#%%.plot.samples..pl.
0820 66 69 67 75 72 65 28 31 2c 28 38 2c 35 29 29 0a 70 6c 2e 63 6c 66 28 29 0a 0a 70 6c 2e 73 63 61 figure(1,(8,5)).pl.clf()..pl.sca
0840 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
0860 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.
0880 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
08a0 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').
08c0 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
08e0 63 65 20 61 6e 64 20 74 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 0a ce.and.target.distributions')...
0900 0a 23 25 25 20 4f 54 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 .#%%.OT.linear.mapping.estimatio
0920 6e 0a 0a 65 74 61 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 n..eta=1e-8...#.quadratic.regula
0940 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 31 65 30 20 20 rization.for.regression.mu=1e0..
0960 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 72 20 74 65 72 ...#.weight.of.the.OT.linear.ter
0980 6d 0a 62 69 61 73 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 m.bias=True..#.estimate.a.bias..
09a0 6f 74 5f 6d 61 70 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 ot_mapping=ot.da.OTDA_mapping_li
09c0 6e 65 61 72 28 29 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 near().ot_mapping.fit(xs,xt,mu=m
09e0 75 2c 65 74 61 3d 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 u,eta=eta,bias=bias,numItermax.=
0a00 20 32 30 2c 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 0a 78 73 74 3d 6f 74 5f 6d 61 70 70 69 6e .20,verbose=True)..xst=ot_mappin
0a20 67 2e 70 72 65 64 69 63 74 28 78 73 29 20 23 20 75 73 65 20 74 68 65 20 65 73 74 69 6d 61 74 65 g.predict(xs).#.use.the.estimate
0a40 64 20 6d 61 70 70 69 6e 67 0a 78 73 74 30 3d 6f 74 5f 6d 61 70 70 69 6e 67 2e 69 6e 74 65 72 70 d.mapping.xst0=ot_mapping.interp
0a60 28 29 20 20 20 23 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 ()...#.use.barycentric.mapping..
0a80 0a 70 6c 2e 66 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 .pl.figure(2,(10,7)).pl.clf().pl
0aa0 2e 73 75 62 70 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 .subplot(2,2,1).pl.scatter(xt[:,
0ac0 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 6c 0],xt[:,1],c=yt,marker='o',label
0ae0 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 33 29 0a 70 6c 2e 73 ='Target.samples',alpha=.3).pl.s
0b00 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 79 73 2c catter(xst0[:,0],xst0[:,1],c=ys,
0b20 6d 61 72 6b 65 72 3d 27 2b 27 2c 6c 61 62 65 6c 3d 27 62 61 72 79 63 65 6e 74 72 69 63 20 6d 61 marker='+',label='barycentric.ma
0b40 70 70 69 6e 67 27 29 0a 70 6c 2e 74 69 74 6c 65 28 22 62 61 72 79 63 65 6e 74 72 69 63 20 6d 61 pping').pl.title("barycentric.ma
0b60 70 70 69 6e 67 22 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 32 2c 32 29 0a 70 6c 2e 73 63 pping")..pl.subplot(2,2,2).pl.sc
0b80 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 6b 65 atter(xt[:,0],xt[:,1],c=yt,marke
0ba0 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 2c 61 6c 70 r='o',label='Target.samples',alp
0bc0 68 61 3d 2e 33 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 73 74 5b 3a 2c 30 5d 2c 78 73 74 5b 3a ha=.3).pl.scatter(xst[:,0],xst[:
0be0 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 65 61 72 6e ,1],c=ys,marker='+',label='Learn
0c00 65 64 20 6d 61 70 70 69 6e 67 27 29 0a 70 6c 2e 74 69 74 6c 65 28 22 4c 65 61 72 6e 65 64 20 6d ed.mapping').pl.title("Learned.m
0c20 61 70 70 69 6e 67 22 29 0a 0a 0a 0a 23 25 25 20 4b 65 72 6e 65 6c 20 6d 61 70 70 69 6e 67 20 65 apping")....#%%.Kernel.mapping.e
0c40 73 74 69 6d 61 74 69 6f 6e 0a 0a 65 74 61 3d 31 65 2d 35 20 20 20 23 20 71 75 61 64 72 61 74 69 stimation..eta=1e-5...#.quadrati
0c60 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 0a c.regularization.for.regression.
0c80 6d 75 3d 31 65 2d 31 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=1e-1.....#.weight.of.the.OT.l
0ca0 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
0cc0 20 61 20 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 .a.bias.sigma=1....#.sigma.bandw
0ce0 69 64 74 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 idth.fot.gaussian.kernel...ot_ma
0d00 70 70 69 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 pping_kernel=ot.da.OTDA_mapping_
0d20 6b 65 72 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 kernel().ot_mapping_kernel.fit(x
0d40 73 2c 78 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 s,xt,mu=mu,eta=eta,sigma=sigma,b
0d60 69 61 73 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 ias=bias,numItermax.=.10,verbose
0d80 3d 54 72 75 65 29 0a 0a 78 73 74 5f 6b 65 72 6e 65 6c 3d 6f 74 5f 6d 61 70 70 69 6e 67 5f 6b 65 =True)..xst_kernel=ot_mapping_ke
0da0 72 6e 65 6c 2e 70 72 65 64 69 63 74 28 78 73 29 20 23 20 75 73 65 20 74 68 65 20 65 73 74 69 6d rnel.predict(xs).#.use.the.estim
0dc0 61 74 65 64 20 6d 61 70 70 69 6e 67 0a 78 73 74 30 5f 6b 65 72 6e 65 6c 3d 6f 74 5f 6d 61 70 70 ated.mapping.xst0_kernel=ot_mapp
0de0 69 6e 67 5f 6b 65 72 6e 65 6c 2e 69 6e 74 65 72 70 28 29 20 20 20 23 20 75 73 65 20 62 61 72 79 ing_kernel.interp()...#.use.bary
0e00 63 65 6e 74 72 69 63 20 6d 61 70 70 69 6e 67 0a 0a 0a 23 25 25 20 50 6c 6f 74 74 69 6e 67 20 74 centric.mapping...#%%.Plotting.t
0e20 68 65 20 6d 61 70 70 65 64 20 73 61 6d 70 6c 65 73 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 28 he.mapped.samples..pl.figure(2,(
0e40 31 30 2c 37 29 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 32 2c 31 10,7)).pl.clf().pl.subplot(2,2,1
0e60 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 3d 79 ).pl.scatter(xt[:,0],xt[:,1],c=y
0e80 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
0ea0 65 73 27 2c 61 6c 70 68 61 3d 2e 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 73 74 30 5b 3a 2c es',alpha=.2).pl.scatter(xst0[:,
0ec0 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 27 2b 27 2c 6c 61 62 0],xst0[:,1],c=ys,marker='+',lab
0ee0 65 6c 3d 27 4d 61 70 70 65 64 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 74 el='Mapped.source.samples').pl.t
0f00 69 74 6c 65 28 22 42 61 72 79 2e 20 6d 61 70 70 69 6e 67 20 28 6c 69 6e 65 61 72 29 22 29 0a 70 itle("Bary..mapping.(linear)").p
0f20 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 6f 74 28 32 2c 32 2c l.legend(loc=0)..pl.subplot(2,2,
0f40 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 3d 2).pl.scatter(xt[:,0],xt[:,1],c=
0f60 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 70 yt,marker='o',label='Target.samp
0f80 6c 65 73 27 2c 61 6c 70 68 61 3d 2e 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 73 74 5b 3a 2c les',alpha=.2).pl.scatter(xst[:,
0fa0 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 65 0],xst[:,1],c=ys,marker='+',labe
0fc0 6c 3d 27 4c 65 61 72 6e 65 64 20 6d 61 70 70 69 6e 67 27 29 0a 70 6c 2e 74 69 74 6c 65 28 22 45 l='Learned.mapping').pl.title("E
0fe0 73 74 69 6d 2e 20 6d 61 70 70 69 6e 67 20 28 6c 69 6e 65 61 72 29 22 29 0a 0a 70 6c 2e 73 75 62 stim..mapping.(linear)")..pl.sub
1000 70 6c 6f 74 28 32 2c 32 2c 33 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,3).pl.scatter(xt[:,0],x
1020 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
1040 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
1060 65 72 28 78 73 74 30 5f 6b 65 72 6e 65 6c 5b 3a 2c 30 5d 2c 78 73 74 30 5f 6b 65 72 6e 65 6c 5b er(xst0_kernel[:,0],xst0_kernel[
1080 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 62 61 72 79 :,1],c=ys,marker='+',label='bary
10a0 63 65 6e 74 72 69 63 20 6d 61 70 70 69 6e 67 27 29 0a 70 6c 2e 74 69 74 6c 65 28 22 42 61 72 79 centric.mapping').pl.title("Bary
10c0 2e 20 6d 61 70 70 69 6e 67 20 28 6b 65 72 6e 65 6c 29 22 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 ..mapping.(kernel)")..pl.subplot
10e0 28 32 2c 32 2c 34 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 (2,2,4).pl.scatter(xt[:,0],xt[:,
1100 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
1120 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 72 28 78 .samples',alpha=.2).pl.scatter(x
1140 73 74 5f 6b 65 72 6e 65 6c 5b 3a 2c 30 5d 2c 78 73 74 5f 6b 65 72 6e 65 6c 5b 3a 2c 31 5d 2c 63 st_kernel[:,0],xst_kernel[:,1],c
1160 3d 79 73 2c 6d 61 72 6b 65 72 3d 27 2b 27 2c 6c 61 62 65 6c 3d 27 4c 65 61 72 6e 65 64 20 6d 61 =ys,marker='+',label='Learned.ma
1180 70 70 69 6e 67 27 29 0a 70 6c 2e 74 69 74 6c 65 28 22 45 73 74 69 6d 2e 20 6d 61 70 70 69 6e 67 pping').pl.title("Estim..mapping
11a0 20 28 6b 65 72 6e 65 6c 29 22 29 0a 50 4b 03 04 14 00 00 00 00 00 aa 83 e3 4a 75 a6 3a ed 10 05 .(kernel)").PK...........Ju.:...
11c0 00 00 10 05 00 00 21 00 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 6f 70 74 ......!...auto_examples/plot_opt
11e0 69 6d 5f 4f 54 72 65 67 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d im_OTreg.py#.-*-.coding:.utf-8.-
1200 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d *-.""".=========================
1220 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 65 67 75 6c 61 72 69 7a 65 64 20 4f 54 20 77 69 74 68 20 67 65 =========.Regularized.OT.with.ge
1240 6e 65 72 69 63 20 73 6f 6c 76 65 72 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d neric.solver.===================
1260 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6e 75 ===============..."""..import.nu
1280 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 61 mpy.as.np.import.matplotlib.pyla
12a0 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 0a 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 b.as.pl.import.ot....#%%.paramet
12c0 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 6f 73 69 ers..n=100.#.nb.bins..#.bin.posi
12e0 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 66 6c 6f tions.x=np.arange(n,dtype=np.flo
1300 61 74 36 34 29 0a 0a 23 20 47 61 75 73 73 69 61 6e 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a at64)..#.Gaussian.distributions.
1320 61 3d 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 31 44 5f 67 61 75 73 73 28 6e 2c 6d 3d 32 a=ot.datasets.get_1D_gauss(n,m=2
1340 30 2c 73 3d 35 29 20 23 20 6d 3d 20 6d 65 61 6e 2c 20 73 3d 20 73 74 64 0a 62 3d 6f 74 2e 64 61 0,s=5).#.m=.mean,.s=.std.b=ot.da
1360 74 61 73 65 74 73 2e 67 65 74 5f 31 44 5f 67 61 75 73 73 28 6e 2c 6d 3d 36 30 2c 73 3d 31 30 29 tasets.get_1D_gauss(n,m=60,s=10)
1380 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 68 ..#.loss.matrix.M=ot.dist(x.resh
13a0 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 3d ape((n,1)),x.reshape((n,1))).M/=
13c0 4d 2e 6d 61 78 28 29 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 M.max()..#%%.EMD..G0=ot.emd(a,b,
13e0 4d 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 74 31 44 5f M)..pl.figure(3).ot.plot.plot1D_
1400 6d 61 74 28 61 2c 62 2c 47 30 2c 27 4f 54 20 6d 61 74 72 69 78 20 47 30 27 29 0a 0a 23 25 25 20 mat(a,b,G0,'OT.matrix.G0')..#%%.
1420 45 78 61 6d 70 6c 65 20 77 69 74 68 20 46 72 6f 62 65 6e 69 75 73 20 6e 6f 72 6d 20 72 65 67 75 Example.with.Frobenius.norm.regu
1440 6c 61 72 69 7a 61 74 69 6f 6e 0a 0a 64 65 66 20 66 28 47 29 3a 20 72 65 74 75 72 6e 20 30 2e 35 larization..def.f(G):.return.0.5
1460 2a 6e 70 2e 73 75 6d 28 47 2a 2a 32 29 0a 64 65 66 20 64 66 28 47 29 3a 20 72 65 74 75 72 6e 20 *np.sum(G**2).def.df(G):.return.
1480 47 0a 0a 72 65 67 3d 31 65 2d 31 0a 0a 47 6c 32 3d 6f 74 2e 6f 70 74 69 6d 2e 63 67 28 61 2c 62 G..reg=1e-1..Gl2=ot.optim.cg(a,b
14a0 2c 4d 2c 72 65 67 2c 66 2c 64 66 2c 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 0a 70 6c 2e 66 69 ,M,reg,f,df,verbose=True)..pl.fi
14c0 67 75 72 65 28 33 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 gure(3).ot.plot.plot1D_mat(a,b,G
14e0 6c 32 2c 27 4f 54 20 6d 61 74 72 69 78 20 46 72 6f 62 2e 20 72 65 67 27 29 0a 0a 23 25 25 20 45 l2,'OT.matrix.Frob..reg')..#%%.E
1500 78 61 6d 70 6c 65 20 77 69 74 68 20 65 6e 74 72 6f 70 69 63 20 72 65 67 75 6c 61 72 69 7a 61 74 xample.with.entropic.regularizat
1520 69 6f 6e 0a 0a 64 65 66 20 66 28 47 29 3a 20 72 65 74 75 72 6e 20 6e 70 2e 73 75 6d 28 47 2a 6e ion..def.f(G):.return.np.sum(G*n
1540 70 2e 6c 6f 67 28 47 29 29 0a 64 65 66 20 64 66 28 47 29 3a 20 72 65 74 75 72 6e 20 6e 70 2e 6c p.log(G)).def.df(G):.return.np.l
1560 6f 67 28 47 29 2b 31 0a 0a 72 65 67 3d 31 65 2d 33 0a 0a 47 65 3d 6f 74 2e 6f 70 74 69 6d 2e 63 og(G)+1..reg=1e-3..Ge=ot.optim.c
1580 67 28 61 2c 62 2c 4d 2c 72 65 67 2c 66 2c 64 66 2c 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 0a g(a,b,M,reg,f,df,verbose=True)..
15a0 70 6c 2e 66 69 67 75 72 65 28 34 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 pl.figure(4).ot.plot.plot1D_mat(
15c0 61 2c 62 2c 47 65 2c 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 a,b,Ge,'OT.matrix.Entrop..reg').
15e0 0a 23 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 .#%%.Example.with.Frobenius.norm
1600 20 2b 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 .+.entropic.regularization.with.
1620 67 63 67 0a 0a 64 65 66 20 66 28 47 29 3a 20 72 65 74 75 72 6e 20 30 2e 35 2a 6e 70 2e 73 75 6d gcg..def.f(G):.return.0.5*np.sum
1640 28 47 2a 2a 32 29 0a 64 65 66 20 64 66 28 47 29 3a 20 72 65 74 75 72 6e 20 47 0a 0a 72 65 67 31 (G**2).def.df(G):.return.G..reg1
1660 3d 31 65 2d 33 0a 72 65 67 32 3d 31 65 2d 31 0a 0a 47 65 6c 32 3d 6f 74 2e 6f 70 74 69 6d 2e 67 =1e-3.reg2=1e-1..Gel2=ot.optim.g
1680 63 67 28 61 2c 62 2c 4d 2c 72 65 67 31 2c 72 65 67 32 2c 66 2c 64 66 2c 76 65 72 62 6f 73 65 3d cg(a,b,M,reg1,reg2,f,df,verbose=
16a0 54 72 75 65 29 0a 0a 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 True)..pl.figure(5).ot.plot.plot
16c0 31 44 5f 6d 61 74 28 61 2c 62 2c 47 65 6c 32 2c 27 4f 54 20 65 6e 74 72 6f 70 69 63 20 2b 20 6d 1D_mat(a,b,Gel2,'OT.entropic.+.m
16e0 61 74 72 69 78 20 46 72 6f 62 2e 20 72 65 67 27 29 0a 70 6c 2e 73 68 6f 77 28 29 50 4b 03 04 14 atrix.Frob..reg').pl.show()PK...
1700 00 00 00 00 00 a9 83 e3 4a f2 c1 a7 29 f1 09 00 00 f1 09 00 00 22 00 00 00 61 75 74 6f 5f 65 78 ........J...)........"...auto_ex
1720 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 4f 54 44 41 5f 63 6c 61 73 73 65 73 2e 70 79 23 20 2d 2a 2d amples/plot_OTDA_classes.py#.-*-
1740 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d .coding:.utf-8.-*-.""".=========
1760 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4f 54 20 66 6f 72 20 64 6f 6d 61 69 6e 20 61 64 ===============.OT.for.domain.ad
1780 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 3d 3d aptation.=======================
17a0 3d 0a 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 =.."""..import.matplotlib.pylab.
17c0 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 0a 0a 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 65 as.pl.import.ot.....#%%.paramete
17e0 72 73 0a 0a 6e 3d 31 35 30 20 23 20 6e 62 20 73 61 6d 70 6c 65 73 20 69 6e 20 73 6f 75 72 63 65 rs..n=150.#.nb.samples.in.source
1800 20 61 6e 64 20 74 61 72 67 65 74 20 64 61 74 61 73 65 74 73 0a 0a 78 73 2c 79 73 3d 6f 74 2e 64 .and.target.datasets..xs,ys=ot.d
1820 61 74 61 73 65 74 73 2e 67 65 74 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 27 33 67 61 75 73 73 atasets.get_data_classif('3gauss
1840 27 2c 6e 29 0a 78 74 2c 79 74 3d 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 64 61 74 61 5f ',n).xt,yt=ot.datasets.get_data_
1860 63 6c 61 73 73 69 66 28 27 33 67 61 75 73 73 32 27 2c 6e 29 0a 0a 0a 0a 0a 23 25 25 20 70 6c 6f classif('3gauss2',n).....#%%.plo
1880 74 20 73 61 6d 70 6c 65 73 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 29 0a 0a 70 6c 2e 73 75 62 70 t.samples..pl.figure(1)..pl.subp
18a0 6c 6f 74 28 32 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 lot(2,2,1).pl.scatter(xs[:,0],xs
18c0 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 53 6f 75 [:,1],c=ys,marker='+',label='Sou
18e0 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 rce.samples').pl.legend(loc=0).p
1900 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 20 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 l.title('Source..distributions')
1920 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 32 2c 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 ..pl.subplot(2,2,2).pl.scatter(x
1940 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 6c t[:,0],xt[:,1],c=yt,marker='o',l
1960 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 abel='Target.samples').pl.legend
1980 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 74 61 72 67 65 74 20 20 64 69 73 74 72 69 (loc=0).pl.title('target..distri
19a0 62 75 74 69 6f 6e 73 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 butions')...#%%.OT.estimation..#
19c0 20 4c 50 20 70 72 6f 62 6c 65 6d 0a 64 61 5f 65 6d 64 3d 6f 74 2e 64 61 2e 4f 54 44 41 28 29 20 .LP.problem.da_emd=ot.da.OTDA().
19e0 20 20 20 20 23 20 69 6e 69 74 20 63 6c 61 73 73 0a 64 61 5f 65 6d 64 2e 66 69 74 28 78 73 2c 78 ....#.init.class.da_emd.fit(xs,x
1a00 74 29 20 20 20 20 20 20 20 23 20 66 69 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 78 73 74 t).......#.fit.distributions.xst
1a20 30 3d 64 61 5f 65 6d 64 2e 69 6e 74 65 72 70 28 29 20 20 20 20 23 20 69 6e 74 65 72 70 6f 6c 61 0=da_emd.interp()....#.interpola
1a40 74 69 6f 6e 20 6f 66 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 0a 0a 0a 23 20 73 69 6e 6b 68 tion.of.source.samples...#.sinkh
1a60 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 31 0a 64 61 orn.regularization.lambd=1e-1.da
1a80 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 29 0a 64 61 _entrop=ot.da.OTDA_sinkhorn().da
1aa0 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 0a 78 73 74 _entrop.fit(xs,xt,reg=lambd).xst
1ac0 73 3d 64 61 5f 65 6e 74 72 6f 70 2e 69 6e 74 65 72 70 28 29 0a 0a 23 20 6e 6f 6e 2d 63 6f 6e 76 s=da_entrop.interp()..#.non-conv
1ae0 65 78 20 47 72 6f 75 70 20 6c 61 73 73 6f 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 72 65 ex.Group.lasso.regularization.re
1b00 67 3d 31 65 2d 31 0a 65 74 61 3d 31 65 30 0a 64 61 5f 6c 70 6c 31 3d 6f 74 2e 64 61 2e 4f 54 44 g=1e-1.eta=1e0.da_lpl1=ot.da.OTD
1b20 41 5f 6c 70 6c 31 28 29 0a 64 61 5f 6c 70 6c 31 2e 66 69 74 28 78 73 2c 79 73 2c 78 74 2c 72 65 A_lpl1().da_lpl1.fit(xs,ys,xt,re
1b40 67 3d 72 65 67 2c 65 74 61 3d 65 74 61 29 0a 78 73 74 67 3d 64 61 5f 6c 70 6c 31 2e 69 6e 74 65 g=reg,eta=eta).xstg=da_lpl1.inte
1b60 72 70 28 29 0a 0a 0a 23 20 54 72 75 65 20 47 72 6f 75 70 20 6c 61 73 73 6f 20 72 65 67 75 6c 61 rp()...#.True.Group.lasso.regula
1b80 72 69 7a 61 74 69 6f 6e 0a 72 65 67 3d 31 65 2d 31 0a 65 74 61 3d 32 65 30 0a 64 61 5f 6c 31 6c rization.reg=1e-1.eta=2e0.da_l1l
1ba0 32 3d 6f 74 2e 64 61 2e 4f 54 44 41 5f 6c 31 6c 32 28 29 0a 64 61 5f 6c 31 6c 32 2e 66 69 74 28 2=ot.da.OTDA_l1l2().da_l1l2.fit(
1bc0 78 73 2c 79 73 2c 78 74 2c 72 65 67 3d 72 65 67 2c 65 74 61 3d 65 74 61 2c 6e 75 6d 49 74 65 72 xs,ys,xt,reg=reg,eta=eta,numIter
1be0 6d 61 78 3d 32 30 2c 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 78 73 74 67 6c 3d 64 61 5f 6c 31 max=20,verbose=True).xstgl=da_l1
1c00 6c 32 2e 69 6e 74 65 72 70 28 29 0a 0a 0a 23 25 25 20 70 6c 6f 74 20 69 6e 74 65 72 70 6f 6c 61 l2.interp()...#%%.plot.interpola
1c20 74 65 64 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 0a 70 6c 2e 66 69 67 75 72 65 28 34 2c 28 ted.source.samples.pl.figure(4,(
1c40 31 35 2c 38 29 29 0a 0a 70 61 72 61 6d 5f 69 6d 67 3d 7b 27 69 6e 74 65 72 70 6f 6c 61 74 69 6f 15,8))..param_img={'interpolatio
1c60 6e 27 3a 27 6e 65 61 72 65 73 74 27 2c 27 63 6d 61 70 27 3a 27 6a 65 74 27 7d 0a 0a 70 6c 2e 73 n':'nearest','cmap':'jet'}..pl.s
1c80 75 62 70 6c 6f 74 28 32 2c 34 2c 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 64 61 5f 65 6d 64 2e 47 ubplot(2,4,1).pl.imshow(da_emd.G
1ca0 2c 2a 2a 70 61 72 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 ,**param_img).pl.title('OT.matri
1cc0 78 27 29 0a 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 34 2c 32 29 0a 70 6c 2e 69 6d 73 68 6f x')...pl.subplot(2,4,2).pl.imsho
1ce0 77 28 64 61 5f 65 6e 74 72 6f 70 2e 47 2c 2a 2a 70 61 72 61 6d 5f 69 6d 67 29 0a 70 6c 2e 74 69 w(da_entrop.G,**param_img).pl.ti
1d00 74 6c 65 28 27 4f 54 20 6d 61 74 72 69 78 20 73 69 6e 6b 68 6f 72 6e 27 29 0a 0a 70 6c 2e 73 75 tle('OT.matrix.sinkhorn')..pl.su
1d20 62 70 6c 6f 74 28 32 2c 34 2c 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 64 61 5f 6c 70 6c 31 2e 47 bplot(2,4,3).pl.imshow(da_lpl1.G
1d40 2c 2a 2a 70 61 72 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 ,**param_img).pl.title('OT.matri
1d60 78 20 6e 6f 6e 2d 63 6f 6e 76 65 78 20 47 72 6f 75 70 20 4c 61 73 73 6f 27 29 0a 0a 70 6c 2e 73 x.non-convex.Group.Lasso')..pl.s
1d80 75 62 70 6c 6f 74 28 32 2c 34 2c 34 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 64 61 5f 6c 31 6c 32 2e ubplot(2,4,4).pl.imshow(da_l1l2.
1da0 47 2c 2a 2a 70 61 72 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 G,**param_img).pl.title('OT.matr
1dc0 69 78 20 47 72 6f 75 70 20 4c 61 73 73 6f 27 29 0a 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c ix.Group.Lasso')...pl.subplot(2,
1de0 34 2c 35 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 4,5).pl.scatter(xt[:,0],xt[:,1],
1e00 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 61 c=yt,marker='o',label='Target.sa
1e20 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 72 28 78 73 74 mples',alpha=0.3).pl.scatter(xst
1e40 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 27 2b 27 0[:,0],xst0[:,1],c=ys,marker='+'
1e60 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 0a 70 6c ,label='Transp.samples',s=30).pl
1e80 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 65 67 65 .title('Interp.samples').pl.lege
1ea0 6e 64 28 6c 6f 63 3d 30 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 34 2c 36 29 0a 70 6c 2e nd(loc=0)..pl.subplot(2,4,6).pl.
1ec0 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
1ee0 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 2c 61 ker='o',label='Target.samples',a
1f00 6c 70 68 61 3d 30 2e 33 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 73 74 73 5b 3a 2c 30 5d 2c 78 lpha=0.3).pl.scatter(xsts[:,0],x
1f20 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 62 65 6c 3d 27 sts[:,1],c=ys,marker='+',label='
1f40 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 74 6c 65 28 27 Transp.samples',s=30).pl.title('
1f60 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 70 6c 2e 73 75 Interp.samples.Sinkhorn')..pl.su
1f80 62 70 6c 6f 74 28 32 2c 34 2c 37 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 74 5b 3a 2c 30 5d 2c bplot(2,4,7).pl.scatter(xt[:,0],
1fa0 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 6c 3d 27 54 xt[:,1],c=yt,marker='o',label='T
1fc0 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 6c 2e 73 63 61 arget.samples',alpha=0.3).pl.sca
1fe0 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 3d 79 73 2c 6d 61 tter(xstg[:,0],xstg[:,1],c=ys,ma
2000 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 6c 65 73 27 2c rker='+',label='Transp.samples',
2020 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 6c 65 73 20 6e s=30).pl.title('Interp.samples.n
2040 6f 6e 2d 63 6f 6e 76 65 78 20 47 72 6f 75 70 20 4c 61 73 73 6f 27 29 0a 0a 70 6c 2e 73 75 62 70 on-convex.Group.Lasso')..pl.subp
2060 6c 6f 74 28 32 2c 34 2c 38 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,4,8).pl.scatter(xt[:,0],xt
2080 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
20a0 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 6c 2e 73 63 61 74 74 get.samples',alpha=0.3).pl.scatt
20c0 65 72 28 78 73 74 67 6c 5b 3a 2c 30 5d 2c 78 73 74 67 6c 5b 3a 2c 31 5d 2c 63 3d 79 73 2c 6d 61 er(xstgl[:,0],xstgl[:,1],c=ys,ma
20e0 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 6c 65 73 27 2c rker='+',label='Transp.samples',
2100 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 6c 65 73 20 47 s=30).pl.title('Interp.samples.G
2120 72 6f 75 70 20 4c 61 73 73 6f 27 29 50 4b 03 04 14 00 00 00 00 00 a9 83 e3 4a 58 62 bb 42 8f 03 roup.Lasso')PK...........JXb.B..
2140 00 00 8f 03 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 ..........auto_examples/plot_OT_
2160 31 44 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 1D.py#.-*-.coding:.utf-8.-*-."""
2180 0a 3d 3d 3d 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 .====================.1D.optimal
21a0 20 74 72 61 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 .transport.====================.
21c0 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
21e0 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
2200 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 2e 64 61 74 61 73 ab.as.pl.import.ot.from.ot.datas
2220 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 20 67 61 75 73 73 ets.import.get_1D_gauss.as.gauss
2240 0a 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 6e 3d 31 30 30 20 23 20 6e 62 20 62 69 ...#%%.parameters..n=100.#.nb.bi
2260 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 72 61 6e 67 65 28 ns..#.bin.positions.x=np.arange(
2280 6e 2c 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 n,dtype=np.float64)..#.Gaussian.
22a0 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 61 3d 67 61 75 73 73 28 6e 2c 6d 3d 32 30 2c 73 3d 35 distributions.a=gauss(n,m=20,s=5
22c0 29 20 23 20 6d 3d 20 6d 65 61 6e 2c 20 73 3d 20 73 74 64 0a 62 3d 67 61 75 73 73 28 6e 2c 6d 3d ).#.m=.mean,.s=.std.b=gauss(n,m=
22e0 36 30 2c 73 3d 31 30 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 60,s=10)..#.loss.matrix.M=ot.dis
2300 74 28 78 2e 72 65 73 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 t(x.reshape((n,1)),x.reshape((n,
2320 31 29 29 29 0a 4d 2f 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 1))).M/=M.max()..#%%.plot.the.di
2340 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 70 6c 6f stributions..pl.figure(1).pl.plo
2360 74 28 78 2c 61 2c 27 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 t(x,a,'b',label='Source.distribu
2380 74 69 6f 6e 27 29 0a 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 tion').pl.plot(x,b,'r',label='Ta
23a0 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().
23c0 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
23e0 20 6d 61 74 72 69 78 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 .matrix..pl.figure(2).ot.plot.pl
2400 6f 74 31 44 5f 6d 61 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 ot1D_mat(a,b,M,'Cost.matrix.M').
2420 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 0a 0a 70 6c 2e 66 .#%%.EMD..G0=ot.emd(a,b,M)..pl.f
2440 69 67 75 72 65 28 33 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 igure(3).ot.plot.plot1D_mat(a,b,
2460 47 30 2c 27 4f 54 20 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 G0,'OT.matrix.G0')..#%%.Sinkhorn
2480 0a 0a 6c 61 6d 62 64 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 ..lambd=1e-3.Gs=ot.sinkhorn(a,b,
24a0 4d 2c 6c 61 6d 62 64 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 M,lambd,verbose=True)..pl.figure
24c0 28 34 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 2c 27 4f (4).ot.plot.plot1D_mat(a,b,Gs,'O
24e0 54 20 6d 61 74 72 69 78 20 53 69 6e 6b 68 6f 72 6e 27 29 0a 50 4b 03 04 14 00 00 00 00 00 32 82 T.matrix.Sinkhorn').PK........2.
2500 e3 4a 58 1b a1 c7 97 10 00 00 97 10 00 00 1d 00 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f .JX...............auto_examples/
2520 70 6c 6f 74 5f 4f 54 5f 63 6f 6e 76 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 plot_OT_conv.py#.-*-.coding:.utf
2540 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 3d 3d -8.-*-.""".=====================
2560 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 31 44 20 57 61 73 73 65 72 73 74 65 69 6e 20 62 61 72 79 63 65 6e =========.1D.Wasserstein.barycen
2580 74 65 72 20 64 65 6d 6f 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ter.demo.=======================
25a0 3d 3d 3d 3d 3d 3d 3d 0a 0a 0a 40 61 75 74 68 6f 72 3a 20 72 66 6c 61 6d 61 72 79 0a 22 22 22 0a =======...@author:.rflamary.""".
25c0 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c .import.numpy.as.np.import.matpl
25e0 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 66 72 6f 6d otlib.pylab.as.pl.import.ot.from
2600 20 6d 70 6c 5f 74 6f 6f 6c 6b 69 74 73 2e 6d 70 6c 6f 74 33 64 20 69 6d 70 6f 72 74 20 41 78 65 .mpl_toolkits.mplot3d.import.Axe
2620 73 33 44 20 23 6e 65 63 65 73 73 61 72 79 20 66 6f 72 20 33 64 20 70 6c 6f 74 20 65 76 65 6e 20 s3D.#necessary.for.3d.plot.even.
2640 69 66 20 6e 6f 74 20 75 73 65 64 0a 69 6d 70 6f 72 74 20 73 63 69 70 79 20 61 73 20 73 70 0a 69 if.not.used.import.scipy.as.sp.i
2660 6d 70 6f 72 74 20 73 63 69 70 79 2e 73 69 67 6e 61 6c 20 61 73 20 73 70 73 0a 23 25 25 20 70 61 mport.scipy.signal.as.sps.#%%.pa
2680 72 61 6d 65 74 65 72 73 0a 0a 6e 3d 31 30 20 23 20 6e 62 20 62 69 6e 73 0a 0a 23 20 62 69 6e 20 rameters..n=10.#.nb.bins..#.bin.
26a0 70 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 positions.x=np.arange(n,dtype=np
26c0 2e 66 6c 6f 61 74 36 34 29 0a 0a 78 78 2c 79 79 3d 6e 70 2e 6d 65 73 68 67 72 69 64 28 78 2c 78 .float64)..xx,yy=np.meshgrid(x,x
26e0 29 0a 0a 0a 78 70 6f 73 3d 6e 70 2e 68 73 74 61 63 6b 28 28 78 78 2e 72 65 73 68 61 70 65 28 2d )...xpos=np.hstack((xx.reshape(-
2700 31 2c 31 29 2c 79 79 2e 72 65 73 68 61 70 65 28 2d 31 2c 31 29 29 29 0a 0a 4d 3d 6f 74 2e 64 69 1,1),yy.reshape(-1,1)))..M=ot.di
2720 73 74 28 78 70 6f 73 29 0a 0a 0a 49 30 3d 28 28 78 78 2d 35 29 2a 2a 32 2b 28 79 79 2d 35 29 2a st(xpos)...I0=((xx-5)**2+(yy-5)*
2740 2a 32 3c 33 2a 2a 32 29 2a 31 2e 30 0a 49 31 3d 28 28 78 78 2d 37 29 2a 2a 32 2b 28 79 79 2d 37 *2<3**2)*1.0.I1=((xx-7)**2+(yy-7
2760 29 2a 2a 32 3c 33 2a 2a 32 29 2a 31 2e 30 0a 0a 49 30 2f 3d 49 30 2e 73 75 6d 28 29 0a 49 31 2f )**2<3**2)*1.0..I0/=I0.sum().I1/
2780 3d 49 31 2e 73 75 6d 28 29 0a 0a 69 30 3d 49 30 2e 72 61 76 65 6c 28 29 0a 69 31 3d 49 31 2e 72 =I1.sum()..i0=I0.ravel().i1=I1.r
27a0 61 76 65 6c 28 29 0a 0a 4d 3d 4d 5b 69 30 3e 30 2c 3a 5d 5b 3a 2c 69 31 3e 30 5d 2e 63 6f 70 79 avel()..M=M[i0>0,:][:,i1>0].copy
27c0 28 29 0a 69 30 3d 69 30 5b 69 30 3e 30 5d 0a 69 31 3d 69 31 5b 69 31 3e 30 5d 0a 49 74 6f 74 3d ().i0=i0[i0>0].i1=i1[i1>0].Itot=
27e0 6e 70 2e 63 6f 6e 63 61 74 65 6e 61 74 65 28 28 49 30 5b 3a 2c 3a 2c 6e 70 2e 6e 65 77 61 78 69 np.concatenate((I0[:,:,np.newaxi
2800 73 5d 2c 49 31 5b 3a 2c 3a 2c 6e 70 2e 6e 65 77 61 78 69 73 5d 29 2c 32 29 0a 0a 0a 23 25 25 20 s],I1[:,:,np.newaxis]),2)...#%%.
2820 70 6c 6f 74 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 70 6c 2e 66 69 67 75 72 plot.the.distributions..pl.figur
2840 65 28 31 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 32 2c 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 e(1).pl.subplot(2,2,1).pl.imshow
2860 28 49 30 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 32 2c 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 (I0).pl.subplot(2,2,2).pl.imshow
2880 28 49 31 29 0a 0a 0a 23 25 25 20 62 61 72 79 63 65 6e 74 65 72 20 63 6f 6d 70 75 74 61 74 69 6f (I1)...#%%.barycenter.computatio
28a0 6e 0a 0a 61 6c 70 68 61 3d 30 2e 35 20 23 20 30 3c 3d 61 6c 70 68 61 3c 3d 31 0a 77 65 69 67 68 n..alpha=0.5.#.0<=alpha<=1.weigh
28c0 74 73 3d 6e 70 2e 61 72 72 61 79 28 5b 31 2d 61 6c 70 68 61 2c 61 6c 70 68 61 5d 29 0a 0a 0a 64 ts=np.array([1-alpha,alpha])...d
28e0 65 66 20 63 6f 6e 76 32 28 49 2c 6b 29 3a 0a 20 20 20 20 72 65 74 75 72 6e 20 73 70 2e 6e 64 69 ef.conv2(I,k):.....return.sp.ndi
2900 6d 61 67 65 2e 63 6f 6e 76 6f 6c 76 65 31 64 28 73 70 2e 6e 64 69 6d 61 67 65 2e 63 6f 6e 76 6f mage.convolve1d(sp.ndimage.convo
2920 6c 76 65 31 64 28 49 2c 6b 2c 61 78 69 73 3d 31 29 2c 6b 2c 61 78 69 73 3d 30 29 0a 0a 64 65 66 lve1d(I,k,axis=1),k,axis=0)..def
2940 20 63 6f 6e 76 32 6e 28 49 2c 6b 29 3a 0a 20 20 20 20 72 65 73 3d 6e 70 2e 7a 65 72 6f 73 5f 6c .conv2n(I,k):.....res=np.zeros_l
2960 69 6b 65 28 49 29 0a 20 20 20 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 49 2e 73 68 61 70 ike(I).....for.i.in.range(I.shap
2980 65 5b 32 5d 29 3a 0a 20 20 20 20 20 20 20 20 72 65 73 5b 3a 2c 3a 2c 69 5d 3d 63 6f 6e 76 32 28 e[2]):.........res[:,:,i]=conv2(
29a0 49 5b 3a 2c 3a 2c 69 5d 2c 6b 29 0a 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 0a 0a 0a 64 65 66 I[:,:,i],k).....return.res...def
29c0 20 67 65 74 5f 31 44 6b 65 72 6e 65 6c 28 72 65 67 2c 74 68 72 3d 31 65 2d 31 36 2c 77 6d 61 78 .get_1Dkernel(reg,thr=1e-16,wmax
29e0 3d 31 30 32 34 29 3a 0a 20 20 20 20 77 3d 6d 61 78 28 6d 69 6e 28 77 6d 61 78 2c 32 2a 69 6e 74 =1024):.....w=max(min(wmax,2*int
2a00 28 28 2d 6e 70 2e 6c 6f 67 28 74 68 72 29 2a 72 65 67 29 2a 2a 28 2e 35 29 29 29 2c 33 29 0a 20 ((-np.log(thr)*reg)**(.5))),3)..
2a20 20 20 20 78 3d 6e 70 2e 61 72 61 6e 67 65 28 77 2c 64 74 79 70 65 3d 6e 70 2e 66 6c 6f 61 74 36 ...x=np.arange(w,dtype=np.float6
2a40 34 29 0a 20 20 20 20 72 65 74 75 72 6e 20 6e 70 2e 65 78 70 28 2d 28 28 78 2d 77 2f 32 29 2a 2a 4).....return.np.exp(-((x-w/2)**
2a60 32 29 2f 72 65 67 29 0a 20 20 20 20 0a 74 68 72 3d 31 65 2d 31 36 0a 72 65 67 3d 31 65 30 0a 0a 2)/reg)......thr=1e-16.reg=1e0..
2a80 6b 3d 67 65 74 5f 31 44 6b 65 72 6e 65 6c 28 72 65 67 29 0a 70 6c 2e 66 69 67 75 72 65 28 32 29 k=get_1Dkernel(reg).pl.figure(2)
2aa0 0a 70 6c 2e 70 6c 6f 74 28 6b 29 0a 0a 49 30 35 3d 63 6f 6e 76 32 28 49 30 2c 6b 29 0a 0a 70 6c .pl.plot(k)..I05=conv2(I0,k)..pl
2ac0 2e 66 69 67 75 72 65 28 31 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 32 2c 31 29 0a 70 6c 2e .figure(1).pl.subplot(2,2,1).pl.
2ae0 69 6d 73 68 6f 77 28 49 30 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 32 2c 32 29 0a 70 6c 2e imshow(I0).pl.subplot(2,2,2).pl.
2b00 69 6d 73 68 6f 77 28 49 30 35 29 0a 0a 23 25 25 0a 0a 47 3d 6f 74 2e 65 6d 64 28 69 30 2c 69 31 imshow(I05)..#%%..G=ot.emd(i0,i1
2b20 2c 4d 29 0a 72 30 3d 6e 70 2e 73 75 6d 28 4d 2a 47 29 0a 0a 72 65 67 3d 31 65 2d 31 0a 47 73 3d ,M).r0=np.sum(M*G)..reg=1e-1.Gs=
2b40 6f 74 2e 62 72 65 67 6d 61 6e 2e 73 69 6e 6b 68 6f 72 6e 5f 6b 6e 6f 70 70 28 69 30 2c 69 31 2c ot.bregman.sinkhorn_knopp(i0,i1,
2b60 4d 2c 72 65 67 3d 72 65 67 29 0a 72 73 3d 6e 70 2e 73 75 6d 28 4d 2a 47 73 29 0a 0a 23 25 25 0a M,reg=reg).rs=np.sum(M*Gs)..#%%.
2b80 0a 64 65 66 20 6d 79 6c 6f 67 28 75 29 3a 0a 20 20 20 20 74 6d 70 3d 6e 70 2e 6c 6f 67 28 75 29 .def.mylog(u):.....tmp=np.log(u)
2ba0 0a 20 20 20 20 74 6d 70 5b 6e 70 2e 69 73 6e 61 6e 28 74 6d 70 29 5d 3d 30 0a 20 20 20 20 72 65 .....tmp[np.isnan(tmp)]=0.....re
2bc0 74 75 72 6e 20 74 6d 70 0a 0a 64 65 66 20 73 69 6e 6b 68 6f 72 6e 5f 63 6f 6e 76 28 61 2c 62 2c turn.tmp..def.sinkhorn_conv(a,b,
2be0 20 72 65 67 2c 20 6e 75 6d 49 74 65 72 6d 61 78 20 3d 20 31 30 30 30 2c 20 73 74 6f 70 54 68 72 .reg,.numItermax.=.1000,.stopThr
2c00 3d 31 65 2d 39 2c 20 76 65 72 62 6f 73 65 3d 46 61 6c 73 65 2c 20 6c 6f 67 3d 46 61 6c 73 65 2c =1e-9,.verbose=False,.log=False,
2c20 2a 2a 6b 77 61 72 67 73 29 3a 0a 0a 0a 20 20 20 20 61 3d 6e 70 2e 61 73 61 72 72 61 79 28 61 2c **kwargs):.......a=np.asarray(a,
2c40 64 74 79 70 65 3d 6e 70 2e 66 6c 6f 61 74 36 34 29 0a 20 20 20 20 62 3d 6e 70 2e 61 73 61 72 72 dtype=np.float64).....b=np.asarr
2c60 61 79 28 62 2c 64 74 79 70 65 3d 6e 70 2e 66 6c 6f 61 74 36 34 29 0a 20 20 20 20 20 20 20 20 0a ay(b,dtype=np.float64)..........
2c80 20 20 20 20 0a 20 20 20 20 69 66 20 6c 65 6e 28 62 2e 73 68 61 70 65 29 3e 32 3a 0a 20 20 20 20 .........if.len(b.shape)>2:.....
2ca0 20 20 20 20 6e 62 62 3d 62 2e 73 68 61 70 65 5b 32 5d 0a 20 20 20 20 20 20 20 20 61 3d 61 5b 3a ....nbb=b.shape[2].........a=a[:
2cc0 2c 3a 2c 6e 70 2e 6e 65 77 61 78 69 73 5d 0a 20 20 20 20 65 6c 73 65 3a 0a 20 20 20 20 20 20 20 ,:,np.newaxis].....else:........
2ce0 20 6e 62 62 3d 30 0a 20 20 20 20 0a 0a 20 20 20 20 69 66 20 6c 6f 67 3a 0a 20 20 20 20 20 20 20 .nbb=0...........if.log:........
2d00 20 6c 6f 67 3d 7b 27 65 72 72 27 3a 5b 5d 7d 0a 0a 20 20 20 20 23 20 77 65 20 61 73 73 75 6d 65 .log={'err':[]}......#.we.assume
2d20 20 74 68 61 74 20 6e 6f 20 64 69 73 74 61 6e 63 65 73 20 61 72 65 20 6e 75 6c 6c 20 65 78 63 65 .that.no.distances.are.null.exce
2d40 70 74 20 74 68 6f 73 65 20 6f 66 20 74 68 65 20 64 69 61 67 6f 6e 61 6c 20 6f 66 20 64 69 73 74 pt.those.of.the.diagonal.of.dist
2d60 61 6e 63 65 73 0a 20 20 20 20 69 66 20 6e 62 62 3a 0a 20 20 20 20 20 20 20 20 75 20 3d 20 6e 70 ances.....if.nbb:.........u.=.np
2d80 2e 6f 6e 65 73 28 28 61 2e 73 68 61 70 65 5b 30 5d 2c 61 2e 73 68 61 70 65 5b 31 5d 2c 6e 62 62 .ones((a.shape[0],a.shape[1],nbb
2da0 29 29 2f 28 6e 70 2e 70 72 6f 64 28 61 2e 73 68 61 70 65 5b 3a 32 5d 29 29 0a 20 20 20 20 20 20 ))/(np.prod(a.shape[:2])).......
2dc0 20 20 76 20 3d 20 6e 70 2e 6f 6e 65 73 28 28 61 2e 73 68 61 70 65 5b 30 5d 2c 61 2e 73 68 61 70 ..v.=.np.ones((a.shape[0],a.shap
2de0 65 5b 31 5d 2c 6e 62 62 29 29 2f 28 6e 70 2e 70 72 6f 64 28 62 2e 73 68 61 70 65 5b 3a 32 5d 29 e[1],nbb))/(np.prod(b.shape[:2])
2e00 29 0a 20 20 20 20 20 20 20 20 61 30 3d 31 2e 30 2f 28 6e 70 2e 70 72 6f 64 28 62 2e 73 68 61 70 ).........a0=1.0/(np.prod(b.shap
2e20 65 5b 3a 32 5d 29 29 0a 20 20 20 20 65 6c 73 65 3a 0a 20 20 20 20 20 20 20 20 75 20 3d 20 6e 70 e[:2])).....else:.........u.=.np
2e40 2e 6f 6e 65 73 28 28 61 2e 73 68 61 70 65 5b 30 5d 2c 61 2e 73 68 61 70 65 5b 31 5d 29 29 2f 28 .ones((a.shape[0],a.shape[1]))/(
2e60 6e 70 2e 70 72 6f 64 28 61 2e 73 68 61 70 65 5b 3a 32 5d 29 29 0a 20 20 20 20 20 20 20 20 76 20 np.prod(a.shape[:2])).........v.
2e80 3d 20 6e 70 2e 6f 6e 65 73 28 28 61 2e 73 68 61 70 65 5b 30 5d 2c 61 2e 73 68 61 70 65 5b 31 5d =.np.ones((a.shape[0],a.shape[1]
2ea0 29 29 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 20 20 ))/(np.prod(b.shape[:2])).......
2ec0 20 20 61 30 3d 31 2e 30 2f 28 6e 70 2e 70 72 6f 64 28 62 2e 73 68 61 70 65 5b 3a 32 5d 29 29 0a ..a0=1.0/(np.prod(b.shape[:2])).
2ee0 20 20 20 20 20 20 20 20 0a 20 20 20 20 20 20 20 20 0a 20 20 20 20 6b 3d 67 65 74 5f 31 44 6b 65 ......................k=get_1Dke
2f00 72 6e 65 6c 28 72 65 67 29 0a 20 20 20 20 0a 20 20 20 20 69 66 20 6e 62 62 3a 0a 20 20 20 20 20 rnel(reg)..........if.nbb:......
2f20 20 20 20 4b 3d 6c 61 6d 62 64 61 20 49 3a 20 63 6f 6e 76 32 6e 28 49 2c 6b 29 0a 20 20 20 20 65 ...K=lambda.I:.conv2n(I,k).....e
2f40 6c 73 65 3a 0a 20 20 20 20 20 20 20 20 4b 3d 6c 61 6d 62 64 61 20 49 3a 20 63 6f 6e 76 32 28 49 lse:.........K=lambda.I:.conv2(I
2f60 2c 6b 29 0a 0a 20 20 20 20 63 70 74 20 3d 20 30 0a 20 20 20 20 65 72 72 3d 31 0a 20 20 20 20 77 ,k)......cpt.=.0.....err=1.....w
2f80 68 69 6c 65 20 28 65 72 72 3e 73 74 6f 70 54 68 72 20 61 6e 64 20 63 70 74 3c 6e 75 6d 49 74 65 hile.(err>stopThr.and.cpt<numIte
2fa0 72 6d 61 78 29 3a 0a 20 20 20 20 20 20 20 20 75 70 72 65 76 20 3d 20 75 0a 20 20 20 20 20 20 20 rmax):.........uprev.=.u........
2fc0 20 76 70 72 65 76 20 3d 20 76 0a 20 20 20 20 20 20 20 20 0a 20 20 20 20 20 20 20 20 76 20 3d 20 .vprev.=.v..................v.=.
2fe0 6e 70 2e 64 69 76 69 64 65 28 62 2c 20 4b 28 75 29 29 0a 20 20 20 20 20 20 20 20 75 20 3d 20 6e np.divide(b,.K(u)).........u.=.n
3000 70 2e 64 69 76 69 64 65 28 61 2c 20 4b 28 76 29 29 0a 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e p.divide(a,.K(v))..........if.(n
3020 70 2e 61 6e 79 28 6e 70 2e 69 73 6e 61 6e 28 75 29 29 20 6f 72 20 6e 70 2e 61 6e 79 28 6e 70 2e p.any(np.isnan(u)).or.np.any(np.
3040 69 73 6e 61 6e 28 76 29 29 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 72 20 6e 70 2e 61 6e 79 isnan(v))..............or.np.any
3060 28 6e 70 2e 69 73 69 6e 66 28 75 29 29 20 6f 72 20 6e 70 2e 61 6e 79 28 6e 70 2e 69 73 69 6e 66 (np.isinf(u)).or.np.any(np.isinf
3080 28 76 29 29 29 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 77 65 20 68 61 76 65 20 72 65 61 (v))):.............#.we.have.rea
30a0 63 68 65 64 20 74 68 65 20 6d 61 63 68 69 6e 65 20 70 72 65 63 69 73 69 6f 6e 0a 20 20 20 20 20 ched.the.machine.precision......
30c0 20 20 20 20 20 20 20 23 20 63 6f 6d 65 20 62 61 63 6b 20 74 6f 20 70 72 65 76 69 6f 75 73 20 73 .......#.come.back.to.previous.s
30e0 6f 6c 75 74 69 6f 6e 20 61 6e 64 20 71 75 69 74 20 6c 6f 6f 70 0a 20 20 20 20 20 20 20 20 20 20 olution.and.quit.loop...........
3100 20 20 70 72 69 6e 74 28 27 57 61 72 6e 69 6e 67 3a 20 6e 75 6d 65 72 69 63 61 6c 20 65 72 72 6f ..print('Warning:.numerical.erro
3120 72 73 20 61 74 20 69 74 65 72 61 74 69 6f 6e 27 2c 20 63 70 74 29 0a 20 20 20 20 20 20 20 20 20 rs.at.iteration',.cpt)..........
3140 20 20 20 75 20 3d 20 75 70 72 65 76 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 20 3d 20 76 70 72 ...u.=.uprev.............v.=.vpr
3160 65 76 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 0a 20 20 20 20 20 20 20 20 69 66 20 ev.............break.........if.
3180 63 70 74 25 31 30 3d 3d 30 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 77 65 20 63 61 6e 20 cpt%10==0:.............#.we.can.
31a0 73 70 65 65 64 20 75 70 20 74 68 65 20 70 72 6f 63 65 73 73 20 62 79 20 63 68 65 63 6b 69 6e 67 speed.up.the.process.by.checking
31c0 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20 6f 6e 6c 79 20 61 6c 6c 20 74 68 65 20 31 30 74 68 .for.the.error.only.all.the.10th
31e0 20 69 74 65 72 61 74 69 6f 6e 73 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 20 3d 20 6e .iterations..............err.=.n
3200 70 2e 73 75 6d 28 28 75 2d 75 70 72 65 76 29 2a 2a 32 29 2f 6e 70 2e 73 75 6d 28 28 75 29 2a 2a p.sum((u-uprev)**2)/np.sum((u)**
3220 32 29 2b 6e 70 2e 73 75 6d 28 28 76 2d 76 70 72 65 76 29 2a 2a 32 29 2f 6e 70 2e 73 75 6d 28 28 2)+np.sum((v-vprev)**2)/np.sum((
3240 76 29 2a 2a 32 29 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 6c 6f 67 3a 0a 20 20 20 20 v)**2)..............if.log:.....
3260 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 67 5b 27 65 72 72 27 5d 2e 61 70 70 65 6e 64 28 65 72 ............log['err'].append(er
3280 72 29 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 76 65 72 62 6f 73 65 3a 0a 20 20 20 20 r)..............if.verbose:.....
32a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 63 70 74 25 32 30 30 20 3d 3d 30 3a 0a 20 20 20 20 ............if.cpt%200.==0:.....
32c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 28 27 7b 3a 35 73 7d 7c 7b 3a 31 ................print('{:5s}|{:1
32e0 32 73 7d 27 2e 66 6f 72 6d 61 74 28 27 49 74 2e 27 2c 27 45 72 72 27 29 2b 27 5c 6e 27 2b 27 2d 2s}'.format('It.','Err')+'\n'+'-
3300 27 2a 31 39 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 28 27 7b 3a 35 '*19).................print('{:5
3320 64 7d 7c 7b 3a 38 65 7d 7c 27 2e 66 6f 72 6d 61 74 28 63 70 74 2c 65 72 72 29 29 0a 20 20 20 20 d}|{:8e}|'.format(cpt,err)).....
3340 20 20 20 20 63 70 74 20 3d 20 63 70 74 20 2b 31 0a 20 20 20 20 69 66 20 6c 6f 67 3a 0a 20 20 20 ....cpt.=.cpt.+1.....if.log:....
3360 20 20 20 20 20 6c 6f 67 5b 27 75 27 5d 3d 75 0a 20 20 20 20 20 20 20 20 6c 6f 67 5b 27 76 27 5d .....log['u']=u.........log['v']
3380 3d 76 0a 20 20 20 20 20 20 20 20 0a 20 20 20 20 69 66 20 6e 62 62 3a 20 23 72 65 74 75 72 6e 20 =v..............if.nbb:.#return.
33a0 6f 6e 6c 79 20 6c 6f 73 73 20 0a 20 20 20 20 20 20 20 20 72 65 73 3d 6e 70 2e 7a 65 72 6f 73 28 only.loss..........res=np.zeros(
33c0 28 6e 62 62 29 29 0a 20 20 20 20 20 20 20 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6e 62 (nbb)).........for.i.in.range(nb
33e0 62 29 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 5b 69 5d 3d 6e 70 2e 73 75 6d 28 75 5b b):.............res[i]=np.sum(u[
3400 3a 2c 69 5d 2e 72 65 73 68 61 70 65 28 28 2d 31 2c 31 29 29 2a 4b 2a 76 5b 3a 2c 69 5d 2e 72 65 :,i].reshape((-1,1))*K*v[:,i].re
3420 73 68 61 70 65 28 28 31 2c 2d 31 29 29 2a 4d 29 0a 20 20 20 20 20 20 20 20 69 66 20 6c 6f 67 3a shape((1,-1))*M).........if.log:
3440 0a 20 20 20 20 20 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 .............return.res,log.....
3460 20 20 20 20 65 6c 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 ....else:.............return.res
3480 20 20 20 20 20 20 20 20 0a 20 20 20 20 20 20 20 20 0a 20 20 20 20 65 6c 73 65 3a 20 23 20 72 65 ......................else:.#.re
34a0 74 75 72 6e 20 4f 54 20 6d 61 74 72 69 78 0a 20 20 20 20 20 20 20 20 72 65 73 3d 72 65 67 2a 61 turn.OT.matrix.........res=reg*a
34c0 30 2a 6e 70 2e 73 75 6d 28 61 2a 6d 79 6c 6f 67 28 75 2b 28 75 3d 3d 30 29 29 2b 62 2a 6d 79 6c 0*np.sum(a*mylog(u+(u==0))+b*myl
34e0 6f 67 28 76 2b 28 76 3d 3d 30 29 29 29 0a 20 20 20 20 20 20 20 20 69 66 20 6c 6f 67 3a 0a 20 20 og(v+(v==0))).........if.log:...
3500 20 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 .......................return.re
3520 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 20 20 20 20 20 20 s,log.........else:.............
3540 72 65 74 75 72 6e 20 72 65 73 0a 0a 72 65 67 3d 31 65 30 0a 72 2c 6c 6f 67 3d 73 69 6e 6b 68 6f return.res..reg=1e0.r,log=sinkho
3560 72 6e 5f 63 6f 6e 76 28 49 30 2c 49 31 2c 72 65 67 2c 76 65 72 62 6f 73 65 3d 54 72 75 65 2c 6c rn_conv(I0,I1,reg,verbose=True,l
3580 6f 67 3d 54 72 75 65 29 0a 61 3d 49 30 0a 62 3d 49 31 0a 75 3d 6c 6f 67 5b 27 75 27 5d 0a 76 3d og=True).a=I0.b=I1.u=log['u'].v=
35a0 6c 6f 67 5b 27 76 27 5d 0a 23 25 25 20 62 61 72 79 63 65 6e 74 65 72 20 69 6e 74 65 72 70 6f 6c log['v'].#%%.barycenter.interpol
35c0 61 74 69 6f 6e 0a 50 4b 03 04 14 00 00 00 00 00 a9 83 e3 4a d8 dc 52 b3 62 0a 00 00 62 0a 00 00 ation.PK...........J..R.b...b...
35e0 23 00 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 62 61 72 79 63 65 6e 74 65 #...auto_examples/plot_barycente
3600 72 5f 31 44 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 r_1D.py#.-*-.coding:.utf-8.-*-."
3620 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d "".=============================
3640 3d 0a 31 44 20 57 61 73 73 65 72 73 74 65 69 6e 20 62 61 72 79 63 65 6e 74 65 72 20 64 65 6d 6f =.1D.Wasserstein.barycenter.demo
3660 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a .==============================.
3680 0a 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 ..@author:.rflamary."""..import.
36a0 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 numpy.as.np.import.matplotlib.py
36c0 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 6d 70 6c 5f 74 6f 6f lab.as.pl.import.ot.from.mpl_too
36e0 6c 6b 69 74 73 2e 6d 70 6c 6f 74 33 64 20 69 6d 70 6f 72 74 20 41 78 65 73 33 44 20 23 6e 65 63 lkits.mplot3d.import.Axes3D.#nec
3700 65 73 73 61 72 79 20 66 6f 72 20 33 64 20 70 6c 6f 74 20 65 76 65 6e 20 69 66 20 6e 6f 74 20 75 essary.for.3d.plot.even.if.not.u
3720 73 65 64 0a 66 72 6f 6d 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 63 6f 6c 6c 65 63 74 69 6f 6e 73 20 sed.from.matplotlib.collections.
3740 69 6d 70 6f 72 74 20 50 6f 6c 79 43 6f 6c 6c 65 63 74 69 6f 6e 0a 0a 0a 23 25 25 20 70 61 72 61 import.PolyCollection...#%%.para
3760 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
3780 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.
37a0 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
37c0 6e 73 0a 61 31 3d 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 31 44 5f 67 61 75 73 73 28 6e ns.a1=ot.datasets.get_1D_gauss(n
37e0 2c 6d 3d 32 30 2c 73 3d 35 29 20 23 20 6d 3d 20 6d 65 61 6e 2c 20 73 3d 20 73 74 64 0a 61 32 3d ,m=20,s=5).#.m=.mean,.s=.std.a2=
3800 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 31 44 5f 67 61 75 73 73 28 6e 2c 6d 3d 36 30 2c ot.datasets.get_1D_gauss(n,m=60,
3820 73 3d 38 29 0a 0a 23 20 63 72 65 61 74 69 6e 67 20 6d 61 74 72 69 78 20 41 20 63 6f 6e 74 61 69 s=8)..#.creating.matrix.A.contai
3840 6e 69 6e 67 20 61 6c 6c 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 41 3d 6e 70 2e 76 73 74 61 ning.all.distributions.A=np.vsta
3860 63 6b 28 28 61 31 2c 61 32 29 29 2e 54 0a 6e 62 64 3d 41 2e 73 68 61 70 65 5b 31 5d 0a 0a 23 20 ck((a1,a2)).T.nbd=A.shape[1]..#.
3880 6c 6f 73 73 20 6d 61 74 72 69 78 20 2b 20 6e 6f 72 6d 61 6c 69 7a 61 74 69 6f 6e 0a 4d 3d 6f 74 loss.matrix.+.normalization.M=ot
38a0 2e 75 74 69 6c 73 2e 64 69 73 74 30 28 6e 29 0a 4d 2f 3d 4d 2e 6d 61 78 28 29 0a 0a 23 25 25 20 .utils.dist0(n).M/=M.max()..#%%.
38c0 70 6c 6f 74 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 70 6c 2e 66 69 67 75 72 plot.the.distributions..pl.figur
38e0 65 28 31 29 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6e 62 64 29 3a 0a 20 20 20 20 70 6c e(1).for.i.in.range(nbd):.....pl
3900 2e 70 6c 6f 74 28 78 2c 41 5b 3a 2c 69 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 44 69 73 74 72 69 .plot(x,A[:,i]).pl.title('Distri
3920 62 75 74 69 6f 6e 73 27 29 0a 0a 23 25 25 20 62 61 72 79 63 65 6e 74 65 72 20 63 6f 6d 70 75 74 butions')..#%%.barycenter.comput
3940 61 74 69 6f 6e 0a 0a 61 6c 70 68 61 3d 30 2e 32 20 23 20 30 3c 3d 61 6c 70 68 61 3c 3d 31 0a 77 ation..alpha=0.2.#.0<=alpha<=1.w
3960 65 69 67 68 74 73 3d 6e 70 2e 61 72 72 61 79 28 5b 31 2d 61 6c 70 68 61 2c 61 6c 70 68 61 5d 29 eights=np.array([1-alpha,alpha])
3980 0a 0a 23 20 6c 32 62 61 72 79 0a 62 61 72 79 5f 6c 32 3d 41 2e 64 6f 74 28 77 65 69 67 68 74 73 ..#.l2bary.bary_l2=A.dot(weights
39a0 29 0a 0a 23 20 77 61 73 73 65 72 73 74 65 69 6e 0a 72 65 67 3d 31 65 2d 33 0a 62 61 72 79 5f 77 )..#.wasserstein.reg=1e-3.bary_w
39c0 61 73 73 3d 6f 74 2e 62 72 65 67 6d 61 6e 2e 62 61 72 79 63 65 6e 74 65 72 28 41 2c 4d 2c 72 65 ass=ot.bregman.barycenter(A,M,re
39e0 67 2c 77 65 69 67 68 74 73 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 29 0a 70 6c 2e 63 6c 66 28 g,weights)..pl.figure(2).pl.clf(
3a00 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 31 2c 31 29 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e ).pl.subplot(2,1,1).for.i.in.ran
3a20 67 65 28 6e 62 64 29 3a 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 2c 41 5b 3a 2c 69 5d 29 0a 70 ge(nbd):.....pl.plot(x,A[:,i]).p
3a40 6c 2e 74 69 74 6c 65 28 27 44 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 70 6c 2e 73 75 62 l.title('Distributions')..pl.sub
3a60 70 6c 6f 74 28 32 2c 31 2c 32 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 62 61 72 79 5f 6c 32 2c 27 72 plot(2,1,2).pl.plot(x,bary_l2,'r
3a80 27 2c 6c 61 62 65 6c 3d 27 6c 32 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 62 61 72 79 5f 77 61 73 ',label='l2').pl.plot(x,bary_was
3aa0 73 2c 27 67 27 2c 6c 61 62 65 6c 3d 27 57 61 73 73 65 72 73 74 65 69 6e 27 29 0a 70 6c 2e 6c 65 s,'g',label='Wasserstein').pl.le
3ac0 67 65 6e 64 28 29 0a 70 6c 2e 74 69 74 6c 65 28 27 42 61 72 79 63 65 6e 74 65 72 73 27 29 0a 0a gend().pl.title('Barycenters')..
3ae0 0a 23 25 25 20 62 61 72 79 63 65 6e 74 65 72 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 0a 0a 6e .#%%.barycenter.interpolation..n
3b00 62 61 6c 70 68 61 3d 31 31 0a 61 6c 70 68 61 6c 69 73 74 3d 6e 70 2e 6c 69 6e 73 70 61 63 65 28 balpha=11.alphalist=np.linspace(
3b20 30 2c 31 2c 6e 62 61 6c 70 68 61 29 0a 0a 0a 42 5f 6c 32 3d 6e 70 2e 7a 65 72 6f 73 28 28 6e 2c 0,1,nbalpha)...B_l2=np.zeros((n,
3b40 6e 62 61 6c 70 68 61 29 29 0a 0a 42 5f 77 61 73 73 3d 6e 70 2e 63 6f 70 79 28 42 5f 6c 32 29 0a nbalpha))..B_wass=np.copy(B_l2).
3b60 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 30 2c 6e 62 61 6c 70 68 61 29 3a 0a 20 20 20 20 .for.i.in.range(0,nbalpha):.....
3b80 61 6c 70 68 61 3d 61 6c 70 68 61 6c 69 73 74 5b 69 5d 0a 20 20 20 20 77 65 69 67 68 74 73 3d 6e alpha=alphalist[i].....weights=n
3ba0 70 2e 61 72 72 61 79 28 5b 31 2d 61 6c 70 68 61 2c 61 6c 70 68 61 5d 29 0a 20 20 20 20 42 5f 6c p.array([1-alpha,alpha]).....B_l
3bc0 32 5b 3a 2c 69 5d 3d 41 2e 64 6f 74 28 77 65 69 67 68 74 73 29 0a 20 20 20 20 42 5f 77 61 73 73 2[:,i]=A.dot(weights).....B_wass
3be0 5b 3a 2c 69 5d 3d 6f 74 2e 62 72 65 67 6d 61 6e 2e 62 61 72 79 63 65 6e 74 65 72 28 41 2c 4d 2c [:,i]=ot.bregman.barycenter(A,M,
3c00 72 65 67 2c 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 reg,weights)..#%%.plot.interpola
3c20 74 69 6f 6e 0a 0a 70 6c 2e 66 69 67 75 72 65 28 33 2c 28 31 30 2c 35 29 29 0a 0a 23 70 6c 2e 73 tion..pl.figure(3,(10,5))..#pl.s
3c40 75 62 70 6c 6f 74 28 31 2c 32 2c 31 29 0a 63 6d 61 70 3d 70 6c 2e 63 6d 2e 67 65 74 5f 63 6d 61 ubplot(1,2,1).cmap=pl.cm.get_cma
3c60 70 28 27 76 69 72 69 64 69 73 27 29 0a 76 65 72 74 73 20 3d 20 5b 5d 0a 7a 73 20 3d 20 61 6c 70 p('viridis').verts.=.[].zs.=.alp
3c80 68 61 6c 69 73 74 0a 66 6f 72 20 69 2c 7a 20 69 6e 20 65 6e 75 6d 65 72 61 74 65 28 7a 73 29 3a halist.for.i,z.in.enumerate(zs):
3ca0 0a 20 20 20 20 79 73 20 3d 20 42 5f 6c 32 5b 3a 2c 69 5d 0a 20 20 20 20 76 65 72 74 73 2e 61 70 .....ys.=.B_l2[:,i].....verts.ap
3cc0 70 65 6e 64 28 6c 69 73 74 28 7a 69 70 28 78 2c 20 79 73 29 29 29 0a 0a 61 78 20 3d 20 70 6c 2e pend(list(zip(x,.ys)))..ax.=.pl.
3ce0 67 63 66 28 29 2e 67 63 61 28 70 72 6f 6a 65 63 74 69 6f 6e 3d 27 33 64 27 29 0a 0a 70 6f 6c 79 gcf().gca(projection='3d')..poly
3d00 20 3d 20 50 6f 6c 79 43 6f 6c 6c 65 63 74 69 6f 6e 28 76 65 72 74 73 2c 66 61 63 65 63 6f 6c 6f .=.PolyCollection(verts,facecolo
3d20 72 73 3d 5b 63 6d 61 70 28 61 29 20 66 6f 72 20 61 20 69 6e 20 61 6c 70 68 61 6c 69 73 74 5d 29 rs=[cmap(a).for.a.in.alphalist])
3d40 0a 70 6f 6c 79 2e 73 65 74 5f 61 6c 70 68 61 28 30 2e 37 29 0a 61 78 2e 61 64 64 5f 63 6f 6c 6c .poly.set_alpha(0.7).ax.add_coll
3d60 65 63 74 69 6f 6e 33 64 28 70 6f 6c 79 2c 20 7a 73 3d 7a 73 2c 20 7a 64 69 72 3d 27 79 27 29 0a ection3d(poly,.zs=zs,.zdir='y').
3d80 0a 61 78 2e 73 65 74 5f 78 6c 61 62 65 6c 28 27 78 27 29 0a 61 78 2e 73 65 74 5f 78 6c 69 6d 33 .ax.set_xlabel('x').ax.set_xlim3
3da0 64 28 30 2c 20 6e 29 0a 61 78 2e 73 65 74 5f 79 6c 61 62 65 6c 28 27 24 5c 5c 61 6c 70 68 61 24 d(0,.n).ax.set_ylabel('$\\alpha$
3dc0 27 29 0a 61 78 2e 73 65 74 5f 79 6c 69 6d 33 64 28 30 2c 31 29 0a 61 78 2e 73 65 74 5f 7a 6c 61 ').ax.set_ylim3d(0,1).ax.set_zla
3de0 62 65 6c 28 27 27 29 0a 61 78 2e 73 65 74 5f 7a 6c 69 6d 33 64 28 30 2c 20 42 5f 6c 32 2e 6d 61 bel('').ax.set_zlim3d(0,.B_l2.ma
3e00 78 28 29 2a 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 x()*1.01).pl.title('Barycenter.i
3e20 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 20 77 69 74 68 20 6c 32 27 29 0a 0a 70 6c 2e 73 68 6f 77 28 nterpolation.with.l2')..pl.show(
3e40 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 34 2c 28 31 30 2c 35 29 29 0a 0a 23 70 6c 2e 73 75 62 70 )..pl.figure(4,(10,5))..#pl.subp
3e60 6c 6f 74 28 31 2c 32 2c 31 29 0a 63 6d 61 70 3d 70 6c 2e 63 6d 2e 67 65 74 5f 63 6d 61 70 28 27 lot(1,2,1).cmap=pl.cm.get_cmap('
3e80 76 69 72 69 64 69 73 27 29 0a 76 65 72 74 73 20 3d 20 5b 5d 0a 7a 73 20 3d 20 61 6c 70 68 61 6c viridis').verts.=.[].zs.=.alphal
3ea0 69 73 74 0a 66 6f 72 20 69 2c 7a 20 69 6e 20 65 6e 75 6d 65 72 61 74 65 28 7a 73 29 3a 0a 20 20 ist.for.i,z.in.enumerate(zs):...
3ec0 20 20 79 73 20 3d 20 42 5f 77 61 73 73 5b 3a 2c 69 5d 0a 20 20 20 20 76 65 72 74 73 2e 61 70 70 ..ys.=.B_wass[:,i].....verts.app
3ee0 65 6e 64 28 6c 69 73 74 28 7a 69 70 28 78 2c 20 79 73 29 29 29 0a 0a 61 78 20 3d 20 70 6c 2e 67 end(list(zip(x,.ys)))..ax.=.pl.g
3f00 63 66 28 29 2e 67 63 61 28 70 72 6f 6a 65 63 74 69 6f 6e 3d 27 33 64 27 29 0a 0a 70 6f 6c 79 20 cf().gca(projection='3d')..poly.
3f20 3d 20 50 6f 6c 79 43 6f 6c 6c 65 63 74 69 6f 6e 28 76 65 72 74 73 2c 66 61 63 65 63 6f 6c 6f 72 =.PolyCollection(verts,facecolor
3f40 73 3d 5b 63 6d 61 70 28 61 29 20 66 6f 72 20 61 20 69 6e 20 61 6c 70 68 61 6c 69 73 74 5d 29 0a s=[cmap(a).for.a.in.alphalist]).
3f60 70 6f 6c 79 2e 73 65 74 5f 61 6c 70 68 61 28 30 2e 37 29 0a 61 78 2e 61 64 64 5f 63 6f 6c 6c 65 poly.set_alpha(0.7).ax.add_colle
3f80 63 74 69 6f 6e 33 64 28 70 6f 6c 79 2c 20 7a 73 3d 7a 73 2c 20 7a 64 69 72 3d 27 79 27 29 0a 0a ction3d(poly,.zs=zs,.zdir='y')..
3fa0 61 78 2e 73 65 74 5f 78 6c 61 62 65 6c 28 27 78 27 29 0a 61 78 2e 73 65 74 5f 78 6c 69 6d 33 64 ax.set_xlabel('x').ax.set_xlim3d
3fc0 28 30 2c 20 6e 29 0a 61 78 2e 73 65 74 5f 79 6c 61 62 65 6c 28 27 24 5c 5c 61 6c 70 68 61 24 27 (0,.n).ax.set_ylabel('$\\alpha$'
3fe0 29 0a 61 78 2e 73 65 74 5f 79 6c 69 6d 33 64 28 30 2c 31 29 0a 61 78 2e 73 65 74 5f 7a 6c 61 62 ).ax.set_ylim3d(0,1).ax.set_zlab
4000 65 6c 28 27 27 29 0a 61 78 2e 73 65 74 5f 7a 6c 69 6d 33 64 28 30 2c 20 42 5f 6c 32 2e 6d 61 78 el('').ax.set_zlim3d(0,.B_l2.max
4020 28 29 2a 31 2e 30 31 29 0a 70 6c 2e 74 69 74 6c 65 28 27 42 61 72 79 63 65 6e 74 65 72 20 69 6e ()*1.01).pl.title('Barycenter.in
4040 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 0a terpolation.with.Wasserstein')..
4060 70 6c 2e 73 68 6f 77 28 29 50 4b 03 04 14 00 00 00 00 00 6a 7b 82 49 25 c9 d6 13 1c 06 00 00 1c pl.show()PK........j{.I%........
4080 06 00 00 28 00 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 64 65 6d 6f 5f 4f 54 5f 32 44 5f ...(...auto_examples/demo_OT_2D_
40a0 73 61 6d 70 6c 65 73 6c 61 72 67 65 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 sampleslarge.py#.-*-.coding:.utf
40c0 2d 38 20 2d 2a 2d 0a 22 22 22 0a 44 65 6d 6f 20 66 6f 72 20 32 44 20 4f 70 74 69 6d 61 6c 20 74 -8.-*-.""".Demo.for.2D.Optimal.t
40e0 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 74 72 ransport.between.empirical.distr
4100 69 62 75 74 69 6f 6e 73 0a 0a 40 61 75 74 68 6f 72 3a 20 72 66 6c 61 6d 61 72 79 0a 22 22 22 0a ibutions..@author:.rflamary.""".
4120 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c .import.numpy.as.np.import.matpl
4140 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 23 25 25 otlib.pylab.as.pl.import.ot..#%%
4160 20 70 61 72 61 6d 65 74 65 72 73 20 61 6e 64 20 64 61 74 61 20 67 65 6e 65 72 61 74 69 6f 6e 0a .parameters.and.data.generation.
4180 0a 6e 3d 35 30 30 30 20 23 20 6e 62 20 73 61 6d 70 6c 65 73 0a 0a 6d 75 5f 73 3d 6e 70 2e 61 72 .n=5000.#.nb.samples..mu_s=np.ar
41a0 72 61 79 28 5b 30 2c 30 5d 29 0a 63 6f 76 5f 73 3d 6e 70 2e 61 72 72 61 79 28 5b 5b 31 2c 30 5d ray([0,0]).cov_s=np.array([[1,0]
41c0 2c 5b 30 2c 31 5d 5d 29 0a 0a 6d 75 5f 74 3d 6e 70 2e 61 72 72 61 79 28 5b 34 2c 34 5d 29 0a 63 ,[0,1]])..mu_t=np.array([4,4]).c
41e0 6f 76 5f 74 3d 6e 70 2e 61 72 72 61 79 28 5b 5b 31 2c 2d 2e 38 5d 2c 5b 2d 2e 38 2c 31 5d 5d 29 ov_t=np.array([[1,-.8],[-.8,1]])
4200 0a 0a 78 73 3d 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 32 44 5f 73 61 6d 70 6c 65 73 5f ..xs=ot.datasets.get_2D_samples_
4220 67 61 75 73 73 28 6e 2c 6d 75 5f 73 2c 63 6f 76 5f 73 29 0a 78 74 3d 6f 74 2e 64 61 74 61 73 65 gauss(n,mu_s,cov_s).xt=ot.datase
4240 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 75 5f 74 2c 63 ts.get_2D_samples_gauss(n,mu_t,c
4260 6f 76 5f 74 29 0a 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 ov_t)..a,b.=.ot.unif(n),ot.unif(
4280 6e 29 20 23 20 75 6e 69 66 6f 72 6d 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6f 6e 20 73 61 6d n).#.uniform.distribution.on.sam
42a0 70 6c 65 73 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 73 ples..#.loss.matrix.M=ot.dist(xs
42c0 2c 78 74 29 0a 4d 2f 3d 4d 2e 6d 61 78 28 29 0a 0a 23 25 25 20 70 6c 6f 74 20 73 61 6d 70 6c 65 ,xt).M/=M.max()..#%%.plot.sample
42e0 73 0a 0a 23 70 6c 2e 66 69 67 75 72 65 28 31 29 0a 23 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 30 s..#pl.figure(1).#pl.plot(xs[:,0
4300 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 61 6d ],xs[:,1],'+b',label='Source.sam
4320 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 5d 2c ples').#pl.plot(xt[:,0],xt[:,1],
4340 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 70 6c 'xr',label='Target.samples').#pl
4360 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 53 6f 75 72 63 65 .legend(loc=0).#pl.title('Source
4380 20 61 6e 64 20 74 72 61 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 23 0a 23 70 .and.traget.distributions').#.#p
43a0 6c 2e 66 69 67 75 72 65 28 32 29 0a 23 70 6c 2e 69 6d 73 68 6f 77 28 4d 2c 69 6e 74 65 72 70 6f l.figure(2).#pl.imshow(M,interpo
43c0 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 28 27 43 6f 73 lation='nearest').#pl.title('Cos
43e0 74 20 6d 61 74 72 69 78 20 4d 27 29 0a 23 0a 0a 23 25 25 20 45 4d 44 0a 0a 47 30 3d 6f 74 2e 65 t.matrix.M').#..#%%.EMD..G0=ot.e
4400 6d 64 28 61 2c 62 2c 4d 29 0a 0a 23 70 6c 2e 66 69 67 75 72 65 28 33 29 0a 23 70 6c 2e 69 6d 73 md(a,b,M)..#pl.figure(3).#pl.ims
4420 68 6f 77 28 47 30 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 how(G0,interpolation='nearest').
4440 23 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 23 0a 23 70 6c 2e #pl.title('OT.matrix.G0').#.#pl.
4460 66 69 67 75 72 65 28 34 29 0a 23 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 figure(4).#ot.plot.plot2D_sample
4480 73 5f 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 23 70 6c 2e s_mat(xs,xt,G0,c=[.5,.5,1]).#pl.
44a0 70 6c 6f 74 28 78 73 5b 3a 2c 30 5d 2c 78 73 5b 3a 2c 31 5d 2c 27 2b 62 27 2c 6c 61 62 65 6c 3d plot(xs[:,0],xs[:,1],'+b',label=
44c0 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 23 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 'Source.samples').#pl.plot(xt[:,
44e0 30 5d 2c 78 74 5b 3a 2c 31 5d 2c 27 78 72 27 2c 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 0],xt[:,1],'xr',label='Target.sa
4500 6d 70 6c 65 73 27 29 0a 23 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 23 70 6c 2e 74 69 mples').#pl.legend(loc=0).#pl.ti
4520 74 6c 65 28 27 4f 54 20 6d 61 74 72 69 78 20 77 69 74 68 20 73 61 6d 70 6c 65 73 27 29 0a 0a 0a tle('OT.matrix.with.samples')...
4540 23 25 25 20 73 69 6e 6b 68 6f 72 6e 0a 0a 23 20 72 65 67 20 74 65 72 6d 0a 6c 61 6d 62 64 3d 35 #%%.sinkhorn..#.reg.term.lambd=5
4560 65 2d 33 0a 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 29 e-3..Gs=ot.sinkhorn(a,b,M,lambd)
4580 0a 0a 23 70 6c 2e 66 69 67 75 72 65 28 35 29 0a 23 70 6c 2e 69 6d 73 68 6f 77 28 47 73 2c 69 6e ..#pl.figure(5).#pl.imshow(Gs,in
45a0 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
45c0 28 27 4f 54 20 6d 61 74 72 69 78 20 73 69 6e 6b 68 6f 72 6e 27 29 0a 23 0a 23 70 6c 2e 66 69 67 ('OT.matrix.sinkhorn').#.#pl.fig
45e0 75 72 65 28 36 29 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 ure(6).#ot.plot.plot2D_samples_m
4600 61 74 28 78 73 2c 78 74 2c 47 73 2c 63 6f 6c 6f 72 3d 5b 2e 35 2c 2e 35 2c 31 5d 29 0a 23 70 6c at(xs,xt,Gs,color=[.5,.5,1]).#pl
4620 2e 70 6c 6f 74 28 78 73 5b 3a 2c 30 5d 2c 78 73 5b 3a 2c 31 5d 2c 27 2b 62 27 2c 6c 61 62 65 6c .plot(xs[:,0],xs[:,1],'+b',label
4640 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 23 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a ='Source.samples').#pl.plot(xt[:
4660 2c 30 5d 2c 78 74 5b 3a 2c 31 5d 2c 27 78 72 27 2c 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 ,0],xt[:,1],'xr',label='Target.s
4680 61 6d 70 6c 65 73 27 29 0a 23 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 23 70 6c 2e 74 amples').#pl.legend(loc=0).#pl.t
46a0 69 74 6c 65 28 27 4f 54 20 6d 61 74 72 69 78 20 53 69 6e 6b 68 6f 72 6e 20 77 69 74 68 20 73 61 itle('OT.matrix.Sinkhorn.with.sa
46c0 6d 70 6c 65 73 27 29 0a 23 0a 0a 50 4b 03 04 14 00 00 00 00 00 a9 83 e3 4a 19 12 26 b2 be 0a 00 mples').#..PK...........J..&....
46e0 00 be 0a 00 00 21 00 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 4f 54 5f 4c .....!...auto_examples/plot_OT_L
4700 31 5f 76 73 5f 4c 32 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 1_vs_L2.py#.-*-.coding:.utf-8.-*
4720 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d -.""".==========================
4740 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 20 74 72 61 6e ================.2D.Optimal.tran
4760 73 70 6f 72 74 20 66 6f 72 20 64 69 66 66 65 72 65 6e 74 20 6d 65 74 72 69 63 73 0a 3d 3d 3d 3d sport.for.different.metrics.====
4780 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================================
47a0 3d 3d 3d 3d 3d 3d 0a 0a 53 74 6f 6c 65 20 74 68 65 20 66 69 67 75 72 65 20 69 64 65 61 20 66 72 ======..Stole.the.figure.idea.fr
47c0 6f 6d 20 46 69 67 2e 20 31 20 61 6e 64 20 32 20 69 6e 20 0a 68 74 74 70 73 3a 2f 2f 61 72 78 69 om.Fig..1.and.2.in..https://arxi
47e0 76 2e 6f 72 67 2f 70 64 66 2f 31 37 30 36 2e 30 37 36 35 30 2e 70 64 66 0a 0a 0a 40 61 75 74 68 v.org/pdf/1706.07650.pdf...@auth
4800 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 75 6d 70 79 20 61 or:.rflamary."""..import.numpy.a
4820 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 s.np.import.matplotlib.pylab.as.
4840 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 72 73 20 61 6e 64 pl.import.ot..#%%.parameters.and
4860 20 64 61 74 61 20 67 65 6e 65 72 61 74 69 6f 6e 0a 0a 66 6f 72 20 64 61 74 61 20 69 6e 20 72 61 .data.generation..for.data.in.ra
4880 6e 67 65 28 32 29 3a 0a 0a 20 20 20 20 69 66 20 64 61 74 61 3a 0a 20 20 20 20 20 20 20 20 6e 3d nge(2):......if.data:.........n=
48a0 32 30 20 23 20 6e 62 20 73 61 6d 70 6c 65 73 0a 20 20 20 20 20 20 20 20 78 73 3d 6e 70 2e 7a 65 20.#.nb.samples.........xs=np.ze
48c0 72 6f 73 28 28 6e 2c 32 29 29 0a 20 20 20 20 20 20 20 20 78 73 5b 3a 2c 30 5d 3d 6e 70 2e 61 72 ros((n,2)).........xs[:,0]=np.ar
48e0 61 6e 67 65 28 6e 29 2b 31 0a 20 20 20 20 20 20 20 20 78 73 5b 3a 2c 31 5d 3d 28 6e 70 2e 61 72 ange(n)+1.........xs[:,1]=(np.ar
4900 61 6e 67 65 28 6e 29 2b 31 29 2a 2d 30 2e 30 30 31 20 23 20 74 6f 20 6d 61 6b 65 20 69 74 20 73 ange(n)+1)*-0.001.#.to.make.it.s
4920 74 72 69 63 74 6c 79 20 63 6f 6e 76 65 78 2e 2e 2e 0a 20 20 20 20 20 20 20 20 0a 20 20 20 20 20 trictly.convex..................
4940 20 20 20 78 74 3d 6e 70 2e 7a 65 72 6f 73 28 28 6e 2c 32 29 29 0a 20 20 20 20 20 20 20 20 78 74 ...xt=np.zeros((n,2)).........xt
4960 5b 3a 2c 31 5d 3d 6e 70 2e 61 72 61 6e 67 65 28 6e 29 2b 31 0a 20 20 20 20 65 6c 73 65 3a 0a 20 [:,1]=np.arange(n)+1.....else:..
4980 20 20 20 20 20 20 20 0a 20 20 20 20 20 20 20 20 6e 3d 35 30 20 23 20 6e 62 20 73 61 6d 70 6c 65 ................n=50.#.nb.sample
49a0 73 0a 20 20 20 20 20 20 20 20 78 74 6f 74 3d 6e 70 2e 7a 65 72 6f 73 28 28 6e 2b 31 2c 32 29 29 s.........xtot=np.zeros((n+1,2))
49c0 0a 20 20 20 20 20 20 20 20 78 74 6f 74 5b 3a 2c 30 5d 3d 6e 70 2e 63 6f 73 28 28 6e 70 2e 61 72 .........xtot[:,0]=np.cos((np.ar
49e0 61 6e 67 65 28 6e 2b 31 29 2b 31 2e 30 29 2a 30 2e 39 2f 28 6e 2b 32 29 2a 32 2a 6e 70 2e 70 69 ange(n+1)+1.0)*0.9/(n+2)*2*np.pi
4a00 29 0a 20 20 20 20 20 20 20 20 78 74 6f 74 5b 3a 2c 31 5d 3d 6e 70 2e 73 69 6e 28 28 6e 70 2e 61 ).........xtot[:,1]=np.sin((np.a
4a20 72 61 6e 67 65 28 6e 2b 31 29 2b 31 2e 30 29 2a 30 2e 39 2f 28 6e 2b 32 29 2a 32 2a 6e 70 2e 70 range(n+1)+1.0)*0.9/(n+2)*2*np.p
4a40 69 29 0a 20 20 20 20 20 20 20 20 0a 20 20 20 20 20 20 20 20 78 73 3d 78 74 6f 74 5b 3a 6e 2c 3a i)..................xs=xtot[:n,:
4a60 5d 0a 20 20 20 20 20 20 20 20 78 74 3d 78 74 6f 74 5b 31 3a 2c 3a 5d 0a 20 20 20 20 20 20 20 20 ].........xt=xtot[1:,:].........
4a80 0a 20 20 20 20 20 20 20 20 0a 20 20 20 20 0a 20 20 20 20 61 2c 62 20 3d 20 6f 74 2e 75 6e 69 66 ...................a,b.=.ot.unif
4aa0 28 6e 29 2c 6f 74 2e 75 6e 69 66 28 6e 29 20 23 20 75 6e 69 66 6f 72 6d 20 64 69 73 74 72 69 62 (n),ot.unif(n).#.uniform.distrib
4ac0 75 74 69 6f 6e 20 6f 6e 20 73 61 6d 70 6c 65 73 0a 20 20 20 20 0a 20 20 20 20 23 20 6c 6f 73 73 ution.on.samples..........#.loss
4ae0 20 6d 61 74 72 69 78 0a 20 20 20 20 4d 31 3d 6f 74 2e 64 69 73 74 28 78 73 2c 78 74 2c 6d 65 74 .matrix.....M1=ot.dist(xs,xt,met
4b00 72 69 63 3d 27 65 75 63 6c 69 64 65 61 6e 27 29 0a 20 20 20 20 4d 31 2f 3d 4d 31 2e 6d 61 78 28 ric='euclidean').....M1/=M1.max(
4b20 29 0a 20 20 20 20 0a 20 20 20 20 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 20 20 20 20 4d 32 3d )..........#.loss.matrix.....M2=
4b40 6f 74 2e 64 69 73 74 28 78 73 2c 78 74 2c 6d 65 74 72 69 63 3d 27 73 71 65 75 63 6c 69 64 65 61 ot.dist(xs,xt,metric='sqeuclidea
4b60 6e 27 29 0a 20 20 20 20 4d 32 2f 3d 4d 32 2e 6d 61 78 28 29 0a 20 20 20 20 0a 20 20 20 20 23 20 n').....M2/=M2.max()..........#.
4b80 6c 6f 73 73 20 6d 61 74 72 69 78 0a 20 20 20 20 4d 70 3d 6e 70 2e 73 71 72 74 28 6f 74 2e 64 69 loss.matrix.....Mp=np.sqrt(ot.di
4ba0 73 74 28 78 73 2c 78 74 2c 6d 65 74 72 69 63 3d 27 65 75 63 6c 69 64 65 61 6e 27 29 29 0a 20 20 st(xs,xt,metric='euclidean'))...
4bc0 20 20 4d 70 2f 3d 4d 70 2e 6d 61 78 28 29 0a 20 20 20 20 0a 20 20 20 20 23 25 25 20 70 6c 6f 74 ..Mp/=Mp.max()..........#%%.plot
4be0 20 73 61 6d 70 6c 65 73 0a 20 20 20 20 0a 20 20 20 20 70 6c 2e 66 69 67 75 72 65 28 31 2b 33 2a .samples..........pl.figure(1+3*
4c00 64 61 74 61 29 0a 20 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 data).....pl.clf().....pl.plot(x
4c20 73 5b 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 s[:,0],xs[:,1],'+b',label='Sourc
4c40 65 20 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 30 5d 2c e.samples').....pl.plot(xt[:,0],
4c60 78 74 5b 3a 2c 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 xt[:,1],'xr',label='Target.sampl
4c80 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 20 70 6c es').....pl.axis('equal').....pl
4ca0 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 20 61 6e 64 20 74 72 61 67 65 74 20 64 69 73 74 72 69 .title('Source.and.traget.distri
4cc0 62 75 74 69 6f 6e 73 27 29 0a 20 20 20 20 0a 20 20 20 20 70 6c 2e 66 69 67 75 72 65 28 32 2b 33 butions')..........pl.figure(2+3
4ce0 2a 64 61 74 61 2c 28 31 35 2c 35 29 29 0a 20 20 20 20 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 33 *data,(15,5)).....pl.subplot(1,3
4d00 2c 31 29 0a 20 20 20 20 70 6c 2e 69 6d 73 68 6f 77 28 4d 31 2c 69 6e 74 65 72 70 6f 6c 61 74 69 ,1).....pl.imshow(M1,interpolati
4d20 6f 6e 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 45 75 63 69 on='nearest').....pl.title('Euci
4d40 64 65 61 6e 20 63 6f 73 74 27 29 0a 20 20 20 20 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 33 2c 32 dean.cost').....pl.subplot(1,3,2
4d60 29 0a 20 20 20 20 70 6c 2e 69 6d 73 68 6f 77 28 4d 32 2c 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e ).....pl.imshow(M2,interpolation
4d80 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 75 61 72 65 ='nearest').....pl.title('Square
4da0 64 20 45 75 63 6c 69 64 65 61 6e 20 63 6f 73 74 27 29 0a 20 20 20 20 0a 20 20 20 20 70 6c 2e 73 d.Euclidean.cost')..........pl.s
4dc0 75 62 70 6c 6f 74 28 31 2c 33 2c 33 29 0a 20 20 20 20 70 6c 2e 69 6d 73 68 6f 77 28 4d 70 2c 69 ubplot(1,3,3).....pl.imshow(Mp,i
4de0 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 20 20 70 6c 2e 74 nterpolation='nearest').....pl.t
4e00 69 74 6c 65 28 27 53 71 72 74 20 45 75 63 6c 69 64 65 61 6e 20 63 6f 73 74 27 29 0a 20 20 20 20 itle('Sqrt.Euclidean.cost').....
4e20 23 25 25 20 45 4d 44 0a 20 20 20 20 0a 20 20 20 20 47 31 3d 6f 74 2e 65 6d 64 28 61 2c 62 2c 4d #%%.EMD..........G1=ot.emd(a,b,M
4e40 31 29 0a 20 20 20 20 47 32 3d 6f 74 2e 65 6d 64 28 61 2c 62 2c 4d 32 29 0a 20 20 20 20 47 70 3d 1).....G2=ot.emd(a,b,M2).....Gp=
4e60 6f 74 2e 65 6d 64 28 61 2c 62 2c 4d 70 29 0a 20 20 20 20 0a 20 20 20 20 70 6c 2e 66 69 67 75 72 ot.emd(a,b,Mp)..........pl.figur
4e80 65 28 33 2b 33 2a 64 61 74 61 2c 28 31 35 2c 35 29 29 0a 20 20 20 20 0a 20 20 20 20 70 6c 2e 73 e(3+3*data,(15,5))..........pl.s
4ea0 75 62 70 6c 6f 74 28 31 2c 33 2c 31 29 0a 20 20 20 20 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 ubplot(1,3,1).....ot.plot.plot2D
4ec0 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 78 73 2c 78 74 2c 47 31 2c 63 3d 5b 2e 35 2c 2e 35 2c 31 _samples_mat(xs,xt,G1,c=[.5,.5,1
4ee0 5d 29 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 30 5d 2c 78 73 5b 3a 2c 31 5d 2c 27 ]).....pl.plot(xs[:,0],xs[:,1],'
4f00 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 20 20 20 20 +b',label='Source.samples').....
4f20 70 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 pl.plot(xt[:,0],xt[:,1],'xr',lab
4f40 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
4f60 28 27 65 71 75 61 6c 27 29 0a 20 20 20 20 23 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a ('equal').....#pl.legend(loc=0).
4f80 20 20 20 20 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 45 75 63 6c 69 64 65 61 6e 27 29 0a 20 20 20 ....pl.title('OT.Euclidean')....
4fa0 20 0a 20 20 20 20 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 33 2c 32 29 0a 20 20 20 20 0a 20 20 20 ......pl.subplot(1,3,2).........
4fc0 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 2c 78 .ot.plot.plot2D_samples_mat(xs,x
4fe0 74 2c 47 32 2c 63 3d 5b 2e 35 2c 2e 35 2c 31 5d 29 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 73 t,G2,c=[.5,.5,1]).....pl.plot(xs
5000 5b 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 [:,0],xs[:,1],'+b',label='Source
5020 20 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 30 5d 2c 78 .samples').....pl.plot(xt[:,0],x
5040 74 5b 3a 2c 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 t[:,1],'xr',label='Target.sample
5060 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 20 23 70 6c s').....pl.axis('equal').....#pl
5080 2e 6c 65 67 65 6e 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 .legend(loc=0).....pl.title('OT.
50a0 73 71 75 61 72 65 64 20 45 75 63 6c 69 64 65 61 6e 27 29 0a 20 20 20 20 0a 20 20 20 20 70 6c 2e squared.Euclidean')..........pl.
50c0 73 75 62 70 6c 6f 74 28 31 2c 33 2c 33 29 0a 20 20 20 20 0a 20 20 20 20 6f 74 2e 70 6c 6f 74 2e subplot(1,3,3)..........ot.plot.
50e0 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 70 2c 63 3d 5b 2e plot2D_samples_mat(xs,xt,Gp,c=[.
5100 35 2c 2e 35 2c 31 5d 29 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 30 5d 2c 78 73 5b 5,.5,1]).....pl.plot(xs[:,0],xs[
5120 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 61 6d 70 6c 65 73 27 :,1],'+b',label='Source.samples'
5140 29 0a 20 20 20 20 70 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 ).....pl.plot(xt[:,0],xt[:,1],'x
5160 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 20 20 20 20 70 r',label='Target.samples').....p
5180 6c 2e 61 78 69 73 28 27 65 71 75 61 6c 27 29 0a 20 20 20 20 23 70 6c 2e 6c 65 67 65 6e 64 28 6c l.axis('equal').....#pl.legend(l
51a0 6f 63 3d 30 29 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 oc=0).....pl.title('OT.sqrt.Eucl
51c0 69 64 65 61 6e 27 29 0a 50 4b 03 04 14 00 00 00 00 00 a9 83 e3 4a b4 93 15 da 5a 06 00 00 5a 06 idean').PK...........J....Z...Z.
51e0 00 00 23 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 32 44 5f 73 ..#...auto_examples/plot_OT_2D_s
5200 61 6d 70 6c 65 73 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d amples.py#.-*-.coding:.utf-8.-*-
5220 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d .""".===========================
5240 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 32 44 20 4f 70 74 =========================.2D.Opt
5260 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 20 62 65 74 77 65 65 6e 20 65 6d 70 69 72 69 63 61 6c imal.transport.between.empirical
5280 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d .distributions.=================
52a0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================================
52c0 3d 3d 3d 0a 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 ===..@author:.rflamary."""..impo
52e0 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 69 62 rt.numpy.as.np.import.matplotlib
5300 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 61 72 61 .pylab.as.pl.import.ot..#%%.para
5320 6d 65 74 65 72 73 20 61 6e 64 20 64 61 74 61 20 67 65 6e 65 72 61 74 69 6f 6e 0a 0a 6e 3d 35 30 meters.and.data.generation..n=50
5340 20 23 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 .#.nb.samples..mu_s=np.array([0,
5360 30 5d 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 0]).cov_s=np.array([[1,0],[0,1]]
5380 29 0a 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 )..mu_t=np.array([4,4]).cov_t=np
53a0 2e 61 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 .array([[1,-.8],[-.8,1]])..xs=ot
53c0 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 32 44 5f 73 61 6d 70 6c 65 73 5f 67 61 75 73 73 28 6e .datasets.get_2D_samples_gauss(n
53e0 2c 6d 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 ,mu_s,cov_s).xt=ot.datasets.get_
5400 32 44 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 2D_samples_gauss(n,mu_t,cov_t)..
5420 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 20 23 20 75 6e a,b.=.ot.unif(n),ot.unif(n).#.un
5440 69 66 6f 72 6d 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6f 6e 20 73 61 6d 70 6c 65 73 0a 0a 23 iform.distribution.on.samples..#
5460 20 6c 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 .loss.matrix.M=ot.dist(xs,xt).M/
5480 3d 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 =M.max()..#%%.plot.samples..pl.f
54a0 69 67 75 72 65 28 31 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 30 5d 2c 78 73 5b 3a 2c 31 5d igure(1).pl.plot(xs[:,0],xs[:,1]
54c0 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 70 6c ,'+b',label='Source.samples').pl
54e0 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 6c .plot(xt[:,0],xt[:,1],'xr',label
5500 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 ='Target.samples').pl.legend(loc
5520 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 72 61 67 65 74 20 =0).pl.title('Source.and.traget.
5540 64 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 29 0a 70 6c distributions')..pl.figure(2).pl
5560 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 65 61 72 65 73 74 .imshow(M,interpolation='nearest
5580 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 43 6f 73 74 20 6d 61 74 72 69 78 20 4d 27 29 0a 0a 0a 23 ').pl.title('Cost.matrix.M')...#
55a0 25 25 20 45 4d 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 %%.EMD..G0=ot.emd(a,b,M)..pl.fig
55c0 75 72 65 28 33 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 ure(3).pl.imshow(G0,interpolatio
55e0 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 20 6d 61 74 72 69 78 n='nearest').pl.title('OT.matrix
5600 20 47 30 27 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 34 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 .G0')..pl.figure(4).ot.plot.plot
5620 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 78 73 2c 78 74 2c 47 30 2c 63 3d 5b 2e 35 2c 2e 35 2D_samples_mat(xs,xt,G0,c=[.5,.5
5640 2c 31 5d 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 30 5d 2c 78 73 5b 3a 2c 31 5d 2c 27 2b 62 ,1]).pl.plot(xs[:,0],xs[:,1],'+b
5660 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 70 6c 6f ',label='Source.samples').pl.plo
5680 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 6c 3d 27 54 61 t(xt[:,0],xt[:,1],'xr',label='Ta
56a0 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a rget.samples').pl.legend(loc=0).
56c0 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 6d 61 74 72 69 78 20 77 69 74 68 20 73 61 6d 70 6c 65 73 pl.title('OT.matrix.with.samples
56e0 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 0a 6c 61 ')...#%%.sinkhorn..#.reg.term.la
5700 6d 62 64 3d 35 65 2d 34 0a 0a 47 73 3d 6f 74 2e 73 69 6e 6b 68 6f 72 6e 28 61 2c 62 2c 4d 2c 6c mbd=5e-4..Gs=ot.sinkhorn(a,b,M,l
5720 61 6d 62 64 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 35 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 47 73 ambd)..pl.figure(5).pl.imshow(Gs
5740 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 69 74 ,interpolation='nearest').pl.tit
5760 6c 65 28 27 4f 54 20 6d 61 74 72 69 78 20 73 69 6e 6b 68 6f 72 6e 27 29 0a 0a 70 6c 2e 66 69 67 le('OT.matrix.sinkhorn')..pl.fig
5780 75 72 65 28 36 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 ure(6).ot.plot.plot2D_samples_ma
57a0 74 28 78 73 2c 78 74 2c 47 73 2c 63 6f 6c 6f 72 3d 5b 2e 35 2c 2e 35 2c 31 5d 29 0a 70 6c 2e 70 t(xs,xt,Gs,color=[.5,.5,1]).pl.p
57c0 6c 6f 74 28 78 73 5b 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 lot(xs[:,0],xs[:,1],'+b',label='
57e0 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 30 5d Source.samples').pl.plot(xt[:,0]
5800 2c 78 74 5b 3a 2c 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 ,xt[:,1],'xr',label='Target.samp
5820 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(
5840 27 4f 54 20 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 'OT.matrix.Sinkhorn.with.samples
5860 27 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 00 00 1d 00 00 ').PK...........J..B1...........
5880 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 70 79 23 20 .auto_examples/plot_OTDA_2D.py#.
58a0 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 3d -*-.coding:.utf-8.-*-.""".======
58c0 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4f 54 20 66 6f 72 20 ========================.OT.for.
58e0 65 6d 70 69 72 69 63 61 6c 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 3d 3d 3d 3d 3d 3d 3d 3d empirical.distributions.========
5900 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 69 6d 70 ======================.."""..imp
5920 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 69 ort.numpy.as.np.import.matplotli
5940 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 23 25 25 20 70 b.pylab.as.pl.import.ot....#%%.p
5960 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 0a 78 73 2c 79 arameters..n=150.#.nb.bins..xs,y
5980 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 69 66 28 27 s=ot.datasets.get_data_classif('
59a0 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 73 2e 67 65 74 3gauss',n).xt,yt=ot.datasets.get
59c0 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 0a 61 2c 62 20 _data_classif('3gauss2',n)..a,b.
59e0 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 6f 73 73 20 6d =.ot.unif(n),ot.unif(n).#.loss.m
5a00 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 4d 2e 6d 61 78 atrix.M=ot.dist(xs,xt).#M/=M.max
5a20 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 67 75 72 65 28 ()..#%%.plot.samples..pl.figure(
5a40 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 65 72 1)..pl.subplot(2,2,1).pl.scatter
5a60 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 2b 27 (xs[:,0],xs[:,1],c=ys,marker='+'
5a80 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 67 65 ,label='Source.samples').pl.lege
5aa0 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 73 74 nd(loc=0).pl.title('Source..dist
5ac0 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 0a 70 ributions')..pl.subplot(2,2,2).p
5ae0 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 2c 6d l.scatter(xt[:,0],xt[:,1],c=yt,m
5b00 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 73 27 arker='o',label='Target.samples'
5b20 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 61 72 ).pl.legend(loc=0).pl.title('tar
5b40 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 67 75 72 65 28 get..distributions')..pl.figure(
5b60 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 6e 3d 27 6e 65 2).pl.imshow(M,interpolation='ne
5b80 61 72 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 43 6f 73 74 20 6d 61 74 72 69 78 20 4d 27 arest').pl.title('Cost.matrix.M'
5ba0 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 44 0a 47 30 3d )...#%%.OT.estimation..#.EMD.G0=
5bc0 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 61 6d 62 64 3d ot.emd(a,b,M)..#.sinkhorn.lambd=
5be0 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 61 6d 62 64 29 1e-1.Gs=ot.sinkhorn(a,b,M,lambd)
5c00 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 74 69 6f 6e 0a ...#.Group.lasso.regularization.
5c20 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 69 6e 6b 68 6f reg=1e-1.eta=1e0.Gg=ot.da.sinkho
5c40 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 6e 74 29 2c 62 rn_lpl1_mm(a,ys.astype(np.int),b
5c60 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 69 63 65 73 0a ,M,reg,eta)...#%%.visu.matrices.
5c80 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 2c 33 2c 31 29 .pl.figure(3)..pl.subplot(2,3,1)
5ca0 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 3d 27 6e 65 61 .pl.imshow(G0,interpolation='nea
5cc0 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 27 29 0a 0a 70 rest').pl.title('OT.matrix.')..p
5ce0 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 47 73 2c 69 6e l.subplot(2,3,2).pl.imshow(Gs,in
5d00 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 terpolation='nearest').pl.title(
5d20 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 75 62 70 6c 6f 'OT.matrix.Sinkhorn')..pl.subplo
5d40 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 70 6f 6c 61 74 t(2,3,3).pl.imshow(Gg,interpolat
5d60 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 20 6d 61 74 72 ion='nearest').pl.title('OT.matr
5d80 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 74 28 32 2c 33 ix.Group.lasso')..pl.subplot(2,3
5da0 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 6d 61 74 28 78 ,4).ot.plot.plot2D_samples_mat(x
5dc0 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 74 74 65 72 28 s,xt,G0,c=[.5,.5,1]).pl.scatter(
5de0 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 2b 27 2c xs[:,0],xs[:,1],c=ys,marker='+',
5e00 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 73 63 61 74 74 label='Source.samples').pl.scatt
5e20 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='
5e40 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 0a 0a 70 6c 2e o',label='Target.samples')...pl.
5e60 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 32 44 5f 73 61 subplot(2,3,5).ot.plot.plot2D_sa
5e80 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 2c 31 5d 29 0a mples_mat(xs,xt,Gs,c=[.5,.5,1]).
5ea0 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 79 73 2c pl.scatter(xs[:,0],xs[:,1],c=ys,
5ec0 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 6c 65 73 marker='+',label='Source.samples
5ee0 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 2c 63 3d ').pl.scatter(xt[:,0],xt[:,1],c=
5f00 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 70 yt,marker='o',label='Target.samp
5f20 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 2e 70 6c 6f 74 les')..pl.subplot(2,3,6).ot.plot
5f40 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 67 2c 63 3d 5b .plot2D_samples_mat(xs,xt,Gg,c=[
5f60 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 5d 2c 78 73 5b .5,.5,1]).pl.scatter(xs[:,0],xs[
5f80 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 53 6f 75 72 :,1],c=ys,marker='+',label='Sour
5fa0 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 3a 2c 30 5d 2c ce.samples').pl.scatter(xt[:,0],
5fc0 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 6c 3d 27 54 xt[:,1],c=yt,marker='o',label='T
5fe0 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 20 69 6e 74 65 arget.samples')..#%%.sample.inte
6000 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 29 0a 78 73 74 rpolation..xst0=n*G0.dot(xt).xst
6020 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 74 28 78 74 29 s=n*Gs.dot(xt).xstg=n*Gg.dot(xt)
6040 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 2c 33 2c 31 29 ..pl.figure(4).pl.subplot(2,3,1)
6060 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 31 5d 2c 63 3d ...pl.scatter(xt[:,0],xt[:,1],c=
6080 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 70 yt,marker='o',label='Target.samp
60a0 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 78 73 74 30 5b les',alpha=0.5).pl.scatter(xst0[
60c0 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 27 2b 27 2c 6c :,0],xst0[:,1],c=ys,marker='+',l
60e0 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 0a 70 6c 2e 74 abel='Transp.samples',s=30).pl.t
6100 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 65 67 65 6e 64 itle('Interp.samples').pl.legend
6120 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 0a 0a 70 6c 2e (loc=0)..pl.subplot(2,3,2)...pl.
6140 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
6160 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 2c 61 ker='o',label='Target.samples',a
6180 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 2c 30 5d 2c 78 lpha=0.5).pl.scatter(xsts[:,0],x
61a0 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 62 65 6c 3d 27 sts[:,1],c=ys,marker='+',label='
61c0 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 74 6c 65 28 27 Transp.samples',s=30).pl.title('
61e0 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 70 6c 2e 73 75 Interp.samples.Sinkhorn')..pl.su
6200 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 5b 3a 2c 30 5d bplot(2,3,3)..pl.scatter(xt[:,0]
6220 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 6c 3d 27 ,xt[:,1],c=yt,marker='o',label='
6240 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 70 6c 2e 73 63 Target.samples',alpha=0.5).pl.sc
6260 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 3d 79 73 2c 6d atter(xstg[:,0],xstg[:,1],c=ys,m
6280 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 6c 65 73 27 arker='+',label='Transp.samples'
62a0 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 6c 65 73 20 ,s=30).pl.title('Interp.samples.
62c0 47 72 6f 75 70 6c 61 73 73 6f 27 29 50 4b 03 04 14 00 00 00 00 00 aa 83 e3 4a c5 46 2c f5 21 06 Grouplasso')PK...........J.F,.!.
62e0 00 00 21 06 00 00 21 00 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 63 6f 6d ..!...!...auto_examples/plot_com
6300 70 75 74 65 5f 65 6d 64 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d pute_emd.py#.-*-.coding:.utf-8.-
6320 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 0a 31 44 20 6f *-.""".====================.1D.o
6340 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ptimal.transport.===============
6360 3d 3d 3d 3d 3d 0a 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 =====..@author:.rflamary."""..im
6380 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
63a0 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
63c0 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
63e0 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 3d 31 30 30 20 23 .gauss...#%%.parameters..n=100.#
6400 20 6e 62 20 62 69 6e 73 0a 6e 5f 74 61 72 67 65 74 3d 35 30 20 23 20 6e 62 20 74 61 72 67 65 74 .nb.bins.n_target=50.#.nb.target
6420 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 69 74 69 6f 6e 73 .distributions...#.bin.positions
6440 0a 78 3d 6e 70 2e 61 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 .x=np.arange(n,dtype=np.float64)
6460 0a 0a 6c 73 74 5f 6d 3d 6e 70 2e 6c 69 6e 73 70 61 63 65 28 32 30 2c 39 30 2c 6e 5f 74 61 72 67 ..lst_m=np.linspace(20,90,n_targ
6480 65 74 29 0a 0a 23 20 47 61 75 73 73 69 61 6e 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 61 3d et)..#.Gaussian.distributions.a=
64a0 67 61 75 73 73 28 6e 2c 6d 3d 32 30 2c 73 3d 35 29 20 23 20 6d 3d 20 6d 65 61 6e 2c 20 73 3d 20 gauss(n,m=20,s=5).#.m=.mean,.s=.
64c0 73 74 64 0a 0a 42 3d 6e 70 2e 7a 65 72 6f 73 28 28 6e 2c 6e 5f 74 61 72 67 65 74 29 29 0a 0a 66 std..B=np.zeros((n,n_target))..f
64e0 6f 72 20 69 2c 6d 20 69 6e 20 65 6e 75 6d 65 72 61 74 65 28 6c 73 74 5f 6d 29 3a 0a 20 20 20 20 or.i,m.in.enumerate(lst_m):.....
6500 42 5b 3a 2c 69 5d 3d 67 61 75 73 73 28 6e 2c 6d 3d 6d 2c 73 3d 35 29 0a 0a 23 20 6c 6f 73 73 20 B[:,i]=gauss(n,m=m,s=5)..#.loss.
6520 6d 61 74 72 69 78 20 61 6e 64 20 6e 6f 72 6d 61 6c 69 7a 61 74 69 6f 6e 0a 4d 3d 6f 74 2e 64 69 matrix.and.normalization.M=ot.di
6540 73 74 28 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 31 29 29 2c 78 2e 72 65 73 68 61 70 65 28 28 6e st(x.reshape((n,1)),x.reshape((n
6560 2c 31 29 29 2c 27 65 75 63 6c 69 64 65 61 6e 27 29 0a 4d 2f 3d 4d 2e 6d 61 78 28 29 0a 4d 32 3d ,1)),'euclidean').M/=M.max().M2=
6580 6f 74 2e 64 69 73 74 28 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 31 29 29 2c 78 2e 72 65 73 68 61 ot.dist(x.reshape((n,1)),x.resha
65a0 70 65 28 28 6e 2c 31 29 29 2c 27 73 71 65 75 63 6c 69 64 65 61 6e 27 29 0a 4d 32 2f 3d 4d 32 2e pe((n,1)),'sqeuclidean').M2/=M2.
65c0 6d 61 78 28 29 0a 23 25 25 20 70 6c 6f 74 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 max().#%%.plot.the.distributions
65e0 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 32 2c 31 2c 31 29 ..pl.figure(1).pl.subplot(2,1,1)
6600 0a 70 6c 2e 70 6c 6f 74 28 78 2c 61 2c 27 62 27 2c 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 64 .pl.plot(x,a,'b',label='Source.d
6620 69 73 74 72 69 62 75 74 69 6f 6e 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 20 64 istribution').pl.title('Source.d
6640 69 73 74 72 69 62 75 74 69 6f 6e 27 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 31 2c 32 29 0a istribution').pl.subplot(2,1,2).
6660 70 6c 2e 70 6c 6f 74 28 78 2c 42 2c 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 64 69 73 74 72 69 pl.plot(x,B,label='Target.distri
6680 62 75 74 69 6f 6e 73 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 61 72 67 65 74 20 64 69 73 74 72 butions').pl.title('Target.distr
66a0 69 62 75 74 69 6f 6e 73 27 29 0a 0a 23 25 25 20 43 6f 6d 70 75 74 65 20 61 6e 64 20 70 6c 6f 74 ibutions')..#%%.Compute.and.plot
66c0 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 0a 0a .distributions.and.loss.matrix..
66e0 64 5f 65 6d 64 3d 6f 74 2e 65 6d 64 32 28 61 2c 42 2c 4d 29 20 23 20 64 69 72 65 63 74 20 63 6f d_emd=ot.emd2(a,B,M).#.direct.co
6700 6d 70 75 74 61 74 69 6f 6e 20 6f 66 20 45 4d 44 0a 64 5f 65 6d 64 32 3d 6f 74 2e 65 6d 64 32 28 mputation.of.EMD.d_emd2=ot.emd2(
6720 61 2c 42 2c 4d 32 29 20 20 23 20 64 69 72 65 63 74 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66 a,B,M2)..#.direct.computation.of
6740 20 45 4d 44 20 77 69 74 68 20 6c 6f 73 73 20 4d 33 0a 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 29 .EMD.with.loss.M3...pl.figure(2)
6760 0a 70 6c 2e 70 6c 6f 74 28 64 5f 65 6d 64 2c 6c 61 62 65 6c 3d 27 45 75 63 6c 69 64 65 61 6e 20 .pl.plot(d_emd,label='Euclidean.
6780 45 4d 44 27 29 0a 70 6c 2e 70 6c 6f 74 28 64 5f 65 6d 64 32 2c 6c 61 62 65 6c 3d 27 53 71 75 61 EMD').pl.plot(d_emd2,label='Squa
67a0 72 65 64 20 45 75 63 6c 69 64 65 61 6e 20 45 4d 44 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 45 4d red.Euclidean.EMD').pl.title('EM
67c0 44 20 64 69 73 74 61 6e 63 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 29 0a 0a 23 25 25 0a 72 D.distances').pl.legend()..#%%.r
67e0 65 67 3d 31 65 2d 32 0a 64 5f 73 69 6e 6b 68 6f 72 6e 3d 6f 74 2e 73 69 6e 6b 68 6f 72 6e 28 61 eg=1e-2.d_sinkhorn=ot.sinkhorn(a
6800 2c 42 2c 4d 2c 72 65 67 29 0a 64 5f 73 69 6e 6b 68 6f 72 6e 32 3d 6f 74 2e 73 69 6e 6b 68 6f 72 ,B,M,reg).d_sinkhorn2=ot.sinkhor
6820 6e 28 61 2c 42 2c 4d 32 2c 72 65 67 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 29 0a 70 6c 2e 63 n(a,B,M2,reg)..pl.figure(2).pl.c
6840 6c 66 28 29 0a 70 6c 2e 70 6c 6f 74 28 64 5f 65 6d 64 2c 6c 61 62 65 6c 3d 27 45 75 63 6c 69 64 lf().pl.plot(d_emd,label='Euclid
6860 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 6c 61 62 65 6c 3d 27 ean.EMD').pl.plot(d_emd2,label='
6880 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 28 Squared.Euclidean.EMD').pl.plot(
68a0 64 5f 73 69 6e 6b 68 6f 72 6e 2c 27 2b 27 2c 6c 61 62 65 6c 3d 27 45 75 63 6c 69 64 65 61 6e 20 d_sinkhorn,'+',label='Euclidean.
68c0 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 32 2c 27 Sinkhorn').pl.plot(d_sinkhorn2,'
68e0 2b 27 2c 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 53 69 6e 6b +',label='Squared.Euclidean.Sink
6900 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 63 65 73 27 29 horn').pl.title('EMD.distances')
6920 0a 70 6c 2e 6c 65 67 65 6e 64 28 29 50 4b 03 04 14 00 00 00 00 00 6a 7b 82 49 d4 40 d8 69 2e 05 .pl.legend()PK........j{.I.@.i..
6940 00 00 2e 05 00 00 20 00 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 64 65 6d 6f 5f 4f 54 5f ..........auto_examples/demo_OT_
6960 31 44 5f 74 65 73 74 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 1D_test.py#.-*-.coding:.utf-8.-*
6980 2d 0a 22 22 22 0a 44 65 6d 6f 20 66 6f 72 20 31 44 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 -.""".Demo.for.1D.optimal.transp
69a0 6f 72 74 0a 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 ort..@author:.rflamary."""..impo
69c0 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 69 62 rt.numpy.as.np.import.matplotlib
69e0 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 2e 64 .pylab.as.pl.import.ot.from.ot.d
6a00 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 20 67 atasets.import.get_1D_gauss.as.g
6a20 61 75 73 73 0a 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 6e 3d 31 30 30 20 23 20 6e auss...#%%.parameters..n=100.#.n
6a40 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 72 61 b.bins..#.bin.positions.x=np.ara
6a60 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 23 20 47 61 75 73 73 nge(n,dtype=np.float64)..#.Gauss
6a80 69 61 6e 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 61 3d 67 61 75 73 73 28 6e 2c 6d 3d 6e 2a ian.distributions.a=gauss(n,m=n*
6aa0 2e 32 2c 73 3d 35 29 20 23 20 6d 3d 20 6d 65 61 6e 2c 20 73 3d 20 73 74 64 0a 62 3d 67 61 75 73 .2,s=5).#.m=.mean,.s=.std.b=gaus
6ac0 73 28 6e 2c 6d 3d 6e 2a 2e 36 2c 73 3d 31 30 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a s(n,m=n*.6,s=10)..#.loss.matrix.
6ae0 4d 3d 6f 74 2e 64 69 73 74 28 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 31 29 29 2c 78 2e 72 65 73 M=ot.dist(x.reshape((n,1)),x.res
6b00 68 61 70 65 28 28 6e 2c 31 29 29 29 0a 4d 2f 3d 4d 2e 6d 61 78 28 29 0a 0a 23 25 25 20 70 6c 6f hape((n,1))).M/=M.max()..#%%.plo
6b20 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
6b40 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 61 2c 27 62 27 2c 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 ).pl.plot(x,a,'b',label='Source.
6b60 64 69 73 74 72 69 62 75 74 69 6f 6e 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 62 2c 27 72 27 2c 6c distribution').pl.plot(x,b,'r',l
6b80 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 27 29 0a 70 6c 2e 6c abel='Target.distribution').pl.l
6ba0 65 67 65 6e 64 28 29 0a 0a 23 25 25 20 70 6c 6f 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 egend()..#%%.plot.distributions.
6bc0 61 6e 64 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 29 0a 6f 74 and.loss.matrix..pl.figure(2).ot
6be0 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 62 2c 4d 2c 27 43 6f 73 74 20 6d 61 74 .plot.plot1D_mat(a,b,M,'Cost.mat
6c00 72 69 78 20 4d 27 29 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 rix.M')..#%%.EMD..G0=ot.emd(a,b,
6c20 4d 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 74 31 44 5f M)..pl.figure(3).ot.plot.plot1D_
6c40 6d 61 74 28 61 2c 62 2c 47 30 2c 27 4f 54 20 6d 61 74 72 69 78 20 47 30 27 29 0a 0a 23 25 25 20 mat(a,b,G0,'OT.matrix.G0')..#%%.
6c60 53 69 6e 6b 68 6f 72 6e 0a 0a 6c 61 6d 62 64 3d 31 65 2d 33 0a 47 73 3d 6f 74 2e 73 69 6e 6b 68 Sinkhorn..lambd=1e-3.Gs=ot.sinkh
6c80 6f 72 6e 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 70 orn(a,b,M,lambd,verbose=True)..p
6ca0 6c 2e 66 69 67 75 72 65 28 34 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 l.figure(4).ot.plot.plot1D_mat(a
6cc0 2c 62 2c 47 73 2c 27 4f 54 20 6d 61 74 72 69 78 20 53 69 6e 6b 68 6f 72 6e 27 29 0a 0a 23 25 25 ,b,Gs,'OT.matrix.Sinkhorn')..#%%
6ce0 20 53 69 6e 6b 68 6f 72 6e 0a 0a 6c 61 6d 62 64 3d 31 65 2d 34 0a 47 73 73 2c 6c 6f 67 3d 6f 74 .Sinkhorn..lambd=1e-4.Gss,log=ot
6d00 2e 62 72 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 .bregman.sinkhorn_stabilized(a,b
6d20 2c 4d 2c 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 29 0a ,M,lambd,verbose=True,log=True).
6d40 47 73 73 32 2c 6c 6f 67 32 3d 6f 74 2e 62 72 65 67 6d 61 6e 2e 73 69 6e 6b 68 6f 72 6e 5f 73 74 Gss2,log2=ot.bregman.sinkhorn_st
6d60 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 65 3d 54 72 75 abilized(a,b,M,lambd,verbose=Tru
6d80 65 2c 6c 6f 67 3d 54 72 75 65 2c 77 61 72 6d 73 74 61 72 74 3d 6c 6f 67 5b 27 77 61 72 6d 73 74 e,log=True,warmstart=log['warmst
6da0 61 72 74 27 5d 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 35 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f art'])..pl.figure(5).ot.plot.plo
6dc0 74 31 44 5f 6d 61 74 28 61 2c 62 2c 47 73 73 2c 27 4f 54 20 6d 61 74 72 69 78 20 53 69 6e 6b 68 t1D_mat(a,b,Gss,'OT.matrix.Sinkh
6de0 6f 72 6e 20 73 74 61 62 69 6c 69 7a 65 64 27 29 0a 0a 23 25 25 20 53 69 6e 6b 68 6f 72 6e 0a 0a orn.stabilized')..#%%.Sinkhorn..
6e00 6c 61 6d 62 64 3d 31 65 2d 31 31 0a 47 73 73 3d 6f 74 2e 62 72 65 67 6d 61 6e 2e 73 69 6e 6b 68 lambd=1e-11.Gss=ot.bregman.sinkh
6e20 6f 72 6e 5f 65 70 73 69 6c 6f 6e 5f 73 63 61 6c 69 6e 67 28 61 2c 62 2c 4d 2c 6c 61 6d 62 64 2c orn_epsilon_scaling(a,b,M,lambd,
6e40 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 35 29 0a 6f 74 2e 70 verbose=True)..pl.figure(5).ot.p
6e60 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 62 2c 47 73 73 2c 27 4f 54 20 6d 61 74 72 69 lot.plot1D_mat(a,b,Gss,'OT.matri
6e80 78 20 53 69 6e 6b 68 6f 72 6e 20 73 74 61 62 69 6c 69 7a 65 64 27 29 0a 50 4b 03 04 14 00 00 00 x.Sinkhorn.stabilized').PK......
6ea0 00 00 a9 83 e3 4a a5 25 9f a1 06 0a 00 00 06 0a 00 00 27 00 00 00 61 75 74 6f 5f 65 78 61 6d 70 .....J.%..........'...auto_examp
6ec0 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 73 2e 70 79 23 20 2d les/plot_OTDA_color_images.py#.-
6ee0 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.-*-.""".=======
6f00 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================================
6f20 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.
6f40 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
6f60 74 61 74 69 6f 6e 20 5b 36 5d 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d tation.[6].=====================
6f80 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================================
6fa0 3d 3d 3d 0a 0a 5b 36 5d 20 46 65 72 72 61 64 61 6e 73 2c 20 53 2e 2c 20 50 61 70 61 64 61 6b 69 ===..[6].Ferradans,.S.,.Papadaki
6fc0 73 2c 20 4e 2e 2c 20 50 65 79 72 65 2c 20 47 2e 2c 20 26 20 41 75 6a 6f 6c 2c 20 4a 2e 20 46 2e s,.N.,.Peyre,.G.,.&.Aujol,.J..F.
6fe0 20 28 32 30 31 34 29 2e 20 52 65 67 75 6c 61 72 69 7a 65 64 20 64 69 73 63 72 65 74 65 20 6f 70 .(2014)..Regularized.discrete.op
7000 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 2e 20 53 49 41 4d 20 4a 6f 75 72 6e 61 6c 20 6f 6e timal.transport..SIAM.Journal.on
7020 20 49 6d 61 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 .Imaging.Sciences,.7(3),.1853-18
7040 38 32 2e 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 82.."""..import.numpy.as.np.impo
7060 72 74 20 73 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 rt.scipy.ndimage.as.spi.import.m
7080 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a atplotlib.pylab.as.pl.import.ot.
70a0 0a 0a 23 25 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 ..#%%.Loading.images..I1=spi.imr
70c0 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 6f 63 65 61 6e 5f 64 61 79 2e 6a 70 67 27 29 2e 61 73 74 ead('../data/ocean_day.jpg').ast
70e0 79 70 65 28 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 ype(np.float64)/256.I2=spi.imrea
7100 64 28 27 2e 2e 2f 64 61 74 61 2f 6f 63 65 61 6e 5f 73 75 6e 73 65 74 2e 6a 70 67 27 29 2e 61 73 d('../data/ocean_sunset.jpg').as
7120 74 79 70 65 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 type(np.float64)/256..#%%.Plot.i
7140 6d 61 67 65 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 mages..pl.figure(1)..pl.subplot(
7160 31 2c 32 2c 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 1,2,1).pl.imshow(I1).pl.title('I
7180 6d 61 67 65 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 mage.1')..pl.subplot(1,2,2).pl.i
71a0 6d 73 68 6f 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 mshow(I2).pl.title('Image.2')..p
71c0 6c 2e 73 68 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 l.show()..#%%.Image.conversion.a
71e0 6e 64 20 64 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 nd.dataset.generation..def.im2ma
7200 74 28 49 29 3a 0a 20 20 20 20 22 22 22 43 6f 6e 76 65 72 74 73 20 61 6e 64 20 69 6d 61 67 65 20 t(I):....."""Converts.and.image.
7220 74 6f 20 6d 61 74 72 69 78 20 28 6f 6e 65 20 70 69 78 65 6c 20 70 65 72 20 6c 69 6e 65 29 22 22 to.matrix.(one.pixel.per.line)""
7240 22 0a 20 20 20 20 72 65 74 75 72 6e 20 49 2e 72 65 73 68 61 70 65 28 28 49 2e 73 68 61 70 65 5b ".....return.I.reshape((I.shape[
7260 30 5d 2a 49 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 0]*I.shape[1],I.shape[2]))..def.
7280 6d 61 74 32 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 mat2im(X,shape):....."""Converts
72a0 20 62 61 63 6b 20 61 20 6d 61 74 72 69 78 20 74 6f 20 61 6e 20 69 6d 61 67 65 22 22 22 0a 20 20 .back.a.matrix.to.an.image"""...
72c0 20 20 72 65 74 75 72 6e 20 58 2e 72 65 73 68 61 70 65 28 73 68 61 70 65 29 0a 0a 58 31 3d 69 6d ..return.X.reshape(shape)..X1=im
72e0 32 6d 61 74 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 2mat(I1).X2=im2mat(I2)..#.traini
7300 6e 67 20 73 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 ng.samples.nb=1000.idx1=np.rando
7320 6d 2e 72 61 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 m.randint(X1.shape[0],size=(nb,)
7340 29 0a 69 64 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 ).idx2=np.random.randint(X2.shap
7360 65 5b 30 5d 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 e[0],size=(nb,))..xs=X1[idx1,:].
7380 78 74 3d 58 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 xt=X2[idx2,:]..#%%.Plot.image.di
73a0 73 74 72 69 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 stributions...pl.figure(2,(10,5)
73c0 29 0a 0a 70 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 )..pl.subplot(1,2,1).pl.scatter(
73e0 78 73 5b 3a 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 xs[:,0],xs[:,2],c=xs).pl.axis([0
7400 2c 31 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 ,1,0,1]).pl.xlabel('Red').pl.yla
7420 62 65 6c 28 27 42 6c 75 65 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 31 27 29 0a bel('Blue').pl.title('Image.1').
7440 0a 70 6c 2e 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 .pl.subplot(1,2,2).#pl.imshow(I2
7460 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 32 5d 2c 63 3d 78 ).pl.scatter(xt[:,0],xt[:,2],c=x
7480 74 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 62 65 6c 28 t).pl.axis([0,1,0,1]).pl.xlabel(
74a0 27 52 65 64 27 29 0a 70 6c 2e 79 6c 61 62 65 6c 28 27 42 6c 75 65 27 29 0a 70 6c 2e 74 69 74 6c 'Red').pl.ylabel('Blue').pl.titl
74c0 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 0a 0a 23 25 25 20 64 e('Image.2')..pl.show()....#%%.d
74e0 6f 6d 61 69 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 omain.adaptation.between.images.
7500 0a 23 20 4c 50 20 70 72 6f 62 6c 65 6d 0a 64 61 5f 65 6d 64 3d 6f 74 2e 64 61 2e 4f 54 44 41 28 .#.LP.problem.da_emd=ot.da.OTDA(
7520 29 20 20 20 20 20 23 20 69 6e 69 74 20 63 6c 61 73 73 0a 64 61 5f 65 6d 64 2e 66 69 74 28 78 73 ).....#.init.class.da_emd.fit(xs
7540 2c 78 74 29 20 20 20 20 20 20 20 23 20 66 69 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a ,xt).......#.fit.distributions..
7560 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 6c 61 6d 62 64 .#.sinkhorn.regularization.lambd
7580 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 73 69 6e 6b 68 =1e-1.da_entrop=ot.da.OTDA_sinkh
75a0 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 65 67 3d 6c 61 orn().da_entrop.fit(xs,xt,reg=la
75c0 6d 62 64 29 0a 0a 0a 0a 23 25 25 20 70 72 65 64 69 63 74 69 6f 6e 20 62 65 74 77 65 65 6e 20 69 mbd)....#%%.prediction.between.i
75e0 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 70 72 65 64 69 mages.(using.out.of.sample.predi
7600 63 74 69 6f 6e 20 61 73 20 69 6e 20 5b 36 5d 29 0a 0a 58 31 74 3d 64 61 5f 65 6d 64 2e 70 72 65 ction.as.in.[6])..X1t=da_emd.pre
7620 64 69 63 74 28 58 31 29 0a 58 32 74 3d 64 61 5f 65 6d 64 2e 70 72 65 64 69 63 74 28 58 32 2c 2d dict(X1).X2t=da_emd.predict(X2,-
7640 31 29 0a 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 1)...X1te=da_entrop.predict(X1).
7660 58 32 74 65 3d 64 61 5f 65 6e 74 72 6f 70 2e 70 72 65 64 69 63 74 28 58 32 2c 2d 31 29 0a 0a 0a X2te=da_entrop.predict(X2,-1)...
7680 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 6d 69 6e def.minmax(I):.....return.np.min
76a0 69 6d 75 6d 28 6e 70 2e 6d 61 78 69 6d 75 6d 28 49 2c 30 29 2c 31 29 0a 0a 49 31 74 3d 6d 69 6e imum(np.maximum(I,0),1)..I1t=min
76c0 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 49 32 74 3d 6d 69 max(mat2im(X1t,I1.shape)).I2t=mi
76e0 6e 6d 61 78 28 6d 61 74 32 69 6d 28 58 32 74 2c 49 32 2e 73 68 61 70 65 29 29 0a 0a 49 31 74 65 nmax(mat2im(X2t,I2.shape))..I1te
7700 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 49 =minmax(mat2im(X1te,I1.shape)).I
7720 32 74 65 3d 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 58 32 74 65 2c 49 32 2e 73 68 61 70 65 29 2te=minmax(mat2im(X2te,I2.shape)
7740 29 0a 0a 23 25 25 20 70 6c 6f 74 20 61 6c 6c 20 69 6d 61 67 65 73 0a 0a 70 6c 2e 66 69 67 75 72 )..#%%.plot.all.images..pl.figur
7760 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 0a e(2,(10,8))..pl.subplot(2,3,1)..
7780 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 20 31 27 pl.imshow(I1).pl.title('Image.1'
77a0 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 49 )..pl.subplot(2,3,2).pl.imshow(I
77c0 31 74 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 31 20 41 64 61 70 74 27 29 0a 0a 0a 1t).pl.title('Image.1.Adapt')...
77e0 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 33 2c 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 74 65 pl.subplot(2,3,3).pl.imshow(I1te
7800 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 20 28 72 65 67 29 27 ).pl.title('Image.1.Adapt.(reg)'
7820 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 33 2c 34 29 0a 0a 70 6c 2e 69 6d 73 68 6f 77 28 )..pl.subplot(2,3,4)..pl.imshow(
7840 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 75 62 70 I2).pl.title('Image.2')..pl.subp
7860 6c 6f 74 28 32 2c 33 2c 35 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 74 29 0a 70 6c 2e 74 69 74 lot(2,3,5).pl.imshow(I2t).pl.tit
7880 6c 65 28 27 49 6d 61 67 65 20 32 20 41 64 61 70 74 27 29 0a 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 le('Image.2.Adapt')...pl.subplot
78a0 28 32 2c 33 2c 36 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 74 65 29 0a 70 6c 2e 74 69 74 6c 65 (2,3,6).pl.imshow(I2te).pl.title
78c0 28 27 49 6d 61 67 65 20 32 20 41 64 61 70 74 20 28 72 65 67 29 27 29 0a 0a 70 6c 2e 73 68 6f 77 ('Image.2.Adapt.(reg)')..pl.show
78e0 28 29 0a 50 4b 03 04 14 00 00 00 00 00 a9 83 e3 4a f7 ba 1e e3 6d 0d 00 00 6d 0d 00 00 2f 00 00 ().PK...........J....m...m.../..
7900 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 67 .auto_examples/plot_OTDA_mapping
7920 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 20 75 74 _color_images.py#.-*-.coding:.ut
7940 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 3d f-8.-*-.""".====================
7960 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================================
7980 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================================
79a0 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 20 69 .OT.for.domain.adaptation.with.i
79c0 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 77 69 74 68 20 6d mage.color.adaptation.[6].with.m
79e0 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 3d 3d 3d 3d 3d 3d apping.estimation.[8].==========
7a00 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================================
7a20 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================================
7a40 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 20 53 2e 2c 20 50 ==========..[6].Ferradans,.S.,.P
7a60 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 6c apadakis,.N.,.Peyre,.G.,.&.Aujol
7a80 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 64 0a 20 20 20 20 ,.J..F..(2014)..Regularized.....
7aa0 64 69 73 63 72 65 74 65 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 2e 20 53 49 41 4d discrete.optimal.transport..SIAM
7ac0 20 4a 6f 75 72 6e 61 6c 20 6f 6e 20 49 6d 61 67 69 6e 67 20 53 63 69 65 6e 63 65 73 2c 20 37 28 .Journal.on.Imaging.Sciences,.7(
7ae0 33 29 2c 20 31 38 35 33 2d 31 38 38 32 2e 0a 5b 38 5d 20 4d 2e 20 50 65 72 72 6f 74 2c 20 4e 2e 3),.1853-1882..[8].M..Perrot,.N.
7b00 20 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 .Courty,.R..Flamary,.A..Habrard,
7b20 20 22 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 ."Mapping.estimation.for.....dis
7b40 63 72 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 crete.optimal.transport",.Neural
7b60 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 50 72 6f 63 65 73 73 69 6e 67 20 53 79 73 74 65 6d 73 20 .Information.Processing.Systems.
7b80 28 4e 49 50 53 29 2c 20 32 30 31 36 2e 0a 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 (NIPS),.2016..."""..import.numpy
7ba0 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 65 20 61 73 20 73 .as.np.import.scipy.ndimage.as.s
7bc0 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 20 61 73 20 70 6c pi.import.matplotlib.pylab.as.pl
7be0 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 6d 61 67 65 73 0a .import.ot...#%%.Loading.images.
7c00 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 65 61 6e 5f 64 61 .I1=spi.imread('../data/ocean_da
7c20 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 2f 32 35 36 0a 49 y.jpg').astype(np.float64)/256.I
7c40 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 6e 5f 73 75 6e 73 2=spi.imread('../data/ocean_suns
7c60 65 74 2e 6a 70 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 2f 32 35 36 0a et.jpg').astype(np.float64)/256.
7c80 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 65 28 31 29 0a 0a .#%%.Plot.images..pl.figure(1)..
7ca0 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 77 28 49 31 29 0a pl.subplot(1,2,1).pl.imshow(I1).
7cc0 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 31 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 pl.title('Image.1')..pl.subplot(
7ce0 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 74 6c 65 28 27 49 1,2,2).pl.imshow(I2).pl.title('I
7d00 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 6d 61 67 65 20 63 mage.2')..pl.show()..#%%.Image.c
7d20 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 72 61 74 69 6f 6e onversion.and.dataset.generation
7d40 0a 0a 64 65 66 20 69 6d 32 6d 61 74 28 49 29 3a 0a 20 20 20 20 22 22 22 43 6f 6e 76 65 72 74 73 ..def.im2mat(I):....."""Converts
7d60 20 61 6e 64 20 69 6d 61 67 65 20 74 6f 20 6d 61 74 72 69 78 20 28 6f 6e 65 20 70 69 78 65 6c 20 .and.image.to.matrix.(one.pixel.
7d80 70 65 72 20 6c 69 6e 65 29 22 22 22 0a 20 20 20 20 72 65 74 75 72 6e 20 49 2e 72 65 73 68 61 70 per.line)""".....return.I.reshap
7da0 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 2e 73 68 61 70 65 e((I.shape[0]*I.shape[1],I.shape
7dc0 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 3a 0a 20 20 20 20 [2]))..def.mat2im(X,shape):.....
7de0 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 74 6f 20 61 6e 20 """Converts.back.a.matrix.to.an.
7e00 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 61 70 65 28 73 68 image""".....return.X.reshape(sh
7e20 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 6d 61 74 28 49 32 ape)..X1=im2mat(I1).X2=im2mat(I2
7e40 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 30 30 30 0a 69 64 )..#.training.samples.nb=1000.id
7e60 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 61 70 65 5b 30 5d x1=np.random.randint(X1.shape[0]
7e80 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 6d 2e 72 61 6e 64 ,size=(nb,)).idx2=np.random.rand
7ea0 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 29 0a 0a 78 73 3d int(X2.shape[0],size=(nb,))..xs=
7ec0 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 23 25 25 20 50 6c X1[idx1,:].xt=X2[idx2,:]..#%%.Pl
7ee0 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 6c 2e 66 69 67 75 ot.image.distributions...pl.figu
7f00 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 2c 32 2c 31 29 0a re(2,(10,5))..pl.subplot(1,2,1).
7f20 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 2c 63 3d 78 73 29 pl.scatter(xs[:,0],xs[:,2],c=xs)
7f40 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 62 65 6c 28 27 52 .pl.axis([0,1,0,1]).pl.xlabel('R
7f60 65 64 27 29 0a 70 6c 2e 79 6c 61 62 65 6c 28 27 42 6c 75 65 27 29 0a 70 6c 2e 74 69 74 6c 65 28 ed').pl.ylabel('Blue').pl.title(
7f80 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 2c 32 29 0a 23 70 'Image.1')..pl.subplot(1,2,2).#p
7fa0 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 5b 3a 2c 30 5d 2c l.imshow(I2).pl.scatter(xt[:,0],
7fc0 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 2c 30 2c 31 5d 29 xt[:,2],c=xt).pl.axis([0,1,0,1])
7fe0 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 75 .pl.xlabel('Red').pl.ylabel('Blu
8000 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 6c 2e 73 68 6f 77 e').pl.title('Image.2')..pl.show
8020 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 6e 20 62 65 74 77 ()....#%%.domain.adaptation.betw
8040 65 65 6e 20 69 6d 61 67 65 73 0a 64 65 66 20 6d 69 6e 6d 61 78 28 49 29 3a 0a 20 20 20 20 72 65 een.images.def.minmax(I):.....re
8060 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 28 49 2c 30 29 2c turn.np.minimum(np.maximum(I,0),
8080 31 29 0a 23 20 4c 50 20 70 72 6f 62 6c 65 6d 0a 64 61 5f 65 6d 64 3d 6f 74 2e 64 61 2e 4f 54 44 1).#.LP.problem.da_emd=ot.da.OTD
80a0 41 28 29 20 20 20 20 20 23 20 69 6e 69 74 20 63 6c 61 73 73 0a 64 61 5f 65 6d 64 2e 66 69 74 28 A().....#.init.class.da_emd.fit(
80c0 78 73 2c 78 74 29 20 20 20 20 20 20 20 23 20 66 69 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 xs,xt).......#.fit.distributions
80e0 0a 0a 58 31 74 3d 64 61 5f 65 6d 64 2e 70 72 65 64 69 63 74 28 58 31 29 20 20 23 20 6f 75 74 20 ..X1t=da_emd.predict(X1)..#.out.
8100 6f 66 20 73 61 6d 70 6c 65 0a 49 31 74 3d 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 58 31 74 2c of.sample.I1t=minmax(mat2im(X1t,
8120 49 31 2e 73 68 61 70 65 29 29 0a 0a 23 20 73 69 6e 6b 68 6f 72 6e 20 72 65 67 75 6c 61 72 69 7a I1.shape))..#.sinkhorn.regulariz
8140 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 3d 6f 74 2e 64 61 ation.lambd=1e-1.da_entrop=ot.da
8160 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 2e 66 69 74 28 78 .OTDA_sinkhorn().da_entrop.fit(x
8180 73 2c 78 74 2c 72 65 67 3d 6c 61 6d 62 64 29 0a 0a 58 31 74 65 3d 64 61 5f 65 6e 74 72 6f 70 2e s,xt,reg=lambd)..X1te=da_entrop.
81a0 70 72 65 64 69 63 74 28 58 31 29 0a 49 31 74 65 3d 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 58 predict(X1).I1te=minmax(mat2im(X
81c0 31 74 65 2c 49 31 2e 73 68 61 70 65 29 29 0a 0a 23 20 6c 69 6e 65 61 72 20 6d 61 70 70 69 6e 67 1te,I1.shape))..#.linear.mapping
81e0 20 65 73 74 69 6d 61 74 69 6f 6e 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
8200 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
8220 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
8240 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
8260 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
8280 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
82a0 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
82c0 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 58 31 74 6c Itermax.=.20,verbose=True)..X1tl
82e0 3d 6f 74 5f 6d 61 70 70 69 6e 67 2e 70 72 65 64 69 63 74 28 58 31 29 20 23 20 75 73 65 20 74 68 =ot_mapping.predict(X1).#.use.th
8300 65 20 65 73 74 69 6d 61 74 65 64 20 6d 61 70 70 69 6e 67 0a 49 31 74 6c 3d 6d 69 6e 6d 61 78 28 e.estimated.mapping.I1tl=minmax(
8320 6d 61 74 32 69 6d 28 58 31 74 6c 2c 49 31 2e 73 68 61 70 65 29 29 0a 0a 23 20 6e 6f 6e 6c 69 6e mat2im(X1tl,I1.shape))..#.nonlin
8340 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 3d 31 65 2d 32 20 ear.mapping.estimation.eta=1e-2.
8360 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 6f 6e 20 66 6f 72 ..#.quadratic.regularization.for
8380 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 65 69 67 68 74 20 .regression.mu=1e0.....#.weight.
83a0 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 3d 46 61 6c 73 65 of.the.OT.linear.term.bias=False
83c0 20 20 23 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 ..#.estimate.a.bias.sigma=1....#
83e0 20 73 69 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 .sigma.bandwidth.fot.gaussian.ke
8400 72 6e 65 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 rnel...ot_mapping_kernel=ot.da.O
8420 54 44 41 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 TDA_mapping_kernel().ot_mapping_
8440 6b 65 72 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 kernel.fit(xs,xt,mu=mu,eta=eta,s
8460 69 67 6d 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 igma=sigma,bias=bias,numItermax.
8480 3d 20 31 30 2c 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 0a 58 31 74 6e 3d 6f 74 5f 6d 61 70 70 =.10,verbose=True)..X1tn=ot_mapp
84a0 69 6e 67 5f 6b 65 72 6e 65 6c 2e 70 72 65 64 69 63 74 28 58 31 29 20 23 20 75 73 65 20 74 68 65 ing_kernel.predict(X1).#.use.the
84c0 20 65 73 74 69 6d 61 74 65 64 20 6d 61 70 70 69 6e 67 0a 49 31 74 6e 3d 6d 69 6e 6d 61 78 28 6d .estimated.mapping.I1tn=minmax(m
84e0 61 74 32 69 6d 28 58 31 74 6e 2c 49 31 2e 73 68 61 70 65 29 29 0a 23 25 25 20 70 6c 6f 74 20 69 at2im(X1tn,I1.shape)).#%%.plot.i
8500 6d 61 67 65 73 0a 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 2e mages...pl.figure(2,(10,8))..pl.
8520 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 6c subplot(2,3,1)..pl.imshow(I1).pl
8540 2e 74 69 74 6c 65 28 27 49 6d 2e 20 31 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 33 2c .title('Im..1')..pl.subplot(2,3,
8560 32 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 6d 2e 20 2)..pl.imshow(I2).pl.title('Im..
8580 32 27 29 0a 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 33 2c 33 29 0a 70 6c 2e 69 6d 73 68 6f 2')...pl.subplot(2,3,3).pl.imsho
85a0 77 28 49 31 74 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 2e 20 31 20 49 6e 74 65 72 70 20 4c 50 w(I1t).pl.title('Im..1.Interp.LP
85c0 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 33 2c 34 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 ')..pl.subplot(2,3,4).pl.imshow(
85e0 49 31 74 65 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 2e 20 31 20 49 6e 74 65 72 70 20 45 6e 74 I1te).pl.title('Im..1.Interp.Ent
8600 72 6f 70 27 29 0a 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 33 2c 35 29 0a 70 6c 2e 69 6d 73 rop')...pl.subplot(2,3,5).pl.ims
8620 68 6f 77 28 49 31 74 6c 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 2e 20 31 20 4c 69 6e 65 61 72 how(I1tl).pl.title('Im..1.Linear
8640 20 6d 61 70 70 69 6e 67 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 33 2c 36 29 0a 70 6c .mapping')..pl.subplot(2,3,6).pl
8660 2e 69 6d 73 68 6f 77 28 49 31 74 6e 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 2e 20 31 20 6e 6f .imshow(I1tn).pl.title('Im..1.no
8680 6e 6c 69 6e 65 61 72 20 6d 61 70 70 69 6e 67 27 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 01 nlinear.mapping')..pl.show().PK.
86a0 02 14 03 14 00 00 00 00 00 a9 83 e3 4a 2f 8a 49 ca a0 04 00 00 a0 04 00 00 19 00 00 00 00 00 00 ............J/.I................
86c0 00 00 00 00 00 b4 81 00 00 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 57 44 ...........auto_examples/plot_WD
86e0 41 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 a9 83 e3 4a e7 a1 46 a7 95 0c 00 00 95 0c 00 00 A.pyPK.............J..F.........
8700 22 00 00 00 00 00 00 00 00 00 00 00 b4 81 d7 04 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f ".................auto_examples/
8720 70 6c 6f 74 5f 4f 54 44 41 5f 6d 61 70 70 69 6e 67 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 plot_OTDA_mapping.pyPK..........
8740 aa 83 e3 4a 75 a6 3a ed 10 05 00 00 10 05 00 00 21 00 00 00 00 00 00 00 00 00 00 00 b4 81 ac 11 ...Ju.:.........!...............
8760 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 6f 70 74 69 6d 5f 4f 54 72 65 67 ..auto_examples/plot_optim_OTreg
8780 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 a9 83 e3 4a f2 c1 a7 29 f1 09 00 00 f1 09 00 00 22 .pyPK.............J...)........"
87a0 00 00 00 00 00 00 00 00 00 00 00 b4 81 fb 16 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 .................auto_examples/p
87c0 6c 6f 74 5f 4f 54 44 41 5f 63 6c 61 73 73 65 73 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 a9 lot_OTDA_classes.pyPK...........
87e0 83 e3 4a 58 62 bb 42 8f 03 00 00 8f 03 00 00 1b 00 00 00 00 00 00 00 00 00 00 00 b4 81 2c 21 00 ..JXb.B......................,!.
8800 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 79 50 4b 01 02 .auto_examples/plot_OT_1D.pyPK..
8820 14 03 14 00 00 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 ........2..JX...................
8840 00 00 00 00 b4 81 f4 24 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 4f 54 5f .......$..auto_examples/plot_OT_
8860 63 6f 6e 76 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 a9 83 e3 4a d8 dc 52 b3 62 0a 00 00 62 conv.pyPK.............J..R.b...b
8880 0a 00 00 23 00 00 00 00 00 00 00 00 00 00 00 b4 81 c6 35 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c ...#..............5..auto_exampl
88a0 65 73 2f 70 6c 6f 74 5f 62 61 72 79 63 65 6e 74 65 72 5f 31 44 2e 70 79 50 4b 01 02 14 03 14 00 es/plot_barycenter_1D.pyPK......
88c0 00 00 00 00 6a 7b 82 49 25 c9 d6 13 1c 06 00 00 1c 06 00 00 28 00 00 00 00 00 00 00 00 00 00 00 ....j{.I%...........(...........
88e0 b4 81 69 40 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 64 65 6d 6f 5f 4f 54 5f 32 44 5f 73 ..i@..auto_examples/demo_OT_2D_s
8900 61 6d 70 6c 65 73 6c 61 72 67 65 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 a9 83 e3 4a 19 12 ampleslarge.pyPK.............J..
8920 26 b2 be 0a 00 00 be 0a 00 00 21 00 00 00 00 00 00 00 00 00 00 00 b4 81 cb 46 00 00 61 75 74 6f &.........!..............F..auto
8940 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 79 50 4b 01 _examples/plot_OT_L1_vs_L2.pyPK.
8960 02 14 03 14 00 00 00 00 00 a9 83 e3 4a b4 93 15 da 5a 06 00 00 5a 06 00 00 23 00 00 00 00 00 00 ............J....Z...Z...#......
8980 00 00 00 00 00 b4 81 c8 51 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 4f 54 ........Q..auto_examples/plot_OT
89a0 5f 32 44 5f 73 61 6d 70 6c 65 73 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 a9 83 e3 4a ec af _2D_samples.pyPK.............J..
89c0 42 31 2e 0a 00 00 2e 0a 00 00 1d 00 00 00 00 00 00 00 00 00 00 00 b4 81 63 58 00 00 61 75 74 6f B1......................cX..auto
89e0 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 4f 54 44 41 5f 32 44 2e 70 79 50 4b 01 02 14 03 14 _examples/plot_OTDA_2D.pyPK.....
8a00 00 00 00 00 00 aa 83 e3 4a c5 46 2c f5 21 06 00 00 21 06 00 00 21 00 00 00 00 00 00 00 00 00 00 ........J.F,.!...!...!..........
8a20 00 b4 81 cc 62 00 00 61 75 74 6f 5f 65 78 61 6d 70 6c 65 73 2f 70 6c 6f 74 5f 63 6f 6d 70 75 74 ....b..auto_examples/plot_comput
8a40 65 5f 65 6d 64 2e 70 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 e_emd.pyPK..........j{.I.@.i....
8a60 2e 05 00 00 20 00 00 00 00 00 00 00 00 00 00 00 b4 81 2c 69 00 00 61 75 74 6f 5f 65 78 61 6d 70 ..................,i..auto_examp
8a80 6c 65 73 2f 64 65 6d 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 les/demo_OT_1D_test.pyPK........
8aa0 00 00 a9 83 e3 4a a5 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 .....J.%..........'.............
8ac0 98 6e 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 6f 6c 6f .n..auto_examples/plot_OTDA_colo
8ae0 72 5f 69 6d 61 67 65 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 r_images.pyPK.............J....m
8b00 0d 00 00 6d 0d 00 00 2f 00 00 00 00 00 00 00 00 00 00 00 b4 81 e3 78 00 00 61 75 74 6f 5f 65 78 ...m.../..............x..auto_ex
8b20 61 6d 70 6c 65 73 2f 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 amples/plot_OTDA_mapping_color_i
8b40 6d 61 67 65 73 2e 70 79 50 4b 05 06 00 00 00 00 0f 00 0f 00 ab 04 00 00 9d 86 00 00 00 00 mages.pyPK....................