ofs | hex dump | ascii |
---|
0000 | 50 4b 03 04 14 00 00 00 00 00 7c 68 3a 4f a4 4f 47 3f 0c 0c 00 00 0c 0c 00 00 0b 00 00 00 70 6c | PK........|h:O.OG?............pl |
0020 | 6f 74 5f 57 44 41 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d | ot_WDA.py#.-*-.coding:.utf-8.-*- |
0040 | 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 | .""".=========================== |
0060 | 3d 3d 3d 3d 3d 3d 0a 57 61 73 73 65 72 73 74 65 69 6e 20 44 69 73 63 72 69 6d 69 6e 61 6e 74 20 | ======.Wasserstein.Discriminant. |
0080 | 41 6e 61 6c 79 73 69 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | Analysis.======================= |
00a0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 6c 6c 75 73 74 72 | ==========..This.example.illustr |
00c0 | 61 74 65 20 74 68 65 20 75 73 65 20 6f 66 20 57 44 41 20 61 73 20 70 72 6f 70 6f 73 65 64 20 69 | ate.the.use.of.WDA.as.proposed.i |
00e0 | 6e 20 5b 31 31 5d 2e 0a 0a 0a 5b 31 31 5d 20 46 6c 61 6d 61 72 79 2c 20 52 2e 2c 20 43 75 74 75 | n.[11]....[11].Flamary,.R.,.Cutu |
0100 | 72 69 2c 20 4d 2e 2c 20 43 6f 75 72 74 79 2c 20 4e 2e 2c 20 26 20 52 61 6b 6f 74 6f 6d 61 6d 6f | ri,.M.,.Courty,.N.,.&.Rakotomamo |
0120 | 6e 6a 79 2c 20 41 2e 20 28 32 30 31 36 29 2e 0a 57 61 73 73 65 72 73 74 65 69 6e 20 44 69 73 63 | njy,.A..(2016)..Wasserstein.Disc |
0140 | 72 69 6d 69 6e 61 6e 74 20 41 6e 61 6c 79 73 69 73 2e 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f | riminant.Analysis..."""..#.Autho |
0160 | 72 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e | r:.Remi.Flamary.<remi.flamary@un |
0180 | 69 63 65 2e 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 | ice.fr>.#.#.License:.MIT.License |
01a0 | 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 | ..import.numpy.as.np.import.matp |
01c0 | 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 0a 66 72 6f 6d 20 6f 74 2e 64 72 20 69 | lotlib.pylab.as.pl..from.ot.dr.i |
01e0 | 6d 70 6f 72 74 20 77 64 61 2c 20 66 64 61 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | mport.wda,.fda...############### |
0200 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
0220 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a | ###############################. |
0240 | 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a | #.Generate.data.#.-------------. |
0260 | 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 6e 20 3d 20 31 30 30 30 20 20 23 20 6e 62 20 | .#%%.parameters..n.=.1000..#.nb. |
0280 | 73 61 6d 70 6c 65 73 20 69 6e 20 73 6f 75 72 63 65 20 61 6e 64 20 74 61 72 67 65 74 20 64 61 74 | samples.in.source.and.target.dat |
02a0 | 61 73 65 74 73 0a 6e 7a 20 3d 20 30 2e 32 0a 0a 23 20 67 65 6e 65 72 61 74 65 20 63 69 72 63 6c | asets.nz.=.0.2..#.generate.circl |
02c0 | 65 20 64 61 74 61 73 65 74 0a 74 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 28 6e 29 20 | e.dataset.t.=.np.random.rand(n). |
02e0 | 2a 20 32 20 2a 20 6e 70 2e 70 69 0a 79 73 20 3d 20 6e 70 2e 66 6c 6f 6f 72 28 28 6e 70 2e 61 72 | *.2.*.np.pi.ys.=.np.floor((np.ar |
0300 | 61 6e 67 65 28 6e 29 20 2a 20 31 2e 30 20 2f 20 6e 20 2a 20 33 29 29 20 2b 20 31 0a 78 73 20 3d | ange(n).*.1.0./.n.*.3)).+.1.xs.= |
0320 | 20 6e 70 2e 63 6f 6e 63 61 74 65 6e 61 74 65 28 0a 20 20 20 20 28 6e 70 2e 63 6f 73 28 74 29 2e | .np.concatenate(.....(np.cos(t). |
0340 | 72 65 73 68 61 70 65 28 28 2d 31 2c 20 31 29 29 2c 20 6e 70 2e 73 69 6e 28 74 29 2e 72 65 73 68 | reshape((-1,.1)),.np.sin(t).resh |
0360 | 61 70 65 28 28 2d 31 2c 20 31 29 29 29 2c 20 31 29 0a 78 73 20 3d 20 78 73 20 2a 20 79 73 2e 72 | ape((-1,.1))),.1).xs.=.xs.*.ys.r |
0380 | 65 73 68 61 70 65 28 2d 31 2c 20 31 29 20 2b 20 6e 7a 20 2a 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 | eshape(-1,.1).+.nz.*.np.random.r |
03a0 | 61 6e 64 6e 28 6e 2c 20 32 29 0a 0a 74 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 28 6e | andn(n,.2)..t.=.np.random.rand(n |
03c0 | 29 20 2a 20 32 20 2a 20 6e 70 2e 70 69 0a 79 74 20 3d 20 6e 70 2e 66 6c 6f 6f 72 28 28 6e 70 2e | ).*.2.*.np.pi.yt.=.np.floor((np. |
03e0 | 61 72 61 6e 67 65 28 6e 29 20 2a 20 31 2e 30 20 2f 20 6e 20 2a 20 33 29 29 20 2b 20 31 0a 78 74 | arange(n).*.1.0./.n.*.3)).+.1.xt |
0400 | 20 3d 20 6e 70 2e 63 6f 6e 63 61 74 65 6e 61 74 65 28 0a 20 20 20 20 28 6e 70 2e 63 6f 73 28 74 | .=.np.concatenate(.....(np.cos(t |
0420 | 29 2e 72 65 73 68 61 70 65 28 28 2d 31 2c 20 31 29 29 2c 20 6e 70 2e 73 69 6e 28 74 29 2e 72 65 | ).reshape((-1,.1)),.np.sin(t).re |
0440 | 73 68 61 70 65 28 28 2d 31 2c 20 31 29 29 29 2c 20 31 29 0a 78 74 20 3d 20 78 74 20 2a 20 79 74 | shape((-1,.1))),.1).xt.=.xt.*.yt |
0460 | 2e 72 65 73 68 61 70 65 28 2d 31 2c 20 31 29 20 2b 20 6e 7a 20 2a 20 6e 70 2e 72 61 6e 64 6f 6d | .reshape(-1,.1).+.nz.*.np.random |
0480 | 2e 72 61 6e 64 6e 28 6e 2c 20 32 29 0a 0a 6e 62 6e 6f 69 73 65 20 3d 20 38 0a 0a 78 73 20 3d 20 | .randn(n,.2)..nbnoise.=.8..xs.=. |
04a0 | 6e 70 2e 68 73 74 61 63 6b 28 28 78 73 2c 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 6e 28 6e | np.hstack((xs,.np.random.randn(n |
04c0 | 2c 20 6e 62 6e 6f 69 73 65 29 29 29 0a 78 74 20 3d 20 6e 70 2e 68 73 74 61 63 6b 28 28 78 74 2c | ,.nbnoise))).xt.=.np.hstack((xt, |
04e0 | 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 6e 28 6e 2c 20 6e 62 6e 6f 69 73 65 29 29 29 0a 0a | .np.random.randn(n,.nbnoise))).. |
0500 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
0520 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
0540 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 64 61 74 61 0a 23 20 2d 2d 2d | ##############.#.Plot.data.#.--- |
0560 | 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 6c 6f 74 20 73 61 6d 70 6c 65 73 0a 70 6c 2e 66 69 67 75 | ------..#%%.plot.samples.pl.figu |
0580 | 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 2e 35 29 29 0a 0a 70 6c 2e 73 75 | re(1,.figsize=(6.4,.3.5))..pl.su |
05a0 | 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 74 5b 3a 2c 20 | bplot(1,.2,.1).pl.scatter(xt[:,. |
05c0 | 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 | 0],.xt[:,.1],.c=ys,.marker='+',. |
05e0 | 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 6e | label='Source.samples').pl.legen |
0600 | 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 44 69 73 63 72 69 6d 69 6e 61 6e 74 20 | d(loc=0).pl.title('Discriminant. |
0620 | 64 69 6d 65 6e 73 69 6f 6e 73 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 32 | dimensions')..pl.subplot(1,.2,.2 |
0640 | 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 74 5b 3a 2c 20 32 5d 2c 20 78 74 5b 3a 2c 20 33 5d 2c | ).pl.scatter(xt[:,.2],.xt[:,.3], |
0660 | 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 | .c=ys,.marker='+',.label='Source |
0680 | 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 | .samples').pl.legend(loc=0).pl.t |
06a0 | 69 74 6c 65 28 27 4f 74 68 65 72 20 64 69 6d 65 6e 73 69 6f 6e 73 27 29 0a 70 6c 2e 74 69 67 68 | itle('Other.dimensions').pl.tigh |
06c0 | 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | t_layout()..#################### |
06e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
0700 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 43 6f 6d | ##########################.#.Com |
0720 | 70 75 74 65 20 46 69 73 68 65 72 20 44 69 73 63 72 69 6d 69 6e 61 6e 74 20 41 6e 61 6c 79 73 69 | pute.Fisher.Discriminant.Analysi |
0740 | 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | s.#.---------------------------- |
0760 | 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 43 6f 6d 70 75 74 65 20 46 44 41 0a 70 20 3d 20 32 0a | --------..#%%.Compute.FDA.p.=.2. |
0780 | 0a 50 66 64 61 2c 20 70 72 6f 6a 66 64 61 20 3d 20 66 64 61 28 78 73 2c 20 79 73 2c 20 70 29 0a | .Pfda,.projfda.=.fda(xs,.ys,.p). |
07a0 | 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | .############################### |
07c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
07e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 43 6f 6d 70 75 74 65 20 57 61 73 73 65 72 | ###############.#.Compute.Wasser |
0800 | 73 74 65 69 6e 20 44 69 73 63 72 69 6d 69 6e 61 6e 74 20 41 6e 61 6c 79 73 69 73 0a 23 20 2d 2d | stein.Discriminant.Analysis.#.-- |
0820 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
0840 | 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 43 6f 6d 70 75 74 65 20 57 44 41 0a 70 20 3d 20 32 0a 72 | -------..#%%.Compute.WDA.p.=.2.r |
0860 | 65 67 20 3d 20 31 65 30 0a 6b 20 3d 20 31 30 0a 6d 61 78 69 74 65 72 20 3d 20 31 30 30 0a 0a 50 | eg.=.1e0.k.=.10.maxiter.=.100..P |
0880 | 77 64 61 2c 20 70 72 6f 6a 77 64 61 20 3d 20 77 64 61 28 78 73 2c 20 79 73 2c 20 70 2c 20 72 65 | wda,.projwda.=.wda(xs,.ys,.p,.re |
08a0 | 67 2c 20 6b 2c 20 6d 61 78 69 74 65 72 3d 6d 61 78 69 74 65 72 29 0a 0a 0a 23 23 23 23 23 23 23 | g,.k,.maxiter=maxiter)...####### |
08c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
08e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
0900 | 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 32 44 20 70 72 6f 6a 65 63 74 69 6f 6e 73 0a 23 20 | #######.#.Plot.2D.projections.#. |
0920 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 6c 6f 74 20 73 61 | -------------------..#%%.plot.sa |
0940 | 6d 70 6c 65 73 0a 0a 78 73 70 20 3d 20 70 72 6f 6a 66 64 61 28 78 73 29 0a 78 74 70 20 3d 20 70 | mples..xsp.=.projfda(xs).xtp.=.p |
0960 | 72 6f 6a 66 64 61 28 78 74 29 0a 0a 78 73 70 77 20 3d 20 70 72 6f 6a 77 64 61 28 78 73 29 0a 78 | rojfda(xt)..xspw.=.projwda(xs).x |
0980 | 74 70 77 20 3d 20 70 72 6f 6a 77 64 61 28 78 74 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 29 0a | tpw.=.projwda(xt)..pl.figure(2). |
09a0 | 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 | .pl.subplot(2,.2,.1).pl.scatter( |
09c0 | 78 73 70 5b 3a 2c 20 30 5d 2c 20 78 73 70 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b | xsp[:,.0],.xsp[:,.1],.c=ys,.mark |
09e0 | 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 50 72 6f 6a 65 63 74 65 64 20 73 61 6d 70 6c 65 73 | er='+',.label='Projected.samples |
0a00 | 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 |
0a20 | 6f 6a 65 63 74 65 64 20 74 72 61 69 6e 69 6e 67 20 73 61 6d 70 6c 65 73 20 46 44 41 27 29 0a 0a | ojected.training.samples.FDA').. |
0a40 | 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 | pl.subplot(2,.2,.2).pl.scatter(x |
0a60 | 74 70 5b 3a 2c 20 30 5d 2c 20 78 74 70 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 | tp[:,.0],.xtp[:,.1],.c=ys,.marke |
0a80 | 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 50 72 6f 6a 65 63 74 65 64 20 73 61 6d 70 6c 65 73 27 | r='+',.label='Projected.samples' |
0aa0 | 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 50 72 6f | ).pl.legend(loc=0).pl.title('Pro |
0ac0 | 6a 65 63 74 65 64 20 74 65 73 74 20 73 61 6d 70 6c 65 73 20 46 44 41 27 29 0a 0a 70 6c 2e 73 75 | jected.test.samples.FDA')..pl.su |
0ae0 | 62 70 6c 6f 74 28 32 2c 20 32 2c 20 33 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 73 70 77 5b 3a | bplot(2,.2,.3).pl.scatter(xspw[: |
0b00 | 2c 20 30 5d 2c 20 78 73 70 77 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 | ,.0],.xspw[:,.1],.c=ys,.marker=' |
0b20 | 2b 27 2c 20 6c 61 62 65 6c 3d 27 50 72 6f 6a 65 63 74 65 64 20 73 61 6d 70 6c 65 73 27 29 0a 70 | +',.label='Projected.samples').p |
0b40 | 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 50 72 6f 6a 65 63 | l.legend(loc=0).pl.title('Projec |
0b60 | 74 65 64 20 74 72 61 69 6e 69 6e 67 20 73 61 6d 70 6c 65 73 20 57 44 41 27 29 0a 0a 70 6c 2e 73 | ted.training.samples.WDA')..pl.s |
0b80 | 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 34 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 74 70 77 5b | ubplot(2,.2,.4).pl.scatter(xtpw[ |
0ba0 | 3a 2c 20 30 5d 2c 20 78 74 70 77 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d | :,.0],.xtpw[:,.1],.c=ys,.marker= |
0bc0 | 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 50 72 6f 6a 65 63 74 65 64 20 73 61 6d 70 6c 65 73 27 29 0a | '+',.label='Projected.samples'). |
0be0 | 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 50 72 6f 6a 65 | pl.legend(loc=0).pl.title('Proje |
0c00 | 63 74 65 64 20 74 65 73 74 20 73 61 6d 70 6c 65 73 20 57 44 41 27 29 0a 70 6c 2e 74 69 67 68 74 | cted.test.samples.WDA').pl.tight |
0c20 | 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 7c | _layout()..pl.show().PK........| |
0c40 | 68 3a 4f c6 3b 52 da f3 0a 00 00 f3 0a 00 00 0e 00 00 00 70 6c 6f 74 5f 67 72 6f 6d 6f 76 2e 70 | h:O.;R.............plot_gromov.p |
0c60 | 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0d 0a 22 22 22 0d 0a 3d | y#.-*-.coding:.utf-8.-*-.."""..= |
0c80 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 47 72 6f 6d 6f | =========================..Gromo |
0ca0 | 76 2d 57 61 73 73 65 72 73 74 65 69 6e 20 65 78 61 6d 70 6c 65 0d 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d | v-Wasserstein.example..========= |
0cc0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 0d 0a 54 68 69 73 20 65 78 61 6d 70 6c | =================....This.exampl |
0ce0 | 65 20 69 73 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73 68 6f 77 20 68 6f 77 20 74 6f 20 75 73 65 | e.is.designed.to.show.how.to.use |
0d00 | 20 74 68 65 20 47 72 6f 6d 6f 76 2d 57 61 73 73 65 72 74 73 65 69 6e 20 64 69 73 74 61 6e 63 65 | .the.Gromov-Wassertsein.distance |
0d20 | 0d 0a 63 6f 6d 70 75 74 61 74 69 6f 6e 20 69 6e 20 50 4f 54 2e 0d 0a 22 22 22 0d 0a 0d 0a 23 20 | ..computation.in.POT..."""....#. |
0d40 | 41 75 74 68 6f 72 3a 20 45 72 77 61 6e 20 56 61 75 74 69 65 72 20 3c 65 72 77 61 6e 2e 76 61 75 | Author:.Erwan.Vautier.<erwan.vau |
0d60 | 74 69 65 72 40 67 6d 61 69 6c 2e 63 6f 6d 3e 0d 0a 23 20 20 20 20 20 20 20 20 20 4e 69 63 6f 6c | tier@gmail.com>..#.........Nicol |
0d80 | 61 73 20 43 6f 75 72 74 79 20 3c 6e 63 6f 75 72 74 79 40 69 72 69 73 61 2e 66 72 3e 0d 0a 23 0d | as.Courty.<ncourty@irisa.fr>..#. |
0da0 | 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0d 0a 0d 0a 69 6d 70 6f 72 | .#.License:.MIT.License....impor |
0dc0 | 74 20 73 63 69 70 79 20 61 73 20 73 70 0d 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e | t.scipy.as.sp..import.numpy.as.n |
0de0 | 70 0d 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 | p..import.matplotlib.pylab.as.pl |
0e00 | 0d 0a 66 72 6f 6d 20 6d 70 6c 5f 74 6f 6f 6c 6b 69 74 73 2e 6d 70 6c 6f 74 33 64 20 69 6d 70 6f | ..from.mpl_toolkits.mplot3d.impo |
0e20 | 72 74 20 41 78 65 73 33 44 20 20 23 20 6e 6f 71 61 0d 0a 69 6d 70 6f 72 74 20 6f 74 0d 0a 0d 0a | rt.Axes3D..#.noqa..import.ot.... |
0e40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
0e60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
0e80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 23 0d 0a 23 20 53 61 6d 70 6c 65 20 74 77 6f 20 47 | #############..#..#.Sample.two.G |
0ea0 | 61 75 73 73 69 61 6e 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 28 32 44 20 61 6e 64 20 33 44 | aussian.distributions.(2D.and.3D |
0ec0 | 29 0d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | )..#.--------------------------- |
0ee0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 0d 0a 23 20 54 68 65 20 47 72 6f | ------------------..#..#.The.Gro |
0f00 | 6d 6f 76 2d 57 61 73 73 65 72 73 74 65 69 6e 20 64 69 73 74 61 6e 63 65 20 61 6c 6c 6f 77 73 20 | mov-Wasserstein.distance.allows. |
0f20 | 74 6f 20 63 6f 6d 70 75 74 65 20 64 69 73 74 61 6e 63 65 73 20 77 69 74 68 20 73 61 6d 70 6c 65 | to.compute.distances.with.sample |
0f40 | 73 20 74 68 61 74 0d 0a 23 20 64 6f 20 6e 6f 74 20 62 65 6c 6f 6e 67 20 74 6f 20 74 68 65 20 73 | s.that..#.do.not.belong.to.the.s |
0f60 | 61 6d 65 20 6d 65 74 72 69 63 20 73 70 61 63 65 2e 20 46 6f 72 20 64 65 6d 6f 6e 73 74 72 61 74 | ame.metric.space..For.demonstrat |
0f80 | 69 6f 6e 20 70 75 72 70 6f 73 65 2c 20 77 65 20 73 61 6d 70 6c 65 0d 0a 23 20 74 77 6f 20 47 61 | ion.purpose,.we.sample..#.two.Ga |
0fa0 | 75 73 73 69 61 6e 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 69 6e 20 32 2d 20 61 6e 64 20 33 | ussian.distributions.in.2-.and.3 |
0fc0 | 2d 64 69 6d 65 6e 73 69 6f 6e 61 6c 20 73 70 61 63 65 73 2e 0d 0a 0d 0a 0d 0a 6e 5f 73 61 6d 70 | -dimensional.spaces.......n_samp |
0fe0 | 6c 65 73 20 3d 20 33 30 20 20 23 20 6e 62 20 73 61 6d 70 6c 65 73 0d 0a 0d 0a 6d 75 5f 73 20 3d | les.=.30..#.nb.samples....mu_s.= |
1000 | 20 6e 70 2e 61 72 72 61 79 28 5b 30 2c 20 30 5d 29 0d 0a 63 6f 76 5f 73 20 3d 20 6e 70 2e 61 72 | .np.array([0,.0])..cov_s.=.np.ar |
1020 | 72 61 79 28 5b 5b 31 2c 20 30 5d 2c 20 5b 30 2c 20 31 5d 5d 29 0d 0a 0d 0a 6d 75 5f 74 20 3d 20 | ray([[1,.0],.[0,.1]])....mu_t.=. |
1040 | 6e 70 2e 61 72 72 61 79 28 5b 34 2c 20 34 2c 20 34 5d 29 0d 0a 63 6f 76 5f 74 20 3d 20 6e 70 2e | np.array([4,.4,.4])..cov_t.=.np. |
1060 | 61 72 72 61 79 28 5b 5b 31 2c 20 30 2c 20 30 5d 2c 20 5b 30 2c 20 31 2c 20 30 5d 2c 20 5b 30 2c | array([[1,.0,.0],.[0,.1,.0],.[0, |
1080 | 20 30 2c 20 31 5d 5d 29 0d 0a 0d 0a 0d 0a 78 73 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d | .0,.1]])......xs.=.ot.datasets.m |
10a0 | 61 6b 65 5f 32 44 5f 73 61 6d 70 6c 65 73 5f 67 61 75 73 73 28 6e 5f 73 61 6d 70 6c 65 73 2c 20 | ake_2D_samples_gauss(n_samples,. |
10c0 | 6d 75 5f 73 2c 20 63 6f 76 5f 73 29 0d 0a 50 20 3d 20 73 70 2e 6c 69 6e 61 6c 67 2e 73 71 72 74 | mu_s,.cov_s)..P.=.sp.linalg.sqrt |
10e0 | 6d 28 63 6f 76 5f 74 29 0d 0a 78 74 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 6e 28 6e | m(cov_t)..xt.=.np.random.randn(n |
1100 | 5f 73 61 6d 70 6c 65 73 2c 20 33 29 2e 64 6f 74 28 50 29 20 2b 20 6d 75 5f 74 0d 0a 0d 0a 23 23 | _samples,.3).dot(P).+.mu_t....## |
1120 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
1140 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
1160 | 23 23 23 23 23 23 23 23 23 23 23 0d 0a 23 0d 0a 23 20 50 6c 6f 74 74 69 6e 67 20 74 68 65 20 64 | ###########..#..#.Plotting.the.d |
1180 | 69 73 74 72 69 62 75 74 69 6f 6e 73 0d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | istributions..#.---------------- |
11a0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 0d 0a 66 69 67 20 3d 20 70 6c 2e 66 69 67 75 72 65 28 | ----------......fig.=.pl.figure( |
11c0 | 29 0d 0a 61 78 31 20 3d 20 66 69 67 2e 61 64 64 5f 73 75 62 70 6c 6f 74 28 31 32 31 29 0d 0a 61 | )..ax1.=.fig.add_subplot(121)..a |
11e0 | 78 31 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 | x1.plot(xs[:,.0],.xs[:,.1],.'+b' |
1200 | 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0d 0a 61 78 32 20 3d | ,.label='Source.samples')..ax2.= |
1220 | 20 66 69 67 2e 61 64 64 5f 73 75 62 70 6c 6f 74 28 31 32 32 2c 20 70 72 6f 6a 65 63 74 69 6f 6e | .fig.add_subplot(122,.projection |
1240 | 3d 27 33 64 27 29 0d 0a 61 78 32 2e 73 63 61 74 74 65 72 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 | ='3d')..ax2.scatter(xt[:,.0],.xt |
1260 | 5b 3a 2c 20 31 5d 2c 20 78 74 5b 3a 2c 20 32 5d 2c 20 63 6f 6c 6f 72 3d 27 72 27 29 0d 0a 70 6c | [:,.1],.xt[:,.2],.color='r')..pl |
1280 | 2e 73 68 6f 77 28 29 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | .show()....##################### |
12a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
12c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 23 0d 0a 23 20 43 | ########################..#..#.C |
12e0 | 6f 6d 70 75 74 65 20 64 69 73 74 61 6e 63 65 20 6b 65 72 6e 65 6c 73 2c 20 6e 6f 72 6d 61 6c 69 | ompute.distance.kernels,.normali |
1300 | 7a 65 20 74 68 65 6d 20 61 6e 64 20 74 68 65 6e 20 64 69 73 70 6c 61 79 0d 0a 23 20 2d 2d 2d 2d | ze.them.and.then.display..#.---- |
1320 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
1340 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 0d 0a 43 31 20 3d 20 | ---------------------......C1.=. |
1360 | 73 70 2e 73 70 61 74 69 61 6c 2e 64 69 73 74 61 6e 63 65 2e 63 64 69 73 74 28 78 73 2c 20 78 73 | sp.spatial.distance.cdist(xs,.xs |
1380 | 29 0d 0a 43 32 20 3d 20 73 70 2e 73 70 61 74 69 61 6c 2e 64 69 73 74 61 6e 63 65 2e 63 64 69 73 | )..C2.=.sp.spatial.distance.cdis |
13a0 | 74 28 78 74 2c 20 78 74 29 0d 0a 0d 0a 43 31 20 2f 3d 20 43 31 2e 6d 61 78 28 29 0d 0a 43 32 20 | t(xt,.xt)....C1./=.C1.max()..C2. |
13c0 | 2f 3d 20 43 32 2e 6d 61 78 28 29 0d 0a 0d 0a 70 6c 2e 66 69 67 75 72 65 28 29 0d 0a 70 6c 2e 73 | /=.C2.max()....pl.figure()..pl.s |
13e0 | 75 62 70 6c 6f 74 28 31 32 31 29 0d 0a 70 6c 2e 69 6d 73 68 6f 77 28 43 31 29 0d 0a 70 6c 2e 73 | ubplot(121)..pl.imshow(C1)..pl.s |
1400 | 75 62 70 6c 6f 74 28 31 32 32 29 0d 0a 70 6c 2e 69 6d 73 68 6f 77 28 43 32 29 0d 0a 70 6c 2e 73 | ubplot(122)..pl.imshow(C2)..pl.s |
1420 | 68 6f 77 28 29 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | how()....####################### |
1440 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
1460 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 23 0d 0a 23 20 43 6f 6d | ######################..#..#.Com |
1480 | 70 75 74 65 20 47 72 6f 6d 6f 76 2d 57 61 73 73 65 72 73 74 65 69 6e 20 70 6c 61 6e 73 20 61 6e | pute.Gromov-Wasserstein.plans.an |
14a0 | 64 20 64 69 73 74 61 6e 63 65 0d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | d.distance..#.------------------ |
14c0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 70 | ---------------------------....p |
14e0 | 20 3d 20 6f 74 2e 75 6e 69 66 28 6e 5f 73 61 6d 70 6c 65 73 29 0d 0a 71 20 3d 20 6f 74 2e 75 6e | .=.ot.unif(n_samples)..q.=.ot.un |
1500 | 69 66 28 6e 5f 73 61 6d 70 6c 65 73 29 0d 0a 0d 0a 67 77 30 2c 20 6c 6f 67 30 20 3d 20 6f 74 2e | if(n_samples)....gw0,.log0.=.ot. |
1520 | 67 72 6f 6d 6f 76 2e 67 72 6f 6d 6f 76 5f 77 61 73 73 65 72 73 74 65 69 6e 28 0d 0a 20 20 20 20 | gromov.gromov_wasserstein(...... |
1540 | 43 31 2c 20 43 32 2c 20 70 2c 20 71 2c 20 27 73 71 75 61 72 65 5f 6c 6f 73 73 27 2c 20 76 65 72 | C1,.C2,.p,.q,.'square_loss',.ver |
1560 | 62 6f 73 65 3d 54 72 75 65 2c 20 6c 6f 67 3d 54 72 75 65 29 0d 0a 0d 0a 67 77 2c 20 6c 6f 67 20 | bose=True,.log=True)....gw,.log. |
1580 | 3d 20 6f 74 2e 67 72 6f 6d 6f 76 2e 65 6e 74 72 6f 70 69 63 5f 67 72 6f 6d 6f 76 5f 77 61 73 73 | =.ot.gromov.entropic_gromov_wass |
15a0 | 65 72 73 74 65 69 6e 28 0d 0a 20 20 20 20 43 31 2c 20 43 32 2c 20 70 2c 20 71 2c 20 27 73 71 75 | erstein(......C1,.C2,.p,.q,.'squ |
15c0 | 61 72 65 5f 6c 6f 73 73 27 2c 20 65 70 73 69 6c 6f 6e 3d 35 65 2d 34 2c 20 6c 6f 67 3d 54 72 75 | are_loss',.epsilon=5e-4,.log=Tru |
15e0 | 65 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0d 0a 0d 0a 0d 0a 70 72 69 6e 74 28 27 47 72 6f | e,.verbose=True)......print('Gro |
1600 | 6d 6f 76 2d 57 61 73 73 65 72 73 74 65 69 6e 20 64 69 73 74 61 6e 63 65 73 3a 20 27 20 2b 20 73 | mov-Wasserstein.distances:.'.+.s |
1620 | 74 72 28 6c 6f 67 30 5b 27 67 77 5f 64 69 73 74 27 5d 29 29 0d 0a 70 72 69 6e 74 28 27 45 6e 74 | tr(log0['gw_dist']))..print('Ent |
1640 | 72 6f 70 69 63 20 47 72 6f 6d 6f 76 2d 57 61 73 73 65 72 73 74 65 69 6e 20 64 69 73 74 61 6e 63 | ropic.Gromov-Wasserstein.distanc |
1660 | 65 73 3a 20 27 20 2b 20 73 74 72 28 6c 6f 67 5b 27 67 77 5f 64 69 73 74 27 5d 29 29 0d 0a 0d 0a | es:.'.+.str(log['gw_dist'])).... |
1680 | 0d 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 28 31 30 2c 20 35 29 29 0d 0a 0d 0a 70 6c 2e 73 75 | ..pl.figure(1,.(10,.5))....pl.su |
16a0 | 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0d 0a 70 6c 2e 69 6d 73 68 6f 77 28 67 77 30 2c 20 63 | bplot(1,.2,.1)..pl.imshow(gw0,.c |
16c0 | 6d 61 70 3d 27 6a 65 74 27 29 0d 0a 70 6c 2e 74 69 74 6c 65 28 27 47 72 6f 6d 6f 76 20 57 61 73 | map='jet')..pl.title('Gromov.Was |
16e0 | 73 65 72 73 74 65 69 6e 27 29 0d 0a 0d 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 32 | serstein')....pl.subplot(1,.2,.2 |
1700 | 29 0d 0a 70 6c 2e 69 6d 73 68 6f 77 28 67 77 2c 20 63 6d 61 70 3d 27 6a 65 74 27 29 0d 0a 70 6c | )..pl.imshow(gw,.cmap='jet')..pl |
1720 | 2e 74 69 74 6c 65 28 27 45 6e 74 72 6f 70 69 63 20 47 72 6f 6d 6f 76 20 57 61 73 73 65 72 73 74 | .title('Entropic.Gromov.Wasserst |
1740 | 65 69 6e 27 29 0d 0a 0d 0a 70 6c 2e 73 68 6f 77 28 29 0d 0a 50 4b 03 04 14 00 00 00 00 00 84 68 | ein')....pl.show()..PK.........h |
1760 | 3a 4f ea 88 04 1c d5 18 00 00 d5 18 00 00 16 00 00 00 70 6c 6f 74 5f 62 61 72 79 63 65 6e 74 65 | :O................plot_barycente |
1780 | 72 5f 66 67 77 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 | r_fgw.py#.-*-.coding:.utf-8.-*-. |
17a0 | 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | """.============================ |
17c0 | 3d 3d 3d 3d 3d 0a 50 6c 6f 74 20 67 72 61 70 68 73 27 20 62 61 72 79 63 65 6e 74 65 72 20 75 73 | =====.Plot.graphs'.barycenter.us |
17e0 | 69 6e 67 20 46 47 57 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 | ing.FGW.======================== |
1800 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 6c 6c 75 73 74 72 61 | =========..This.example.illustra |
1820 | 74 65 73 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 62 61 72 79 63 65 6e 74 65 72 20 6f | tes.the.computation.barycenter.o |
1840 | 66 20 6c 61 62 65 6c 65 64 20 67 72 61 70 68 73 20 75 73 69 6e 67 20 46 47 57 0a 0a 52 65 71 75 | f.labeled.graphs.using.FGW..Requ |
1860 | 69 72 65 73 20 6e 65 74 77 6f 72 6b 78 20 3e 3d 32 0a 0a 2e 2e 20 5b 31 38 5d 20 56 61 79 65 72 | ires.networkx.>=2.....[18].Vayer |
1880 | 20 54 69 74 6f 75 61 6e 2c 20 43 68 61 70 65 6c 20 4c 61 65 74 69 74 69 61 2c 20 46 6c 61 6d 61 | .Titouan,.Chapel.Laetitia,.Flama |
18a0 | 72 79 20 52 7b 5c 27 65 7d 6d 69 2c 20 54 61 76 65 6e 61 72 64 20 52 6f 6d 61 69 6e 0a 20 20 20 | ry.R{\'e}mi,.Tavenard.Romain.... |
18c0 | 20 20 20 61 6e 64 20 43 6f 75 72 74 79 20 4e 69 63 6f 6c 61 73 0a 20 20 20 20 22 4f 70 74 69 6d | ...and.Courty.Nicolas....."Optim |
18e0 | 61 6c 20 54 72 61 6e 73 70 6f 72 74 20 66 6f 72 20 73 74 72 75 63 74 75 72 65 64 20 64 61 74 61 | al.Transport.for.structured.data |
1900 | 20 77 69 74 68 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 6f 6e 20 67 72 61 70 68 73 22 0a 20 20 20 | .with.application.on.graphs".... |
1920 | 20 49 6e 74 65 72 6e 61 74 69 6f 6e 61 6c 20 43 6f 6e 66 65 72 65 6e 63 65 20 6f 6e 20 4d 61 63 | .International.Conference.on.Mac |
1940 | 68 69 6e 65 20 4c 65 61 72 6e 69 6e 67 20 28 49 43 4d 4c 29 2e 20 32 30 31 39 2e 0a 0a 22 22 22 | hine.Learning.(ICML)..2019...""" |
1960 | 0a 0a 23 20 41 75 74 68 6f 72 3a 20 54 69 74 6f 75 61 6e 20 56 61 79 65 72 20 3c 74 69 74 6f 75 | ..#.Author:.Titouan.Vayer.<titou |
1980 | 61 6e 2e 76 61 79 65 72 40 69 72 69 73 61 2e 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 | an.vayer@irisa.fr>.#.#.License:. |
19a0 | 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 23 25 25 20 6c 6f 61 64 20 6c 69 62 72 61 72 69 65 73 0a | MIT.License..#%%.load.libraries. |
19c0 | 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f | import.numpy.as.np.import.matplo |
19e0 | 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 74 0a 69 6d 70 6f 72 74 20 6e 65 74 77 6f 72 | tlib.pyplot.as.plt.import.networ |
1a00 | 6b 78 20 61 73 20 6e 78 0a 69 6d 70 6f 72 74 20 6d 61 74 68 0a 66 72 6f 6d 20 73 63 69 70 79 2e | kx.as.nx.import.math.from.scipy. |
1a20 | 73 70 61 72 73 65 2e 63 73 67 72 61 70 68 20 69 6d 70 6f 72 74 20 73 68 6f 72 74 65 73 74 5f 70 | sparse.csgraph.import.shortest_p |
1a40 | 61 74 68 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 63 6f 6c 6f 72 73 20 61 73 20 | ath.import.matplotlib.colors.as. |
1a60 | 6d 63 6f 6c 0a 66 72 6f 6d 20 6d 61 74 70 6c 6f 74 6c 69 62 20 69 6d 70 6f 72 74 20 63 6d 0a 66 | mcol.from.matplotlib.import.cm.f |
1a80 | 72 6f 6d 20 6f 74 2e 67 72 6f 6d 6f 76 20 69 6d 70 6f 72 74 20 66 67 77 5f 62 61 72 79 63 65 6e | rom.ot.gromov.import.fgw_barycen |
1aa0 | 74 65 72 73 0a 23 25 25 20 47 72 61 70 68 20 66 75 6e 63 74 69 6f 6e 73 0a 0a 0a 64 65 66 20 66 | ters.#%%.Graph.functions...def.f |
1ac0 | 69 6e 64 5f 74 68 72 65 73 68 28 43 2c 20 69 6e 66 3d 30 2e 35 2c 20 73 75 70 3d 33 2c 20 73 74 | ind_thresh(C,.inf=0.5,.sup=3,.st |
1ae0 | 65 70 3d 31 30 29 3a 0a 20 20 20 20 22 22 22 20 54 72 69 63 6b 20 74 6f 20 66 69 6e 64 20 74 68 | ep=10):.....""".Trick.to.find.th |
1b00 | 65 20 61 64 65 71 75 61 74 65 20 74 68 72 65 73 68 6f 6c 64 73 20 66 72 6f 6d 20 77 68 65 72 65 | e.adequate.thresholds.from.where |
1b20 | 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 43 20 6d 61 74 72 69 78 20 61 72 65 20 63 6f 6e 73 69 | .value.of.the.C.matrix.are.consi |
1b40 | 64 65 72 65 64 20 63 6c 6f 73 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 61 79 20 74 68 61 74 20 6e | dered.close.enough.to.say.that.n |
1b60 | 6f 64 65 73 20 61 72 65 20 63 6f 6e 6e 65 63 74 65 64 0a 20 20 20 20 20 20 20 20 54 74 68 65 20 | odes.are.connected.........Tthe. |
1b80 | 74 68 72 65 73 68 6f 6c 64 20 69 73 20 66 6f 75 6e 64 20 62 79 20 61 20 6c 69 6e 65 73 65 61 72 | threshold.is.found.by.a.linesear |
1ba0 | 63 68 20 62 65 74 77 65 65 6e 20 76 61 6c 75 65 73 20 22 69 6e 66 22 20 61 6e 64 20 22 73 75 70 | ch.between.values."inf".and."sup |
1bc0 | 22 20 77 69 74 68 20 22 73 74 65 70 22 20 74 68 72 65 73 68 6f 6c 64 73 20 74 65 73 74 65 64 2e | ".with."step".thresholds.tested. |
1be0 | 0a 20 20 20 20 20 20 20 20 54 68 65 20 6f 70 74 69 6d 61 6c 20 74 68 72 65 73 68 6f 6c 64 20 69 | .........The.optimal.threshold.i |
1c00 | 73 20 74 68 65 20 6f 6e 65 20 77 68 69 63 68 20 6d 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 72 65 | s.the.one.which.minimizes.the.re |
1c20 | 63 6f 6e 73 74 72 75 63 74 69 6f 6e 20 65 72 72 6f 72 20 62 65 74 77 65 65 6e 20 74 68 65 20 73 | construction.error.between.the.s |
1c40 | 68 6f 72 74 65 73 74 5f 70 61 74 68 20 6d 61 74 72 69 78 20 63 6f 6d 69 6e 67 20 66 72 6f 6d 20 | hortest_path.matrix.coming.from. |
1c60 | 74 68 65 20 74 68 72 65 73 68 6f 6c 64 65 64 20 61 64 6a 65 6e 63 79 20 6d 61 74 72 69 78 0a 20 | the.thresholded.adjency.matrix.. |
1c80 | 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 6d 61 74 72 69 78 2e 0a | .......and.the.original.matrix.. |
1ca0 | 20 20 20 20 50 61 72 61 6d 65 74 65 72 73 0a 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 | ....Parameters.....----------... |
1cc0 | 20 20 43 20 3a 20 6e 64 61 72 72 61 79 2c 20 73 68 61 70 65 20 28 6e 5f 6e 6f 64 65 73 2c 6e 5f | ..C.:.ndarray,.shape.(n_nodes,n_ |
1ce0 | 6e 6f 64 65 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 68 65 20 73 74 72 75 63 74 75 72 65 | nodes).............The.structure |
1d00 | 20 6d 61 74 72 69 78 20 74 6f 20 74 68 72 65 73 68 6f 6c 64 0a 20 20 20 20 69 6e 66 20 3a 20 66 | .matrix.to.threshold.....inf.:.f |
1d20 | 6c 6f 61 74 0a 20 20 20 20 20 20 20 20 20 20 54 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 | loat...........The.beginning.of. |
1d40 | 74 68 65 20 6c 69 6e 65 73 65 61 72 63 68 0a 20 20 20 20 73 75 70 20 3a 20 66 6c 6f 61 74 0a 20 | the.linesearch.....sup.:.float.. |
1d60 | 20 20 20 20 20 20 20 20 20 54 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 6c 69 6e 65 73 65 61 72 | .........The.end.of.the.linesear |
1d80 | 63 68 0a 20 20 20 20 73 74 65 70 20 3a 20 69 6e 74 65 67 65 72 0a 20 20 20 20 20 20 20 20 20 20 | ch.....step.:.integer........... |
1da0 | 20 20 4e 75 6d 62 65 72 20 6f 66 20 74 68 72 65 73 68 6f 6c 64 73 20 74 65 73 74 65 64 0a 20 20 | ..Number.of.thresholds.tested... |
1dc0 | 20 20 22 22 22 0a 20 20 20 20 64 69 73 74 20 3d 20 5b 5d 0a 20 20 20 20 73 65 61 72 63 68 20 3d | ..""".....dist.=.[].....search.= |
1de0 | 20 6e 70 2e 6c 69 6e 73 70 61 63 65 28 69 6e 66 2c 20 73 75 70 2c 20 73 74 65 70 29 0a 20 20 20 | .np.linspace(inf,.sup,.step).... |
1e00 | 20 66 6f 72 20 74 68 72 65 73 68 20 69 6e 20 73 65 61 72 63 68 3a 0a 20 20 20 20 20 20 20 20 43 | .for.thresh.in.search:.........C |
1e20 | 70 72 69 6d 65 20 3d 20 73 70 5f 74 6f 5f 61 64 6a 65 6e 63 79 28 43 2c 20 30 2c 20 74 68 72 65 | prime.=.sp_to_adjency(C,.0,.thre |
1e40 | 73 68 29 0a 20 20 20 20 20 20 20 20 53 43 20 3d 20 73 68 6f 72 74 65 73 74 5f 70 61 74 68 28 43 | sh).........SC.=.shortest_path(C |
1e60 | 70 72 69 6d 65 2c 20 6d 65 74 68 6f 64 3d 27 44 27 29 0a 20 20 20 20 20 20 20 20 53 43 5b 53 43 | prime,.method='D').........SC[SC |
1e80 | 20 3d 3d 20 66 6c 6f 61 74 28 27 69 6e 66 27 29 5d 20 3d 20 31 30 30 0a 20 20 20 20 20 20 20 20 | .==.float('inf')].=.100......... |
1ea0 | 64 69 73 74 2e 61 70 70 65 6e 64 28 6e 70 2e 6c 69 6e 61 6c 67 2e 6e 6f 72 6d 28 53 43 20 2d 20 | dist.append(np.linalg.norm(SC.-. |
1ec0 | 43 29 29 0a 20 20 20 20 72 65 74 75 72 6e 20 73 65 61 72 63 68 5b 6e 70 2e 61 72 67 6d 69 6e 28 | C)).....return.search[np.argmin( |
1ee0 | 64 69 73 74 29 5d 2c 20 64 69 73 74 0a 0a 0a 64 65 66 20 73 70 5f 74 6f 5f 61 64 6a 65 6e 63 79 | dist)],.dist...def.sp_to_adjency |
1f00 | 28 43 2c 20 74 68 72 65 73 68 69 6e 66 3d 30 2e 32 2c 20 74 68 72 65 73 68 73 75 70 3d 31 2e 38 | (C,.threshinf=0.2,.threshsup=1.8 |
1f20 | 29 3a 0a 20 20 20 20 22 22 22 20 54 68 72 65 73 68 6f 6c 64 73 20 74 68 65 20 73 74 72 75 63 74 | ):.....""".Thresholds.the.struct |
1f40 | 75 72 65 20 6d 61 74 72 69 78 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 6f 6d 70 75 74 65 20 61 | ure.matrix.in.order.to.compute.a |
1f60 | 6e 20 61 64 6a 65 6e 63 79 20 6d 61 74 72 69 78 2e 0a 20 20 20 20 41 6c 6c 20 76 61 6c 75 65 73 | n.adjency.matrix......All.values |
1f80 | 20 62 65 74 77 65 65 6e 20 74 68 72 65 73 68 69 6e 66 20 61 6e 64 20 74 68 72 65 73 68 73 75 70 | .between.threshinf.and.threshsup |
1fa0 | 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 63 6f 6e | .are.considered.representing.con |
1fc0 | 6e 65 63 74 65 64 20 6e 6f 64 65 73 20 61 6e 64 20 73 65 74 20 74 6f 20 31 2e 20 45 6c 73 65 20 | nected.nodes.and.set.to.1..Else. |
1fe0 | 61 72 65 20 73 65 74 20 74 6f 20 30 0a 20 20 20 20 50 61 72 61 6d 65 74 65 72 73 0a 20 20 20 20 | are.set.to.0.....Parameters..... |
2000 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 20 20 43 20 3a 20 6e 64 61 72 72 61 79 2c 20 73 68 61 70 | ----------.....C.:.ndarray,.shap |
2020 | 65 20 28 6e 5f 6e 6f 64 65 73 2c 6e 5f 6e 6f 64 65 73 29 0a 20 20 20 20 20 20 20 20 54 68 65 20 | e.(n_nodes,n_nodes).........The. |
2040 | 73 74 72 75 63 74 75 72 65 20 6d 61 74 72 69 78 20 74 6f 20 74 68 72 65 73 68 6f 6c 64 0a 20 20 | structure.matrix.to.threshold... |
2060 | 20 20 74 68 72 65 73 68 69 6e 66 20 3a 20 66 6c 6f 61 74 0a 20 20 20 20 20 20 20 20 54 68 65 20 | ..threshinf.:.float.........The. |
2080 | 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65 20 6f 66 20 64 69 73 74 61 6e 63 65 20 66 72 6f 6d 20 77 | minimum.value.of.distance.from.w |
20a0 | 68 69 63 68 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20 73 65 74 20 74 6f 20 31 0a 20 | hich.the.new.value.is.set.to.1.. |
20c0 | 20 20 20 74 68 72 65 73 68 73 75 70 20 3a 20 66 6c 6f 61 74 0a 20 20 20 20 20 20 20 20 54 68 65 | ...threshsup.:.float.........The |
20e0 | 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 6f 66 20 64 69 73 74 61 6e 63 65 20 66 72 6f 6d 20 | .maximum.value.of.distance.from. |
2100 | 77 68 69 63 68 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20 73 65 74 20 74 6f 20 31 0a | which.the.new.value.is.set.to.1. |
2120 | 20 20 20 20 52 65 74 75 72 6e 73 0a 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 0a 20 20 20 20 43 20 3a 20 | ....Returns.....-------.....C.:. |
2140 | 6e 64 61 72 72 61 79 2c 20 73 68 61 70 65 20 28 6e 5f 6e 6f 64 65 73 2c 6e 5f 6e 6f 64 65 73 29 | ndarray,.shape.(n_nodes,n_nodes) |
2160 | 0a 20 20 20 20 20 20 20 20 54 68 65 20 74 68 72 65 73 68 6f 6c 64 20 6d 61 74 72 69 78 2e 20 45 | .........The.threshold.matrix..E |
2180 | 61 63 68 20 65 6c 65 6d 65 6e 74 20 69 73 20 69 6e 20 7b 30 2c 31 7d 0a 20 20 20 20 22 22 22 0a | ach.element.is.in.{0,1}.....""". |
21a0 | 20 20 20 20 48 20 3d 20 6e 70 2e 7a 65 72 6f 73 5f 6c 69 6b 65 28 43 29 0a 20 20 20 20 6e 70 2e | ....H.=.np.zeros_like(C).....np. |
21c0 | 66 69 6c 6c 5f 64 69 61 67 6f 6e 61 6c 28 48 2c 20 6e 70 2e 64 69 61 67 6f 6e 61 6c 28 43 29 29 | fill_diagonal(H,.np.diagonal(C)) |
21e0 | 0a 20 20 20 20 43 20 3d 20 43 20 2d 20 48 0a 20 20 20 20 43 20 3d 20 6e 70 2e 6d 69 6e 69 6d 75 | .....C.=.C.-.H.....C.=.np.minimu |
2200 | 6d 28 6e 70 2e 6d 61 78 69 6d 75 6d 28 43 2c 20 74 68 72 65 73 68 69 6e 66 29 2c 20 74 68 72 65 | m(np.maximum(C,.threshinf),.thre |
2220 | 73 68 73 75 70 29 0a 20 20 20 20 43 5b 43 20 3d 3d 20 74 68 72 65 73 68 73 75 70 5d 20 3d 20 30 | shsup).....C[C.==.threshsup].=.0 |
2240 | 0a 20 20 20 20 43 5b 43 20 21 3d 20 30 5d 20 3d 20 31 0a 0a 20 20 20 20 72 65 74 75 72 6e 20 43 | .....C[C.!=.0].=.1......return.C |
2260 | 0a 0a 0a 64 65 66 20 62 75 69 6c 64 5f 6e 6f 69 73 79 5f 63 69 72 63 75 6c 61 72 5f 67 72 61 70 | ...def.build_noisy_circular_grap |
2280 | 68 28 4e 3d 32 30 2c 20 6d 75 3d 30 2c 20 73 69 67 6d 61 3d 30 2e 33 2c 20 77 69 74 68 5f 6e 6f | h(N=20,.mu=0,.sigma=0.3,.with_no |
22a0 | 69 73 65 3d 46 61 6c 73 65 2c 20 73 74 72 75 63 74 75 72 65 5f 6e 6f 69 73 65 3d 46 61 6c 73 65 | ise=False,.structure_noise=False |
22c0 | 2c 20 70 3d 4e 6f 6e 65 29 3a 0a 20 20 20 20 22 22 22 20 43 72 65 61 74 65 20 61 20 6e 6f 69 73 | ,.p=None):.....""".Create.a.nois |
22e0 | 79 20 63 69 72 63 75 6c 61 72 20 67 72 61 70 68 0a 20 20 20 20 22 22 22 0a 20 20 20 20 67 20 3d | y.circular.graph.....""".....g.= |
2300 | 20 6e 78 2e 47 72 61 70 68 28 29 0a 20 20 20 20 67 2e 61 64 64 5f 6e 6f 64 65 73 5f 66 72 6f 6d | .nx.Graph().....g.add_nodes_from |
2320 | 28 6c 69 73 74 28 72 61 6e 67 65 28 4e 29 29 29 0a 20 20 20 20 66 6f 72 20 69 20 69 6e 20 72 61 | (list(range(N))).....for.i.in.ra |
2340 | 6e 67 65 28 4e 29 3a 0a 20 20 20 20 20 20 20 20 6e 6f 69 73 65 20 3d 20 66 6c 6f 61 74 28 6e 70 | nge(N):.........noise.=.float(np |
2360 | 2e 72 61 6e 64 6f 6d 2e 6e 6f 72 6d 61 6c 28 6d 75 2c 20 73 69 67 6d 61 2c 20 31 29 29 0a 20 20 | .random.normal(mu,.sigma,.1))... |
2380 | 20 20 20 20 20 20 69 66 20 77 69 74 68 5f 6e 6f 69 73 65 3a 0a 20 20 20 20 20 20 20 20 20 20 20 | ......if.with_noise:............ |
23a0 | 20 67 2e 61 64 64 5f 6e 6f 64 65 28 69 2c 20 61 74 74 72 5f 6e 61 6d 65 3d 6d 61 74 68 2e 73 69 | .g.add_node(i,.attr_name=math.si |
23c0 | 6e 28 28 32 20 2a 20 69 20 2a 20 6d 61 74 68 2e 70 69 20 2f 20 4e 29 29 20 2b 20 6e 6f 69 73 65 | n((2.*.i.*.math.pi./.N)).+.noise |
23e0 | 29 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 67 2e 61 64 | ).........else:.............g.ad |
2400 | 64 5f 6e 6f 64 65 28 69 2c 20 61 74 74 72 5f 6e 61 6d 65 3d 6d 61 74 68 2e 73 69 6e 28 32 20 2a | d_node(i,.attr_name=math.sin(2.* |
2420 | 20 69 20 2a 20 6d 61 74 68 2e 70 69 20 2f 20 4e 29 29 0a 20 20 20 20 20 20 20 20 67 2e 61 64 64 | .i.*.math.pi./.N)).........g.add |
2440 | 5f 65 64 67 65 28 69 2c 20 69 20 2b 20 31 29 0a 20 20 20 20 20 20 20 20 69 66 20 73 74 72 75 63 | _edge(i,.i.+.1).........if.struc |
2460 | 74 75 72 65 5f 6e 6f 69 73 65 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 61 6e 64 6f 6d 69 6e | ture_noise:.............randomin |
2480 | 74 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 69 6e 74 28 30 2c 20 70 29 0a 20 20 20 20 | t.=.np.random.randint(0,.p)..... |
24a0 | 20 20 20 20 20 20 20 20 69 66 20 72 61 6e 64 6f 6d 69 6e 74 20 3d 3d 20 30 3a 0a 20 20 20 20 20 | ........if.randomint.==.0:...... |
24c0 | 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 20 3c 3d 20 4e 20 2d 20 33 3a 0a 20 20 20 20 20 20 | ...........if.i.<=.N.-.3:....... |
24e0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 2e 61 64 64 5f 65 64 67 65 28 69 2c 20 69 20 2b 20 | ..............g.add_edge(i,.i.+. |
2500 | 32 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 20 3d 3d 20 4e 20 2d 20 32 | 2).................if.i.==.N.-.2 |
2520 | 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 2e 61 64 64 5f 65 64 67 65 | :.....................g.add_edge |
2540 | 28 69 2c 20 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 20 3d 3d 20 4e | (i,.0).................if.i.==.N |
2560 | 20 2d 20 31 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 2e 61 64 64 5f | .-.1:.....................g.add_ |
2580 | 65 64 67 65 28 69 2c 20 31 29 0a 20 20 20 20 67 2e 61 64 64 5f 65 64 67 65 28 4e 2c 20 30 29 0a | edge(i,.1).....g.add_edge(N,.0). |
25a0 | 20 20 20 20 6e 6f 69 73 65 20 3d 20 66 6c 6f 61 74 28 6e 70 2e 72 61 6e 64 6f 6d 2e 6e 6f 72 6d | ....noise.=.float(np.random.norm |
25c0 | 61 6c 28 6d 75 2c 20 73 69 67 6d 61 2c 20 31 29 29 0a 20 20 20 20 69 66 20 77 69 74 68 5f 6e 6f | al(mu,.sigma,.1)).....if.with_no |
25e0 | 69 73 65 3a 0a 20 20 20 20 20 20 20 20 67 2e 61 64 64 5f 6e 6f 64 65 28 4e 2c 20 61 74 74 72 5f | ise:.........g.add_node(N,.attr_ |
2600 | 6e 61 6d 65 3d 6d 61 74 68 2e 73 69 6e 28 28 32 20 2a 20 4e 20 2a 20 6d 61 74 68 2e 70 69 20 2f | name=math.sin((2.*.N.*.math.pi./ |
2620 | 20 4e 29 29 20 2b 20 6e 6f 69 73 65 29 0a 20 20 20 20 65 6c 73 65 3a 0a 20 20 20 20 20 20 20 20 | .N)).+.noise).....else:......... |
2640 | 67 2e 61 64 64 5f 6e 6f 64 65 28 4e 2c 20 61 74 74 72 5f 6e 61 6d 65 3d 6d 61 74 68 2e 73 69 6e | g.add_node(N,.attr_name=math.sin |
2660 | 28 32 20 2a 20 4e 20 2a 20 6d 61 74 68 2e 70 69 20 2f 20 4e 29 29 0a 20 20 20 20 72 65 74 75 72 | (2.*.N.*.math.pi./.N)).....retur |
2680 | 6e 20 67 0a 0a 0a 64 65 66 20 67 72 61 70 68 5f 63 6f 6c 6f 72 73 28 6e 78 5f 67 72 61 70 68 2c | n.g...def.graph_colors(nx_graph, |
26a0 | 20 76 6d 69 6e 3d 30 2c 20 76 6d 61 78 3d 37 29 3a 0a 20 20 20 20 63 6e 6f 72 6d 20 3d 20 6d 63 | .vmin=0,.vmax=7):.....cnorm.=.mc |
26c0 | 6f 6c 2e 4e 6f 72 6d 61 6c 69 7a 65 28 76 6d 69 6e 3d 76 6d 69 6e 2c 20 76 6d 61 78 3d 76 6d 61 | ol.Normalize(vmin=vmin,.vmax=vma |
26e0 | 78 29 0a 20 20 20 20 63 70 69 63 6b 20 3d 20 63 6d 2e 53 63 61 6c 61 72 4d 61 70 70 61 62 6c 65 | x).....cpick.=.cm.ScalarMappable |
2700 | 28 6e 6f 72 6d 3d 63 6e 6f 72 6d 2c 20 63 6d 61 70 3d 27 76 69 72 69 64 69 73 27 29 0a 20 20 20 | (norm=cnorm,.cmap='viridis').... |
2720 | 20 63 70 69 63 6b 2e 73 65 74 5f 61 72 72 61 79 28 5b 5d 29 0a 20 20 20 20 76 61 6c 5f 6d 61 70 | .cpick.set_array([]).....val_map |
2740 | 20 3d 20 7b 7d 0a 20 20 20 20 66 6f 72 20 6b 2c 20 76 20 69 6e 20 6e 78 2e 67 65 74 5f 6e 6f 64 | .=.{}.....for.k,.v.in.nx.get_nod |
2760 | 65 5f 61 74 74 72 69 62 75 74 65 73 28 6e 78 5f 67 72 61 70 68 2c 20 27 61 74 74 72 5f 6e 61 6d | e_attributes(nx_graph,.'attr_nam |
2780 | 65 27 29 2e 69 74 65 6d 73 28 29 3a 0a 20 20 20 20 20 20 20 20 76 61 6c 5f 6d 61 70 5b 6b 5d 20 | e').items():.........val_map[k]. |
27a0 | 3d 20 63 70 69 63 6b 2e 74 6f 5f 72 67 62 61 28 76 29 0a 20 20 20 20 63 6f 6c 6f 72 73 20 3d 20 | =.cpick.to_rgba(v).....colors.=. |
27c0 | 5b 5d 0a 20 20 20 20 66 6f 72 20 6e 6f 64 65 20 69 6e 20 6e 78 5f 67 72 61 70 68 2e 6e 6f 64 65 | [].....for.node.in.nx_graph.node |
27e0 | 73 28 29 3a 0a 20 20 20 20 20 20 20 20 63 6f 6c 6f 72 73 2e 61 70 70 65 6e 64 28 76 61 6c 5f 6d | s():.........colors.append(val_m |
2800 | 61 70 5b 6e 6f 64 65 5d 29 0a 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6c 6f 72 73 0a 0a 23 23 23 | ap[node]).....return.colors..### |
2820 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
2840 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
2860 | 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d | ###########.#.Generate.data.#.-- |
2880 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 63 69 72 63 75 6c 61 72 20 64 61 74 61 73 65 | -----------..#%%.circular.datase |
28a0 | 74 0a 23 20 57 65 20 62 75 69 6c 64 20 61 20 64 61 74 61 73 65 74 20 6f 66 20 6e 6f 69 73 79 20 | t.#.We.build.a.dataset.of.noisy. |
28c0 | 63 69 72 63 75 6c 61 72 20 67 72 61 70 68 73 2e 0a 23 20 4e 6f 69 73 65 20 69 73 20 61 64 64 65 | circular.graphs..#.Noise.is.adde |
28e0 | 64 20 6f 6e 20 74 68 65 20 73 74 72 75 63 74 75 72 65 73 20 62 79 20 72 61 6e 64 6f 6d 20 63 6f | d.on.the.structures.by.random.co |
2900 | 6e 6e 65 63 74 69 6f 6e 73 20 61 6e 64 20 6f 6e 20 74 68 65 20 66 65 61 74 75 72 65 73 20 62 79 | nnections.and.on.the.features.by |
2920 | 20 67 61 75 73 73 69 61 6e 20 6e 6f 69 73 65 2e 0a 0a 0a 6e 70 2e 72 61 6e 64 6f 6d 2e 73 65 65 | .gaussian.noise....np.random.see |
2940 | 64 28 33 30 29 0a 58 30 20 3d 20 5b 5d 0a 66 6f 72 20 6b 20 69 6e 20 72 61 6e 67 65 28 39 29 3a | d(30).X0.=.[].for.k.in.range(9): |
2960 | 0a 20 20 20 20 58 30 2e 61 70 70 65 6e 64 28 62 75 69 6c 64 5f 6e 6f 69 73 79 5f 63 69 72 63 75 | .....X0.append(build_noisy_circu |
2980 | 6c 61 72 5f 67 72 61 70 68 28 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 69 6e 74 28 31 35 2c 20 | lar_graph(np.random.randint(15,. |
29a0 | 32 35 29 2c 20 77 69 74 68 5f 6e 6f 69 73 65 3d 54 72 75 65 2c 20 73 74 72 75 63 74 75 72 65 5f | 25),.with_noise=True,.structure_ |
29c0 | 6e 6f 69 73 65 3d 54 72 75 65 2c 20 70 3d 33 29 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 | noise=True,.p=3))..############# |
29e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
2a00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
2a20 | 23 0a 23 20 50 6c 6f 74 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 50 | #.#.Plot.data.#.---------..#%%.P |
2a40 | 6c 6f 74 20 67 72 61 70 68 73 0a 0a 70 6c 74 2e 66 69 67 75 72 65 28 66 69 67 73 69 7a 65 3d 28 | lot.graphs..plt.figure(figsize=( |
2a60 | 38 2c 20 31 30 29 29 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6c 65 6e 28 58 30 29 29 3a | 8,.10)).for.i.in.range(len(X0)): |
2a80 | 0a 20 20 20 20 70 6c 74 2e 73 75 62 70 6c 6f 74 28 33 2c 20 33 2c 20 69 20 2b 20 31 29 0a 20 20 | .....plt.subplot(3,.3,.i.+.1)... |
2aa0 | 20 20 67 20 3d 20 58 30 5b 69 5d 0a 20 20 20 20 70 6f 73 20 3d 20 6e 78 2e 6b 61 6d 61 64 61 5f | ..g.=.X0[i].....pos.=.nx.kamada_ |
2ac0 | 6b 61 77 61 69 5f 6c 61 79 6f 75 74 28 67 29 0a 20 20 20 20 6e 78 2e 64 72 61 77 28 67 2c 20 70 | kawai_layout(g).....nx.draw(g,.p |
2ae0 | 6f 73 3d 70 6f 73 2c 20 6e 6f 64 65 5f 63 6f 6c 6f 72 3d 67 72 61 70 68 5f 63 6f 6c 6f 72 73 28 | os=pos,.node_color=graph_colors( |
2b00 | 67 2c 20 76 6d 69 6e 3d 2d 31 2c 20 76 6d 61 78 3d 31 29 2c 20 77 69 74 68 5f 6c 61 62 65 6c 73 | g,.vmin=-1,.vmax=1),.with_labels |
2b20 | 3d 46 61 6c 73 65 2c 20 6e 6f 64 65 5f 73 69 7a 65 3d 31 30 30 29 0a 70 6c 74 2e 73 75 70 74 69 | =False,.node_size=100).plt.supti |
2b40 | 74 6c 65 28 27 44 61 74 61 73 65 74 20 6f 66 20 6e 6f 69 73 79 20 67 72 61 70 68 73 2e 20 43 6f | tle('Dataset.of.noisy.graphs..Co |
2b60 | 6c 6f 72 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 6c 61 62 65 6c 27 2c 20 66 6f 6e 74 73 69 | lor.indicates.the.label',.fontsi |
2b80 | 7a 65 3d 32 30 29 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 | ze=20).plt.show()..############# |
2ba0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
2bc0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
2be0 | 23 0a 23 20 42 61 72 79 63 65 6e 74 65 72 20 63 6f 6d 70 75 74 61 74 69 6f 6e 0a 23 20 2d 2d 2d | #.#.Barycenter.computation.#.--- |
2c00 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 57 65 20 63 6f 6d 70 | -------------------..#%%.We.comp |
2c20 | 75 74 65 20 74 68 65 20 62 61 72 79 63 65 6e 74 65 72 20 75 73 69 6e 67 20 46 47 57 2e 20 53 74 | ute.the.barycenter.using.FGW..St |
2c40 | 72 75 63 74 75 72 65 20 6d 61 74 72 69 63 65 73 20 61 72 65 20 63 6f 6d 70 75 74 65 64 20 75 73 | ructure.matrices.are.computed.us |
2c60 | 69 6e 67 20 74 68 65 20 73 68 6f 72 74 65 73 74 5f 70 61 74 68 20 64 69 73 74 61 6e 63 65 20 69 | ing.the.shortest_path.distance.i |
2c80 | 6e 20 74 68 65 20 67 72 61 70 68 0a 23 20 46 65 61 74 75 72 65 73 20 64 69 73 74 61 6e 63 65 73 | n.the.graph.#.Features.distances |
2ca0 | 20 61 72 65 20 74 68 65 20 65 75 63 6c 69 64 65 61 6e 20 64 69 73 74 61 6e 63 65 73 0a 43 73 20 | .are.the.euclidean.distances.Cs. |
2cc0 | 3d 20 5b 73 68 6f 72 74 65 73 74 5f 70 61 74 68 28 6e 78 2e 61 64 6a 61 63 65 6e 63 79 5f 6d 61 | =.[shortest_path(nx.adjacency_ma |
2ce0 | 74 72 69 78 28 78 29 29 20 66 6f 72 20 78 20 69 6e 20 58 30 5d 0a 70 73 20 3d 20 5b 6e 70 2e 6f | trix(x)).for.x.in.X0].ps.=.[np.o |
2d00 | 6e 65 73 28 6c 65 6e 28 78 2e 6e 6f 64 65 73 28 29 29 29 20 2f 20 6c 65 6e 28 78 2e 6e 6f 64 65 | nes(len(x.nodes()))./.len(x.node |
2d20 | 73 28 29 29 20 66 6f 72 20 78 20 69 6e 20 58 30 5d 0a 59 73 20 3d 20 5b 6e 70 2e 61 72 72 61 79 | s()).for.x.in.X0].Ys.=.[np.array |
2d40 | 28 5b 76 20 66 6f 72 20 28 6b 2c 20 76 29 20 69 6e 20 6e 78 2e 67 65 74 5f 6e 6f 64 65 5f 61 74 | ([v.for.(k,.v).in.nx.get_node_at |
2d60 | 74 72 69 62 75 74 65 73 28 78 2c 20 27 61 74 74 72 5f 6e 61 6d 65 27 29 2e 69 74 65 6d 73 28 29 | tributes(x,.'attr_name').items() |
2d80 | 5d 29 2e 72 65 73 68 61 70 65 28 2d 31 2c 20 31 29 20 66 6f 72 20 78 20 69 6e 20 58 30 5d 0a 6c | ]).reshape(-1,.1).for.x.in.X0].l |
2da0 | 61 6d 62 64 61 73 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 6e 70 2e 6f 6e 65 73 28 6c 65 6e 28 59 | ambdas.=.np.array([np.ones(len(Y |
2dc0 | 73 29 29 20 2f 20 6c 65 6e 28 59 73 29 5d 29 2e 72 61 76 65 6c 28 29 0a 73 69 7a 65 62 61 72 79 | s))./.len(Ys)]).ravel().sizebary |
2de0 | 20 3d 20 31 35 20 20 23 20 77 65 20 63 68 6f 6f 73 65 20 61 20 62 61 72 79 63 65 6e 74 65 72 20 | .=.15..#.we.choose.a.barycenter. |
2e00 | 77 69 74 68 20 31 35 20 6e 6f 64 65 73 0a 0a 41 2c 20 43 2c 20 6c 6f 67 20 3d 20 66 67 77 5f 62 | with.15.nodes..A,.C,.log.=.fgw_b |
2e20 | 61 72 79 63 65 6e 74 65 72 73 28 73 69 7a 65 62 61 72 79 2c 20 59 73 2c 20 43 73 2c 20 70 73 2c | arycenters(sizebary,.Ys,.Cs,.ps, |
2e40 | 20 6c 61 6d 62 64 61 73 2c 20 61 6c 70 68 61 3d 30 2e 39 35 2c 20 6c 6f 67 3d 54 72 75 65 29 0a | .lambdas,.alpha=0.95,.log=True). |
2e60 | 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | .############################### |
2e80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
2ea0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 42 61 72 79 63 65 6e 74 65 | ###############.#.Plot.Barycente |
2ec0 | 72 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 | r.#.-------------------------..# |
2ee0 | 25 25 20 43 72 65 61 74 65 20 74 68 65 20 62 61 72 79 63 65 6e 74 65 72 0a 62 61 72 79 20 3d 20 | %%.Create.the.barycenter.bary.=. |
2f00 | 6e 78 2e 66 72 6f 6d 5f 6e 75 6d 70 79 5f 6d 61 74 72 69 78 28 73 70 5f 74 6f 5f 61 64 6a 65 6e | nx.from_numpy_matrix(sp_to_adjen |
2f20 | 63 79 28 43 2c 20 74 68 72 65 73 68 69 6e 66 3d 30 2c 20 74 68 72 65 73 68 73 75 70 3d 66 69 6e | cy(C,.threshinf=0,.threshsup=fin |
2f40 | 64 5f 74 68 72 65 73 68 28 43 2c 20 73 75 70 3d 31 30 30 2c 20 73 74 65 70 3d 31 30 30 29 5b 30 | d_thresh(C,.sup=100,.step=100)[0 |
2f60 | 5d 29 29 0a 66 6f 72 20 69 2c 20 76 20 69 6e 20 65 6e 75 6d 65 72 61 74 65 28 41 2e 72 61 76 65 | ])).for.i,.v.in.enumerate(A.rave |
2f80 | 6c 28 29 29 3a 0a 20 20 20 20 62 61 72 79 2e 61 64 64 5f 6e 6f 64 65 28 69 2c 20 61 74 74 72 5f | l()):.....bary.add_node(i,.attr_ |
2fa0 | 6e 61 6d 65 3d 76 29 0a 0a 23 25 25 0a 70 6f 73 20 3d 20 6e 78 2e 6b 61 6d 61 64 61 5f 6b 61 77 | name=v)..#%%.pos.=.nx.kamada_kaw |
2fc0 | 61 69 5f 6c 61 79 6f 75 74 28 62 61 72 79 29 0a 6e 78 2e 64 72 61 77 28 62 61 72 79 2c 20 70 6f | ai_layout(bary).nx.draw(bary,.po |
2fe0 | 73 3d 70 6f 73 2c 20 6e 6f 64 65 5f 63 6f 6c 6f 72 3d 67 72 61 70 68 5f 63 6f 6c 6f 72 73 28 62 | s=pos,.node_color=graph_colors(b |
3000 | 61 72 79 2c 20 76 6d 69 6e 3d 2d 31 2c 20 76 6d 61 78 3d 31 29 2c 20 77 69 74 68 5f 6c 61 62 65 | ary,.vmin=-1,.vmax=1),.with_labe |
3020 | 6c 73 3d 46 61 6c 73 65 29 0a 70 6c 74 2e 73 75 70 74 69 74 6c 65 28 27 42 61 72 79 63 65 6e 74 | ls=False).plt.suptitle('Barycent |
3040 | 65 72 27 2c 20 66 6f 6e 74 73 69 7a 65 3d 32 30 29 0a 70 6c 74 2e 73 68 6f 77 28 29 0a 50 4b 03 | er',.fontsize=20).plt.show().PK. |
3060 | 04 14 00 00 00 00 00 7c 68 3a 4f f2 7c 7e 9e 5c 0e 00 00 5c 0e 00 00 15 00 00 00 70 6c 6f 74 5f | .......|h:O.|~.\...\.......plot_ |
3080 | 62 61 72 79 63 65 6e 74 65 72 5f 31 44 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 | barycenter_1D.py#.-*-.coding:.ut |
30a0 | 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.-*-.""".==================== |
30c0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 31 44 20 57 61 73 73 65 72 73 74 65 69 6e 20 62 61 72 79 63 65 | ==========.1D.Wasserstein.baryce |
30e0 | 6e 74 65 72 20 64 65 6d 6f 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | nter.demo.====================== |
3100 | 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 6c 6c 75 73 74 72 61 74 | ========..This.example.illustrat |
3120 | 65 73 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66 20 72 65 67 75 6c 61 72 69 7a 65 | es.the.computation.of.regularize |
3140 | 64 20 57 61 73 73 65 72 73 79 65 69 6e 20 42 61 72 79 63 65 6e 74 65 72 0a 61 73 20 70 72 6f 70 | d.Wassersyein.Barycenter.as.prop |
3160 | 6f 73 65 64 20 69 6e 20 5b 33 5d 2e 0a 0a 0a 5b 33 5d 20 42 65 6e 61 6d 6f 75 2c 20 4a 2e 20 44 | osed.in.[3]....[3].Benamou,.J..D |
3180 | 2e 2c 20 43 61 72 6c 69 65 72 2c 20 47 2e 2c 20 43 75 74 75 72 69 2c 20 4d 2e 2c 20 4e 65 6e 6e | .,.Carlier,.G.,.Cuturi,.M.,.Nenn |
31a0 | 61 2c 20 4c 2e 2c 20 26 20 50 65 79 72 c3 a9 2c 20 47 2e 20 28 32 30 31 35 29 2e 0a 49 74 65 72 | a,.L.,.&.Peyr..,.G..(2015)..Iter |
31c0 | 61 74 69 76 65 20 42 72 65 67 6d 61 6e 20 70 72 6f 6a 65 63 74 69 6f 6e 73 20 66 6f 72 20 72 65 | ative.Bregman.projections.for.re |
31e0 | 67 75 6c 61 72 69 7a 65 64 20 74 72 61 6e 73 70 6f 72 74 61 74 69 6f 6e 20 70 72 6f 62 6c 65 6d | gularized.transportation.problem |
3200 | 73 0a 53 49 41 4d 20 4a 6f 75 72 6e 61 6c 20 6f 6e 20 53 63 69 65 6e 74 69 66 69 63 20 43 6f 6d | s.SIAM.Journal.on.Scientific.Com |
3220 | 70 75 74 69 6e 67 2c 20 33 37 28 32 29 2c 20 41 31 31 31 31 2d 41 31 31 33 38 2e 0a 0a 22 22 22 | puting,.37(2),.A1111-A1138...""" |
3240 | 0a 0a 23 20 41 75 74 68 6f 72 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 | ..#.Author:.Remi.Flamary.<remi.f |
3260 | 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 | lamary@unice.fr>.#.#.License:.MI |
3280 | 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d | T.License..import.numpy.as.np.im |
32a0 | 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f | port.matplotlib.pylab.as.pl.impo |
32c0 | 72 74 20 6f 74 0a 23 20 6e 65 63 65 73 73 61 72 79 20 66 6f 72 20 33 64 20 70 6c 6f 74 20 65 76 | rt.ot.#.necessary.for.3d.plot.ev |
32e0 | 65 6e 20 69 66 20 6e 6f 74 20 75 73 65 64 0a 66 72 6f 6d 20 6d 70 6c 5f 74 6f 6f 6c 6b 69 74 73 | en.if.not.used.from.mpl_toolkits |
3300 | 2e 6d 70 6c 6f 74 33 64 20 69 6d 70 6f 72 74 20 41 78 65 73 33 44 20 20 23 20 6e 6f 71 61 0a 66 | .mplot3d.import.Axes3D..#.noqa.f |
3320 | 72 6f 6d 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 63 6f 6c 6c 65 63 74 69 6f 6e 73 20 69 6d 70 6f 72 | rom.matplotlib.collections.impor |
3340 | 74 20 50 6f 6c 79 43 6f 6c 6c 65 63 74 69 6f 6e 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | t.PolyCollection..############## |
3360 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
3380 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
33a0 | 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | .#.Generate.data.#.------------- |
33c0 | 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 6e 20 3d 20 31 30 30 20 20 23 20 6e 62 20 | ..#%%.parameters..n.=.100..#.nb. |
33e0 | 62 69 6e 73 0a 0a 23 20 62 69 6e 20 70 6f 73 69 74 69 6f 6e 73 0a 78 20 3d 20 6e 70 2e 61 72 61 | bins..#.bin.positions.x.=.np.ara |
3400 | 6e 67 65 28 6e 2c 20 64 74 79 70 65 3d 6e 70 2e 66 6c 6f 61 74 36 34 29 0a 0a 23 20 47 61 75 73 | nge(n,.dtype=np.float64)..#.Gaus |
3420 | 73 69 61 6e 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 61 31 20 3d 20 6f 74 2e 64 61 74 61 73 | sian.distributions.a1.=.ot.datas |
3440 | 65 74 73 2e 6d 61 6b 65 5f 31 44 5f 67 61 75 73 73 28 6e 2c 20 6d 3d 32 30 2c 20 73 3d 35 29 20 | ets.make_1D_gauss(n,.m=20,.s=5). |
3460 | 20 23 20 6d 3d 20 6d 65 61 6e 2c 20 73 3d 20 73 74 64 0a 61 32 20 3d 20 6f 74 2e 64 61 74 61 73 | .#.m=.mean,.s=.std.a2.=.ot.datas |
3480 | 65 74 73 2e 6d 61 6b 65 5f 31 44 5f 67 61 75 73 73 28 6e 2c 20 6d 3d 36 30 2c 20 73 3d 38 29 0a | ets.make_1D_gauss(n,.m=60,.s=8). |
34a0 | 0a 23 20 63 72 65 61 74 69 6e 67 20 6d 61 74 72 69 78 20 41 20 63 6f 6e 74 61 69 6e 69 6e 67 20 | .#.creating.matrix.A.containing. |
34c0 | 61 6c 6c 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 41 20 3d 20 6e 70 2e 76 73 74 61 63 6b 28 | all.distributions.A.=.np.vstack( |
34e0 | 28 61 31 2c 20 61 32 29 29 2e 54 0a 6e 5f 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 3d 20 41 2e | (a1,.a2)).T.n_distributions.=.A. |
3500 | 73 68 61 70 65 5b 31 5d 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 20 2b 20 6e 6f 72 6d 61 6c | shape[1]..#.loss.matrix.+.normal |
3520 | 69 7a 61 74 69 6f 6e 0a 4d 20 3d 20 6f 74 2e 75 74 69 6c 73 2e 64 69 73 74 30 28 6e 29 0a 4d 20 | ization.M.=.ot.utils.dist0(n).M. |
3540 | 2f 3d 20 4d 2e 6d 61 78 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | /=.M.max()..#################### |
3560 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
3580 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f | ##########################.#.Plo |
35a0 | 74 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 6c 6f 74 20 74 68 65 | t.data.#.---------..#%%.plot.the |
35c0 | 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 | .distributions..pl.figure(1,.fig |
35e0 | 73 69 7a 65 3d 28 36 2e 34 2c 20 33 29 29 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6e 5f | size=(6.4,.3)).for.i.in.range(n_ |
3600 | 64 69 73 74 72 69 62 75 74 69 6f 6e 73 29 3a 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 2c 20 41 | distributions):.....pl.plot(x,.A |
3620 | 5b 3a 2c 20 69 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 44 69 73 74 72 69 62 75 74 69 6f 6e 73 27 | [:,.i]).pl.title('Distributions' |
3640 | 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 | ).pl.tight_layout()..########### |
3660 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
3680 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
36a0 | 23 23 23 0a 23 20 42 61 72 79 63 65 6e 74 65 72 20 63 6f 6d 70 75 74 61 74 69 6f 6e 0a 23 20 2d | ###.#.Barycenter.computation.#.- |
36c0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 62 61 72 79 63 | ---------------------..#%%.baryc |
36e0 | 65 6e 74 65 72 20 63 6f 6d 70 75 74 61 74 69 6f 6e 0a 0a 61 6c 70 68 61 20 3d 20 30 2e 32 20 20 | enter.computation..alpha.=.0.2.. |
3700 | 23 20 30 3c 3d 61 6c 70 68 61 3c 3d 31 0a 77 65 69 67 68 74 73 20 3d 20 6e 70 2e 61 72 72 61 79 | #.0<=alpha<=1.weights.=.np.array |
3720 | 28 5b 31 20 2d 20 61 6c 70 68 61 2c 20 61 6c 70 68 61 5d 29 0a 0a 23 20 6c 32 62 61 72 79 0a 62 | ([1.-.alpha,.alpha])..#.l2bary.b |
3740 | 61 72 79 5f 6c 32 20 3d 20 41 2e 64 6f 74 28 77 65 69 67 68 74 73 29 0a 0a 23 20 77 61 73 73 65 | ary_l2.=.A.dot(weights)..#.wasse |
3760 | 72 73 74 65 69 6e 0a 72 65 67 20 3d 20 31 65 2d 33 0a 62 61 72 79 5f 77 61 73 73 20 3d 20 6f 74 | rstein.reg.=.1e-3.bary_wass.=.ot |
3780 | 2e 62 72 65 67 6d 61 6e 2e 62 61 72 79 63 65 6e 74 65 72 28 41 2c 20 4d 2c 20 72 65 67 2c 20 77 | .bregman.barycenter(A,.M,.reg,.w |
37a0 | 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 29 0a 70 | eights)..pl.figure(2).pl.clf().p |
37c0 | 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 31 2c 20 31 29 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 | l.subplot(2,.1,.1).for.i.in.rang |
37e0 | 65 28 6e 5f 64 69 73 74 72 69 62 75 74 69 6f 6e 73 29 3a 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 28 | e(n_distributions):.....pl.plot( |
3800 | 78 2c 20 41 5b 3a 2c 20 69 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 44 69 73 74 72 69 62 75 74 69 | x,.A[:,.i]).pl.title('Distributi |
3820 | 6f 6e 73 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 31 2c 20 32 29 0a 70 6c 2e 70 6c | ons')..pl.subplot(2,.1,.2).pl.pl |
3840 | 6f 74 28 78 2c 20 62 61 72 79 5f 6c 32 2c 20 27 72 27 2c 20 6c 61 62 65 6c 3d 27 6c 32 27 29 0a | ot(x,.bary_l2,.'r',.label='l2'). |
3860 | 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 61 72 79 5f 77 61 73 73 2c 20 27 67 27 2c 20 6c 61 62 65 6c | pl.plot(x,.bary_wass,.'g',.label |
3880 | 3d 27 57 61 73 73 65 72 73 74 65 69 6e 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 29 0a 70 6c 2e 74 | ='Wasserstein').pl.legend().pl.t |
38a0 | 69 74 6c 65 28 27 42 61 72 79 63 65 6e 74 65 72 73 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 | itle('Barycenters').pl.tight_lay |
38c0 | 6f 75 74 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | out()..######################### |
38e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
3900 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 42 61 72 79 63 65 6e 74 | #####################.#.Barycent |
3920 | 72 69 63 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | ric.interpolation.#.------------ |
3940 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 62 61 72 79 63 65 6e 74 65 72 20 69 6e | -------------..#%%.barycenter.in |
3960 | 74 65 72 70 6f 6c 61 74 69 6f 6e 0a 0a 6e 5f 61 6c 70 68 61 20 3d 20 31 31 0a 61 6c 70 68 61 5f | terpolation..n_alpha.=.11.alpha_ |
3980 | 6c 69 73 74 20 3d 20 6e 70 2e 6c 69 6e 73 70 61 63 65 28 30 2c 20 31 2c 20 6e 5f 61 6c 70 68 61 | list.=.np.linspace(0,.1,.n_alpha |
39a0 | 29 0a 0a 0a 42 5f 6c 32 20 3d 20 6e 70 2e 7a 65 72 6f 73 28 28 6e 2c 20 6e 5f 61 6c 70 68 61 29 | )...B_l2.=.np.zeros((n,.n_alpha) |
39c0 | 29 0a 0a 42 5f 77 61 73 73 20 3d 20 6e 70 2e 63 6f 70 79 28 42 5f 6c 32 29 0a 0a 66 6f 72 20 69 | )..B_wass.=.np.copy(B_l2)..for.i |
39e0 | 20 69 6e 20 72 61 6e 67 65 28 30 2c 20 6e 5f 61 6c 70 68 61 29 3a 0a 20 20 20 20 61 6c 70 68 61 | .in.range(0,.n_alpha):.....alpha |
3a00 | 20 3d 20 61 6c 70 68 61 5f 6c 69 73 74 5b 69 5d 0a 20 20 20 20 77 65 69 67 68 74 73 20 3d 20 6e | .=.alpha_list[i].....weights.=.n |
3a20 | 70 2e 61 72 72 61 79 28 5b 31 20 2d 20 61 6c 70 68 61 2c 20 61 6c 70 68 61 5d 29 0a 20 20 20 20 | p.array([1.-.alpha,.alpha])..... |
3a40 | 42 5f 6c 32 5b 3a 2c 20 69 5d 20 3d 20 41 2e 64 6f 74 28 77 65 69 67 68 74 73 29 0a 20 20 20 20 | B_l2[:,.i].=.A.dot(weights)..... |
3a60 | 42 5f 77 61 73 73 5b 3a 2c 20 69 5d 20 3d 20 6f 74 2e 62 72 65 67 6d 61 6e 2e 62 61 72 79 63 65 | B_wass[:,.i].=.ot.bregman.baryce |
3a80 | 6e 74 65 72 28 41 2c 20 4d 2c 20 72 65 67 2c 20 77 65 69 67 68 74 73 29 0a 0a 23 25 25 20 70 6c | nter(A,.M,.reg,.weights)..#%%.pl |
3aa0 | 6f 74 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 0a 0a 70 6c 2e 66 69 67 75 72 65 28 33 29 0a 0a | ot.interpolation..pl.figure(3).. |
3ac0 | 63 6d 61 70 20 3d 20 70 6c 2e 63 6d 2e 67 65 74 5f 63 6d 61 70 28 27 76 69 72 69 64 69 73 27 29 | cmap.=.pl.cm.get_cmap('viridis') |
3ae0 | 0a 76 65 72 74 73 20 3d 20 5b 5d 0a 7a 73 20 3d 20 61 6c 70 68 61 5f 6c 69 73 74 0a 66 6f 72 20 | .verts.=.[].zs.=.alpha_list.for. |
3b00 | 69 2c 20 7a 20 69 6e 20 65 6e 75 6d 65 72 61 74 65 28 7a 73 29 3a 0a 20 20 20 20 79 73 20 3d 20 | i,.z.in.enumerate(zs):.....ys.=. |
3b20 | 42 5f 6c 32 5b 3a 2c 20 69 5d 0a 20 20 20 20 76 65 72 74 73 2e 61 70 70 65 6e 64 28 6c 69 73 74 | B_l2[:,.i].....verts.append(list |
3b40 | 28 7a 69 70 28 78 2c 20 79 73 29 29 29 0a 0a 61 78 20 3d 20 70 6c 2e 67 63 66 28 29 2e 67 63 61 | (zip(x,.ys)))..ax.=.pl.gcf().gca |
3b60 | 28 70 72 6f 6a 65 63 74 69 6f 6e 3d 27 33 64 27 29 0a 0a 70 6f 6c 79 20 3d 20 50 6f 6c 79 43 6f | (projection='3d')..poly.=.PolyCo |
3b80 | 6c 6c 65 63 74 69 6f 6e 28 76 65 72 74 73 2c 20 66 61 63 65 63 6f 6c 6f 72 73 3d 5b 63 6d 61 70 | llection(verts,.facecolors=[cmap |
3ba0 | 28 61 29 20 66 6f 72 20 61 20 69 6e 20 61 6c 70 68 61 5f 6c 69 73 74 5d 29 0a 70 6f 6c 79 2e 73 | (a).for.a.in.alpha_list]).poly.s |
3bc0 | 65 74 5f 61 6c 70 68 61 28 30 2e 37 29 0a 61 78 2e 61 64 64 5f 63 6f 6c 6c 65 63 74 69 6f 6e 33 | et_alpha(0.7).ax.add_collection3 |
3be0 | 64 28 70 6f 6c 79 2c 20 7a 73 3d 7a 73 2c 20 7a 64 69 72 3d 27 79 27 29 0a 61 78 2e 73 65 74 5f | d(poly,.zs=zs,.zdir='y').ax.set_ |
3c00 | 78 6c 61 62 65 6c 28 27 78 27 29 0a 61 78 2e 73 65 74 5f 78 6c 69 6d 33 64 28 30 2c 20 6e 29 0a | xlabel('x').ax.set_xlim3d(0,.n). |
3c20 | 61 78 2e 73 65 74 5f 79 6c 61 62 65 6c 28 27 24 5c 5c 61 6c 70 68 61 24 27 29 0a 61 78 2e 73 65 | ax.set_ylabel('$\\alpha$').ax.se |
3c40 | 74 5f 79 6c 69 6d 33 64 28 30 2c 20 31 29 0a 61 78 2e 73 65 74 5f 7a 6c 61 62 65 6c 28 27 27 29 | t_ylim3d(0,.1).ax.set_zlabel('') |
3c60 | 0a 61 78 2e 73 65 74 5f 7a 6c 69 6d 33 64 28 30 2c 20 42 5f 6c 32 2e 6d 61 78 28 29 20 2a 20 31 | .ax.set_zlim3d(0,.B_l2.max().*.1 |
3c80 | 2e 30 31 29 0a 70 6c 2e 74 69 74 6c 65 28 27 42 61 72 79 63 65 6e 74 65 72 20 69 6e 74 65 72 70 | .01).pl.title('Barycenter.interp |
3ca0 | 6f 6c 61 74 69 6f 6e 20 77 69 74 68 20 6c 32 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 | olation.with.l2').pl.tight_layou |
3cc0 | 74 28 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 34 29 0a 63 6d 61 70 20 3d 20 70 6c 2e 63 6d 2e 67 | t()..pl.figure(4).cmap.=.pl.cm.g |
3ce0 | 65 74 5f 63 6d 61 70 28 27 76 69 72 69 64 69 73 27 29 0a 76 65 72 74 73 20 3d 20 5b 5d 0a 7a 73 | et_cmap('viridis').verts.=.[].zs |
3d00 | 20 3d 20 61 6c 70 68 61 5f 6c 69 73 74 0a 66 6f 72 20 69 2c 20 7a 20 69 6e 20 65 6e 75 6d 65 72 | .=.alpha_list.for.i,.z.in.enumer |
3d20 | 61 74 65 28 7a 73 29 3a 0a 20 20 20 20 79 73 20 3d 20 42 5f 77 61 73 73 5b 3a 2c 20 69 5d 0a 20 | ate(zs):.....ys.=.B_wass[:,.i].. |
3d40 | 20 20 20 76 65 72 74 73 2e 61 70 70 65 6e 64 28 6c 69 73 74 28 7a 69 70 28 78 2c 20 79 73 29 29 | ...verts.append(list(zip(x,.ys)) |
3d60 | 29 0a 0a 61 78 20 3d 20 70 6c 2e 67 63 66 28 29 2e 67 63 61 28 70 72 6f 6a 65 63 74 69 6f 6e 3d | )..ax.=.pl.gcf().gca(projection= |
3d80 | 27 33 64 27 29 0a 0a 70 6f 6c 79 20 3d 20 50 6f 6c 79 43 6f 6c 6c 65 63 74 69 6f 6e 28 76 65 72 | '3d')..poly.=.PolyCollection(ver |
3da0 | 74 73 2c 20 66 61 63 65 63 6f 6c 6f 72 73 3d 5b 63 6d 61 70 28 61 29 20 66 6f 72 20 61 20 69 6e | ts,.facecolors=[cmap(a).for.a.in |
3dc0 | 20 61 6c 70 68 61 5f 6c 69 73 74 5d 29 0a 70 6f 6c 79 2e 73 65 74 5f 61 6c 70 68 61 28 30 2e 37 | .alpha_list]).poly.set_alpha(0.7 |
3de0 | 29 0a 61 78 2e 61 64 64 5f 63 6f 6c 6c 65 63 74 69 6f 6e 33 64 28 70 6f 6c 79 2c 20 7a 73 3d 7a | ).ax.add_collection3d(poly,.zs=z |
3e00 | 73 2c 20 7a 64 69 72 3d 27 79 27 29 0a 61 78 2e 73 65 74 5f 78 6c 61 62 65 6c 28 27 78 27 29 0a | s,.zdir='y').ax.set_xlabel('x'). |
3e20 | 61 78 2e 73 65 74 5f 78 6c 69 6d 33 64 28 30 2c 20 6e 29 0a 61 78 2e 73 65 74 5f 79 6c 61 62 65 | ax.set_xlim3d(0,.n).ax.set_ylabe |
3e40 | 6c 28 27 24 5c 5c 61 6c 70 68 61 24 27 29 0a 61 78 2e 73 65 74 5f 79 6c 69 6d 33 64 28 30 2c 20 | l('$\\alpha$').ax.set_ylim3d(0,. |
3e60 | 31 29 0a 61 78 2e 73 65 74 5f 7a 6c 61 62 65 6c 28 27 27 29 0a 61 78 2e 73 65 74 5f 7a 6c 69 6d | 1).ax.set_zlabel('').ax.set_zlim |
3e80 | 33 64 28 30 2c 20 42 5f 6c 32 2e 6d 61 78 28 29 20 2a 20 31 2e 30 31 29 0a 70 6c 2e 74 69 74 6c | 3d(0,.B_l2.max().*.1.01).pl.titl |
3ea0 | 65 28 27 42 61 72 79 63 65 6e 74 65 72 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 20 77 69 74 68 | e('Barycenter.interpolation.with |
3ec0 | 20 57 61 73 73 65 72 73 74 65 69 6e 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 | .Wasserstein').pl.tight_layout() |
3ee0 | 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 7c 68 3a 4f a7 6b f0 c3 bf 0b | ..pl.show().PK........|h:O.k.... |
3f00 | 00 00 bf 0b 00 00 15 00 00 00 70 6c 6f 74 5f 4f 54 5f 32 44 5f 73 61 6d 70 6c 65 73 2e 70 79 23 | ..........plot_OT_2D_samples.py# |
3f20 | 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d | .-*-.coding:.utf-8.-*-.""".===== |
3f40 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
3f60 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 32 44 20 4f 70 74 69 6d 61 6c 20 74 72 61 6e 73 | ===============.2D.Optimal.trans |
3f80 | 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 69 62 75 74 | port.between.empirical.distribut |
3fa0 | 69 6f 6e 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ions.=========================== |
3fc0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 49 6c 6c 75 73 | =========================..Illus |
3fe0 | 74 72 61 74 69 6f 6e 20 6f 66 20 32 44 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 20 | tration.of.2D.optimal.transport. |
4000 | 62 65 74 77 65 65 6e 20 64 69 73 63 72 69 62 75 74 69 6f 6e 73 20 74 68 61 74 20 61 72 65 20 77 | between.discributions.that.are.w |
4020 | 65 69 67 68 74 65 64 0a 73 75 6d 20 6f 66 20 64 69 72 61 63 73 2e 20 54 68 65 20 4f 54 20 6d 61 | eighted.sum.of.diracs..The.OT.ma |
4040 | 74 72 69 78 20 69 73 20 70 6c 6f 74 74 65 64 20 77 69 74 68 20 74 68 65 20 73 61 6d 70 6c 65 73 | trix.is.plotted.with.the.samples |
4060 | 2e 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c | ..."""..#.Author:.Remi.Flamary.< |
4080 | 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 20 20 20 20 20 20 20 20 | remi.flamary@unice.fr>.#........ |
40a0 | 20 4b 69 6c 69 61 6e 20 46 61 74 72 61 73 20 3c 6b 69 6c 69 61 6e 2e 66 61 74 72 61 73 40 69 72 | .Kilian.Fatras.<kilian.fatras@ir |
40c0 | 69 73 61 2e 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 | isa.fr>.#.#.License:.MIT.License |
40e0 | 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 | ..import.numpy.as.np.import.matp |
4100 | 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 69 6d 70 | lotlib.pylab.as.pl.import.ot.imp |
4120 | 6f 72 74 20 6f 74 2e 70 6c 6f 74 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ort.ot.plot..################### |
4140 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
4160 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 47 65 | ###########################.#.Ge |
4180 | 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 | nerate.data.#.-------------..#%% |
41a0 | 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. |
41c0 | 0a 6e 20 3d 20 35 30 20 20 23 20 6e 62 20 73 61 6d 70 6c 65 73 0a 0a 6d 75 5f 73 20 3d 20 6e 70 | .n.=.50..#.nb.samples..mu_s.=.np |
41e0 | 2e 61 72 72 61 79 28 5b 30 2c 20 30 5d 29 0a 63 6f 76 5f 73 20 3d 20 6e 70 2e 61 72 72 61 79 28 | .array([0,.0]).cov_s.=.np.array( |
4200 | 5b 5b 31 2c 20 30 5d 2c 20 5b 30 2c 20 31 5d 5d 29 0a 0a 6d 75 5f 74 20 3d 20 6e 70 2e 61 72 72 | [[1,.0],.[0,.1]])..mu_t.=.np.arr |
4220 | 61 79 28 5b 34 2c 20 34 5d 29 0a 63 6f 76 5f 74 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 5b 31 2c | ay([4,.4]).cov_t.=.np.array([[1, |
4240 | 20 2d 2e 38 5d 2c 20 5b 2d 2e 38 2c 20 31 5d 5d 29 0a 0a 78 73 20 3d 20 6f 74 2e 64 61 74 61 73 | .-.8],.[-.8,.1]])..xs.=.ot.datas |
4260 | 65 74 73 2e 6d 61 6b 65 5f 32 44 5f 73 61 6d 70 6c 65 73 5f 67 61 75 73 73 28 6e 2c 20 6d 75 5f | ets.make_2D_samples_gauss(n,.mu_ |
4280 | 73 2c 20 63 6f 76 5f 73 29 0a 78 74 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f | s,.cov_s).xt.=.ot.datasets.make_ |
42a0 | 32 44 5f 73 61 6d 70 6c 65 73 5f 67 61 75 73 73 28 6e 2c 20 6d 75 5f 74 2c 20 63 6f 76 5f 74 29 | 2D_samples_gauss(n,.mu_t,.cov_t) |
42c0 | 0a 0a 61 2c 20 62 20 3d 20 6e 70 2e 6f 6e 65 73 28 28 6e 2c 29 29 20 2f 20 6e 2c 20 6e 70 2e 6f | ..a,.b.=.np.ones((n,))./.n,.np.o |
42e0 | 6e 65 73 28 28 6e 2c 29 29 20 2f 20 6e 20 20 23 20 75 6e 69 66 6f 72 6d 20 64 69 73 74 72 69 62 | nes((n,))./.n..#.uniform.distrib |
4300 | 75 74 69 6f 6e 20 6f 6e 20 73 61 6d 70 6c 65 73 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a | ution.on.samples..#.loss.matrix. |
4320 | 4d 20 3d 20 6f 74 2e 64 69 73 74 28 78 73 2c 20 78 74 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 29 | M.=.ot.dist(xs,.xt).M./=.M.max() |
4340 | 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ..############################## |
4360 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
4380 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 64 61 74 61 0a 23 20 2d | ################.#.Plot.data.#.- |
43a0 | 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 6c 6f 74 20 73 61 6d 70 6c 65 73 0a 0a 70 6c 2e 66 | --------..#%%.plot.samples..pl.f |
43c0 | 69 67 75 72 65 28 31 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c | igure(1).pl.plot(xs[:,.0],.xs[:, |
43e0 | 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 | .1],.'+b',.label='Source.samples |
4400 | 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 | ').pl.plot(xt[:,.0],.xt[:,.1],.' |
4420 | 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e | xr',.label='Target.samples').pl. |
4440 | 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 20 61 | legend(loc=0).pl.title('Source.a |
4460 | 6e 64 20 74 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 70 6c 2e 66 69 | nd.target.distributions')..pl.fi |
4480 | 67 75 72 65 28 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 4d 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 | gure(2).pl.imshow(M,.interpolati |
44a0 | 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 43 6f 73 74 20 6d 61 74 | on='nearest').pl.title('Cost.mat |
44c0 | 72 69 78 20 4d 27 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | rix.M')..####################### |
44e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
4500 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 43 6f 6d 70 75 74 | #######################.#.Comput |
4520 | 65 20 45 4d 44 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 45 4d 44 0a 0a 47 30 | e.EMD.#.-----------..#%%.EMD..G0 |
4540 | 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 33 29 | .=.ot.emd(a,.b,.M)..pl.figure(3) |
4560 | 0a 70 6c 2e 69 6d 73 68 6f 77 28 47 30 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 | .pl.imshow(G0,.interpolation='ne |
4580 | 61 72 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 6d 61 74 72 69 78 20 47 30 27 29 | arest').pl.title('OT.matrix.G0') |
45a0 | 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 32 44 5f 73 61 | ..pl.figure(4).ot.plot.plot2D_sa |
45c0 | 6d 70 6c 65 73 5f 6d 61 74 28 78 73 2c 20 78 74 2c 20 47 30 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c | mples_mat(xs,.xt,.G0,.c=[.5,..5, |
45e0 | 20 31 5d 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c | .1]).pl.plot(xs[:,.0],.xs[:,.1], |
4600 | 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 | .'+b',.label='Source.samples').p |
4620 | 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c | l.plot(xt[:,.0],.xt[:,.1],.'xr', |
4640 | 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 65 | .label='Target.samples').pl.lege |
4660 | 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 6d 61 74 72 69 78 20 77 69 | nd(loc=0).pl.title('OT.matrix.wi |
4680 | 74 68 20 73 61 6d 70 6c 65 73 27 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | th.samples')...################# |
46a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
46c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 | #############################.#. |
46e0 | 43 6f 6d 70 75 74 65 20 53 69 6e 6b 68 6f 72 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | Compute.Sinkhorn.#.------------- |
4700 | 2d 2d 2d 0a 0a 23 25 25 20 73 69 6e 6b 68 6f 72 6e 0a 0a 23 20 72 65 67 20 74 65 72 6d 0a 6c 61 | ---..#%%.sinkhorn..#.reg.term.la |
4720 | 6d 62 64 20 3d 20 31 65 2d 33 0a 0a 47 73 20 3d 20 6f 74 2e 73 69 6e 6b 68 6f 72 6e 28 61 2c 20 | mbd.=.1e-3..Gs.=.ot.sinkhorn(a,. |
4740 | 62 2c 20 4d 2c 20 6c 61 6d 62 64 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 35 29 0a 70 6c 2e 69 6d | b,.M,.lambd)..pl.figure(5).pl.im |
4760 | 73 68 6f 77 28 47 73 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 | show(Gs,.interpolation='nearest' |
4780 | 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 6d 61 74 72 69 78 20 73 69 6e 6b 68 6f 72 6e 27 29 | ).pl.title('OT.matrix.sinkhorn') |
47a0 | 0a 0a 70 6c 2e 66 69 67 75 72 65 28 36 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 | ..pl.figure(6).ot.plot.plot2D_sa |
47c0 | 6d 70 6c 65 73 5f 6d 61 74 28 78 73 2c 20 78 74 2c 20 47 73 2c 20 63 6f 6c 6f 72 3d 5b 2e 35 2c | mples_mat(xs,.xt,.Gs,.color=[.5, |
47e0 | 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c | ..5,.1]).pl.plot(xs[:,.0],.xs[:, |
4800 | 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 | .1],.'+b',.label='Source.samples |
4820 | 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 | ').pl.plot(xt[:,.0],.xt[:,.1],.' |
4840 | 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e | xr',.label='Target.samples').pl. |
4860 | 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 6d 61 74 72 69 | legend(loc=0).pl.title('OT.matri |
4880 | 78 20 53 69 6e 6b 68 6f 72 6e 20 77 69 74 68 20 73 61 6d 70 6c 65 73 27 29 0a 0a 70 6c 2e 73 68 | x.Sinkhorn.with.samples')..pl.sh |
48a0 | 6f 77 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ow()...######################### |
48c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
48e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 45 6d 70 72 69 72 69 63 | #####################.#.Empriric |
4900 | 61 6c 20 53 69 6e 6b 68 6f 72 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a | al.Sinkhorn.#.----------------.. |
4920 | 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 20 3d | #%%.sinkhorn..#.reg.term.lambd.= |
4940 | 20 31 65 2d 33 0a 0a 47 65 73 20 3d 20 6f 74 2e 62 72 65 67 6d 61 6e 2e 65 6d 70 69 72 69 63 61 | .1e-3..Ges.=.ot.bregman.empirica |
4960 | 6c 5f 73 69 6e 6b 68 6f 72 6e 28 78 73 2c 20 78 74 2c 20 6c 61 6d 62 64 29 0a 0a 70 6c 2e 66 69 | l_sinkhorn(xs,.xt,.lambd)..pl.fi |
4980 | 67 75 72 65 28 37 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 47 65 73 2c 20 69 6e 74 65 72 70 6f 6c 61 | gure(7).pl.imshow(Ges,.interpola |
49a0 | 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 6d 61 74 | tion='nearest').pl.title('OT.mat |
49c0 | 72 69 78 20 65 6d 70 69 72 69 63 61 6c 20 73 69 6e 6b 68 6f 72 6e 27 29 0a 0a 70 6c 2e 66 69 67 | rix.empirical.sinkhorn')..pl.fig |
49e0 | 75 72 65 28 38 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(8).ot.plot.plot2D_samples_ma |
4a00 | 74 28 78 73 2c 20 78 74 2c 20 47 65 73 2c 20 63 6f 6c 6f 72 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d | t(xs,.xt,.Ges,.color=[.5,..5,.1] |
4a20 | 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b | ).pl.plot(xs[:,.0],.xs[:,.1],.'+ |
4a40 | 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 | b',.label='Source.samples').pl.p |
4a60 | 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 | lot(xt[:,.0],.xt[:,.1],.'xr',.la |
4a80 | 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 28 | bel='Target.samples').pl.legend( |
4aa0 | 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 6d 61 74 72 69 78 20 53 69 6e 6b 68 | loc=0).pl.title('OT.matrix.Sinkh |
4ac0 | 6f 72 6e 20 66 72 6f 6d 20 73 61 6d 70 6c 65 73 27 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b | orn.from.samples')..pl.show().PK |
4ae0 | 03 04 14 00 00 00 00 00 84 68 3a 4f 0a ba a4 e6 91 06 00 00 91 06 00 00 0e 00 00 00 70 6c 6f 74 | .........h:O................plot |
4b00 | 5f 55 4f 54 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 | _UOT_1D.py#.-*-.coding:.utf-8.-* |
4b20 | 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 | -.""".========================== |
4b40 | 3d 3d 3d 3d 3d 0a 31 44 20 55 6e 62 61 6c 61 6e 63 65 64 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e | =====.1D.Unbalanced.optimal.tran |
4b60 | 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 3d 3d 3d 3d 3d 3d | sport.========================== |
4b80 | 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 6c 6c 75 73 74 72 61 74 65 73 20 | =====..This.example.illustrates. |
4ba0 | 74 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66 20 55 6e 62 61 6c 61 6e 63 65 64 20 4f 70 | the.computation.of.Unbalanced.Op |
4bc0 | 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 0a 75 73 69 6e 67 20 61 20 4b 75 6c 6c 62 61 63 6b | timal.transport.using.a.Kullback |
4be0 | 2d 4c 65 69 62 6c 65 72 20 72 65 6c 61 78 61 74 69 6f 6e 2e 0a 22 22 22 0a 0a 23 20 41 75 74 68 | -Leibler.relaxation.."""..#.Auth |
4c00 | 6f 72 3a 20 48 69 63 68 61 6d 20 4a 61 6e 61 74 69 20 3c 68 69 63 68 61 6d 2e 6a 61 6e 61 74 69 | or:.Hicham.Janati.<hicham.janati |
4c20 | 40 69 6e 72 69 61 2e 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 | @inria.fr>.#.#.License:.MIT.Lice |
4c40 | 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d | nse..import.numpy.as.np.import.m |
4c60 | 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. |
4c80 | 69 6d 70 6f 72 74 20 6f 74 2e 70 6c 6f 74 0a 66 72 6f 6d 20 6f 74 2e 64 61 74 61 73 65 74 73 20 | import.ot.plot.from.ot.datasets. |
4ca0 | 69 6d 70 6f 72 74 20 6d 61 6b 65 5f 31 44 5f 67 61 75 73 73 20 61 73 20 67 61 75 73 73 0a 0a 23 | import.make_1D_gauss.as.gauss..# |
4cc0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
4ce0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
4d00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 | #############.#.Generate.data.#. |
4d20 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 0a 0a | -------------...#%%.parameters.. |
4d40 | 6e 20 3d 20 31 30 30 20 20 23 20 6e 62 20 62 69 6e 73 0a 0a 23 20 62 69 6e 20 70 6f 73 69 74 69 | n.=.100..#.nb.bins..#.bin.positi |
4d60 | 6f 6e 73 0a 78 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 2c 20 64 74 79 70 65 3d 6e 70 2e 66 6c | ons.x.=.np.arange(n,.dtype=np.fl |
4d80 | 6f 61 74 36 34 29 0a 0a 23 20 47 61 75 73 73 69 61 6e 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 | oat64)..#.Gaussian.distributions |
4da0 | 0a 61 20 3d 20 67 61 75 73 73 28 6e 2c 20 6d 3d 32 30 2c 20 73 3d 35 29 20 20 23 20 6d 3d 20 6d | .a.=.gauss(n,.m=20,.s=5)..#.m=.m |
4dc0 | 65 61 6e 2c 20 73 3d 20 73 74 64 0a 62 20 3d 20 67 61 75 73 73 28 6e 2c 20 6d 3d 36 30 2c 20 73 | ean,.s=.std.b.=.gauss(n,.m=60,.s |
4de0 | 3d 31 30 29 0a 0a 23 20 6d 61 6b 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 75 6e 62 61 6c | =10)..#.make.distributions.unbal |
4e00 | 61 6e 63 65 64 0a 62 20 2a 3d 20 35 2e 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 20 3d | anced.b.*=.5...#.loss.matrix.M.= |
4e20 | 20 6f 74 2e 64 69 73 74 28 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 2c 20 78 2e 72 65 | .ot.dist(x.reshape((n,.1)),.x.re |
4e40 | 73 68 61 70 65 28 28 6e 2c 20 31 29 29 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 29 0a 0a 0a 23 23 | shape((n,.1))).M./=.M.max()...## |
4e60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
4e80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
4ea0 | 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e | ############.#.Plot.distribution |
4ec0 | 73 20 61 6e 64 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | s.and.loss.matrix.#.------------ |
4ee0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 6c 6f 74 | ----------------------..#%%.plot |
4f00 | 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c | .the.distributions..pl.figure(1, |
4f20 | 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 29 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 61 2c | .figsize=(6.4,.3)).pl.plot(x,.a, |
4f40 | 20 27 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e | .'b',.label='Source.distribution |
4f60 | 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 2c 20 27 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 | ').pl.plot(x,.b,.'r',.label='Tar |
4f80 | 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 0a | get.distribution').pl.legend().. |
4fa0 | 23 20 70 6c 6f 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 61 6e 64 20 6c 6f 73 73 20 6d 61 | #.plot.distributions.and.loss.ma |
4fc0 | 74 72 69 78 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 | trix..pl.figure(2,.figsize=(5,.5 |
4fe0 | 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 4d 2c 20 27 | )).ot.plot.plot1D_mat(a,.b,.M,.' |
5000 | 43 6f 73 74 20 6d 61 74 72 69 78 20 4d 27 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | Cost.matrix.M')...############## |
5020 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
5040 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
5060 | 0a 23 20 53 6f 6c 76 65 20 55 6e 62 61 6c 61 6e 63 65 64 20 53 69 6e 6b 68 6f 72 6e 0a 23 20 2d | .#.Solve.Unbalanced.Sinkhorn.#.- |
5080 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 20 53 69 6e 6b 68 6f 72 6e 0a 0a 65 70 73 69 | -------------...#.Sinkhorn..epsi |
50a0 | 6c 6f 6e 20 3d 20 30 2e 31 20 20 23 20 65 6e 74 72 6f 70 79 20 70 61 72 61 6d 65 74 65 72 0a 61 | lon.=.0.1..#.entropy.parameter.a |
50c0 | 6c 70 68 61 20 3d 20 31 2e 20 20 23 20 55 6e 62 61 6c 61 6e 63 65 64 20 4b 4c 20 72 65 6c 61 78 | lpha.=.1...#.Unbalanced.KL.relax |
50e0 | 61 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 0a 47 73 20 3d 20 6f 74 2e 75 6e 62 61 6c 61 6e 63 | ation.parameter.Gs.=.ot.unbalanc |
5100 | 65 64 2e 73 69 6e 6b 68 6f 72 6e 5f 75 6e 62 61 6c 61 6e 63 65 64 28 61 2c 20 62 2c 20 4d 2c 20 | ed.sinkhorn_unbalanced(a,.b,.M,. |
5120 | 65 70 73 69 6c 6f 6e 2c 20 61 6c 70 68 61 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 0a 70 | epsilon,.alpha,.verbose=True)..p |
5140 | 6c 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 29 0a 6f 74 2e 70 | l.figure(4,.figsize=(5,.5)).ot.p |
5160 | 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 47 73 2c 20 27 55 4f 54 20 6d 61 | lot.plot1D_mat(a,.b,.Gs,.'UOT.ma |
5180 | 74 72 69 78 20 53 69 6e 6b 68 6f 72 6e 27 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 | trix.Sinkhorn')..pl.show().PK... |
51a0 | 00 00 00 00 00 7c b0 94 50 e2 7d 4e c5 18 0f 00 00 18 0f 00 00 19 00 00 00 70 6c 6f 74 5f 55 4f | .....|..P.}N.............plot_UO |
51c0 | 54 5f 62 61 72 79 63 65 6e 74 65 72 5f 31 44 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 | T_barycenter_1D.py#.-*-.coding:. |
51e0 | 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | utf-8.-*-.""".================== |
5200 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
5220 | 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 |
5240 | 74 65 72 20 64 65 6d 6f 20 66 6f 72 20 55 6e 62 61 6c 61 6e 63 65 64 20 64 69 73 74 72 69 62 75 | ter.demo.for.Unbalanced.distribu |
5260 | 74 69 6f 6e 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | tions.========================== |
5280 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
52a0 | 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 6c 6c 75 73 74 72 61 74 65 73 20 74 68 65 20 | =..This.example.illustrates.the. |
52c0 | 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66 20 72 65 67 75 6c 61 72 69 7a 65 64 20 57 61 73 73 65 | computation.of.regularized.Wasse |
52e0 | 72 73 79 65 69 6e 20 42 61 72 79 63 65 6e 74 65 72 0a 61 73 20 70 72 6f 70 6f 73 65 64 20 69 6e | rsyein.Barycenter.as.proposed.in |
5300 | 20 5b 31 30 5d 20 66 6f 72 20 55 6e 62 61 6c 61 6e 63 65 64 20 69 6e 70 75 74 73 2e 0a 0a 0a 5b | .[10].for.Unbalanced.inputs....[ |
5320 | 31 30 5d 20 43 68 69 7a 61 74 2c 20 4c 2e 2c 20 50 65 79 72 c3 a9 2c 20 47 2e 2c 20 53 63 68 6d | 10].Chizat,.L.,.Peyr..,.G.,.Schm |
5340 | 69 74 7a 65 72 2c 20 42 2e 2c 20 26 20 56 69 61 6c 61 72 64 2c 20 46 2e 20 58 2e 20 28 32 30 31 | itzer,.B.,.&.Vialard,.F..X..(201 |
5360 | 36 29 2e 20 53 63 61 6c 69 6e 67 20 61 6c 67 6f 72 69 74 68 6d 73 20 66 6f 72 20 75 6e 62 61 6c | 6)..Scaling.algorithms.for.unbal |
5380 | 61 6e 63 65 64 20 74 72 61 6e 73 70 6f 72 74 20 70 72 6f 62 6c 65 6d 73 2e 20 61 72 58 69 76 20 | anced.transport.problems..arXiv. |
53a0 | 70 72 65 70 72 69 6e 74 20 61 72 58 69 76 3a 31 36 30 37 2e 30 35 38 31 36 2e 0a 0a 22 22 22 0a | preprint.arXiv:1607.05816...""". |
53c0 | 0a 23 20 41 75 74 68 6f 72 3a 20 48 69 63 68 61 6d 20 4a 61 6e 61 74 69 20 3c 68 69 63 68 61 6d | .#.Author:.Hicham.Janati.<hicham |
53e0 | 2e 6a 61 6e 61 74 69 40 69 6e 72 69 61 2e 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d | .janati@inria.fr>.#.#.License:.M |
5400 | 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 | IT.License..import.numpy.as.np.i |
5420 | 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 | mport.matplotlib.pylab.as.pl.imp |
5440 | 6f 72 74 20 6f 74 0a 23 20 6e 65 63 65 73 73 61 72 79 20 66 6f 72 20 33 64 20 70 6c 6f 74 20 65 | ort.ot.#.necessary.for.3d.plot.e |
5460 | 76 65 6e 20 69 66 20 6e 6f 74 20 75 73 65 64 0a 66 72 6f 6d 20 6d 70 6c 5f 74 6f 6f 6c 6b 69 74 | ven.if.not.used.from.mpl_toolkit |
5480 | 73 2e 6d 70 6c 6f 74 33 64 20 69 6d 70 6f 72 74 20 41 78 65 73 33 44 20 20 23 20 6e 6f 71 61 0a | s.mplot3d.import.Axes3D..#.noqa. |
54a0 | 66 72 6f 6d 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 63 6f 6c 6c 65 63 74 69 6f 6e 73 20 69 6d 70 6f | from.matplotlib.collections.impo |
54c0 | 72 74 20 50 6f 6c 79 43 6f 6c 6c 65 63 74 69 6f 6e 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 | rt.PolyCollection..############# |
54e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
5500 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
5520 | 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | #.#.Generate.data.#.------------ |
5540 | 2d 0a 0a 23 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 6e 20 3d 20 31 30 30 20 20 23 20 6e 62 20 62 | -..#.parameters..n.=.100..#.nb.b |
5560 | 69 6e 73 0a 0a 23 20 62 69 6e 20 70 6f 73 69 74 69 6f 6e 73 0a 78 20 3d 20 6e 70 2e 61 72 61 6e | ins..#.bin.positions.x.=.np.aran |
5580 | 67 65 28 6e 2c 20 64 74 79 70 65 3d 6e 70 2e 66 6c 6f 61 74 36 34 29 0a 0a 23 20 47 61 75 73 73 | ge(n,.dtype=np.float64)..#.Gauss |
55a0 | 69 61 6e 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 61 31 20 3d 20 6f 74 2e 64 61 74 61 73 65 | ian.distributions.a1.=.ot.datase |
55c0 | 74 73 2e 6d 61 6b 65 5f 31 44 5f 67 61 75 73 73 28 6e 2c 20 6d 3d 32 30 2c 20 73 3d 35 29 20 20 | ts.make_1D_gauss(n,.m=20,.s=5).. |
55e0 | 23 20 6d 3d 20 6d 65 61 6e 2c 20 73 3d 20 73 74 64 0a 61 32 20 3d 20 6f 74 2e 64 61 74 61 73 65 | #.m=.mean,.s=.std.a2.=.ot.datase |
5600 | 74 73 2e 6d 61 6b 65 5f 31 44 5f 67 61 75 73 73 28 6e 2c 20 6d 3d 36 30 2c 20 73 3d 38 29 0a 0a | ts.make_1D_gauss(n,.m=60,.s=8).. |
5620 | 23 20 6d 61 6b 65 20 75 6e 62 61 6c 61 6e 63 65 64 20 64 69 73 74 73 0a 61 32 20 2a 3d 20 33 2e | #.make.unbalanced.dists.a2.*=.3. |
5640 | 0a 0a 23 20 63 72 65 61 74 69 6e 67 20 6d 61 74 72 69 78 20 41 20 63 6f 6e 74 61 69 6e 69 6e 67 | ..#.creating.matrix.A.containing |
5660 | 20 61 6c 6c 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 41 20 3d 20 6e 70 2e 76 73 74 61 63 6b | .all.distributions.A.=.np.vstack |
5680 | 28 28 61 31 2c 20 61 32 29 29 2e 54 0a 6e 5f 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 3d 20 41 | ((a1,.a2)).T.n_distributions.=.A |
56a0 | 2e 73 68 61 70 65 5b 31 5d 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 20 2b 20 6e 6f 72 6d 61 | .shape[1]..#.loss.matrix.+.norma |
56c0 | 6c 69 7a 61 74 69 6f 6e 0a 4d 20 3d 20 6f 74 2e 75 74 69 6c 73 2e 64 69 73 74 30 28 6e 29 0a 4d | lization.M.=.ot.utils.dist0(n).M |
56e0 | 20 2f 3d 20 4d 2e 6d 61 78 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ./=.M.max()..################### |
5700 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
5720 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c | ###########################.#.Pl |
5740 | 6f 74 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 20 70 6c 6f 74 20 74 68 65 20 | ot.data.#.---------..#.plot.the. |
5760 | 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 | distributions..pl.figure(1,.figs |
5780 | 69 7a 65 3d 28 36 2e 34 2c 20 33 29 29 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6e 5f 64 | ize=(6.4,.3)).for.i.in.range(n_d |
57a0 | 69 73 74 72 69 62 75 74 69 6f 6e 73 29 3a 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 2c 20 41 5b | istributions):.....pl.plot(x,.A[ |
57c0 | 3a 2c 20 69 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 44 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 | :,.i]).pl.title('Distributions') |
57e0 | 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 | .pl.tight_layout()..############ |
5800 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
5820 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
5840 | 23 23 0a 23 20 42 61 72 79 63 65 6e 74 65 72 20 63 6f 6d 70 75 74 61 74 69 6f 6e 0a 23 20 2d 2d | ##.#.Barycenter.computation.#.-- |
5860 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 20 6e 6f 6e 20 77 65 69 67 | --------------------..#.non.weig |
5880 | 68 74 65 64 20 62 61 72 79 63 65 6e 74 65 72 20 63 6f 6d 70 75 74 61 74 69 6f 6e 0a 0a 77 65 69 | hted.barycenter.computation..wei |
58a0 | 67 68 74 20 3d 20 30 2e 35 20 20 23 20 30 3c 3d 77 65 69 67 68 74 3c 3d 31 0a 77 65 69 67 68 74 | ght.=.0.5..#.0<=weight<=1.weight |
58c0 | 73 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 31 20 2d 20 77 65 69 67 68 74 2c 20 77 65 69 67 68 74 | s.=.np.array([1.-.weight,.weight |
58e0 | 5d 29 0a 0a 23 20 6c 32 62 61 72 79 0a 62 61 72 79 5f 6c 32 20 3d 20 41 2e 64 6f 74 28 77 65 69 | ])..#.l2bary.bary_l2.=.A.dot(wei |
5900 | 67 68 74 73 29 0a 0a 23 20 77 61 73 73 65 72 73 74 65 69 6e 0a 72 65 67 20 3d 20 31 65 2d 33 0a | ghts)..#.wasserstein.reg.=.1e-3. |
5920 | 61 6c 70 68 61 20 3d 20 31 2e 0a 0a 62 61 72 79 5f 77 61 73 73 20 3d 20 6f 74 2e 75 6e 62 61 6c | alpha.=.1...bary_wass.=.ot.unbal |
5940 | 61 6e 63 65 64 2e 62 61 72 79 63 65 6e 74 65 72 5f 75 6e 62 61 6c 61 6e 63 65 64 28 41 2c 20 4d | anced.barycenter_unbalanced(A,.M |
5960 | 2c 20 72 65 67 2c 20 61 6c 70 68 61 2c 20 77 65 69 67 68 74 73 3d 77 65 69 67 68 74 73 29 0a 0a | ,.reg,.alpha,.weights=weights).. |
5980 | 70 6c 2e 66 69 67 75 72 65 28 32 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 | pl.figure(2).pl.clf().pl.subplot |
59a0 | 28 32 2c 20 31 2c 20 31 29 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6e 5f 64 69 73 74 72 | (2,.1,.1).for.i.in.range(n_distr |
59c0 | 69 62 75 74 69 6f 6e 73 29 3a 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 2c 20 41 5b 3a 2c 20 69 | ibutions):.....pl.plot(x,.A[:,.i |
59e0 | 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 44 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 70 6c | ]).pl.title('Distributions')..pl |
5a00 | 2e 73 75 62 70 6c 6f 74 28 32 2c 20 31 2c 20 32 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 61 72 | .subplot(2,.1,.2).pl.plot(x,.bar |
5a20 | 79 5f 6c 32 2c 20 27 72 27 2c 20 6c 61 62 65 6c 3d 27 6c 32 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 | y_l2,.'r',.label='l2').pl.plot(x |
5a40 | 2c 20 62 61 72 79 5f 77 61 73 73 2c 20 27 67 27 2c 20 6c 61 62 65 6c 3d 27 57 61 73 73 65 72 73 | ,.bary_wass,.'g',.label='Wassers |
5a60 | 74 65 69 6e 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 29 0a 70 6c 2e 74 69 74 6c 65 28 27 42 61 72 | tein').pl.legend().pl.title('Bar |
5a80 | 79 63 65 6e 74 65 72 73 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 23 23 | ycenters').pl.tight_layout()..## |
5aa0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
5ac0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
5ae0 | 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 42 61 72 79 63 65 6e 74 72 69 63 20 69 6e 74 65 72 | ############.#.Barycentric.inter |
5b00 | 70 6f 6c 61 74 69 6f 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | polation.#.--------------------- |
5b20 | 2d 2d 2d 2d 0a 0a 23 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 | ----..#.barycenter.interpolation |
5b40 | 0a 0a 6e 5f 77 65 69 67 68 74 20 3d 20 31 31 0a 77 65 69 67 68 74 5f 6c 69 73 74 20 3d 20 6e 70 | ..n_weight.=.11.weight_list.=.np |
5b60 | 2e 6c 69 6e 73 70 61 63 65 28 30 2c 20 31 2c 20 6e 5f 77 65 69 67 68 74 29 0a 0a 0a 42 5f 6c 32 | .linspace(0,.1,.n_weight)...B_l2 |
5b80 | 20 3d 20 6e 70 2e 7a 65 72 6f 73 28 28 6e 2c 20 6e 5f 77 65 69 67 68 74 29 29 0a 0a 42 5f 77 61 | .=.np.zeros((n,.n_weight))..B_wa |
5ba0 | 73 73 20 3d 20 6e 70 2e 63 6f 70 79 28 42 5f 6c 32 29 0a 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e | ss.=.np.copy(B_l2)..for.i.in.ran |
5bc0 | 67 65 28 30 2c 20 6e 5f 77 65 69 67 68 74 29 3a 0a 20 20 20 20 77 65 69 67 68 74 20 3d 20 77 65 | ge(0,.n_weight):.....weight.=.we |
5be0 | 69 67 68 74 5f 6c 69 73 74 5b 69 5d 0a 20 20 20 20 77 65 69 67 68 74 73 20 3d 20 6e 70 2e 61 72 | ight_list[i].....weights.=.np.ar |
5c00 | 72 61 79 28 5b 31 20 2d 20 77 65 69 67 68 74 2c 20 77 65 69 67 68 74 5d 29 0a 20 20 20 20 42 5f | ray([1.-.weight,.weight]).....B_ |
5c20 | 6c 32 5b 3a 2c 20 69 5d 20 3d 20 41 2e 64 6f 74 28 77 65 69 67 68 74 73 29 0a 20 20 20 20 42 5f | l2[:,.i].=.A.dot(weights).....B_ |
5c40 | 77 61 73 73 5b 3a 2c 20 69 5d 20 3d 20 6f 74 2e 75 6e 62 61 6c 61 6e 63 65 64 2e 62 61 72 79 63 | wass[:,.i].=.ot.unbalanced.baryc |
5c60 | 65 6e 74 65 72 5f 75 6e 62 61 6c 61 6e 63 65 64 28 41 2c 20 4d 2c 20 72 65 67 2c 20 61 6c 70 68 | enter_unbalanced(A,.M,.reg,.alph |
5c80 | 61 2c 20 77 65 69 67 68 74 73 3d 77 65 69 67 68 74 73 29 0a 0a 0a 23 20 70 6c 6f 74 20 69 6e 74 | a,.weights=weights)...#.plot.int |
5ca0 | 65 72 70 6f 6c 61 74 69 6f 6e 0a 0a 70 6c 2e 66 69 67 75 72 65 28 33 29 0a 0a 63 6d 61 70 20 3d | erpolation..pl.figure(3)..cmap.= |
5cc0 | 20 70 6c 2e 63 6d 2e 67 65 74 5f 63 6d 61 70 28 27 76 69 72 69 64 69 73 27 29 0a 76 65 72 74 73 | .pl.cm.get_cmap('viridis').verts |
5ce0 | 20 3d 20 5b 5d 0a 7a 73 20 3d 20 77 65 69 67 68 74 5f 6c 69 73 74 0a 66 6f 72 20 69 2c 20 7a 20 | .=.[].zs.=.weight_list.for.i,.z. |
5d00 | 69 6e 20 65 6e 75 6d 65 72 61 74 65 28 7a 73 29 3a 0a 20 20 20 20 79 73 20 3d 20 42 5f 6c 32 5b | in.enumerate(zs):.....ys.=.B_l2[ |
5d20 | 3a 2c 20 69 5d 0a 20 20 20 20 76 65 72 74 73 2e 61 70 70 65 6e 64 28 6c 69 73 74 28 7a 69 70 28 | :,.i].....verts.append(list(zip( |
5d40 | 78 2c 20 79 73 29 29 29 0a 0a 61 78 20 3d 20 70 6c 2e 67 63 66 28 29 2e 67 63 61 28 70 72 6f 6a | x,.ys)))..ax.=.pl.gcf().gca(proj |
5d60 | 65 63 74 69 6f 6e 3d 27 33 64 27 29 0a 0a 70 6f 6c 79 20 3d 20 50 6f 6c 79 43 6f 6c 6c 65 63 74 | ection='3d')..poly.=.PolyCollect |
5d80 | 69 6f 6e 28 76 65 72 74 73 2c 20 66 61 63 65 63 6f 6c 6f 72 73 3d 5b 63 6d 61 70 28 61 29 20 66 | ion(verts,.facecolors=[cmap(a).f |
5da0 | 6f 72 20 61 20 69 6e 20 77 65 69 67 68 74 5f 6c 69 73 74 5d 29 0a 70 6f 6c 79 2e 73 65 74 5f 61 | or.a.in.weight_list]).poly.set_a |
5dc0 | 6c 70 68 61 28 30 2e 37 29 0a 61 78 2e 61 64 64 5f 63 6f 6c 6c 65 63 74 69 6f 6e 33 64 28 70 6f | lpha(0.7).ax.add_collection3d(po |
5de0 | 6c 79 2c 20 7a 73 3d 7a 73 2c 20 7a 64 69 72 3d 27 79 27 29 0a 61 78 2e 73 65 74 5f 78 6c 61 62 | ly,.zs=zs,.zdir='y').ax.set_xlab |
5e00 | 65 6c 28 27 78 27 29 0a 61 78 2e 73 65 74 5f 78 6c 69 6d 33 64 28 30 2c 20 6e 29 0a 61 78 2e 73 | el('x').ax.set_xlim3d(0,.n).ax.s |
5e20 | 65 74 5f 79 6c 61 62 65 6c 28 72 27 24 5c 61 6c 70 68 61 24 27 29 0a 61 78 2e 73 65 74 5f 79 6c | et_ylabel(r'$\alpha$').ax.set_yl |
5e40 | 69 6d 33 64 28 30 2c 20 31 29 0a 61 78 2e 73 65 74 5f 7a 6c 61 62 65 6c 28 27 27 29 0a 61 78 2e | im3d(0,.1).ax.set_zlabel('').ax. |
5e60 | 73 65 74 5f 7a 6c 69 6d 33 64 28 30 2c 20 42 5f 6c 32 2e 6d 61 78 28 29 20 2a 20 31 2e 30 31 29 | set_zlim3d(0,.B_l2.max().*.1.01) |
5e80 | 0a 70 6c 2e 74 69 74 6c 65 28 27 42 61 72 79 63 65 6e 74 65 72 20 69 6e 74 65 72 70 6f 6c 61 74 | .pl.title('Barycenter.interpolat |
5ea0 | 69 6f 6e 20 77 69 74 68 20 6c 32 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a | ion.with.l2').pl.tight_layout(). |
5ec0 | 0a 70 6c 2e 66 69 67 75 72 65 28 34 29 0a 63 6d 61 70 20 3d 20 70 6c 2e 63 6d 2e 67 65 74 5f 63 | .pl.figure(4).cmap.=.pl.cm.get_c |
5ee0 | 6d 61 70 28 27 76 69 72 69 64 69 73 27 29 0a 76 65 72 74 73 20 3d 20 5b 5d 0a 7a 73 20 3d 20 77 | map('viridis').verts.=.[].zs.=.w |
5f00 | 65 69 67 68 74 5f 6c 69 73 74 0a 66 6f 72 20 69 2c 20 7a 20 69 6e 20 65 6e 75 6d 65 72 61 74 65 | eight_list.for.i,.z.in.enumerate |
5f20 | 28 7a 73 29 3a 0a 20 20 20 20 79 73 20 3d 20 42 5f 77 61 73 73 5b 3a 2c 20 69 5d 0a 20 20 20 20 | (zs):.....ys.=.B_wass[:,.i]..... |
5f40 | 76 65 72 74 73 2e 61 70 70 65 6e 64 28 6c 69 73 74 28 7a 69 70 28 78 2c 20 79 73 29 29 29 0a 0a | verts.append(list(zip(x,.ys))).. |
5f60 | 61 78 20 3d 20 70 6c 2e 67 63 66 28 29 2e 67 63 61 28 70 72 6f 6a 65 63 74 69 6f 6e 3d 27 33 64 | ax.=.pl.gcf().gca(projection='3d |
5f80 | 27 29 0a 0a 70 6f 6c 79 20 3d 20 50 6f 6c 79 43 6f 6c 6c 65 63 74 69 6f 6e 28 76 65 72 74 73 2c | ')..poly.=.PolyCollection(verts, |
5fa0 | 20 66 61 63 65 63 6f 6c 6f 72 73 3d 5b 63 6d 61 70 28 61 29 20 66 6f 72 20 61 20 69 6e 20 77 65 | .facecolors=[cmap(a).for.a.in.we |
5fc0 | 69 67 68 74 5f 6c 69 73 74 5d 29 0a 70 6f 6c 79 2e 73 65 74 5f 61 6c 70 68 61 28 30 2e 37 29 0a | ight_list]).poly.set_alpha(0.7). |
5fe0 | 61 78 2e 61 64 64 5f 63 6f 6c 6c 65 63 74 69 6f 6e 33 64 28 70 6f 6c 79 2c 20 7a 73 3d 7a 73 2c | ax.add_collection3d(poly,.zs=zs, |
6000 | 20 7a 64 69 72 3d 27 79 27 29 0a 61 78 2e 73 65 74 5f 78 6c 61 62 65 6c 28 27 78 27 29 0a 61 78 | .zdir='y').ax.set_xlabel('x').ax |
6020 | 2e 73 65 74 5f 78 6c 69 6d 33 64 28 30 2c 20 6e 29 0a 61 78 2e 73 65 74 5f 79 6c 61 62 65 6c 28 | .set_xlim3d(0,.n).ax.set_ylabel( |
6040 | 72 27 24 5c 61 6c 70 68 61 24 27 29 0a 61 78 2e 73 65 74 5f 79 6c 69 6d 33 64 28 30 2c 20 31 29 | r'$\alpha$').ax.set_ylim3d(0,.1) |
6060 | 0a 61 78 2e 73 65 74 5f 7a 6c 61 62 65 6c 28 27 27 29 0a 61 78 2e 73 65 74 5f 7a 6c 69 6d 33 64 | .ax.set_zlabel('').ax.set_zlim3d |
6080 | 28 30 2c 20 42 5f 6c 32 2e 6d 61 78 28 29 20 2a 20 31 2e 30 31 29 0a 70 6c 2e 74 69 74 6c 65 28 | (0,.B_l2.max().*.1.01).pl.title( |
60a0 | 27 42 61 72 79 63 65 6e 74 65 72 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 20 77 69 74 68 20 57 | 'Barycenter.interpolation.with.W |
60c0 | 61 73 73 65 72 73 74 65 69 6e 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a | asserstein').pl.tight_layout().. |
60e0 | 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 7c b0 94 50 43 c3 5c 58 99 17 00 00 | pl.show().PK........|..PC.\X.... |
6100 | 99 17 00 00 21 00 00 00 70 6c 6f 74 5f 62 61 72 79 63 65 6e 74 65 72 5f 6c 70 5f 76 73 5f 65 6e | ....!...plot_barycenter_lp_vs_en |
6120 | 74 72 6f 70 69 63 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d | tropic.py#.-*-.coding:.utf-8.-*- |
6140 | 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 | .""".=========================== |
6160 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
6180 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 31 44 20 57 61 73 73 65 72 | ======================.1D.Wasser |
61a0 | 73 74 65 69 6e 20 62 61 72 79 63 65 6e 74 65 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 62 65 74 77 | stein.barycenter.comparison.betw |
61c0 | 65 65 6e 20 65 78 61 63 74 20 4c 50 20 61 6e 64 20 65 6e 74 72 6f 70 69 63 20 72 65 67 75 6c 61 | een.exact.LP.and.entropic.regula |
61e0 | 72 69 7a 61 74 69 6f 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | rization.======================= |
6200 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
6220 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 | ==========================..This |
6240 | 20 65 78 61 6d 70 6c 65 20 69 6c 6c 75 73 74 72 61 74 65 73 20 74 68 65 20 63 6f 6d 70 75 74 61 | .example.illustrates.the.computa |
6260 | 74 69 6f 6e 20 6f 66 20 72 65 67 75 6c 61 72 69 7a 65 64 20 57 61 73 73 65 72 73 74 65 69 6e 20 | tion.of.regularized.Wasserstein. |
6280 | 42 61 72 79 63 65 6e 74 65 72 0a 61 73 20 70 72 6f 70 6f 73 65 64 20 69 6e 20 5b 33 5d 20 61 6e | Barycenter.as.proposed.in.[3].an |
62a0 | 64 20 65 78 61 63 74 20 4c 50 20 62 61 72 79 63 65 6e 74 65 72 73 20 75 73 69 6e 67 20 73 74 61 | d.exact.LP.barycenters.using.sta |
62c0 | 6e 64 61 72 64 20 4c 50 20 73 6f 6c 76 65 72 2e 0a 0a 49 74 20 72 65 70 72 6f 64 75 63 65 73 20 | ndard.LP.solver...It.reproduces. |
62e0 | 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 46 69 67 75 72 65 20 33 2e 31 20 61 6e 64 20 33 2e 32 | approximately.Figure.3.1.and.3.2 |
6300 | 20 66 72 6f 6d 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 70 61 70 65 72 3a 0a 43 75 74 75 72 | .from.the.following.paper:.Cutur |
6320 | 69 2c 20 4d 2e 2c 20 26 20 50 65 79 72 c3 a9 2c 20 47 2e 20 28 32 30 31 36 29 2e 20 41 20 73 6d | i,.M.,.&.Peyr..,.G..(2016)..A.sm |
6340 | 6f 6f 74 68 65 64 20 64 75 61 6c 20 61 70 70 72 6f 61 63 68 20 66 6f 72 20 76 61 72 69 61 74 69 | oothed.dual.approach.for.variati |
6360 | 6f 6e 61 6c 0a 57 61 73 73 65 72 73 74 65 69 6e 20 70 72 6f 62 6c 65 6d 73 2e 20 53 49 41 4d 20 | onal.Wasserstein.problems..SIAM. |
6380 | 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 39 28 31 | Journal.on.Imaging.Sciences,.9(1 |
63a0 | 29 2c 20 33 32 30 2d 33 34 33 2e 0a 0a 5b 33 5d 20 42 65 6e 61 6d 6f 75 2c 20 4a 2e 20 44 2e 2c | ),.320-343...[3].Benamou,.J..D., |
63c0 | 20 43 61 72 6c 69 65 72 2c 20 47 2e 2c 20 43 75 74 75 72 69 2c 20 4d 2e 2c 20 4e 65 6e 6e 61 2c | .Carlier,.G.,.Cuturi,.M.,.Nenna, |
63e0 | 20 4c 2e 2c 20 26 20 50 65 79 72 c3 a9 2c 20 47 2e 20 28 32 30 31 35 29 2e 0a 49 74 65 72 61 74 | .L.,.&.Peyr..,.G..(2015)..Iterat |
6400 | 69 76 65 20 42 72 65 67 6d 61 6e 20 70 72 6f 6a 65 63 74 69 6f 6e 73 20 66 6f 72 20 72 65 67 75 | ive.Bregman.projections.for.regu |
6420 | 6c 61 72 69 7a 65 64 20 74 72 61 6e 73 70 6f 72 74 61 74 69 6f 6e 20 70 72 6f 62 6c 65 6d 73 0a | larized.transportation.problems. |
6440 | 53 49 41 4d 20 4a 6f 75 72 6e 61 6c 20 6f 6e 20 53 63 69 65 6e 74 69 66 69 63 20 43 6f 6d 70 75 | SIAM.Journal.on.Scientific.Compu |
6460 | 74 69 6e 67 2c 20 33 37 28 32 29 2c 20 41 31 31 31 31 2d 41 31 31 33 38 2e 0a 0a 22 22 22 0a 0a | ting,.37(2),.A1111-A1138...""".. |
6480 | 23 20 41 75 74 68 6f 72 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 | #.Author:.Remi.Flamary.<remi.fla |
64a0 | 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 | mary@unice.fr>.#.#.License:.MIT. |
64c0 | 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f | License..import.numpy.as.np.impo |
64e0 | 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 | rt.matplotlib.pylab.as.pl.import |
6500 | 20 6f 74 0a 23 20 6e 65 63 65 73 73 61 72 79 20 66 6f 72 20 33 64 20 70 6c 6f 74 20 65 76 65 6e | .ot.#.necessary.for.3d.plot.even |
6520 | 20 69 66 20 6e 6f 74 20 75 73 65 64 0a 66 72 6f 6d 20 6d 70 6c 5f 74 6f 6f 6c 6b 69 74 73 2e 6d | .if.not.used.from.mpl_toolkits.m |
6540 | 70 6c 6f 74 33 64 20 69 6d 70 6f 72 74 20 41 78 65 73 33 44 20 20 23 20 6e 6f 71 61 0a 66 72 6f | plot3d.import.Axes3D..#.noqa.fro |
6560 | 6d 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 63 6f 6c 6c 65 63 74 69 6f 6e 73 20 69 6d 70 6f 72 74 20 | m.matplotlib.collections.import. |
6580 | 50 6f 6c 79 43 6f 6c 6c 65 63 74 69 6f 6e 20 20 23 20 6e 6f 71 61 0a 0a 23 69 6d 70 6f 72 74 20 | PolyCollection..#.noqa..#import. |
65a0 | 6f 74 2e 6c 70 2e 63 76 78 20 61 73 20 63 76 78 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ot.lp.cvx.as.cvx..############## |
65c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
65e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
6600 | 0a 23 20 47 61 75 73 73 69 61 6e 20 44 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | .#.Gaussian.Data.#.------------- |
6620 | 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 70 72 6f 62 6c 65 6d 73 20 3d 20 5b 5d 0a | ..#%%.parameters..problems.=.[]. |
6640 | 0a 6e 20 3d 20 31 30 30 20 20 23 20 6e 62 20 62 69 6e 73 0a 0a 23 20 62 69 6e 20 70 6f 73 69 74 | .n.=.100..#.nb.bins..#.bin.posit |
6660 | 69 6f 6e 73 0a 78 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 2c 20 64 74 79 70 65 3d 6e 70 2e 66 | ions.x.=.np.arange(n,.dtype=np.f |
6680 | 6c 6f 61 74 36 34 29 0a 0a 23 20 47 61 75 73 73 69 61 6e 20 64 69 73 74 72 69 62 75 74 69 6f 6e | loat64)..#.Gaussian.distribution |
66a0 | 73 0a 23 20 47 61 75 73 73 69 61 6e 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 61 31 20 3d 20 | s.#.Gaussian.distributions.a1.=. |
66c0 | 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 31 44 5f 67 61 75 73 73 28 6e 2c 20 6d 3d 32 | ot.datasets.make_1D_gauss(n,.m=2 |
66e0 | 30 2c 20 73 3d 35 29 20 20 23 20 6d 3d 20 6d 65 61 6e 2c 20 73 3d 20 73 74 64 0a 61 32 20 3d 20 | 0,.s=5)..#.m=.mean,.s=.std.a2.=. |
6700 | 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 31 44 5f 67 61 75 73 73 28 6e 2c 20 6d 3d 36 | ot.datasets.make_1D_gauss(n,.m=6 |
6720 | 30 2c 20 73 3d 38 29 0a 0a 23 20 63 72 65 61 74 69 6e 67 20 6d 61 74 72 69 78 20 41 20 63 6f 6e | 0,.s=8)..#.creating.matrix.A.con |
6740 | 74 61 69 6e 69 6e 67 20 61 6c 6c 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 41 20 3d 20 6e 70 | taining.all.distributions.A.=.np |
6760 | 2e 76 73 74 61 63 6b 28 28 61 31 2c 20 61 32 29 29 2e 54 0a 6e 5f 64 69 73 74 72 69 62 75 74 69 | .vstack((a1,.a2)).T.n_distributi |
6780 | 6f 6e 73 20 3d 20 41 2e 73 68 61 70 65 5b 31 5d 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 20 | ons.=.A.shape[1]..#.loss.matrix. |
67a0 | 2b 20 6e 6f 72 6d 61 6c 69 7a 61 74 69 6f 6e 0a 4d 20 3d 20 6f 74 2e 75 74 69 6c 73 2e 64 69 73 | +.normalization.M.=.ot.utils.dis |
67c0 | 74 30 28 6e 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 29 0a 0a 0a 23 25 25 20 70 6c 6f 74 20 74 68 | t0(n).M./=.M.max()...#%%.plot.th |
67e0 | 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 | e.distributions..pl.figure(1,.fi |
6800 | 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 29 29 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6e | gsize=(6.4,.3)).for.i.in.range(n |
6820 | 5f 64 69 73 74 72 69 62 75 74 69 6f 6e 73 29 3a 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 2c 20 | _distributions):.....pl.plot(x,. |
6840 | 41 5b 3a 2c 20 69 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 44 69 73 74 72 69 62 75 74 69 6f 6e 73 | A[:,.i]).pl.title('Distributions |
6860 | 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 23 25 25 20 62 61 72 79 63 65 | ').pl.tight_layout()..#%%.baryce |
6880 | 6e 74 65 72 20 63 6f 6d 70 75 74 61 74 69 6f 6e 0a 0a 61 6c 70 68 61 20 3d 20 30 2e 35 20 20 23 | nter.computation..alpha.=.0.5..# |
68a0 | 20 30 3c 3d 61 6c 70 68 61 3c 3d 31 0a 77 65 69 67 68 74 73 20 3d 20 6e 70 2e 61 72 72 61 79 28 | .0<=alpha<=1.weights.=.np.array( |
68c0 | 5b 31 20 2d 20 61 6c 70 68 61 2c 20 61 6c 70 68 61 5d 29 0a 0a 23 20 6c 32 62 61 72 79 0a 62 61 | [1.-.alpha,.alpha])..#.l2bary.ba |
68e0 | 72 79 5f 6c 32 20 3d 20 41 2e 64 6f 74 28 77 65 69 67 68 74 73 29 0a 0a 23 20 77 61 73 73 65 72 | ry_l2.=.A.dot(weights)..#.wasser |
6900 | 73 74 65 69 6e 0a 72 65 67 20 3d 20 31 65 2d 33 0a 6f 74 2e 74 69 63 28 29 0a 62 61 72 79 5f 77 | stein.reg.=.1e-3.ot.tic().bary_w |
6920 | 61 73 73 20 3d 20 6f 74 2e 62 72 65 67 6d 61 6e 2e 62 61 72 79 63 65 6e 74 65 72 28 41 2c 20 4d | ass.=.ot.bregman.barycenter(A,.M |
6940 | 2c 20 72 65 67 2c 20 77 65 69 67 68 74 73 29 0a 6f 74 2e 74 6f 63 28 29 0a 0a 0a 6f 74 2e 74 69 | ,.reg,.weights).ot.toc()...ot.ti |
6960 | 63 28 29 0a 62 61 72 79 5f 77 61 73 73 32 20 3d 20 6f 74 2e 6c 70 2e 62 61 72 79 63 65 6e 74 65 | c().bary_wass2.=.ot.lp.barycente |
6980 | 72 28 41 2c 20 4d 2c 20 77 65 69 67 68 74 73 2c 20 73 6f 6c 76 65 72 3d 27 69 6e 74 65 72 69 6f | r(A,.M,.weights,.solver='interio |
69a0 | 72 2d 70 6f 69 6e 74 27 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 6f 74 2e 74 6f 63 28 29 | r-point',.verbose=True).ot.toc() |
69c0 | 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 2e 73 75 62 70 6c | ..pl.figure(2).pl.clf().pl.subpl |
69e0 | 6f 74 28 32 2c 20 31 2c 20 31 29 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6e 5f 64 69 73 | ot(2,.1,.1).for.i.in.range(n_dis |
6a00 | 74 72 69 62 75 74 69 6f 6e 73 29 3a 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 2c 20 41 5b 3a 2c | tributions):.....pl.plot(x,.A[:, |
6a20 | 20 69 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 44 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a | .i]).pl.title('Distributions').. |
6a40 | 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 31 2c 20 32 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 | pl.subplot(2,.1,.2).pl.plot(x,.b |
6a60 | 61 72 79 5f 6c 32 2c 20 27 72 27 2c 20 6c 61 62 65 6c 3d 27 6c 32 27 29 0a 70 6c 2e 70 6c 6f 74 | ary_l2,.'r',.label='l2').pl.plot |
6a80 | 28 78 2c 20 62 61 72 79 5f 77 61 73 73 2c 20 27 67 27 2c 20 6c 61 62 65 6c 3d 27 52 65 67 20 57 | (x,.bary_wass,.'g',.label='Reg.W |
6aa0 | 61 73 73 65 72 73 74 65 69 6e 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 61 72 79 5f 77 61 73 | asserstein').pl.plot(x,.bary_was |
6ac0 | 73 32 2c 20 27 62 27 2c 20 6c 61 62 65 6c 3d 27 4c 50 20 57 61 73 73 65 72 73 74 65 69 6e 27 29 | s2,.'b',.label='LP.Wasserstein') |
6ae0 | 0a 70 6c 2e 6c 65 67 65 6e 64 28 29 0a 70 6c 2e 74 69 74 6c 65 28 27 42 61 72 79 63 65 6e 74 65 | .pl.legend().pl.title('Barycente |
6b00 | 72 73 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 72 6f 62 6c 65 6d 73 | rs').pl.tight_layout()..problems |
6b20 | 2e 61 70 70 65 6e 64 28 5b 41 2c 20 5b 62 61 72 79 5f 6c 32 2c 20 62 61 72 79 5f 77 61 73 73 2c | .append([A,.[bary_l2,.bary_wass, |
6b40 | 20 62 61 72 79 5f 77 61 73 73 32 5d 5d 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | .bary_wass2]])..################ |
6b60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
6b80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 | ##############################.# |
6ba0 | 20 53 74 61 69 72 20 44 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 61 | .Stair.Data.#.----------..#%%.pa |
6bc0 | 72 61 6d 65 74 65 72 73 0a 0a 61 31 20 3d 20 31 2e 30 20 2a 20 28 78 20 3e 20 31 30 29 20 2a 20 | rameters..a1.=.1.0.*.(x.>.10).*. |
6be0 | 28 78 20 3c 20 35 30 29 0a 61 32 20 3d 20 31 2e 30 20 2a 20 28 78 20 3e 20 36 30 29 20 2a 20 28 | (x.<.50).a2.=.1.0.*.(x.>.60).*.( |
6c00 | 78 20 3c 20 38 30 29 0a 0a 61 31 20 2f 3d 20 61 31 2e 73 75 6d 28 29 0a 61 32 20 2f 3d 20 61 32 | x.<.80)..a1./=.a1.sum().a2./=.a2 |
6c20 | 2e 73 75 6d 28 29 0a 0a 23 20 63 72 65 61 74 69 6e 67 20 6d 61 74 72 69 78 20 41 20 63 6f 6e 74 | .sum()..#.creating.matrix.A.cont |
6c40 | 61 69 6e 69 6e 67 20 61 6c 6c 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 41 20 3d 20 6e 70 2e | aining.all.distributions.A.=.np. |
6c60 | 76 73 74 61 63 6b 28 28 61 31 2c 20 61 32 29 29 2e 54 0a 6e 5f 64 69 73 74 72 69 62 75 74 69 6f | vstack((a1,.a2)).T.n_distributio |
6c80 | 6e 73 20 3d 20 41 2e 73 68 61 70 65 5b 31 5d 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 20 2b | ns.=.A.shape[1]..#.loss.matrix.+ |
6ca0 | 20 6e 6f 72 6d 61 6c 69 7a 61 74 69 6f 6e 0a 4d 20 3d 20 6f 74 2e 75 74 69 6c 73 2e 64 69 73 74 | .normalization.M.=.ot.utils.dist |
6cc0 | 30 28 6e 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 29 0a 0a 0a 23 25 25 20 70 6c 6f 74 20 74 68 65 | 0(n).M./=.M.max()...#%%.plot.the |
6ce0 | 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 | .distributions..pl.figure(1,.fig |
6d00 | 73 69 7a 65 3d 28 36 2e 34 2c 20 33 29 29 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6e 5f | size=(6.4,.3)).for.i.in.range(n_ |
6d20 | 64 69 73 74 72 69 62 75 74 69 6f 6e 73 29 3a 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 2c 20 41 | distributions):.....pl.plot(x,.A |
6d40 | 5b 3a 2c 20 69 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 44 69 73 74 72 69 62 75 74 69 6f 6e 73 27 | [:,.i]).pl.title('Distributions' |
6d60 | 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 0a 23 25 25 20 62 61 72 79 63 65 | ).pl.tight_layout()...#%%.baryce |
6d80 | 6e 74 65 72 20 63 6f 6d 70 75 74 61 74 69 6f 6e 0a 0a 61 6c 70 68 61 20 3d 20 30 2e 35 20 20 23 | nter.computation..alpha.=.0.5..# |
6da0 | 20 30 3c 3d 61 6c 70 68 61 3c 3d 31 0a 77 65 69 67 68 74 73 20 3d 20 6e 70 2e 61 72 72 61 79 28 | .0<=alpha<=1.weights.=.np.array( |
6dc0 | 5b 31 20 2d 20 61 6c 70 68 61 2c 20 61 6c 70 68 61 5d 29 0a 0a 23 20 6c 32 62 61 72 79 0a 62 61 | [1.-.alpha,.alpha])..#.l2bary.ba |
6de0 | 72 79 5f 6c 32 20 3d 20 41 2e 64 6f 74 28 77 65 69 67 68 74 73 29 0a 0a 23 20 77 61 73 73 65 72 | ry_l2.=.A.dot(weights)..#.wasser |
6e00 | 73 74 65 69 6e 0a 72 65 67 20 3d 20 31 65 2d 33 0a 6f 74 2e 74 69 63 28 29 0a 62 61 72 79 5f 77 | stein.reg.=.1e-3.ot.tic().bary_w |
6e20 | 61 73 73 20 3d 20 6f 74 2e 62 72 65 67 6d 61 6e 2e 62 61 72 79 63 65 6e 74 65 72 28 41 2c 20 4d | ass.=.ot.bregman.barycenter(A,.M |
6e40 | 2c 20 72 65 67 2c 20 77 65 69 67 68 74 73 29 0a 6f 74 2e 74 6f 63 28 29 0a 0a 0a 6f 74 2e 74 69 | ,.reg,.weights).ot.toc()...ot.ti |
6e60 | 63 28 29 0a 62 61 72 79 5f 77 61 73 73 32 20 3d 20 6f 74 2e 6c 70 2e 62 61 72 79 63 65 6e 74 65 | c().bary_wass2.=.ot.lp.barycente |
6e80 | 72 28 41 2c 20 4d 2c 20 77 65 69 67 68 74 73 2c 20 73 6f 6c 76 65 72 3d 27 69 6e 74 65 72 69 6f | r(A,.M,.weights,.solver='interio |
6ea0 | 72 2d 70 6f 69 6e 74 27 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 6f 74 2e 74 6f 63 28 29 | r-point',.verbose=True).ot.toc() |
6ec0 | 0a 0a 0a 70 72 6f 62 6c 65 6d 73 2e 61 70 70 65 6e 64 28 5b 41 2c 20 5b 62 61 72 79 5f 6c 32 2c | ...problems.append([A,.[bary_l2, |
6ee0 | 20 62 61 72 79 5f 77 61 73 73 2c 20 62 61 72 79 5f 77 61 73 73 32 5d 5d 29 0a 0a 70 6c 2e 66 69 | .bary_wass,.bary_wass2]])..pl.fi |
6f00 | 67 75 72 65 28 32 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 31 | gure(2).pl.clf().pl.subplot(2,.1 |
6f20 | 2c 20 31 29 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6e 5f 64 69 73 74 72 69 62 75 74 69 | ,.1).for.i.in.range(n_distributi |
6f40 | 6f 6e 73 29 3a 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 2c 20 41 5b 3a 2c 20 69 5d 29 0a 70 6c | ons):.....pl.plot(x,.A[:,.i]).pl |
6f60 | 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 70 | .title('Distributions')..pl.subp |
6f80 | 6c 6f 74 28 32 2c 20 31 2c 20 32 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 61 72 79 5f 6c 32 2c | lot(2,.1,.2).pl.plot(x,.bary_l2, |
6fa0 | 20 27 72 27 2c 20 6c 61 62 65 6c 3d 27 6c 32 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 61 72 | .'r',.label='l2').pl.plot(x,.bar |
6fc0 | 79 5f 77 61 73 73 2c 20 27 67 27 2c 20 6c 61 62 65 6c 3d 27 52 65 67 20 57 61 73 73 65 72 73 74 | y_wass,.'g',.label='Reg.Wasserst |
6fe0 | 65 69 6e 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 61 72 79 5f 77 61 73 73 32 2c 20 27 62 27 | ein').pl.plot(x,.bary_wass2,.'b' |
7000 | 2c 20 6c 61 62 65 6c 3d 27 4c 50 20 57 61 73 73 65 72 73 74 65 69 6e 27 29 0a 70 6c 2e 6c 65 67 | ,.label='LP.Wasserstein').pl.leg |
7020 | 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 70 6c | end().pl.title('Barycenters').pl |
7040 | 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | .tight_layout()...############## |
7060 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7080 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
70a0 | 0a 23 20 44 69 72 61 63 20 44 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 | .#.Dirac.Data.#.----------..#%%. |
70c0 | 70 61 72 61 6d 65 74 65 72 73 0a 0a 61 31 20 3d 20 6e 70 2e 7a 65 72 6f 73 28 6e 29 0a 61 32 20 | parameters..a1.=.np.zeros(n).a2. |
70e0 | 3d 20 6e 70 2e 7a 65 72 6f 73 28 6e 29 0a 0a 61 31 5b 31 30 5d 20 3d 20 2e 32 35 0a 61 31 5b 32 | =.np.zeros(n)..a1[10].=..25.a1[2 |
7100 | 30 5d 20 3d 20 2e 35 0a 61 31 5b 33 30 5d 20 3d 20 2e 32 35 0a 61 32 5b 38 30 5d 20 3d 20 31 0a | 0].=..5.a1[30].=..25.a2[80].=.1. |
7120 | 0a 0a 61 31 20 2f 3d 20 61 31 2e 73 75 6d 28 29 0a 61 32 20 2f 3d 20 61 32 2e 73 75 6d 28 29 0a | ..a1./=.a1.sum().a2./=.a2.sum(). |
7140 | 0a 23 20 63 72 65 61 74 69 6e 67 20 6d 61 74 72 69 78 20 41 20 63 6f 6e 74 61 69 6e 69 6e 67 20 | .#.creating.matrix.A.containing. |
7160 | 61 6c 6c 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 41 20 3d 20 6e 70 2e 76 73 74 61 63 6b 28 | all.distributions.A.=.np.vstack( |
7180 | 28 61 31 2c 20 61 32 29 29 2e 54 0a 6e 5f 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 3d 20 41 2e | (a1,.a2)).T.n_distributions.=.A. |
71a0 | 73 68 61 70 65 5b 31 5d 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 20 2b 20 6e 6f 72 6d 61 6c | shape[1]..#.loss.matrix.+.normal |
71c0 | 69 7a 61 74 69 6f 6e 0a 4d 20 3d 20 6f 74 2e 75 74 69 6c 73 2e 64 69 73 74 30 28 6e 29 0a 4d 20 | ization.M.=.ot.utils.dist0(n).M. |
71e0 | 2f 3d 20 4d 2e 6d 61 78 28 29 0a 0a 0a 23 25 25 20 70 6c 6f 74 20 74 68 65 20 64 69 73 74 72 69 | /=.M.max()...#%%.plot.the.distri |
7200 | 62 75 74 69 6f 6e 73 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 36 | butions..pl.figure(1,.figsize=(6 |
7220 | 2e 34 2c 20 33 29 29 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6e 5f 64 69 73 74 72 69 62 | .4,.3)).for.i.in.range(n_distrib |
7240 | 75 74 69 6f 6e 73 29 3a 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 2c 20 41 5b 3a 2c 20 69 5d 29 | utions):.....pl.plot(x,.A[:,.i]) |
7260 | 0a 70 6c 2e 74 69 74 6c 65 28 27 44 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 70 6c 2e 74 69 | .pl.title('Distributions').pl.ti |
7280 | 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 0a 23 25 25 20 62 61 72 79 63 65 6e 74 65 72 20 63 6f | ght_layout()...#%%.barycenter.co |
72a0 | 6d 70 75 74 61 74 69 6f 6e 0a 0a 61 6c 70 68 61 20 3d 20 30 2e 35 20 20 23 20 30 3c 3d 61 6c 70 | mputation..alpha.=.0.5..#.0<=alp |
72c0 | 68 61 3c 3d 31 0a 77 65 69 67 68 74 73 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 31 20 2d 20 61 6c | ha<=1.weights.=.np.array([1.-.al |
72e0 | 70 68 61 2c 20 61 6c 70 68 61 5d 29 0a 0a 23 20 6c 32 62 61 72 79 0a 62 61 72 79 5f 6c 32 20 3d | pha,.alpha])..#.l2bary.bary_l2.= |
7300 | 20 41 2e 64 6f 74 28 77 65 69 67 68 74 73 29 0a 0a 23 20 77 61 73 73 65 72 73 74 65 69 6e 0a 72 | .A.dot(weights)..#.wasserstein.r |
7320 | 65 67 20 3d 20 31 65 2d 33 0a 6f 74 2e 74 69 63 28 29 0a 62 61 72 79 5f 77 61 73 73 20 3d 20 6f | eg.=.1e-3.ot.tic().bary_wass.=.o |
7340 | 74 2e 62 72 65 67 6d 61 6e 2e 62 61 72 79 63 65 6e 74 65 72 28 41 2c 20 4d 2c 20 72 65 67 2c 20 | t.bregman.barycenter(A,.M,.reg,. |
7360 | 77 65 69 67 68 74 73 29 0a 6f 74 2e 74 6f 63 28 29 0a 0a 0a 6f 74 2e 74 69 63 28 29 0a 62 61 72 | weights).ot.toc()...ot.tic().bar |
7380 | 79 5f 77 61 73 73 32 20 3d 20 6f 74 2e 6c 70 2e 62 61 72 79 63 65 6e 74 65 72 28 41 2c 20 4d 2c | y_wass2.=.ot.lp.barycenter(A,.M, |
73a0 | 20 77 65 69 67 68 74 73 2c 20 73 6f 6c 76 65 72 3d 27 69 6e 74 65 72 69 6f 72 2d 70 6f 69 6e 74 | .weights,.solver='interior-point |
73c0 | 27 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 6f 74 2e 74 6f 63 28 29 0a 0a 0a 70 72 6f 62 | ',.verbose=True).ot.toc()...prob |
73e0 | 6c 65 6d 73 2e 61 70 70 65 6e 64 28 5b 41 2c 20 5b 62 61 72 79 5f 6c 32 2c 20 62 61 72 79 5f 77 | lems.append([A,.[bary_l2,.bary_w |
7400 | 61 73 73 2c 20 62 61 72 79 5f 77 61 73 73 32 5d 5d 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 29 | ass,.bary_wass2]])..pl.figure(2) |
7420 | 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 31 2c 20 31 29 0a 66 6f | .pl.clf().pl.subplot(2,.1,.1).fo |
7440 | 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6e 5f 64 69 73 74 72 69 62 75 74 69 6f 6e 73 29 3a 0a 20 | r.i.in.range(n_distributions):.. |
7460 | 20 20 20 70 6c 2e 70 6c 6f 74 28 78 2c 20 41 5b 3a 2c 20 69 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 | ...pl.plot(x,.A[:,.i]).pl.title( |
7480 | 27 44 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 | 'Distributions')..pl.subplot(2,. |
74a0 | 31 2c 20 32 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 61 72 79 5f 6c 32 2c 20 27 72 27 2c 20 6c | 1,.2).pl.plot(x,.bary_l2,.'r',.l |
74c0 | 61 62 65 6c 3d 27 6c 32 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 61 72 79 5f 77 61 73 73 2c | abel='l2').pl.plot(x,.bary_wass, |
74e0 | 20 27 67 27 2c 20 6c 61 62 65 6c 3d 27 52 65 67 20 57 61 73 73 65 72 73 74 65 69 6e 27 29 0a 70 | .'g',.label='Reg.Wasserstein').p |
7500 | 6c 2e 70 6c 6f 74 28 78 2c 20 62 61 72 79 5f 77 61 73 73 32 2c 20 27 62 27 2c 20 6c 61 62 65 6c | l.plot(x,.bary_wass2,.'b',.label |
7520 | 3d 27 4c 50 20 57 61 73 73 65 72 73 74 65 69 6e 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 29 0a 70 | ='LP.Wasserstein').pl.legend().p |
7540 | 6c 2e 74 69 74 6c 65 28 27 42 61 72 79 63 65 6e 74 65 72 73 27 29 0a 70 6c 2e 74 69 67 68 74 5f | l.title('Barycenters').pl.tight_ |
7560 | 6c 61 79 6f 75 74 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | layout()...##################### |
7580 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
75a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 6e 61 | #########################.#.Fina |
75c0 | 6c 20 66 69 67 75 72 65 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 0a 23 25 25 20 70 | l.figure.#.------------.#..#%%.p |
75e0 | 6c 6f 74 0a 0a 6e 62 6d 20 3d 20 6c 65 6e 28 70 72 6f 62 6c 65 6d 73 29 0a 6e 62 6d 32 20 3d 20 | lot..nbm.=.len(problems).nbm2.=. |
7600 | 28 6e 62 6d 20 2f 2f 20 32 29 0a 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 28 32 30 2c 20 36 | (nbm.//.2)...pl.figure(2,.(20,.6 |
7620 | 29 29 0a 70 6c 2e 63 6c 66 28 29 0a 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6e 62 6d 29 | )).pl.clf()..for.i.in.range(nbm) |
7640 | 3a 0a 0a 20 20 20 20 41 20 3d 20 70 72 6f 62 6c 65 6d 73 5b 69 5d 5b 30 5d 0a 20 20 20 20 62 61 | :......A.=.problems[i][0].....ba |
7660 | 72 79 5f 6c 32 20 3d 20 70 72 6f 62 6c 65 6d 73 5b 69 5d 5b 31 5d 5b 30 5d 0a 20 20 20 20 62 61 | ry_l2.=.problems[i][1][0].....ba |
7680 | 72 79 5f 77 61 73 73 20 3d 20 70 72 6f 62 6c 65 6d 73 5b 69 5d 5b 31 5d 5b 31 5d 0a 20 20 20 20 | ry_wass.=.problems[i][1][1]..... |
76a0 | 62 61 72 79 5f 77 61 73 73 32 20 3d 20 70 72 6f 62 6c 65 6d 73 5b 69 5d 5b 31 5d 5b 32 5d 0a 0a | bary_wass2.=.problems[i][1][2].. |
76c0 | 20 20 20 20 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 6e 62 6d 2c 20 31 20 2b 20 69 29 0a 20 20 | ....pl.subplot(2,.nbm,.1.+.i)... |
76e0 | 20 20 66 6f 72 20 6a 20 69 6e 20 72 61 6e 67 65 28 6e 5f 64 69 73 74 72 69 62 75 74 69 6f 6e 73 | ..for.j.in.range(n_distributions |
7700 | 29 3a 0a 20 20 20 20 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 2c 20 41 5b 3a 2c 20 6a 5d 29 0a 20 | ):.........pl.plot(x,.A[:,.j]).. |
7720 | 20 20 20 69 66 20 69 20 3d 3d 20 6e 62 6d 32 3a 0a 20 20 20 20 20 20 20 20 70 6c 2e 74 69 74 6c | ...if.i.==.nbm2:.........pl.titl |
7740 | 65 28 27 44 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 20 20 20 20 70 6c 2e 78 74 69 63 6b 73 | e('Distributions').....pl.xticks |
7760 | 28 28 29 29 0a 20 20 20 20 70 6c 2e 79 74 69 63 6b 73 28 28 29 29 0a 0a 20 20 20 20 70 6c 2e 73 | (()).....pl.yticks(())......pl.s |
7780 | 75 62 70 6c 6f 74 28 32 2c 20 6e 62 6d 2c 20 31 20 2b 20 69 20 2b 20 6e 62 6d 29 0a 0a 20 20 20 | ubplot(2,.nbm,.1.+.i.+.nbm)..... |
77a0 | 20 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 61 72 79 5f 6c 32 2c 20 27 72 27 2c 20 6c 61 62 65 6c 3d | .pl.plot(x,.bary_l2,.'r',.label= |
77c0 | 27 4c 32 20 28 45 75 63 6c 69 64 65 61 6e 29 27 29 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 2c | 'L2.(Euclidean)').....pl.plot(x, |
77e0 | 20 62 61 72 79 5f 77 61 73 73 2c 20 27 67 27 2c 20 6c 61 62 65 6c 3d 27 52 65 67 20 57 61 73 73 | .bary_wass,.'g',.label='Reg.Wass |
7800 | 65 72 73 74 65 69 6e 27 29 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 61 72 79 5f 77 61 | erstein').....pl.plot(x,.bary_wa |
7820 | 73 73 32 2c 20 27 62 27 2c 20 6c 61 62 65 6c 3d 27 4c 50 20 57 61 73 73 65 72 73 74 65 69 6e 27 | ss2,.'b',.label='LP.Wasserstein' |
7840 | 29 0a 20 20 20 20 69 66 20 69 20 3d 3d 20 6e 62 6d 20 2d 20 31 3a 0a 20 20 20 20 20 20 20 20 70 | ).....if.i.==.nbm.-.1:.........p |
7860 | 6c 2e 6c 65 67 65 6e 64 28 29 0a 20 20 20 20 69 66 20 69 20 3d 3d 20 6e 62 6d 32 3a 0a 20 20 20 | l.legend().....if.i.==.nbm2:.... |
7880 | 20 20 20 20 20 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 20 20 | .....pl.title('Barycenters').... |
78a0 | 20 20 70 6c 2e 78 74 69 63 6b 73 28 28 29 29 0a 20 20 20 20 70 6c 2e 79 74 69 63 6b 73 28 28 29 | ..pl.xticks(()).....pl.yticks(() |
78c0 | 29 0a 50 4b 03 04 14 00 00 00 00 00 7c b0 94 50 b2 21 63 15 fc 07 00 00 fc 07 00 00 1f 00 00 00 | ).PK........|..P.!c............. |
78e0 | 70 6c 6f 74 5f 66 72 65 65 5f 73 75 70 70 6f 72 74 5f 62 61 72 79 63 65 6e 74 65 72 2e 70 79 23 | plot_free_support_barycenter.py# |
7900 | 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d | .-*-.coding:.utf-8.-*-.""".===== |
7920 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
7940 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 32 44 20 66 72 65 65 20 73 75 70 70 6f 72 74 20 | ===============.2D.free.support. |
7960 | 57 61 73 73 65 72 73 74 65 69 6e 20 62 61 72 79 63 65 6e 74 65 72 73 20 6f 66 20 64 69 73 74 72 | Wasserstein.barycenters.of.distr |
7980 | 69 62 75 74 69 6f 6e 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ibutions.======================= |
79a0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 49 | =============================..I |
79c0 | 6c 6c 75 73 74 72 61 74 69 6f 6e 20 6f 66 20 32 44 20 57 61 73 73 65 72 73 74 65 69 6e 20 62 61 | llustration.of.2D.Wasserstein.ba |
79e0 | 72 79 63 65 6e 74 65 72 73 20 69 66 20 64 69 73 63 72 69 62 75 74 69 6f 6e 73 20 74 68 61 74 20 | rycenters.if.discributions.that. |
7a00 | 61 72 65 20 77 65 69 67 68 74 65 64 0a 73 75 6d 20 6f 66 20 64 69 72 61 63 73 2e 0a 0a 22 22 22 | are.weighted.sum.of.diracs...""" |
7a20 | 0a 0a 23 20 41 75 74 68 6f 72 3a 20 56 69 76 69 65 6e 20 53 65 67 75 79 20 3c 76 69 76 69 65 6e | ..#.Author:.Vivien.Seguy.<vivien |
7a40 | 2e 73 65 67 75 79 40 69 69 70 2e 69 73 74 2e 69 2e 6b 79 6f 74 6f 2d 75 2e 61 63 2e 6a 70 3e 0a | .seguy@iip.ist.i.kyoto-u.ac.jp>. |
7a60 | 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 | #.#.License:.MIT.License..import |
7a80 | 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 | .numpy.as.np.import.matplotlib.p |
7aa0 | 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 0a 0a 23 23 23 23 23 23 23 23 23 | ylab.as.pl.import.ot...######### |
7ac0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7ae0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7b00 | 23 23 23 23 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d | #####.#.Generate.data.#.-------- |
7b20 | 2d 2d 2d 2d 2d 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 20 61 6e 64 20 64 61 74 61 20 67 65 | -----.#%%.parameters.and.data.ge |
7b40 | 6e 65 72 61 74 69 6f 6e 0a 4e 20 3d 20 33 0a 64 20 3d 20 32 0a 6d 65 61 73 75 72 65 73 5f 6c 6f | neration.N.=.3.d.=.2.measures_lo |
7b60 | 63 61 74 69 6f 6e 73 20 3d 20 5b 5d 0a 6d 65 61 73 75 72 65 73 5f 77 65 69 67 68 74 73 20 3d 20 | cations.=.[].measures_weights.=. |
7b80 | 5b 5d 0a 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 4e 29 3a 0a 0a 20 20 20 20 6e 5f 69 20 | []..for.i.in.range(N):......n_i. |
7ba0 | 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 69 6e 74 28 6c 6f 77 3d 31 2c 20 68 69 67 68 3d | =.np.random.randint(low=1,.high= |
7bc0 | 32 30 29 20 20 23 20 6e 62 20 73 61 6d 70 6c 65 73 0a 0a 20 20 20 20 6d 75 5f 69 20 3d 20 6e 70 | 20)..#.nb.samples......mu_i.=.np |
7be0 | 2e 72 61 6e 64 6f 6d 2e 6e 6f 72 6d 61 6c 28 30 2e 2c 20 34 2e 2c 20 28 64 2c 29 29 20 20 23 20 | .random.normal(0.,.4.,.(d,))..#. |
7c00 | 47 61 75 73 73 69 61 6e 20 6d 65 61 6e 0a 0a 20 20 20 20 41 5f 69 20 3d 20 6e 70 2e 72 61 6e 64 | Gaussian.mean......A_i.=.np.rand |
7c20 | 6f 6d 2e 72 61 6e 64 28 64 2c 20 64 29 0a 20 20 20 20 63 6f 76 5f 69 20 3d 20 6e 70 2e 64 6f 74 | om.rand(d,.d).....cov_i.=.np.dot |
7c40 | 28 41 5f 69 2c 20 41 5f 69 2e 74 72 61 6e 73 70 6f 73 65 28 29 29 20 20 23 20 47 61 75 73 73 69 | (A_i,.A_i.transpose())..#.Gaussi |
7c60 | 61 6e 20 63 6f 76 61 72 69 61 6e 63 65 20 6d 61 74 72 69 78 0a 0a 20 20 20 20 78 5f 69 20 3d 20 | an.covariance.matrix......x_i.=. |
7c80 | 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 32 44 5f 73 61 6d 70 6c 65 73 5f 67 61 75 73 | ot.datasets.make_2D_samples_gaus |
7ca0 | 73 28 6e 5f 69 2c 20 6d 75 5f 69 2c 20 63 6f 76 5f 69 29 20 20 23 20 44 69 72 61 63 20 6c 6f 63 | s(n_i,.mu_i,.cov_i)..#.Dirac.loc |
7cc0 | 61 74 69 6f 6e 73 0a 20 20 20 20 62 5f 69 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 75 6e 69 66 6f | ations.....b_i.=.np.random.unifo |
7ce0 | 72 6d 28 30 2e 2c 20 31 2e 2c 20 28 6e 5f 69 2c 29 29 0a 20 20 20 20 62 5f 69 20 3d 20 62 5f 69 | rm(0.,.1.,.(n_i,)).....b_i.=.b_i |
7d00 | 20 2f 20 6e 70 2e 73 75 6d 28 62 5f 69 29 20 20 23 20 44 69 72 61 63 20 77 65 69 67 68 74 73 0a | ./.np.sum(b_i)..#.Dirac.weights. |
7d20 | 0a 20 20 20 20 6d 65 61 73 75 72 65 73 5f 6c 6f 63 61 74 69 6f 6e 73 2e 61 70 70 65 6e 64 28 78 | .....measures_locations.append(x |
7d40 | 5f 69 29 0a 20 20 20 20 6d 65 61 73 75 72 65 73 5f 77 65 69 67 68 74 73 2e 61 70 70 65 6e 64 28 | _i).....measures_weights.append( |
7d60 | 62 5f 69 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | b_i)...######################### |
7d80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7da0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 43 6f 6d 70 75 74 65 20 | #####################.#.Compute. |
7dc0 | 66 72 65 65 20 73 75 70 70 6f 72 74 20 62 61 72 79 63 65 6e 74 65 72 0a 23 20 2d 2d 2d 2d 2d 2d | free.support.barycenter.#.------ |
7de0 | 2d 2d 2d 2d 2d 2d 2d 0a 0a 6b 20 3d 20 31 30 20 20 23 20 6e 75 6d 62 65 72 20 6f 66 20 44 69 72 | -------..k.=.10..#.number.of.Dir |
7e00 | 61 63 73 20 6f 66 20 74 68 65 20 62 61 72 79 63 65 6e 74 65 72 0a 58 5f 69 6e 69 74 20 3d 20 6e | acs.of.the.barycenter.X_init.=.n |
7e20 | 70 2e 72 61 6e 64 6f 6d 2e 6e 6f 72 6d 61 6c 28 30 2e 2c 20 31 2e 2c 20 28 6b 2c 20 64 29 29 20 | p.random.normal(0.,.1.,.(k,.d)). |
7e40 | 20 23 20 69 6e 69 74 69 61 6c 20 44 69 72 61 63 20 6c 6f 63 61 74 69 6f 6e 73 0a 62 20 3d 20 6e | .#.initial.Dirac.locations.b.=.n |
7e60 | 70 2e 6f 6e 65 73 28 28 6b 2c 29 29 20 2f 20 6b 20 20 23 20 77 65 69 67 68 74 73 20 6f 66 20 74 | p.ones((k,))./.k..#.weights.of.t |
7e80 | 68 65 20 62 61 72 79 63 65 6e 74 65 72 20 28 69 74 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 6f 70 | he.barycenter.(it.will.not.be.op |
7ea0 | 74 69 6d 69 7a 65 64 2c 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 | timized,.only.the.locations.are. |
7ec0 | 6f 70 74 69 6d 69 7a 65 64 29 0a 0a 58 20 3d 20 6f 74 2e 6c 70 2e 66 72 65 65 5f 73 75 70 70 6f | optimized)..X.=.ot.lp.free_suppo |
7ee0 | 72 74 5f 62 61 72 79 63 65 6e 74 65 72 28 6d 65 61 73 75 72 65 73 5f 6c 6f 63 61 74 69 6f 6e 73 | rt_barycenter(measures_locations |
7f00 | 2c 20 6d 65 61 73 75 72 65 73 5f 77 65 69 67 68 74 73 2c 20 58 5f 69 6e 69 74 2c 20 62 29 0a 0a | ,.measures_weights,.X_init,.b).. |
7f20 | 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | .############################### |
7f40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7f60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 64 61 74 61 0a 23 20 2d 2d | ###############.#.Plot.data.#.-- |
7f80 | 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 29 0a 66 6f 72 20 28 78 5f 69 2c 20 | -------..pl.figure(1).for.(x_i,. |
7fa0 | 62 5f 69 29 20 69 6e 20 7a 69 70 28 6d 65 61 73 75 72 65 73 5f 6c 6f 63 61 74 69 6f 6e 73 2c 20 | b_i).in.zip(measures_locations,. |
7fc0 | 6d 65 61 73 75 72 65 73 5f 77 65 69 67 68 74 73 29 3a 0a 20 20 20 20 63 6f 6c 6f 72 20 3d 20 6e | measures_weights):.....color.=.n |
7fe0 | 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 69 6e 74 28 6c 6f 77 3d 31 2c 20 68 69 67 68 3d 31 30 20 | p.random.randint(low=1,.high=10. |
8000 | 2a 20 4e 29 0a 20 20 20 20 70 6c 2e 73 63 61 74 74 65 72 28 78 5f 69 5b 3a 2c 20 30 5d 2c 20 78 | *.N).....pl.scatter(x_i[:,.0],.x |
8020 | 5f 69 5b 3a 2c 20 31 5d 2c 20 73 3d 62 5f 69 20 2a 20 31 30 30 30 2c 20 6c 61 62 65 6c 3d 27 69 | _i[:,.1],.s=b_i.*.1000,.label='i |
8040 | 6e 70 75 74 20 6d 65 61 73 75 72 65 27 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 5b 3a 2c 20 30 | nput.measure').pl.scatter(X[:,.0 |
8060 | 5d 2c 20 58 5b 3a 2c 20 31 5d 2c 20 73 3d 62 20 2a 20 31 30 30 30 2c 20 63 3d 27 62 6c 61 63 6b | ],.X[:,.1],.s=b.*.1000,.c='black |
8080 | 27 2c 20 6d 61 72 6b 65 72 3d 27 5e 27 2c 20 6c 61 62 65 6c 3d 27 32 2d 57 61 73 73 65 72 73 74 | ',.marker='^',.label='2-Wasserst |
80a0 | 65 69 6e 20 62 61 72 79 63 65 6e 74 65 72 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 44 61 74 61 20 | ein.barycenter').pl.title('Data. |
80c0 | 6d 65 61 73 75 72 65 73 20 61 6e 64 20 74 68 65 69 72 20 62 61 72 79 63 65 6e 74 65 72 27 29 0a | measures.and.their.barycenter'). |
80e0 | 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 | pl.legend(loc=0).pl.show().PK... |
8100 | 00 00 00 00 00 7c 68 3a 4f b8 cd f6 1b 7e 0b 00 00 7e 0b 00 00 13 00 00 00 70 6c 6f 74 5f 6f 70 | .....|h:O....~...~.......plot_op |
8120 | 74 69 6d 5f 4f 54 72 65 67 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 | tim_OTreg.py#.-*-.coding:.utf-8. |
8140 | 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | -*-.""".======================== |
8160 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 65 67 75 6c 61 72 69 7a 65 64 20 4f 54 20 77 69 74 68 20 67 | ==========.Regularized.OT.with.g |
8180 | 65 6e 65 72 69 63 20 73 6f 6c 76 65 72 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | eneric.solver.================== |
81a0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 49 6c 6c 75 73 74 72 61 74 65 73 20 74 68 | ================..Illustrates.th |
81c0 | 65 20 75 73 65 20 6f 66 20 74 68 65 20 67 65 6e 65 72 69 63 20 73 6f 6c 76 65 72 20 66 6f 72 20 | e.use.of.the.generic.solver.for. |
81e0 | 72 65 67 75 6c 61 72 69 7a 65 64 20 4f 54 20 77 69 74 68 0a 75 73 65 72 2d 64 65 73 69 67 6e 65 | regularized.OT.with.user-designe |
8200 | 64 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 20 74 65 72 6d 2e 20 49 74 20 75 73 65 73 20 43 | d.regularization.term..It.uses.C |
8220 | 6f 6e 64 69 74 69 6f 6e 61 6c 20 67 72 61 64 69 65 6e 74 20 61 73 20 69 6e 20 5b 36 5d 20 61 6e | onditional.gradient.as.in.[6].an |
8240 | 64 0a 67 65 6e 65 72 61 6c 69 7a 65 64 20 43 6f 6e 64 69 74 69 6f 6e 61 6c 20 47 72 61 64 69 65 | d.generalized.Conditional.Gradie |
8260 | 6e 74 20 61 73 20 70 72 6f 70 6f 73 65 64 20 69 6e 20 5b 35 5d 5b 37 5d 2e 0a 0a 0a 5b 35 5d 20 | nt.as.proposed.in.[5][7]....[5]. |
8280 | 4e 2e 20 43 6f 75 72 74 79 3b 20 52 2e 20 46 6c 61 6d 61 72 79 3b 20 44 2e 20 54 75 69 61 3b 20 | N..Courty;.R..Flamary;.D..Tuia;. |
82a0 | 41 2e 20 52 61 6b 6f 74 6f 6d 61 6d 6f 6e 6a 79 2c 20 4f 70 74 69 6d 61 6c 20 54 72 61 6e 73 70 | A..Rakotomamonjy,.Optimal.Transp |
82c0 | 6f 72 74 20 66 6f 72 0a 44 6f 6d 61 69 6e 20 41 64 61 70 74 61 74 69 6f 6e 2c 20 69 6e 20 49 45 | ort.for.Domain.Adaptation,.in.IE |
82e0 | 45 45 20 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 6f 6e 20 50 61 74 74 65 72 6e 20 41 6e 61 6c 79 | EE.Transactions.on.Pattern.Analy |
8300 | 73 69 73 20 61 6e 64 20 4d 61 63 68 69 6e 65 0a 49 6e 74 65 6c 6c 69 67 65 6e 63 65 20 2c 20 76 | sis.and.Machine.Intelligence.,.v |
8320 | 6f 6c 2e 50 50 2c 20 6e 6f 2e 39 39 2c 20 70 70 2e 31 2d 31 2e 0a 0a 5b 36 5d 20 46 65 72 72 61 | ol.PP,.no.99,.pp.1-1...[6].Ferra |
8340 | 64 61 6e 73 2c 20 53 2e 2c 20 50 61 70 61 64 61 6b 69 73 2c 20 4e 2e 2c 20 50 65 79 72 c3 a9 2c | dans,.S.,.Papadakis,.N.,.Peyr.., |
8360 | 20 47 2e 2c 20 26 20 41 75 6a 6f 6c 2c 20 4a 2e 20 46 2e 20 28 32 30 31 34 29 2e 0a 52 65 67 75 | .G.,.&.Aujol,.J..F..(2014)..Regu |
8380 | 6c 61 72 69 7a 65 64 20 64 69 73 63 72 65 74 65 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f | larized.discrete.optimal.transpo |
83a0 | 72 74 2e 20 53 49 41 4d 20 4a 6f 75 72 6e 61 6c 20 6f 6e 20 49 6d 61 67 69 6e 67 20 53 63 69 65 | rt..SIAM.Journal.on.Imaging.Scie |
83c0 | 6e 63 65 73 2c 0a 37 28 33 29 2c 20 31 38 35 33 2d 31 38 38 32 2e 0a 0a 5b 37 5d 20 52 61 6b 6f | nces,.7(3),.1853-1882...[7].Rako |
83e0 | 74 6f 6d 61 6d 6f 6e 6a 79 2c 20 41 2e 2c 20 46 6c 61 6d 61 72 79 2c 20 52 2e 2c 20 26 20 43 6f | tomamonjy,.A.,.Flamary,.R.,.&.Co |
8400 | 75 72 74 79 2c 20 4e 2e 20 28 32 30 31 35 29 2e 20 47 65 6e 65 72 61 6c 69 7a 65 64 0a 63 6f 6e | urty,.N..(2015)..Generalized.con |
8420 | 64 69 74 69 6f 6e 61 6c 20 67 72 61 64 69 65 6e 74 3a 20 61 6e 61 6c 79 73 69 73 20 6f 66 20 63 | ditional.gradient:.analysis.of.c |
8440 | 6f 6e 76 65 72 67 65 6e 63 65 20 61 6e 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 2e 0a 61 72 58 | onvergence.and.applications..arX |
8460 | 69 76 20 70 72 65 70 72 69 6e 74 20 61 72 58 69 76 3a 31 35 31 30 2e 30 36 35 36 37 2e 0a 0a 0a | iv.preprint.arXiv:1510.06567.... |
8480 | 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 | ."""..import.numpy.as.np.import. |
84a0 | 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 | matplotlib.pylab.as.pl.import.ot |
84c0 | 0a 69 6d 70 6f 72 74 20 6f 74 2e 70 6c 6f 74 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | .import.ot.plot..############### |
84e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8500 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a | ###############################. |
8520 | 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a | #.Generate.data.#.-------------. |
8540 | 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 6e 20 3d 20 31 30 30 20 20 23 20 6e 62 20 62 | .#%%.parameters..n.=.100..#.nb.b |
8560 | 69 6e 73 0a 0a 23 20 62 69 6e 20 70 6f 73 69 74 69 6f 6e 73 0a 78 20 3d 20 6e 70 2e 61 72 61 6e | ins..#.bin.positions.x.=.np.aran |
8580 | 67 65 28 6e 2c 20 64 74 79 70 65 3d 6e 70 2e 66 6c 6f 61 74 36 34 29 0a 0a 23 20 47 61 75 73 73 | ge(n,.dtype=np.float64)..#.Gauss |
85a0 | 69 61 6e 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 61 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 | ian.distributions.a.=.ot.dataset |
85c0 | 73 2e 6d 61 6b 65 5f 31 44 5f 67 61 75 73 73 28 6e 2c 20 6d 3d 32 30 2c 20 73 3d 35 29 20 20 23 | s.make_1D_gauss(n,.m=20,.s=5)..# |
85e0 | 20 6d 3d 20 6d 65 61 6e 2c 20 73 3d 20 73 74 64 0a 62 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 | .m=.mean,.s=.std.b.=.ot.datasets |
8600 | 2e 6d 61 6b 65 5f 31 44 5f 67 61 75 73 73 28 6e 2c 20 6d 3d 36 30 2c 20 73 3d 31 30 29 0a 0a 23 | .make_1D_gauss(n,.m=60,.s=10)..# |
8620 | 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 20 3d 20 6f 74 2e 64 69 73 74 28 78 2e 72 65 73 68 61 | .loss.matrix.M.=.ot.dist(x.resha |
8640 | 70 65 28 28 6e 2c 20 31 29 29 2c 20 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 29 0a 4d | pe((n,.1)),.x.reshape((n,.1))).M |
8660 | 20 2f 3d 20 4d 2e 6d 61 78 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ./=.M.max()..################### |
8680 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
86a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 53 6f | ###########################.#.So |
86c0 | 6c 76 65 20 45 4d 44 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 45 4d 44 0a 0a 47 30 | lve.EMD.#.---------..#%%.EMD..G0 |
86e0 | 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 33 2c | .=.ot.emd(a,.b,.M)..pl.figure(3, |
8700 | 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f | .figsize=(5,.5)).ot.plot.plot1D_ |
8720 | 6d 61 74 28 61 2c 20 62 2c 20 47 30 2c 20 27 4f 54 20 6d 61 74 72 69 78 20 47 30 27 29 0a 0a 23 | mat(a,.b,.G0,.'OT.matrix.G0')..# |
8740 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8760 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8780 | 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 53 6f 6c 76 65 20 45 4d 44 20 77 69 74 68 20 46 | #############.#.Solve.EMD.with.F |
87a0 | 72 6f 62 65 6e 69 75 73 20 6e 6f 72 6d 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 23 20 2d | robenius.norm.regularization.#.- |
87c0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
87e0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 45 78 61 6d 70 6c 65 20 77 69 74 68 20 46 72 | -----------..#%%.Example.with.Fr |
8800 | 6f 62 65 6e 69 75 73 20 6e 6f 72 6d 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 0a 0a 64 65 | obenius.norm.regularization...de |
8820 | 66 20 66 28 47 29 3a 0a 20 20 20 20 72 65 74 75 72 6e 20 30 2e 35 20 2a 20 6e 70 2e 73 75 6d 28 | f.f(G):.....return.0.5.*.np.sum( |
8840 | 47 2a 2a 32 29 0a 0a 0a 64 65 66 20 64 66 28 47 29 3a 0a 20 20 20 20 72 65 74 75 72 6e 20 47 0a | G**2)...def.df(G):.....return.G. |
8860 | 0a 0a 72 65 67 20 3d 20 31 65 2d 31 0a 0a 47 6c 32 20 3d 20 6f 74 2e 6f 70 74 69 6d 2e 63 67 28 | ..reg.=.1e-1..Gl2.=.ot.optim.cg( |
8880 | 61 2c 20 62 2c 20 4d 2c 20 72 65 67 2c 20 66 2c 20 64 66 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 | a,.b,.M,.reg,.f,.df,.verbose=Tru |
88a0 | 65 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 33 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f | e)..pl.figure(3).ot.plot.plot1D_ |
88c0 | 6d 61 74 28 61 2c 20 62 2c 20 47 6c 32 2c 20 27 4f 54 20 6d 61 74 72 69 78 20 46 72 6f 62 2e 20 | mat(a,.b,.Gl2,.'OT.matrix.Frob.. |
88e0 | 72 65 67 27 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | reg')..######################### |
8900 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8920 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 53 6f 6c 76 65 20 45 4d | #####################.#.Solve.EM |
8940 | 44 20 77 69 74 68 20 65 6e 74 72 6f 70 69 63 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 23 | D.with.entropic.regularization.# |
8960 | 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | .------------------------------- |
8980 | 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 45 78 61 6d 70 6c 65 20 77 69 74 68 20 65 6e 74 72 6f 70 | -------..#%%.Example.with.entrop |
89a0 | 69 63 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 0a 0a 64 65 66 20 66 28 47 29 3a 0a 20 20 | ic.regularization...def.f(G):... |
89c0 | 20 20 72 65 74 75 72 6e 20 6e 70 2e 73 75 6d 28 47 20 2a 20 6e 70 2e 6c 6f 67 28 47 29 29 0a 0a | ..return.np.sum(G.*.np.log(G)).. |
89e0 | 0a 64 65 66 20 64 66 28 47 29 3a 0a 20 20 20 20 72 65 74 75 72 6e 20 6e 70 2e 6c 6f 67 28 47 29 | .def.df(G):.....return.np.log(G) |
8a00 | 20 2b 20 31 2e 0a 0a 0a 72 65 67 20 3d 20 31 65 2d 33 0a 0a 47 65 20 3d 20 6f 74 2e 6f 70 74 69 | .+.1....reg.=.1e-3..Ge.=.ot.opti |
8a20 | 6d 2e 63 67 28 61 2c 20 62 2c 20 4d 2c 20 72 65 67 2c 20 66 2c 20 64 66 2c 20 76 65 72 62 6f 73 | m.cg(a,.b,.M,.reg,.f,.df,.verbos |
8a40 | 65 3d 54 72 75 65 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 35 | e=True)..pl.figure(4,.figsize=(5 |
8a60 | 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 47 | ,.5)).ot.plot.plot1D_mat(a,.b,.G |
8a80 | 65 2c 20 27 4f 54 20 6d 61 74 72 69 78 20 45 6e 74 72 6f 70 2e 20 72 65 67 27 29 0a 0a 23 23 23 | e,.'OT.matrix.Entrop..reg')..### |
8aa0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8ac0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8ae0 | 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 53 6f 6c 76 65 20 45 4d 44 20 77 69 74 68 20 46 72 6f | ###########.#.Solve.EMD.with.Fro |
8b00 | 62 65 6e 69 75 73 20 6e 6f 72 6d 20 2b 20 65 6e 74 72 6f 70 69 63 20 72 65 67 75 6c 61 72 69 7a | benius.norm.+.entropic.regulariz |
8b20 | 61 74 69 6f 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | ation.#.------------------------ |
8b40 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a | -------------------------------. |
8b60 | 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 |
8b80 | 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. |
8ba0 | 67 63 67 0a 0a 0a 64 65 66 20 66 28 47 29 3a 0a 20 20 20 20 72 65 74 75 72 6e 20 30 2e 35 20 2a | gcg...def.f(G):.....return.0.5.* |
8bc0 | 20 6e 70 2e 73 75 6d 28 47 2a 2a 32 29 0a 0a 0a 64 65 66 20 64 66 28 47 29 3a 0a 20 20 20 20 72 | .np.sum(G**2)...def.df(G):.....r |
8be0 | 65 74 75 72 6e 20 47 0a 0a 0a 72 65 67 31 20 3d 20 31 65 2d 33 0a 72 65 67 32 20 3d 20 31 65 2d | eturn.G...reg1.=.1e-3.reg2.=.1e- |
8c00 | 31 0a 0a 47 65 6c 32 20 3d 20 6f 74 2e 6f 70 74 69 6d 2e 67 63 67 28 61 2c 20 62 2c 20 4d 2c 20 | 1..Gel2.=.ot.optim.gcg(a,.b,.M,. |
8c20 | 72 65 67 31 2c 20 72 65 67 32 2c 20 66 2c 20 64 66 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 | reg1,.reg2,.f,.df,.verbose=True) |
8c40 | 0a 0a 70 6c 2e 66 69 67 75 72 65 28 35 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 29 0a 6f | ..pl.figure(5,.figsize=(5,.5)).o |
8c60 | 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 47 65 6c 32 2c 20 27 4f | t.plot.plot1D_mat(a,.b,.Gel2,.'O |
8c80 | 54 20 65 6e 74 72 6f 70 69 63 20 2b 20 6d 61 74 72 69 78 20 46 72 6f 62 2e 20 72 65 67 27 29 0a | T.entropic.+.matrix.Frob..reg'). |
8ca0 | 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 83 68 3a 4f 0e e0 72 82 97 0b 00 00 | pl.show().PK.........h:O..r..... |
8cc0 | 97 0b 00 00 1b 00 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 6c 69 6e 65 61 72 5f 6d 61 70 70 69 6e 67 | ........plot_otda_linear_mapping |
8ce0 | 2e 70 79 23 21 2f 75 73 72 2f 62 69 6e 2f 65 6e 76 20 70 79 74 68 6f 6e 33 0a 23 20 2d 2a 2d 20 | .py#!/usr/bin/env.python3.#.-*-. |
8d00 | 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | coding:.utf-8.-*-.""".========== |
8d20 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4c 69 6e 65 61 72 20 4f 54 20 6d 61 70 | ==================.Linear.OT.map |
8d40 | 70 69 6e 67 20 65 73 74 69 6d 61 74 69 6f 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ping.estimation.================ |
8d60 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a 20 52 65 | ============..."""..#.Author:.Re |
8d80 | 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 | mi.Flamary.<remi.flamary@unice.f |
8da0 | 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 | r>.#.#.License:.MIT.License..imp |
8dc0 | 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 70 79 6c 61 62 20 61 73 20 | ort.numpy.as.np.import.pylab.as. |
8de0 | 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | pl.import.ot..################## |
8e00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8e20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 47 | ############################.#.G |
8e40 | 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 6e 20 | enerate.data.#.-------------..n. |
8e60 | 3d 20 31 30 30 30 0a 64 20 3d 20 32 0a 73 69 67 6d 61 20 3d 20 2e 31 0a 0a 23 20 73 6f 75 72 63 | =.1000.d.=.2.sigma.=..1..#.sourc |
8e80 | 65 20 73 61 6d 70 6c 65 73 0a 61 6e 67 6c 65 73 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e | e.samples.angles.=.np.random.ran |
8ea0 | 64 28 6e 2c 20 31 29 20 2a 20 32 20 2a 20 6e 70 2e 70 69 0a 78 73 20 3d 20 6e 70 2e 63 6f 6e 63 | d(n,.1).*.2.*.np.pi.xs.=.np.conc |
8ec0 | 61 74 65 6e 61 74 65 28 28 6e 70 2e 73 69 6e 28 61 6e 67 6c 65 73 29 2c 20 6e 70 2e 63 6f 73 28 | atenate((np.sin(angles),.np.cos( |
8ee0 | 61 6e 67 6c 65 73 29 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 78 | angles)),.....................ax |
8f00 | 69 73 3d 31 29 20 2b 20 73 69 67 6d 61 20 2a 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 6e 28 | is=1).+.sigma.*.np.random.randn( |
8f20 | 6e 2c 20 32 29 0a 78 73 5b 3a 6e 20 2f 2f 20 32 2c 20 31 5d 20 2b 3d 20 32 0a 0a 0a 23 20 74 61 | n,.2).xs[:n.//.2,.1].+=.2...#.ta |
8f40 | 72 67 65 74 20 73 61 6d 70 6c 65 73 0a 61 6e 67 6c 65 74 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e | rget.samples.anglet.=.np.random. |
8f60 | 72 61 6e 64 28 6e 2c 20 31 29 20 2a 20 32 20 2a 20 6e 70 2e 70 69 0a 78 74 20 3d 20 6e 70 2e 63 | rand(n,.1).*.2.*.np.pi.xt.=.np.c |
8f80 | 6f 6e 63 61 74 65 6e 61 74 65 28 28 6e 70 2e 73 69 6e 28 61 6e 67 6c 65 74 29 2c 20 6e 70 2e 63 | oncatenate((np.sin(anglet),.np.c |
8fa0 | 6f 73 28 61 6e 67 6c 65 74 29 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | os(anglet)),.................... |
8fc0 | 20 61 78 69 73 3d 31 29 20 2b 20 73 69 67 6d 61 20 2a 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e | .axis=1).+.sigma.*.np.random.ran |
8fe0 | 64 6e 28 6e 2c 20 32 29 0a 78 74 5b 3a 6e 20 2f 2f 20 32 2c 20 31 5d 20 2b 3d 20 32 0a 0a 0a 41 | dn(n,.2).xt[:n.//.2,.1].+=.2...A |
9000 | 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 5b 31 2e 35 2c 20 2e 37 5d 2c 20 5b 2e 37 2c 20 31 2e 35 | .=.np.array([[1.5,..7],.[.7,.1.5 |
9020 | 5d 5d 29 0a 62 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 5b 34 2c 20 32 5d 5d 29 0a 78 74 20 3d 20 | ]]).b.=.np.array([[4,.2]]).xt.=. |
9040 | 78 74 2e 64 6f 74 28 41 29 20 2b 20 62 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | xt.dot(A).+.b..################# |
9060 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
9080 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 | #############################.#. |
90a0 | 50 6c 6f 74 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 | Plot.data.#.---------..pl.figure |
90c0 | 28 31 2c 20 28 35 2c 20 35 29 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 | (1,.(5,.5)).pl.plot(xs[:,.0],.xs |
90e0 | 5b 3a 2c 20 31 5d 2c 20 27 2b 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 | [:,.1],.'+').pl.plot(xt[:,.0],.x |
9100 | 74 5b 3a 2c 20 31 5d 2c 20 27 6f 27 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | t[:,.1],.'o')...################ |
9120 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
9140 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 | ##############################.# |
9160 | 20 45 73 74 69 6d 61 74 65 20 6c 69 6e 65 61 72 20 6d 61 70 70 69 6e 67 20 61 6e 64 20 74 72 61 | .Estimate.linear.mapping.and.tra |
9180 | 6e 73 70 6f 72 74 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | nsport.#.----------------------- |
91a0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 41 65 2c 20 62 65 20 3d 20 6f 74 2e 64 61 2e 4f | --------------..Ae,.be.=.ot.da.O |
91c0 | 54 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 28 78 73 2c 20 78 74 29 0a 0a 78 73 74 20 3d 20 | T_mapping_linear(xs,.xt)..xst.=. |
91e0 | 78 73 2e 64 6f 74 28 41 65 29 20 2b 20 62 65 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | xs.dot(Ae).+.be...############## |
9200 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
9220 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
9240 | 0a 23 20 50 6c 6f 74 20 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 0a 23 20 2d 2d | .#.Plot.transported.samples.#.-- |
9260 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 | ----------------------..pl.figur |
9280 | 65 28 31 2c 20 28 35 2c 20 35 29 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 | e(1,.(5,.5)).pl.clf().pl.plot(xs |
92a0 | 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 | [:,.0],.xs[:,.1],.'+').pl.plot(x |
92c0 | 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 6f 27 29 0a 70 6c 2e 70 6c 6f 74 28 | t[:,.0],.xt[:,.1],.'o').pl.plot( |
92e0 | 78 73 74 5b 3a 2c 20 30 5d 2c 20 78 73 74 5b 3a 2c 20 31 5d 2c 20 27 2b 27 29 0a 0a 70 6c 2e 73 | xst[:,.0],.xst[:,.1],.'+')..pl.s |
9300 | 68 6f 77 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | how()..######################### |
9320 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
9340 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 4c 6f 61 64 20 69 6d 61 | #####################.#.Load.ima |
9360 | 67 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 64 65 66 20 | ge.data.#.---------------...def. |
9380 | 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 20 61 6e 64 20 69 | im2mat(I):....."""Converts.and.i |
93a0 | 6d 61 67 65 20 74 6f 20 6d 61 74 72 69 78 20 28 6f 6e 65 20 70 69 78 65 6c 20 70 65 72 20 6c 69 | mage.to.matrix.(one.pixel.per.li |
93c0 | 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 65 28 28 49 2e 73 | ne)""".....return.I.reshape((I.s |
93e0 | 68 61 70 65 5b 30 5d 20 2a 20 49 2e 73 68 61 70 65 5b 31 5d 2c 20 49 2e 73 68 61 70 65 5b 32 5d | hape[0].*.I.shape[1],.I.shape[2] |
9400 | 29 29 0a 0a 0a 64 65 66 20 6d 61 74 32 69 6d 28 58 2c 20 73 68 61 70 65 29 3a 0a 20 20 20 20 22 | ))...def.mat2im(X,.shape):....." |
9420 | 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 69 | ""Converts.back.a.matrix.to.an.i |
9440 | 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 61 | mage""".....return.X.reshape(sha |
9460 | 70 65 29 0a 0a 0a 64 65 66 20 6d 69 6e 6d 61 78 28 49 29 3a 0a 20 20 20 20 72 65 74 75 72 6e 20 | pe)...def.minmax(I):.....return. |
9480 | 6e 70 2e 63 6c 69 70 28 49 2c 20 30 2c 20 31 29 0a 0a 0a 23 20 4c 6f 61 64 69 6e 67 20 69 6d 61 | np.clip(I,.0,.1)...#.Loading.ima |
94a0 | 67 65 73 0a 49 31 20 3d 20 70 6c 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 6f 63 65 61 | ges.I1.=.pl.imread('../data/ocea |
94c0 | 6e 5f 64 61 79 2e 6a 70 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 20 2f | n_day.jpg').astype(np.float64)./ |
94e0 | 20 32 35 36 0a 49 32 20 3d 20 70 6c 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 6f 63 65 | .256.I2.=.pl.imread('../data/oce |
9500 | 61 6e 5f 73 75 6e 73 65 74 2e 6a 70 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 | an_sunset.jpg').astype(np.float6 |
9520 | 34 29 20 2f 20 32 35 36 0a 0a 0a 58 31 20 3d 20 69 6d 32 6d 61 74 28 49 31 29 0a 58 32 20 3d 20 | 4)./.256...X1.=.im2mat(I1).X2.=. |
9540 | 69 6d 32 6d 61 74 28 49 32 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | im2mat(I2)..#################### |
9560 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
9580 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 45 73 74 | ##########################.#.Est |
95a0 | 69 6d 61 74 65 20 6d 61 70 70 69 6e 67 20 61 6e 64 20 61 64 61 70 74 0a 23 20 2d 2d 2d 2d 2d 2d | imate.mapping.and.adapt.#.------ |
95c0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 6d 61 70 70 69 6e 67 20 | ----------------------..mapping. |
95e0 | 3d 20 6f 74 2e 64 61 2e 4c 69 6e 65 61 72 54 72 61 6e 73 70 6f 72 74 28 29 0a 0a 6d 61 70 70 69 | =.ot.da.LinearTransport()..mappi |
9600 | 6e 67 2e 66 69 74 28 58 73 3d 58 31 2c 20 58 74 3d 58 32 29 0a 0a 0a 78 73 74 20 3d 20 6d 61 70 | ng.fit(Xs=X1,.Xt=X2)...xst.=.map |
9620 | 70 69 6e 67 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 31 29 0a 78 74 73 20 3d 20 6d 61 70 70 | ping.transform(Xs=X1).xts.=.mapp |
9640 | 69 6e 67 2e 69 6e 76 65 72 73 65 5f 74 72 61 6e 73 66 6f 72 6d 28 58 74 3d 58 32 29 0a 0a 49 31 | ing.inverse_transform(Xt=X2)..I1 |
9660 | 74 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 78 73 74 2c 20 49 31 2e 73 68 61 70 65 29 | t.=.minmax(mat2im(xst,.I1.shape) |
9680 | 29 0a 49 32 74 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 78 74 73 2c 20 49 32 2e 73 68 | ).I2t.=.minmax(mat2im(xts,.I2.sh |
96a0 | 61 70 65 29 29 0a 0a 23 20 25 25 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ape))..#.%%...################## |
96c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
96e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 | ############################.#.P |
9700 | 6c 6f 74 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 69 6d 61 67 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d | lot.transformed.images.#.------- |
9720 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 | ----------------..pl.figure(2,.f |
9740 | 69 67 73 69 7a 65 3d 28 31 30 2c 20 37 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 | igsize=(10,.7))..pl.subplot(2,.2 |
9760 | 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 | ,.1).pl.imshow(I1).pl.axis('off' |
9780 | 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 2e 20 31 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 | ).pl.title('Im..1')..pl.subplot( |
97a0 | 32 2c 20 32 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 29 0a 70 6c 2e 61 78 69 73 28 27 | 2,.2,.2).pl.imshow(I2).pl.axis(' |
97c0 | 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 2e 20 32 27 29 0a 0a 70 6c 2e 73 75 62 70 | off').pl.title('Im..2')..pl.subp |
97e0 | 6c 6f 74 28 32 2c 20 32 2c 20 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 74 29 0a 70 6c 2e 61 | lot(2,.2,.3).pl.imshow(I1t).pl.a |
9800 | 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4d 61 70 70 69 6e 67 20 49 6d 2e | xis('off').pl.title('Mapping.Im. |
9820 | 20 31 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 34 29 0a 70 6c 2e 69 6d 73 | .1')..pl.subplot(2,.2,.4).pl.ims |
9840 | 68 6f 77 28 49 32 74 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 | how(I2t).pl.axis('off').pl.title |
9860 | 28 27 49 6e 76 65 72 73 65 20 6d 61 70 70 69 6e 67 20 49 6d 2e 20 32 27 29 0a 50 4b 03 04 14 00 | ('Inverse.mapping.Im..2').PK.... |
9880 | 00 00 00 00 7c b0 94 50 e7 4f 7f d3 f3 0d 00 00 f3 0d 00 00 19 00 00 00 70 6c 6f 74 5f 6f 74 64 | ....|..P.O..............plot_otd |
98a0 | 61 5f 63 6f 6c 6f 72 5f 69 6d 61 67 65 73 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 | a_color_images.py#.-*-.coding:.u |
98c0 | 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | tf-8.-*-.""".=================== |
98e0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4f 54 20 66 6f 72 20 69 6d 61 67 65 20 63 6f 6c 6f 72 20 61 64 | ==========.OT.for.image.color.ad |
9900 | 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.======================= |
9920 | 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 70 72 65 73 65 6e 74 73 20 61 20 | ======..This.example.presents.a. |
9940 | 77 61 79 20 6f 66 20 74 72 61 6e 73 66 65 72 72 69 6e 67 20 63 6f 6c 6f 72 73 20 62 65 74 77 65 | way.of.transferring.colors.betwe |
9960 | 65 6e 20 74 77 6f 20 69 6d 61 67 65 73 0a 77 69 74 68 20 4f 70 74 69 6d 61 6c 20 54 72 61 6e 73 | en.two.images.with.Optimal.Trans |
9980 | 70 6f 72 74 20 61 73 20 69 6e 74 72 6f 64 75 63 65 64 20 69 6e 20 5b 36 5d 0a 0a 5b 36 5d 20 46 | port.as.introduced.in.[6]..[6].F |
99a0 | 65 72 72 61 64 61 6e 73 2c 20 53 2e 2c 20 50 61 70 61 64 61 6b 69 73 2c 20 4e 2e 2c 20 50 65 79 | erradans,.S.,.Papadakis,.N.,.Pey |
99c0 | 72 65 2c 20 47 2e 2c 20 26 20 41 75 6a 6f 6c 2c 20 4a 2e 20 46 2e 20 28 32 30 31 34 29 2e 0a 52 | re,.G.,.&.Aujol,.J..F..(2014)..R |
99e0 | 65 67 75 6c 61 72 69 7a 65 64 20 64 69 73 63 72 65 74 65 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e | egularized.discrete.optimal.tran |
9a00 | 73 70 6f 72 74 2e 0a 53 49 41 4d 20 4a 6f 75 72 6e 61 6c 20 6f 6e 20 49 6d 61 67 69 6e 67 20 53 | sport..SIAM.Journal.on.Imaging.S |
9a20 | 63 69 65 6e 63 65 73 2c 20 37 28 33 29 2c 20 31 38 35 33 2d 31 38 38 32 2e 0a 22 22 22 0a 0a 23 | ciences,.7(3),.1853-1882.."""..# |
9a40 | 20 41 75 74 68 6f 72 73 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 | .Authors:.Remi.Flamary.<remi.fla |
9a60 | 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 20 20 20 20 20 20 20 20 20 20 53 74 61 6e 69 73 | mary@unice.fr>.#..........Stanis |
9a80 | 6c 61 73 20 43 68 61 6d 62 6f 6e 20 3c 73 74 61 6e 2e 63 68 61 6d 62 6f 6e 40 67 6d 61 69 6c 2e | las.Chambon.<stan.chambon@gmail. |
9aa0 | 63 6f 6d 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 | com>.#.#.License:.MIT.License..i |
9ac0 | 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 | mport.numpy.as.np.import.matplot |
9ae0 | 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 0a 0a 72 20 3d 20 | lib.pylab.as.pl.import.ot...r.=. |
9b00 | 6e 70 2e 72 61 6e 64 6f 6d 2e 52 61 6e 64 6f 6d 53 74 61 74 65 28 34 32 29 0a 0a 0a 64 65 66 20 | np.random.RandomState(42)...def. |
9b20 | 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 20 61 6e 20 69 6d | im2mat(I):....."""Converts.an.im |
9b40 | 61 67 65 20 74 6f 20 6d 61 74 72 69 78 20 28 6f 6e 65 20 70 69 78 65 6c 20 70 65 72 20 6c 69 6e | age.to.matrix.(one.pixel.per.lin |
9b60 | 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 65 28 28 49 2e 73 68 | e)""".....return.I.reshape((I.sh |
9b80 | 61 70 65 5b 30 5d 20 2a 20 49 2e 73 68 61 70 65 5b 31 5d 2c 20 49 2e 73 68 61 70 65 5b 32 5d 29 | ape[0].*.I.shape[1],.I.shape[2]) |
9ba0 | 29 0a 0a 0a 64 65 66 20 6d 61 74 32 69 6d 28 58 2c 20 73 68 61 70 65 29 3a 0a 20 20 20 20 22 22 | )...def.mat2im(X,.shape):....."" |
9bc0 | 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 69 6d | "Converts.back.a.matrix.to.an.im |
9be0 | 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 61 70 | age""".....return.X.reshape(shap |
9c00 | 65 29 0a 0a 0a 64 65 66 20 6d 69 6e 6d 61 78 28 49 29 3a 0a 20 20 20 20 72 65 74 75 72 6e 20 6e | e)...def.minmax(I):.....return.n |
9c20 | 70 2e 63 6c 69 70 28 49 2c 20 30 2c 20 31 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | p.clip(I,.0,.1)...############## |
9c40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
9c60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
9c80 | 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | .#.Generate.data.#.------------- |
9ca0 | 0a 0a 23 20 4c 6f 61 64 69 6e 67 20 69 6d 61 67 65 73 0a 49 31 20 3d 20 70 6c 2e 69 6d 72 65 61 | ..#.Loading.images.I1.=.pl.imrea |
9cc0 | 64 28 27 2e 2e 2f 64 61 74 61 2f 6f 63 65 61 6e 5f 64 61 79 2e 6a 70 67 27 29 2e 61 73 74 79 70 | d('../data/ocean_day.jpg').astyp |
9ce0 | 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 20 2f 20 32 35 36 0a 49 32 20 3d 20 70 6c 2e 69 6d 72 65 | e(np.float64)./.256.I2.=.pl.imre |
9d00 | 61 64 28 27 2e 2e 2f 64 61 74 61 2f 6f 63 65 61 6e 5f 73 75 6e 73 65 74 2e 6a 70 67 27 29 2e 61 | ad('../data/ocean_sunset.jpg').a |
9d20 | 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 20 2f 20 32 35 36 0a 0a 58 31 20 3d 20 69 6d | stype(np.float64)./.256..X1.=.im |
9d40 | 32 6d 61 74 28 49 31 29 0a 58 32 20 3d 20 69 6d 32 6d 61 74 28 49 32 29 0a 0a 23 20 74 72 61 69 | 2mat(I1).X2.=.im2mat(I2)..#.trai |
9d60 | 6e 69 6e 67 20 73 61 6d 70 6c 65 73 0a 6e 62 20 3d 20 31 30 30 30 0a 69 64 78 31 20 3d 20 72 2e | ning.samples.nb.=.1000.idx1.=.r. |
9d80 | 72 61 6e 64 69 6e 74 28 58 31 2e 73 68 61 70 65 5b 30 5d 2c 20 73 69 7a 65 3d 28 6e 62 2c 29 29 | randint(X1.shape[0],.size=(nb,)) |
9da0 | 0a 69 64 78 32 20 3d 20 72 2e 72 61 6e 64 69 6e 74 28 58 32 2e 73 68 61 70 65 5b 30 5d 2c 20 73 | .idx2.=.r.randint(X2.shape[0],.s |
9dc0 | 69 7a 65 3d 28 6e 62 2c 29 29 0a 0a 58 73 20 3d 20 58 31 5b 69 64 78 31 2c 20 3a 5d 0a 58 74 20 | ize=(nb,))..Xs.=.X1[idx1,.:].Xt. |
9de0 | 3d 20 58 32 5b 69 64 78 32 2c 20 3a 5d 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | =.X2[idx2,.:]...################ |
9e00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
9e20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 | ##############################.# |
9e40 | 20 50 6c 6f 74 20 6f 72 69 67 69 6e 61 6c 20 69 6d 61 67 65 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d | .Plot.original.image.#.--------- |
9e60 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 | ----------..pl.figure(1,.figsize |
9e80 | 3d 28 36 2e 34 2c 20 33 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0a | =(6.4,.3))..pl.subplot(1,.2,.1). |
9ea0 | 70 6c 2e 69 6d 73 68 6f 77 28 49 31 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e | pl.imshow(I1).pl.axis('off').pl. |
9ec0 | 74 69 74 6c 65 28 27 49 6d 61 67 65 20 31 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 | title('Image.1')..pl.subplot(1,. |
9ee0 | 32 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 | 2,.2).pl.imshow(I2).pl.axis('off |
9f00 | 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 32 27 29 0a 0a 0a 23 23 23 23 23 23 23 | ').pl.title('Image.2')...####### |
9f20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
9f40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
9f60 | 23 23 23 23 23 23 23 0a 23 20 53 63 61 74 74 65 72 20 70 6c 6f 74 20 6f 66 20 63 6f 6c 6f 72 73 | #######.#.Scatter.plot.of.colors |
9f80 | 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 | .#.----------------------..pl.fi |
9fa0 | 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 29 29 0a 0a 70 6c 2e 73 75 | gure(2,.figsize=(6.4,.3))..pl.su |
9fc0 | 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 73 5b 3a 2c 20 | bplot(1,.2,.1).pl.scatter(Xs[:,. |
9fe0 | 30 5d 2c 20 58 73 5b 3a 2c 20 32 5d 2c 20 63 3d 58 73 29 0a 70 6c 2e 61 78 69 73 28 5b 30 2c 20 | 0],.Xs[:,.2],.c=Xs).pl.axis([0,. |
a000 | 31 2c 20 30 2c 20 31 5d 29 0a 70 6c 2e 78 6c 61 62 65 6c 28 27 52 65 64 27 29 0a 70 6c 2e 79 6c | 1,.0,.1]).pl.xlabel('Red').pl.yl |
a020 | 61 62 65 6c 28 27 42 6c 75 65 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 31 27 29 | abel('Blue').pl.title('Image.1') |
a040 | 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 | ..pl.subplot(1,.2,.2).pl.scatter |
a060 | 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 32 5d 2c 20 63 3d 58 74 29 0a 70 6c 2e 61 78 | (Xt[:,.0],.Xt[:,.2],.c=Xt).pl.ax |
a080 | 69 73 28 5b 30 2c 20 31 2c 20 30 2c 20 31 5d 29 0a 70 6c 2e 78 6c 61 62 65 6c 28 27 52 65 64 27 | is([0,.1,.0,.1]).pl.xlabel('Red' |
a0a0 | 29 0a 70 6c 2e 79 6c 61 62 65 6c 28 27 42 6c 75 65 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d | ).pl.ylabel('Blue').pl.title('Im |
a0c0 | 61 67 65 20 32 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 0a 23 23 23 23 | age.2').pl.tight_layout()...#### |
a0e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
a100 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
a120 | 23 23 23 23 23 23 23 23 23 23 0a 23 20 49 6e 73 74 61 6e 74 69 61 74 65 20 74 68 65 20 64 69 66 | ##########.#.Instantiate.the.dif |
a140 | 66 65 72 65 6e 74 20 74 72 61 6e 73 70 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d 73 20 61 6e 64 20 | ferent.transport.algorithms.and. |
a160 | 66 69 74 20 74 68 65 6d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | fit.them.#.--------------------- |
a180 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
a1a0 | 2d 2d 2d 2d 2d 2d 0a 0a 23 20 45 4d 44 54 72 61 6e 73 70 6f 72 74 0a 6f 74 5f 65 6d 64 20 3d 20 | ------..#.EMDTransport.ot_emd.=. |
a1c0 | 6f 74 2e 64 61 2e 45 4d 44 54 72 61 6e 73 70 6f 72 74 28 29 0a 6f 74 5f 65 6d 64 2e 66 69 74 28 | ot.da.EMDTransport().ot_emd.fit( |
a1e0 | 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f | Xs=Xs,.Xt=Xt)..#.SinkhornTranspo |
a200 | 72 74 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b 68 6f 72 6e 54 | rt.ot_sinkhorn.=.ot.da.SinkhornT |
a220 | 72 61 6e 73 70 6f 72 74 28 72 65 67 5f 65 3d 31 65 2d 31 29 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e | ransport(reg_e=1e-1).ot_sinkhorn |
a240 | 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 70 72 65 64 69 63 74 69 6f 6e | .fit(Xs=Xs,.Xt=Xt)..#.prediction |
a260 | 20 62 65 74 77 65 65 6e 20 69 6d 61 67 65 73 20 28 75 73 69 6e 67 20 6f 75 74 20 6f 66 20 73 61 | .between.images.(using.out.of.sa |
a280 | 6d 70 6c 65 20 70 72 65 64 69 63 74 69 6f 6e 20 61 73 20 69 6e 20 5b 36 5d 29 0a 74 72 61 6e 73 | mple.prediction.as.in.[6]).trans |
a2a0 | 70 5f 58 73 5f 65 6d 64 20 3d 20 6f 74 5f 65 6d 64 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 | p_Xs_emd.=.ot_emd.transform(Xs=X |
a2c0 | 31 29 0a 74 72 61 6e 73 70 5f 58 74 5f 65 6d 64 20 3d 20 6f 74 5f 65 6d 64 2e 69 6e 76 65 72 73 | 1).transp_Xt_emd.=.ot_emd.invers |
a2e0 | 65 5f 74 72 61 6e 73 66 6f 72 6d 28 58 74 3d 58 32 29 0a 0a 74 72 61 6e 73 70 5f 58 73 5f 73 69 | e_transform(Xt=X2)..transp_Xs_si |
a300 | 6e 6b 68 6f 72 6e 20 3d 20 6f 74 5f 73 69 6e 6b 68 6f 72 6e 2e 74 72 61 6e 73 66 6f 72 6d 28 58 | nkhorn.=.ot_sinkhorn.transform(X |
a320 | 73 3d 58 31 29 0a 74 72 61 6e 73 70 5f 58 74 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 5f 73 69 | s=X1).transp_Xt_sinkhorn.=.ot_si |
a340 | 6e 6b 68 6f 72 6e 2e 69 6e 76 65 72 73 65 5f 74 72 61 6e 73 66 6f 72 6d 28 58 74 3d 58 32 29 0a | nkhorn.inverse_transform(Xt=X2). |
a360 | 0a 49 31 74 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 74 72 61 6e 73 70 5f 58 73 5f 65 | .I1t.=.minmax(mat2im(transp_Xs_e |
a380 | 6d 64 2c 20 49 31 2e 73 68 61 70 65 29 29 0a 49 32 74 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 | md,.I1.shape)).I2t.=.minmax(mat2 |
a3a0 | 69 6d 28 74 72 61 6e 73 70 5f 58 74 5f 65 6d 64 2c 20 49 32 2e 73 68 61 70 65 29 29 0a 0a 49 31 | im(transp_Xt_emd,.I2.shape))..I1 |
a3c0 | 74 65 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e | te.=.minmax(mat2im(transp_Xs_sin |
a3e0 | 6b 68 6f 72 6e 2c 20 49 31 2e 73 68 61 70 65 29 29 0a 49 32 74 65 20 3d 20 6d 69 6e 6d 61 78 28 | khorn,.I1.shape)).I2te.=.minmax( |
a400 | 6d 61 74 32 69 6d 28 74 72 61 6e 73 70 5f 58 74 5f 73 69 6e 6b 68 6f 72 6e 2c 20 49 32 2e 73 68 | mat2im(transp_Xt_sinkhorn,.I2.sh |
a420 | 61 70 65 29 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ape))...######################## |
a440 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
a460 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 6e 65 | ######################.#.Plot.ne |
a480 | 77 20 69 6d 61 67 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 | w.images.#.---------------..pl.f |
a4a0 | 69 67 75 72 65 28 33 2c 20 66 69 67 73 69 7a 65 3d 28 38 2c 20 34 29 29 0a 0a 70 6c 2e 73 75 62 | igure(3,.figsize=(8,.4))..pl.sub |
a4c0 | 70 6c 6f 74 28 32 2c 20 33 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 29 0a 70 6c 2e 61 | plot(2,.3,.1).pl.imshow(I1).pl.a |
a4e0 | 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 31 27 29 0a 0a | xis('off').pl.title('Image.1').. |
a500 | 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 | pl.subplot(2,.3,.2).pl.imshow(I1 |
a520 | 74 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 | t).pl.axis('off').pl.title('Imag |
a540 | 65 20 31 20 41 64 61 70 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 33 29 | e.1.Adapt')..pl.subplot(2,.3,.3) |
a560 | 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 74 65 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a | .pl.imshow(I1te).pl.axis('off'). |
a580 | 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 31 20 41 64 61 70 74 20 28 72 65 67 29 27 29 0a | pl.title('Image.1.Adapt.(reg)'). |
a5a0 | 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 34 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 | .pl.subplot(2,.3,.4).pl.imshow(I |
a5c0 | 32 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 | 2).pl.axis('off').pl.title('Imag |
a5e0 | 65 20 32 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 35 29 0a 70 6c 2e 69 6d | e.2')..pl.subplot(2,.3,.5).pl.im |
a600 | 73 68 6f 77 28 49 32 74 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c | show(I2t).pl.axis('off').pl.titl |
a620 | 65 28 27 49 6d 61 67 65 20 32 20 41 64 61 70 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 | e('Image.2.Adapt')..pl.subplot(2 |
a640 | 2c 20 33 2c 20 36 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 74 65 29 0a 70 6c 2e 61 78 69 73 28 | ,.3,.6).pl.imshow(I2te).pl.axis( |
a660 | 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 32 20 41 64 61 70 74 20 28 | 'off').pl.title('Image.2.Adapt.( |
a680 | 72 65 67 29 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 68 6f | reg)').pl.tight_layout()..pl.sho |
a6a0 | 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 83 68 3a 4f d1 a8 d7 2e a9 09 00 00 a9 09 00 00 20 00 | w().PK.........h:O.............. |
a6c0 | 00 00 70 6c 6f 74 5f 63 6f 6e 76 6f 6c 75 74 69 6f 6e 61 6c 5f 62 61 72 79 63 65 6e 74 65 72 2e | ..plot_convolutional_barycenter. |
a6e0 | 70 79 0a 23 25 25 0a 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 | py.#%%.#.-*-.coding:.utf-8.-*-." |
a700 | 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 | "".============================= |
a720 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 43 6f 6e 76 6f 6c 75 74 69 6f 6e 61 6c 20 57 61 | ===============.Convolutional.Wa |
a740 | 73 73 65 72 73 74 65 69 6e 20 42 61 72 79 63 65 6e 74 65 72 20 65 78 61 6d 70 6c 65 0a 3d 3d 3d | sserstein.Barycenter.example.=== |
a760 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
a780 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 73 20 64 65 73 69 67 | =========..This.example.is.desig |
a7a0 | 6e 65 64 20 74 6f 20 69 6c 6c 75 73 74 72 61 74 65 20 68 6f 77 20 74 68 65 20 43 6f 6e 76 6f 6c | ned.to.illustrate.how.the.Convol |
a7c0 | 75 74 69 6f 6e 61 6c 20 57 61 73 73 65 72 73 74 65 69 6e 20 42 61 72 79 63 65 6e 74 65 72 0a 66 | utional.Wasserstein.Barycenter.f |
a7e0 | 75 6e 63 74 69 6f 6e 20 6f 66 20 50 4f 54 20 77 6f 72 6b 73 2e 0a 22 22 22 0a 0a 23 20 41 75 74 | unction.of.POT.works.."""..#.Aut |
a800 | 68 6f 72 3a 20 4e 69 63 6f 6c 61 73 20 43 6f 75 72 74 79 20 3c 6e 63 6f 75 72 74 79 40 69 72 69 | hor:.Nicolas.Courty.<ncourty@iri |
a820 | 73 61 2e 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a | sa.fr>.#.#.License:.MIT.License. |
a840 | 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 70 79 6c 61 | ..import.numpy.as.np.import.pyla |
a860 | 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 | b.as.pl.import.ot..############# |
a880 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
a8a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
a8c0 | 23 0a 23 20 44 61 74 61 20 70 72 65 70 61 72 61 74 69 6f 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d | #.#.Data.preparation.#.--------- |
a8e0 | 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 23 20 54 68 65 20 66 6f 75 72 20 64 69 73 74 72 69 62 75 74 69 6f | -------.#.#.The.four.distributio |
a900 | 6e 73 20 61 72 65 20 63 6f 6e 73 74 72 75 63 74 65 64 20 66 72 6f 6d 20 34 20 73 69 6d 70 6c 65 | ns.are.constructed.from.4.simple |
a920 | 20 69 6d 61 67 65 73 0a 0a 0a 66 31 20 3d 20 31 20 2d 20 70 6c 2e 69 6d 72 65 61 64 28 27 2e 2e | .images...f1.=.1.-.pl.imread('.. |
a940 | 2f 64 61 74 61 2f 72 65 64 63 72 6f 73 73 2e 70 6e 67 27 29 5b 3a 2c 20 3a 2c 20 32 5d 0a 66 32 | /data/redcross.png')[:,.:,.2].f2 |
a960 | 20 3d 20 31 20 2d 20 70 6c 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 64 75 63 6b 2e 70 | .=.1.-.pl.imread('../data/duck.p |
a980 | 6e 67 27 29 5b 3a 2c 20 3a 2c 20 32 5d 0a 66 33 20 3d 20 31 20 2d 20 70 6c 2e 69 6d 72 65 61 64 | ng')[:,.:,.2].f3.=.1.-.pl.imread |
a9a0 | 28 27 2e 2e 2f 64 61 74 61 2f 68 65 61 72 74 2e 70 6e 67 27 29 5b 3a 2c 20 3a 2c 20 32 5d 0a 66 | ('../data/heart.png')[:,.:,.2].f |
a9c0 | 34 20 3d 20 31 20 2d 20 70 6c 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 74 6f 6f 74 68 | 4.=.1.-.pl.imread('../data/tooth |
a9e0 | 2e 70 6e 67 27 29 5b 3a 2c 20 3a 2c 20 32 5d 0a 0a 41 20 3d 20 5b 5d 0a 66 31 20 3d 20 66 31 20 | .png')[:,.:,.2]..A.=.[].f1.=.f1. |
aa00 | 2f 20 6e 70 2e 73 75 6d 28 66 31 29 0a 66 32 20 3d 20 66 32 20 2f 20 6e 70 2e 73 75 6d 28 66 32 | /.np.sum(f1).f2.=.f2./.np.sum(f2 |
aa20 | 29 0a 66 33 20 3d 20 66 33 20 2f 20 6e 70 2e 73 75 6d 28 66 33 29 0a 66 34 20 3d 20 66 34 20 2f | ).f3.=.f3./.np.sum(f3).f4.=.f4./ |
aa40 | 20 6e 70 2e 73 75 6d 28 66 34 29 0a 41 2e 61 70 70 65 6e 64 28 66 31 29 0a 41 2e 61 70 70 65 6e | .np.sum(f4).A.append(f1).A.appen |
aa60 | 64 28 66 32 29 0a 41 2e 61 70 70 65 6e 64 28 66 33 29 0a 41 2e 61 70 70 65 6e 64 28 66 34 29 0a | d(f2).A.append(f3).A.append(f4). |
aa80 | 41 20 3d 20 6e 70 2e 61 72 72 61 79 28 41 29 0a 0a 6e 62 5f 69 6d 61 67 65 73 20 3d 20 35 0a 0a | A.=.np.array(A)..nb_images.=.5.. |
aaa0 | 23 20 74 68 6f 73 65 20 61 72 65 20 74 68 65 20 66 6f 75 72 20 63 6f 72 6e 65 72 73 20 63 6f 6f | #.those.are.the.four.corners.coo |
aac0 | 72 64 69 6e 61 74 65 73 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 69 6e 74 65 72 70 6f 6c 61 74 | rdinates.that.will.be.interpolat |
aae0 | 65 64 20 62 79 20 62 69 6c 69 6e 65 61 72 0a 23 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 0a 76 | ed.by.bilinear.#.interpolation.v |
ab00 | 31 20 3d 20 6e 70 2e 61 72 72 61 79 28 28 31 2c 20 30 2c 20 30 2c 20 30 29 29 0a 76 32 20 3d 20 | 1.=.np.array((1,.0,.0,.0)).v2.=. |
ab20 | 6e 70 2e 61 72 72 61 79 28 28 30 2c 20 31 2c 20 30 2c 20 30 29 29 0a 76 33 20 3d 20 6e 70 2e 61 | np.array((0,.1,.0,.0)).v3.=.np.a |
ab40 | 72 72 61 79 28 28 30 2c 20 30 2c 20 31 2c 20 30 29 29 0a 76 34 20 3d 20 6e 70 2e 61 72 72 61 79 | rray((0,.0,.1,.0)).v4.=.np.array |
ab60 | 28 28 30 2c 20 30 2c 20 30 2c 20 31 29 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ((0,.0,.0,.1))...############### |
ab80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
aba0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a | ###############################. |
abc0 | 23 20 42 61 72 79 63 65 6e 74 65 72 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 61 6e 64 20 76 69 73 | #.Barycenter.computation.and.vis |
abe0 | 75 61 6c 69 7a 61 74 69 6f 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | ualization.#.------------------- |
ac00 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 0a 70 6c 2e 66 69 67 75 | ---------------------.#..pl.figu |
ac20 | 72 65 28 66 69 67 73 69 7a 65 3d 28 31 30 2c 20 31 30 29 29 0a 70 6c 2e 74 69 74 6c 65 28 27 43 | re(figsize=(10,.10)).pl.title('C |
ac40 | 6f 6e 76 6f 6c 75 74 69 6f 6e 61 6c 20 57 61 73 73 65 72 73 74 65 69 6e 20 42 61 72 79 63 65 6e | onvolutional.Wasserstein.Barycen |
ac60 | 74 65 72 73 20 69 6e 20 50 4f 54 27 29 0a 63 6d 20 3d 20 27 42 6c 75 65 73 27 0a 23 20 72 65 67 | ters.in.POT').cm.=.'Blues'.#.reg |
ac80 | 75 6c 61 72 69 7a 61 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 0a 72 65 67 20 3d 20 30 2e 30 30 | ularization.parameter.reg.=.0.00 |
aca0 | 34 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6e 62 5f 69 6d 61 67 65 73 29 3a 0a 20 20 20 | 4.for.i.in.range(nb_images):.... |
acc0 | 20 66 6f 72 20 6a 20 69 6e 20 72 61 6e 67 65 28 6e 62 5f 69 6d 61 67 65 73 29 3a 0a 20 20 20 20 | .for.j.in.range(nb_images):..... |
ace0 | 20 20 20 20 70 6c 2e 73 75 62 70 6c 6f 74 28 6e 62 5f 69 6d 61 67 65 73 2c 20 6e 62 5f 69 6d 61 | ....pl.subplot(nb_images,.nb_ima |
ad00 | 67 65 73 2c 20 69 20 2a 20 6e 62 5f 69 6d 61 67 65 73 20 2b 20 6a 20 2b 20 31 29 0a 20 20 20 20 | ges,.i.*.nb_images.+.j.+.1)..... |
ad20 | 20 20 20 20 74 78 20 3d 20 66 6c 6f 61 74 28 69 29 20 2f 20 28 6e 62 5f 69 6d 61 67 65 73 20 2d | ....tx.=.float(i)./.(nb_images.- |
ad40 | 20 31 29 0a 20 20 20 20 20 20 20 20 74 79 20 3d 20 66 6c 6f 61 74 28 6a 29 20 2f 20 28 6e 62 5f | .1).........ty.=.float(j)./.(nb_ |
ad60 | 69 6d 61 67 65 73 20 2d 20 31 29 0a 0a 20 20 20 20 20 20 20 20 23 20 77 65 69 67 68 74 73 20 61 | images.-.1)..........#.weights.a |
ad80 | 72 65 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 62 69 6c 69 6e 65 61 72 20 69 6e 74 65 72 | re.constructed.by.bilinear.inter |
ada0 | 70 6f 6c 61 74 69 6f 6e 0a 20 20 20 20 20 20 20 20 74 6d 70 31 20 3d 20 28 31 20 2d 20 74 78 29 | polation.........tmp1.=.(1.-.tx) |
adc0 | 20 2a 20 76 31 20 2b 20 74 78 20 2a 20 76 32 0a 20 20 20 20 20 20 20 20 74 6d 70 32 20 3d 20 28 | .*.v1.+.tx.*.v2.........tmp2.=.( |
ade0 | 31 20 2d 20 74 78 29 20 2a 20 76 33 20 2b 20 74 78 20 2a 20 76 34 0a 20 20 20 20 20 20 20 20 77 | 1.-.tx).*.v3.+.tx.*.v4.........w |
ae00 | 65 69 67 68 74 73 20 3d 20 28 31 20 2d 20 74 79 29 20 2a 20 74 6d 70 31 20 2b 20 74 79 20 2a 20 | eights.=.(1.-.ty).*.tmp1.+.ty.*. |
ae20 | 74 6d 70 32 0a 0a 20 20 20 20 20 20 20 20 69 66 20 69 20 3d 3d 20 30 20 61 6e 64 20 6a 20 3d 3d | tmp2..........if.i.==.0.and.j.== |
ae40 | 20 30 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 6c 2e 69 6d 73 68 6f 77 28 66 31 2c 20 63 6d | .0:.............pl.imshow(f1,.cm |
ae60 | 61 70 3d 63 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 | ap=cm).............pl.axis('off' |
ae80 | 29 0a 20 20 20 20 20 20 20 20 65 6c 69 66 20 69 20 3d 3d 20 30 20 61 6e 64 20 6a 20 3d 3d 20 28 | ).........elif.i.==.0.and.j.==.( |
aea0 | 6e 62 5f 69 6d 61 67 65 73 20 2d 20 31 29 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 6c 2e 69 | nb_images.-.1):.............pl.i |
aec0 | 6d 73 68 6f 77 28 66 33 2c 20 63 6d 61 70 3d 63 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 | mshow(f3,.cmap=cm).............p |
aee0 | 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 20 20 20 20 20 20 20 20 65 6c 69 66 20 69 20 3d 3d 20 | l.axis('off').........elif.i.==. |
af00 | 28 6e 62 5f 69 6d 61 67 65 73 20 2d 20 31 29 20 61 6e 64 20 6a 20 3d 3d 20 30 3a 0a 20 20 20 20 | (nb_images.-.1).and.j.==.0:..... |
af20 | 20 20 20 20 20 20 20 20 70 6c 2e 69 6d 73 68 6f 77 28 66 32 2c 20 63 6d 61 70 3d 63 6d 29 0a 20 | ........pl.imshow(f2,.cmap=cm).. |
af40 | 20 20 20 20 20 20 20 20 20 20 20 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 20 20 20 20 20 20 | ...........pl.axis('off')....... |
af60 | 20 20 65 6c 69 66 20 69 20 3d 3d 20 28 6e 62 5f 69 6d 61 67 65 73 20 2d 20 31 29 20 61 6e 64 20 | ..elif.i.==.(nb_images.-.1).and. |
af80 | 6a 20 3d 3d 20 28 6e 62 5f 69 6d 61 67 65 73 20 2d 20 31 29 3a 0a 20 20 20 20 20 20 20 20 20 20 | j.==.(nb_images.-.1):........... |
afa0 | 20 20 70 6c 2e 69 6d 73 68 6f 77 28 66 34 2c 20 63 6d 61 70 3d 63 6d 29 0a 20 20 20 20 20 20 20 | ..pl.imshow(f4,.cmap=cm)........ |
afc0 | 20 20 20 20 20 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 20 20 20 20 20 20 20 20 65 6c 73 65 | .....pl.axis('off').........else |
afe0 | 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 63 61 6c 6c 20 74 6f 20 62 61 72 79 63 65 6e 74 | :.............#.call.to.barycent |
b000 | 65 72 20 63 6f 6d 70 75 74 61 74 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 6c 2e 69 6d | er.computation.............pl.im |
b020 | 73 68 6f 77 28 6f 74 2e 62 72 65 67 6d 61 6e 2e 63 6f 6e 76 6f 6c 75 74 69 6f 6e 61 6c 5f 62 61 | show(ot.bregman.convolutional_ba |
b040 | 72 79 63 65 6e 74 65 72 32 64 28 41 2c 20 72 65 67 2c 20 77 65 69 67 68 74 73 29 2c 20 63 6d 61 | rycenter2d(A,.reg,.weights),.cma |
b060 | 70 3d 63 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 | p=cm).............pl.axis('off') |
b080 | 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 83 68 3a 4f ff 09 e8 78 dd 08 00 | .pl.show().PK.........h:O...x... |
b0a0 | 00 dd 08 00 00 14 00 00 00 70 6c 6f 74 5f 4f 54 5f 31 44 5f 73 6d 6f 6f 74 68 2e 70 79 23 20 2d | .........plot_OT_1D_smooth.py#.- |
b0c0 | 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.-*-.""".======= |
b0e0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 31 44 20 73 6d 6f 6f 74 68 20 6f | ====================.1D.smooth.o |
b100 | 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.=============== |
b120 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 6c 6c 75 73 | ============..This.example.illus |
b140 | 74 72 61 74 65 73 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66 20 45 4d 44 2c 20 53 | trates.the.computation.of.EMD,.S |
b160 | 69 6e 6b 68 6f 72 6e 20 61 6e 64 20 73 6d 6f 6f 74 68 20 4f 54 20 70 6c 61 6e 73 0a 61 6e 64 20 | inkhorn.and.smooth.OT.plans.and. |
b180 | 74 68 65 69 72 20 76 69 73 75 61 6c 69 7a 61 74 69 6f 6e 2e 0a 0a 22 22 22 0a 0a 23 20 41 75 74 | their.visualization..."""..#.Aut |
b1a0 | 68 6f 72 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 | hor:.Remi.Flamary.<remi.flamary@ |
b1c0 | 75 6e 69 63 65 2e 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e | unice.fr>.#.#.License:.MIT.Licen |
b1e0 | 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 | se..import.numpy.as.np.import.ma |
b200 | 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 69 | tplotlib.pylab.as.pl.import.ot.i |
b220 | 6d 70 6f 72 74 20 6f 74 2e 70 6c 6f 74 0a 66 72 6f 6d 20 6f 74 2e 64 61 74 61 73 65 74 73 20 69 | mport.ot.plot.from.ot.datasets.i |
b240 | 6d 70 6f 72 74 20 6d 61 6b 65 5f 31 44 5f 67 61 75 73 73 20 61 73 20 67 61 75 73 73 0a 0a 23 23 | mport.make_1D_gauss.as.gauss..## |
b260 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
b280 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
b2a0 | 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d | ############.#.Generate.data.#.- |
b2c0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 6e | ------------...#%%.parameters..n |
b2e0 | 20 3d 20 31 30 30 20 20 23 20 6e 62 20 62 69 6e 73 0a 0a 23 20 62 69 6e 20 70 6f 73 69 74 69 6f | .=.100..#.nb.bins..#.bin.positio |
b300 | 6e 73 0a 78 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 2c 20 64 74 79 70 65 3d 6e 70 2e 66 6c 6f | ns.x.=.np.arange(n,.dtype=np.flo |
b320 | 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. |
b340 | 61 20 3d 20 67 61 75 73 73 28 6e 2c 20 6d 3d 32 30 2c 20 73 3d 35 29 20 20 23 20 6d 3d 20 6d 65 | a.=.gauss(n,.m=20,.s=5)..#.m=.me |
b360 | 61 6e 2c 20 73 3d 20 73 74 64 0a 62 20 3d 20 67 61 75 73 73 28 6e 2c 20 6d 3d 36 30 2c 20 73 3d | an,.s=.std.b.=.gauss(n,.m=60,.s= |
b380 | 31 30 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 20 3d 20 6f 74 2e 64 69 73 74 28 78 | 10)..#.loss.matrix.M.=.ot.dist(x |
b3a0 | 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 2c 20 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 | .reshape((n,.1)),.x.reshape((n,. |
b3c0 | 31 29 29 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 | 1))).M./=.M.max()...############ |
b3e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
b400 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
b420 | 23 23 0a 23 20 50 6c 6f 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 61 6e 64 20 6c 6f 73 73 | ##.#.Plot.distributions.and.loss |
b440 | 20 6d 61 74 72 69 78 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | .matrix.#.---------------------- |
b460 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 6c 6f 74 20 74 68 65 20 64 69 73 74 72 | ------------..#%%.plot.the.distr |
b480 | 69 62 75 74 69 6f 6e 73 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 | ibutions..pl.figure(1,.figsize=( |
b4a0 | 36 2e 34 2c 20 33 29 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 61 2c 20 27 62 27 2c 20 6c 61 62 65 | 6.4,.3)).pl.plot(x,.a,.'b',.labe |
b4c0 | 6c 3d 27 53 6f 75 72 63 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 27 29 0a 70 6c 2e 70 6c 6f 74 | l='Source.distribution').pl.plot |
b4e0 | 28 78 2c 20 62 2c 20 27 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 64 69 73 74 72 69 | (x,.b,.'r',.label='Target.distri |
b500 | 62 75 74 69 6f 6e 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 29 0a 0a 23 25 25 20 70 6c 6f 74 20 64 | bution').pl.legend()..#%%.plot.d |
b520 | 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 70 6c | istributions.and.loss.matrix..pl |
b540 | 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 29 0a 6f 74 2e 70 6c | .figure(2,.figsize=(5,.5)).ot.pl |
b560 | 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 4d 2c 20 27 43 6f 73 74 20 6d 61 74 | ot.plot1D_mat(a,.b,.M,.'Cost.mat |
b580 | 72 69 78 20 4d 27 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | rix.M')..####################### |
b5a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
b5c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 53 6f 6c 76 65 20 | #######################.#.Solve. |
b5e0 | 45 4d 44 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 25 25 20 45 4d 44 0a 0a 47 30 20 3d 20 | EMD.#.---------...#%%.EMD..G0.=. |
b600 | 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 33 2c 20 66 69 | ot.emd(a,.b,.M)..pl.figure(3,.fi |
b620 | 67 73 69 7a 65 3d 28 35 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 | gsize=(5,.5)).ot.plot.plot1D_mat |
b640 | 28 61 2c 20 62 2c 20 47 30 2c 20 27 4f 54 20 6d 61 74 72 69 78 20 47 30 27 29 0a 0a 23 23 23 23 | (a,.b,.G0,.'OT.matrix.G0')..#### |
b660 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
b680 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
b6a0 | 23 23 23 23 23 23 23 23 23 23 0a 23 20 53 6f 6c 76 65 20 53 69 6e 6b 68 6f 72 6e 0a 23 20 2d 2d | ##########.#.Solve.Sinkhorn.#.-- |
b6c0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 25 25 20 53 69 6e 6b 68 6f 72 6e 0a 0a 6c 61 6d | ------------...#%%.Sinkhorn..lam |
b6e0 | 62 64 20 3d 20 32 65 2d 33 0a 47 73 20 3d 20 6f 74 2e 73 69 6e 6b 68 6f 72 6e 28 61 2c 20 62 2c | bd.=.2e-3.Gs.=.ot.sinkhorn(a,.b, |
b700 | 20 4d 2c 20 6c 61 6d 62 64 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 0a 70 6c 2e 66 69 67 | .M,.lambd,.verbose=True)..pl.fig |
b720 | 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 | ure(4,.figsize=(5,.5)).ot.plot.p |
b740 | 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 47 73 2c 20 27 4f 54 20 6d 61 74 72 69 78 20 53 | lot1D_mat(a,.b,.Gs,.'OT.matrix.S |
b760 | 69 6e 6b 68 6f 72 6e 27 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 | inkhorn')..pl.show()..########## |
b780 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
b7a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
b7c0 | 23 23 23 23 0a 23 20 53 6f 6c 76 65 20 53 6d 6f 6f 74 68 20 4f 54 0a 23 20 2d 2d 2d 2d 2d 2d 2d | ####.#.Solve.Smooth.OT.#.------- |
b7e0 | 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 25 25 20 53 6d 6f 6f 74 68 20 4f 54 20 77 69 74 68 20 4b 4c 20 | -------...#%%.Smooth.OT.with.KL. |
b800 | 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 0a 6c 61 6d 62 64 20 3d 20 32 65 2d 33 0a 47 73 6d | regularization..lambd.=.2e-3.Gsm |
b820 | 20 3d 20 6f 74 2e 73 6d 6f 6f 74 68 2e 73 6d 6f 6f 74 68 5f 6f 74 5f 64 75 61 6c 28 61 2c 20 62 | .=.ot.smooth.smooth_ot_dual(a,.b |
b840 | 2c 20 4d 2c 20 6c 61 6d 62 64 2c 20 72 65 67 5f 74 79 70 65 3d 27 6b 6c 27 29 0a 0a 70 6c 2e 66 | ,.M,.lambd,.reg_type='kl')..pl.f |
b860 | 69 67 75 72 65 28 35 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 | igure(5,.figsize=(5,.5)).ot.plot |
b880 | 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 47 73 6d 2c 20 27 4f 54 20 6d 61 74 72 69 | .plot1D_mat(a,.b,.Gsm,.'OT.matri |
b8a0 | 78 20 53 6d 6f 6f 74 68 20 4f 54 20 4b 4c 20 72 65 67 2e 27 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 | x.Smooth.OT.KL.reg.')..pl.show() |
b8c0 | 0a 0a 0a 23 25 25 20 53 6d 6f 6f 74 68 20 4f 54 20 77 69 74 68 20 4b 4c 20 72 65 67 75 6c 61 72 | ...#%%.Smooth.OT.with.KL.regular |
b8e0 | 69 7a 61 74 69 6f 6e 0a 0a 6c 61 6d 62 64 20 3d 20 31 65 2d 31 0a 47 73 6d 20 3d 20 6f 74 2e 73 | ization..lambd.=.1e-1.Gsm.=.ot.s |
b900 | 6d 6f 6f 74 68 2e 73 6d 6f 6f 74 68 5f 6f 74 5f 64 75 61 6c 28 61 2c 20 62 2c 20 4d 2c 20 6c 61 | mooth.smooth_ot_dual(a,.b,.M,.la |
b920 | 6d 62 64 2c 20 72 65 67 5f 74 79 70 65 3d 27 6c 32 27 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 36 | mbd,.reg_type='l2')..pl.figure(6 |
b940 | 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 | ,.figsize=(5,.5)).ot.plot.plot1D |
b960 | 5f 6d 61 74 28 61 2c 20 62 2c 20 47 73 6d 2c 20 27 4f 54 20 6d 61 74 72 69 78 20 53 6d 6f 6f 74 | _mat(a,.b,.Gsm,.'OT.matrix.Smoot |
b980 | 68 20 4f 54 20 6c 32 20 72 65 67 2e 27 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 | h.OT.l2.reg.')..pl.show().PK.... |
b9a0 | 00 00 00 00 7c b0 94 50 72 6d af 7b ed 10 00 00 ed 10 00 00 14 00 00 00 70 6c 6f 74 5f 6f 74 64 | ....|..Prm.{............plot_otd |
b9c0 | 61 5f 63 6c 61 73 73 65 73 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 | a_classes.py#.-*-.coding:.utf-8. |
b9e0 | 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | -*-.""".======================== |
ba00 | 0a 4f 54 20 66 6f 72 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 0a 3d 3d 3d 3d 3d 3d | .OT.for.domain.adaptation.====== |
ba20 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 | ==================..This.example |
ba40 | 20 69 6e 74 72 6f 64 75 63 65 73 20 61 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 20 | .introduces.a.domain.adaptation. |
ba60 | 69 6e 20 61 20 32 44 20 73 65 74 74 69 6e 67 20 61 6e 64 20 74 68 65 20 34 20 4f 54 44 41 0a 61 | in.a.2D.setting.and.the.4.OTDA.a |
ba80 | 70 70 72 6f 61 63 68 65 73 20 63 75 72 72 65 6e 74 6c 79 20 73 75 70 70 6f 72 74 65 64 20 69 6e | pproaches.currently.supported.in |
baa0 | 20 50 4f 54 2e 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 73 3a 20 52 65 6d 69 20 46 6c 61 6d | .POT..."""..#.Authors:.Remi.Flam |
bac0 | 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 20 20 20 | ary.<remi.flamary@unice.fr>.#... |
bae0 | 20 20 20 20 20 20 20 53 74 61 6e 69 73 6c 61 73 20 43 68 61 6d 62 6f 6e 20 3c 73 74 61 6e 2e 63 | .......Stanislas.Chambon.<stan.c |
bb00 | 68 61 6d 62 6f 6e 40 67 6d 61 69 6c 2e 63 6f 6d 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d | hambon@gmail.com>.#.#.License:.M |
bb20 | 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 | IT.License..import.matplotlib.py |
bb40 | 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 0a 23 23 23 23 23 23 23 23 23 23 23 | lab.as.pl.import.ot..########### |
bb60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
bb80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
bba0 | 23 23 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | ###.#.Generate.data.#.---------- |
bbc0 | 2d 2d 2d 0a 0a 6e 5f 73 6f 75 72 63 65 5f 73 61 6d 70 6c 65 73 20 3d 20 31 35 30 0a 6e 5f 74 61 | ---..n_source_samples.=.150.n_ta |
bbe0 | 72 67 65 74 5f 73 61 6d 70 6c 65 73 20 3d 20 31 35 30 0a 0a 58 73 2c 20 79 73 20 3d 20 6f 74 2e | rget_samples.=.150..Xs,.ys.=.ot. |
bc00 | 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 27 33 67 61 75 | datasets.make_data_classif('3gau |
bc20 | 73 73 27 2c 20 6e 5f 73 6f 75 72 63 65 5f 73 61 6d 70 6c 65 73 29 0a 58 74 2c 20 79 74 20 3d 20 | ss',.n_source_samples).Xt,.yt.=. |
bc40 | 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 27 33 | ot.datasets.make_data_classif('3 |
bc60 | 67 61 75 73 73 32 27 2c 20 6e 5f 74 61 72 67 65 74 5f 73 61 6d 70 6c 65 73 29 0a 0a 0a 23 23 23 | gauss2',.n_target_samples)...### |
bc80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
bca0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
bcc0 | 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 49 6e 73 74 61 6e 74 69 61 74 65 20 74 68 65 20 64 69 | ###########.#.Instantiate.the.di |
bce0 | 66 66 65 72 65 6e 74 20 74 72 61 6e 73 70 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d 73 20 61 6e 64 | fferent.transport.algorithms.and |
bd00 | 20 66 69 74 20 74 68 65 6d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | .fit.them.#.-------------------- |
bd20 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
bd40 | 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 20 45 4d 44 20 54 72 61 6e 73 70 6f 72 74 0a 6f 74 5f 65 6d 64 20 | -------..#.EMD.Transport.ot_emd. |
bd60 | 3d 20 6f 74 2e 64 61 2e 45 4d 44 54 72 61 6e 73 70 6f 72 74 28 29 0a 6f 74 5f 65 6d 64 2e 66 69 | =.ot.da.EMDTransport().ot_emd.fi |
bd80 | 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 53 69 6e 6b 68 6f 72 6e 20 54 72 61 6e | t(Xs=Xs,.Xt=Xt)..#.Sinkhorn.Tran |
bda0 | 73 70 6f 72 74 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b 68 6f | sport.ot_sinkhorn.=.ot.da.Sinkho |
bdc0 | 72 6e 54 72 61 6e 73 70 6f 72 74 28 72 65 67 5f 65 3d 31 65 2d 31 29 0a 6f 74 5f 73 69 6e 6b 68 | rnTransport(reg_e=1e-1).ot_sinkh |
bde0 | 6f 72 6e 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 53 69 6e 6b 68 6f 72 | orn.fit(Xs=Xs,.Xt=Xt)..#.Sinkhor |
be00 | 6e 20 54 72 61 6e 73 70 6f 72 74 20 77 69 74 68 20 47 72 6f 75 70 20 6c 61 73 73 6f 20 72 65 67 | n.Transport.with.Group.lasso.reg |
be20 | 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 6f 74 5f 6c 70 6c 31 20 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b | ularization.ot_lpl1.=.ot.da.Sink |
be40 | 68 6f 72 6e 4c 70 6c 31 54 72 61 6e 73 70 6f 72 74 28 72 65 67 5f 65 3d 31 65 2d 31 2c 20 72 65 | hornLpl1Transport(reg_e=1e-1,.re |
be60 | 67 5f 63 6c 3d 31 65 30 29 0a 6f 74 5f 6c 70 6c 31 2e 66 69 74 28 58 73 3d 58 73 2c 20 79 73 3d | g_cl=1e0).ot_lpl1.fit(Xs=Xs,.ys= |
be80 | 79 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 53 69 6e 6b 68 6f 72 6e 20 54 72 61 6e 73 70 6f 72 74 | ys,.Xt=Xt)..#.Sinkhorn.Transport |
bea0 | 20 77 69 74 68 20 47 72 6f 75 70 20 6c 61 73 73 6f 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e | .with.Group.lasso.regularization |
bec0 | 20 6c 31 6c 32 0a 6f 74 5f 6c 31 6c 32 20 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b 68 6f 72 6e 4c 31 | .l1l2.ot_l1l2.=.ot.da.SinkhornL1 |
bee0 | 6c 32 54 72 61 6e 73 70 6f 72 74 28 72 65 67 5f 65 3d 31 65 2d 31 2c 20 72 65 67 5f 63 6c 3d 32 | l2Transport(reg_e=1e-1,.reg_cl=2 |
bf00 | 65 30 2c 20 6d 61 78 5f 69 74 65 72 3d 32 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | e0,.max_iter=20,................ |
bf20 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 3d 54 | .......................verbose=T |
bf40 | 72 75 65 29 0a 6f 74 5f 6c 31 6c 32 2e 66 69 74 28 58 73 3d 58 73 2c 20 79 73 3d 79 73 2c 20 58 | rue).ot_l1l2.fit(Xs=Xs,.ys=ys,.X |
bf60 | 74 3d 58 74 29 0a 0a 23 20 74 72 61 6e 73 70 6f 72 74 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 | t=Xt)..#.transport.source.sample |
bf80 | 73 20 6f 6e 74 6f 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 0a 74 72 61 6e 73 70 5f 58 73 5f | s.onto.target.samples.transp_Xs_ |
bfa0 | 65 6d 64 20 3d 20 6f 74 5f 65 6d 64 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 74 72 | emd.=.ot_emd.transform(Xs=Xs).tr |
bfc0 | 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 5f 73 69 6e 6b 68 6f 72 6e 2e 74 | ansp_Xs_sinkhorn.=.ot_sinkhorn.t |
bfe0 | 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 74 72 61 6e 73 70 5f 58 73 5f 6c 70 6c 31 20 3d | ransform(Xs=Xs).transp_Xs_lpl1.= |
c000 | 20 6f 74 5f 6c 70 6c 31 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 74 72 61 6e 73 70 | .ot_lpl1.transform(Xs=Xs).transp |
c020 | 5f 58 73 5f 6c 31 6c 32 20 3d 20 6f 74 5f 6c 31 6c 32 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d | _Xs_l1l2.=.ot_l1l2.transform(Xs= |
c040 | 58 73 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | Xs)...########################## |
c060 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
c080 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 67 20 31 20 3a 20 70 | ####################.#.Fig.1.:.p |
c0a0 | 6c 6f 74 73 20 73 6f 75 72 63 65 20 61 6e 64 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 0a 23 | lots.source.and.target.samples.# |
c0c0 | 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | .------------------------------- |
c0e0 | 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 | --------..pl.figure(1,.figsize=( |
c100 | 31 30 2c 20 35 29 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 | 10,.5)).pl.subplot(1,.2,.1).pl.s |
c120 | 63 61 74 74 65 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 58 73 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c | catter(Xs[:,.0],.Xs[:,.1],.c=ys, |
c140 | 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c | .marker='+',.label='Source.sampl |
c160 | 65 73 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 | es').pl.xticks([]).pl.yticks([]) |
c180 | 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 |
c1a0 | 63 65 20 20 73 61 6d 70 6c 65 73 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 | ce..samples')..pl.subplot(1,.2,. |
c1c0 | 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d | 2).pl.scatter(Xt[:,.0],.Xt[:,.1] |
c1e0 | 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 | ,.c=yt,.marker='o',.label='Targe |
c200 | 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 | t.samples').pl.xticks([]).pl.yti |
c220 | 63 6b 73 28 5b 5d 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c | cks([]).pl.legend(loc=0).pl.titl |
c240 | 65 28 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 | e('Target.samples').pl.tight_lay |
c260 | 6f 75 74 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | out()...######################## |
c280 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
c2a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 67 20 32 20 3a | ######################.#.Fig.2.: |
c2c0 | 20 70 6c 6f 74 20 6f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 73 20 61 6e 64 20 74 72 61 6e | .plot.optimal.couplings.and.tran |
c2e0 | 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | sported.samples.#.-------------- |
c300 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
c320 | 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 61 72 61 6d 5f 69 6d 67 20 3d 20 7b 27 69 6e 74 65 72 70 6f 6c | --------..param_img.=.{'interpol |
c340 | 61 74 69 6f 6e 27 3a 20 27 6e 65 61 72 65 73 74 27 7d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c | ation':.'nearest'}..pl.figure(2, |
c360 | 20 66 69 67 73 69 7a 65 3d 28 31 35 2c 20 38 29 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 | .figsize=(15,.8)).pl.subplot(2,. |
c380 | 34 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 65 6d 64 2e 63 6f 75 70 6c 69 6e 67 5f | 4,.1).pl.imshow(ot_emd.coupling_ |
c3a0 | 2c 20 2a 2a 70 61 72 61 6d 5f 69 6d 67 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e | ,.**param_img).pl.xticks([]).pl. |
c3c0 | 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 70 74 69 6d 61 6c 20 63 6f 75 | yticks([]).pl.title('Optimal.cou |
c3e0 | 70 6c 69 6e 67 5c 6e 45 4d 44 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f | pling\nEMDTransport')..pl.subplo |
c400 | 74 28 32 2c 20 34 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 73 69 6e 6b 68 6f 72 6e | t(2,.4,.2).pl.imshow(ot_sinkhorn |
c420 | 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 2a 2a 70 61 72 61 6d 5f 69 6d 67 29 0a 70 6c 2e 78 74 69 63 | .coupling_,.**param_img).pl.xtic |
c440 | 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f | ks([]).pl.yticks([]).pl.title('O |
c460 | 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 5c 6e 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f | ptimal.coupling\nSinkhornTranspo |
c480 | 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 34 2c 20 33 29 0a 70 6c 2e 69 6d 73 | rt')..pl.subplot(2,.4,.3).pl.ims |
c4a0 | 68 6f 77 28 6f 74 5f 6c 70 6c 31 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 2a 2a 70 61 72 61 6d 5f 69 | how(ot_lpl1.coupling_,.**param_i |
c4c0 | 6d 67 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a | mg).pl.xticks([]).pl.yticks([]). |
c4e0 | 70 6c 2e 74 69 74 6c 65 28 27 4f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 5c 6e 53 69 6e 6b | pl.title('Optimal.coupling\nSink |
c500 | 68 6f 72 6e 4c 70 6c 31 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 | hornLpl1Transport')..pl.subplot( |
c520 | 32 2c 20 34 2c 20 34 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 6c 31 6c 32 2e 63 6f 75 70 6c | 2,.4,.4).pl.imshow(ot_l1l2.coupl |
c540 | 69 6e 67 5f 2c 20 2a 2a 70 61 72 61 6d 5f 69 6d 67 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 | ing_,.**param_img).pl.xticks([]) |
c560 | 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 70 74 69 6d 61 6c | .pl.yticks([]).pl.title('Optimal |
c580 | 20 63 6f 75 70 6c 69 6e 67 5c 6e 53 69 6e 6b 68 6f 72 6e 4c 31 6c 32 54 72 61 6e 73 70 6f 72 74 | .coupling\nSinkhornL1l2Transport |
c5a0 | 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 34 2c 20 35 29 0a 70 6c 2e 73 63 61 74 74 | ')..pl.subplot(2,.4,.5).pl.scatt |
c5c0 | 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 | er(Xt[:,.0],.Xt[:,.1],.c=yt,.mar |
c5e0 | 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 | ker='o',............label='Targe |
c600 | 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 30 2e 33 29 0a 70 6c 2e 73 63 61 74 74 65 | t.samples',.alpha=0.3).pl.scatte |
c620 | 72 28 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 | r(transp_Xs_emd[:,.0],.transp_Xs |
c640 | 5f 65 6d 64 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 | _emd[:,.1],.c=ys,............mar |
c660 | 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c | ker='+',.label='Transp.samples', |
c680 | 20 73 3d 33 30 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b | .s=30).pl.xticks([]).pl.yticks([ |
c6a0 | 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 | ]).pl.title('Transported.samples |
c6c0 | 5c 6e 45 6d 64 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 22 | \nEmdTransport').pl.legend(loc=" |
c6e0 | 6c 6f 77 65 72 20 6c 65 66 74 22 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 34 2c 20 36 | lower.left")..pl.subplot(2,.4,.6 |
c700 | 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c | ).pl.scatter(Xt[:,.0],.Xt[:,.1], |
c720 | 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 | .c=yt,.marker='o',............la |
c740 | 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 30 2e 33 29 | bel='Target.samples',.alpha=0.3) |
c760 | 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 5b 3a | .pl.scatter(transp_Xs_sinkhorn[: |
c780 | 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 5b 3a 2c 20 31 5d 2c 20 | ,.0],.transp_Xs_sinkhorn[:,.1],. |
c7a0 | 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 | c=ys,............marker='+',.lab |
c7c0 | 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 20 73 3d 33 30 29 0a 70 6c 2e 78 74 | el='Transp.samples',.s=30).pl.xt |
c7e0 | 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 | icks([]).pl.yticks([]).pl.title( |
c800 | 27 54 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 5c 6e 53 69 6e 6b 68 6f 72 6e 54 72 | 'Transported.samples\nSinkhornTr |
c820 | 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 34 2c 20 37 29 0a 70 | ansport')..pl.subplot(2,.4,.7).p |
c840 | 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d | l.scatter(Xt[:,.0],.Xt[:,.1],.c= |
c860 | 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c | yt,.marker='o',............label |
c880 | 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 30 2e 33 29 0a 70 6c | ='Target.samples',.alpha=0.3).pl |
c8a0 | 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 6c 70 6c 31 5b 3a 2c 20 30 5d 2c 20 74 | .scatter(transp_Xs_lpl1[:,.0],.t |
c8c0 | 72 61 6e 73 70 5f 58 73 5f 6c 70 6c 31 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 | ransp_Xs_lpl1[:,.1],.c=ys,...... |
c8e0 | 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 54 72 61 6e 73 70 20 | ......marker='+',.label='Transp. |
c900 | 73 61 6d 70 6c 65 73 27 2c 20 73 3d 33 30 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c | samples',.s=30).pl.xticks([]).pl |
c920 | 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 72 61 6e 73 70 6f 72 74 65 | .yticks([]).pl.title('Transporte |
c940 | 64 20 73 61 6d 70 6c 65 73 5c 6e 53 69 6e 6b 68 6f 72 6e 4c 70 6c 31 54 72 61 6e 73 70 6f 72 74 | d.samples\nSinkhornLpl1Transport |
c960 | 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 34 2c 20 38 29 0a 70 6c 2e 73 63 61 74 74 | ')..pl.subplot(2,.4,.8).pl.scatt |
c980 | 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 | er(Xt[:,.0],.Xt[:,.1],.c=yt,.mar |
c9a0 | 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 | ker='o',............label='Targe |
c9c0 | 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 30 2e 33 29 0a 70 6c 2e 73 63 61 74 74 65 | t.samples',.alpha=0.3).pl.scatte |
c9e0 | 72 28 74 72 61 6e 73 70 5f 58 73 5f 6c 31 6c 32 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 | r(transp_Xs_l1l2[:,.0],.transp_X |
ca00 | 73 5f 6c 31 6c 32 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d | s_l1l2[:,.1],.c=ys,............m |
ca20 | 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 | arker='+',.label='Transp.samples |
ca40 | 27 2c 20 73 3d 33 30 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 | ',.s=30).pl.xticks([]).pl.yticks |
ca60 | 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c | ([]).pl.title('Transported.sampl |
ca80 | 65 73 5c 6e 53 69 6e 6b 68 6f 72 6e 4c 31 6c 32 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 6c 2e 74 | es\nSinkhornL1l2Transport').pl.t |
caa0 | 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 | ight_layout()..pl.show().PK..... |
cac0 | 00 00 00 ae b0 94 50 b3 9e fa 08 dd 14 00 00 dd 14 00 00 1f 00 00 00 70 6c 6f 74 5f 70 61 72 74 | ......P................plot_part |
cae0 | 69 61 6c 5f 77 61 73 73 5f 61 6e 64 5f 67 72 6f 6d 6f 76 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 | ial_wass_and_gromov.py#.-*-.codi |
cb00 | 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0d 0a 22 22 22 0d 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ng:.utf-8.-*-.."""..============ |
cb20 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
cb40 | 3d 3d 3d 3d 3d 3d 0d 0a 50 61 72 74 69 61 6c 20 57 61 73 73 65 72 73 74 65 69 6e 20 61 6e 64 20 | ======..Partial.Wasserstein.and. |
cb60 | 47 72 6f 6d 6f 76 2d 57 61 73 73 65 72 73 74 65 69 6e 20 65 78 61 6d 70 6c 65 0d 0a 3d 3d 3d 3d | Gromov-Wasserstein.example..==== |
cb80 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
cba0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 0d 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 | ==============....This.example.i |
cbc0 | 73 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73 68 6f 77 20 68 6f 77 20 74 6f 20 75 73 65 20 74 68 | s.designed.to.show.how.to.use.th |
cbe0 | 65 20 50 61 72 74 69 61 6c 20 28 47 72 6f 6d 6f 76 2d 29 57 61 73 73 65 72 74 73 65 69 6e 0d 0a | e.Partial.(Gromov-)Wassertsein.. |
cc00 | 64 69 73 74 61 6e 63 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 69 6e 20 50 4f 54 2e 0d 0a 22 22 | distance.computation.in.POT..."" |
cc20 | 22 0d 0a 0d 0a 23 20 41 75 74 68 6f 72 3a 20 4c 61 65 74 69 74 69 61 20 43 68 61 70 65 6c 20 3c | "....#.Author:.Laetitia.Chapel.< |
cc40 | 6c 61 65 74 69 74 69 61 2e 63 68 61 70 65 6c 40 69 72 69 73 61 2e 66 72 3e 0d 0a 23 20 4c 69 63 | laetitia.chapel@irisa.fr>..#.Lic |
cc60 | 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0d 0a 0d 0a 23 20 6e 65 63 65 73 73 61 72 79 | ense:.MIT.License....#.necessary |
cc80 | 20 66 6f 72 20 33 64 20 70 6c 6f 74 20 65 76 65 6e 20 69 66 20 6e 6f 74 20 75 73 65 64 0d 0a 66 | .for.3d.plot.even.if.not.used..f |
cca0 | 72 6f 6d 20 6d 70 6c 5f 74 6f 6f 6c 6b 69 74 73 2e 6d 70 6c 6f 74 33 64 20 69 6d 70 6f 72 74 20 | rom.mpl_toolkits.mplot3d.import. |
ccc0 | 41 78 65 73 33 44 20 20 23 20 6e 6f 71 61 0d 0a 69 6d 70 6f 72 74 20 73 63 69 70 79 20 61 73 20 | Axes3D..#.noqa..import.scipy.as. |
cce0 | 73 70 0d 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0d 0a 69 6d 70 6f 72 74 20 6d | sp..import.numpy.as.np..import.m |
cd00 | 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0d 0a 69 6d 70 6f 72 74 20 6f 74 | atplotlib.pylab.as.pl..import.ot |
cd20 | 0d 0a 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ......########################## |
cd40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
cd60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 23 0d 0a 23 20 53 61 6d 70 6c 65 | ###################..#..#.Sample |
cd80 | 20 74 77 6f 20 32 44 20 47 61 75 73 73 69 61 6e 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 61 | .two.2D.Gaussian.distributions.a |
cda0 | 6e 64 20 70 6c 6f 74 20 74 68 65 6d 0d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | nd.plot.them..#.---------------- |
cdc0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
cde0 | 2d 2d 0d 0a 23 0d 0a 23 20 46 6f 72 20 64 65 6d 6f 6e 73 74 72 61 74 69 6f 6e 20 70 75 72 70 6f | --..#..#.For.demonstration.purpo |
ce00 | 73 65 2c 20 77 65 20 73 61 6d 70 6c 65 20 74 77 6f 20 47 61 75 73 73 69 61 6e 20 64 69 73 74 72 | se,.we.sample.two.Gaussian.distr |
ce20 | 69 62 75 74 69 6f 6e 73 20 69 6e 20 32 2d 64 0d 0a 23 20 73 70 61 63 65 73 20 61 6e 64 20 61 64 | ibutions.in.2-d..#.spaces.and.ad |
ce40 | 64 20 73 6f 6d 65 20 72 61 6e 64 6f 6d 20 6e 6f 69 73 65 2e 0d 0a 0d 0a 0d 0a 6e 5f 73 61 6d 70 | d.some.random.noise.......n_samp |
ce60 | 6c 65 73 20 3d 20 32 30 20 20 23 20 6e 62 20 73 61 6d 70 6c 65 73 20 28 67 61 75 73 73 69 61 6e | les.=.20..#.nb.samples.(gaussian |
ce80 | 29 0d 0a 6e 5f 6e 6f 69 73 65 20 3d 20 32 30 20 20 23 20 6e 62 20 6f 66 20 73 61 6d 70 6c 65 73 | )..n_noise.=.20..#.nb.of.samples |
cea0 | 20 28 6e 6f 69 73 65 29 0d 0a 0d 0a 6d 75 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 30 2c 20 30 5d | .(noise)....mu.=.np.array([0,.0] |
cec0 | 29 0d 0a 63 6f 76 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 5b 31 2c 20 30 5d 2c 20 5b 30 2c 20 32 | )..cov.=.np.array([[1,.0],.[0,.2 |
cee0 | 5d 5d 29 0d 0a 0d 0a 78 73 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 32 44 5f | ]])....xs.=.ot.datasets.make_2D_ |
cf00 | 73 61 6d 70 6c 65 73 5f 67 61 75 73 73 28 6e 5f 73 61 6d 70 6c 65 73 2c 20 6d 75 2c 20 63 6f 76 | samples_gauss(n_samples,.mu,.cov |
cf20 | 29 0d 0a 78 73 20 3d 20 6e 70 2e 61 70 70 65 6e 64 28 78 73 2c 20 28 6e 70 2e 72 61 6e 64 6f 6d | )..xs.=.np.append(xs,.(np.random |
cf40 | 2e 72 61 6e 64 28 6e 5f 6e 6f 69 73 65 2c 20 32 29 20 2b 20 31 29 20 2a 20 34 29 2e 72 65 73 68 | .rand(n_noise,.2).+.1).*.4).resh |
cf60 | 61 70 65 28 28 2d 31 2c 20 32 29 29 0d 0a 78 74 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d | ape((-1,.2))..xt.=.ot.datasets.m |
cf80 | 61 6b 65 5f 32 44 5f 73 61 6d 70 6c 65 73 5f 67 61 75 73 73 28 6e 5f 73 61 6d 70 6c 65 73 2c 20 | ake_2D_samples_gauss(n_samples,. |
cfa0 | 6d 75 2c 20 63 6f 76 29 0d 0a 78 74 20 3d 20 6e 70 2e 61 70 70 65 6e 64 28 78 74 2c 20 28 6e 70 | mu,.cov)..xt.=.np.append(xt,.(np |
cfc0 | 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 28 6e 5f 6e 6f 69 73 65 2c 20 32 29 20 2b 20 31 29 20 2a 20 | .random.rand(n_noise,.2).+.1).*. |
cfe0 | 2d 33 29 2e 72 65 73 68 61 70 65 28 28 2d 31 2c 20 32 29 29 0d 0a 0d 0a 4d 20 3d 20 73 70 2e 73 | -3).reshape((-1,.2))....M.=.sp.s |
d000 | 70 61 74 69 61 6c 2e 64 69 73 74 61 6e 63 65 2e 63 64 69 73 74 28 78 73 2c 20 78 74 29 0d 0a 0d | patial.distance.cdist(xs,.xt)... |
d020 | 0a 66 69 67 20 3d 20 70 6c 2e 66 69 67 75 72 65 28 29 0d 0a 61 78 31 20 3d 20 66 69 67 2e 61 64 | .fig.=.pl.figure()..ax1.=.fig.ad |
d040 | 64 5f 73 75 62 70 6c 6f 74 28 31 33 31 29 0d 0a 61 78 31 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 | d_subplot(131)..ax1.plot(xs[:,.0 |
d060 | 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 | ],.xs[:,.1],.'+b',.label='Source |
d080 | 20 73 61 6d 70 6c 65 73 27 29 0d 0a 61 78 32 20 3d 20 66 69 67 2e 61 64 64 5f 73 75 62 70 6c 6f | .samples')..ax2.=.fig.add_subplo |
d0a0 | 74 28 31 33 32 29 0d 0a 61 78 32 2e 73 63 61 74 74 65 72 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 | t(132)..ax2.scatter(xt[:,.0],.xt |
d0c0 | 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 72 27 29 0d 0a 61 78 33 20 3d 20 66 69 67 2e 61 64 | [:,.1],.color='r')..ax3.=.fig.ad |
d0e0 | 64 5f 73 75 62 70 6c 6f 74 28 31 33 33 29 0d 0a 61 78 33 2e 69 6d 73 68 6f 77 28 4d 29 0d 0a 70 | d_subplot(133)..ax3.imshow(M)..p |
d100 | 6c 2e 73 68 6f 77 28 29 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | l.show()....#################### |
d120 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
d140 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 23 0d 0a 23 20 | #########################..#..#. |
d160 | 43 6f 6d 70 75 74 65 20 70 61 72 74 69 61 6c 20 57 61 73 73 65 72 73 74 65 69 6e 20 70 6c 61 6e | Compute.partial.Wasserstein.plan |
d180 | 73 20 61 6e 64 20 64 69 73 74 61 6e 63 65 0d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | s.and.distance..#.-------------- |
d1a0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
d1c0 | 0d 0a 0d 0a 70 20 3d 20 6f 74 2e 75 6e 69 66 28 6e 5f 73 61 6d 70 6c 65 73 20 2b 20 6e 5f 6e 6f | ....p.=.ot.unif(n_samples.+.n_no |
d1e0 | 69 73 65 29 0d 0a 71 20 3d 20 6f 74 2e 75 6e 69 66 28 6e 5f 73 61 6d 70 6c 65 73 20 2b 20 6e 5f | ise)..q.=.ot.unif(n_samples.+.n_ |
d200 | 6e 6f 69 73 65 29 0d 0a 0d 0a 77 30 2c 20 6c 6f 67 30 20 3d 20 6f 74 2e 70 61 72 74 69 61 6c 2e | noise)....w0,.log0.=.ot.partial. |
d220 | 70 61 72 74 69 61 6c 5f 77 61 73 73 65 72 73 74 65 69 6e 28 70 2c 20 71 2c 20 4d 2c 20 6d 3d 30 | partial_wasserstein(p,.q,.M,.m=0 |
d240 | 2e 35 2c 20 6c 6f 67 3d 54 72 75 65 29 0d 0a 77 2c 20 6c 6f 67 20 3d 20 6f 74 2e 70 61 72 74 69 | .5,.log=True)..w,.log.=.ot.parti |
d260 | 61 6c 2e 65 6e 74 72 6f 70 69 63 5f 70 61 72 74 69 61 6c 5f 77 61 73 73 65 72 73 74 65 69 6e 28 | al.entropic_partial_wasserstein( |
d280 | 70 2c 20 71 2c 20 4d 2c 20 72 65 67 3d 30 2e 31 2c 20 6d 3d 30 2e 35 2c 0d 0a 20 20 20 20 20 20 | p,.q,.M,.reg=0.1,.m=0.5,........ |
d2a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
d2c0 | 20 20 20 20 20 20 20 20 20 20 20 6c 6f 67 3d 54 72 75 65 29 0d 0a 0d 0a 70 72 69 6e 74 28 27 50 | ...........log=True)....print('P |
d2e0 | 61 72 74 69 61 6c 20 57 61 73 73 65 72 73 74 65 69 6e 20 64 69 73 74 61 6e 63 65 20 28 6d 20 3d | artial.Wasserstein.distance.(m.= |
d300 | 20 30 2e 35 29 3a 20 27 20 2b 20 73 74 72 28 6c 6f 67 30 5b 27 70 61 72 74 69 61 6c 5f 77 5f 64 | .0.5):.'.+.str(log0['partial_w_d |
d320 | 69 73 74 27 5d 29 29 0d 0a 70 72 69 6e 74 28 27 45 6e 74 72 6f 70 69 63 20 70 61 72 74 69 61 6c | ist']))..print('Entropic.partial |
d340 | 20 57 61 73 73 65 72 73 74 65 69 6e 20 64 69 73 74 61 6e 63 65 20 28 6d 20 3d 20 30 2e 35 29 3a | .Wasserstein.distance.(m.=.0.5): |
d360 | 20 27 20 2b 0d 0a 20 20 20 20 20 20 73 74 72 28 6c 6f 67 5b 27 70 61 72 74 69 61 6c 5f 77 5f 64 | .'.+........str(log['partial_w_d |
d380 | 69 73 74 27 5d 29 29 0d 0a 0d 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 28 31 30 2c 20 35 29 29 | ist']))....pl.figure(1,.(10,.5)) |
d3a0 | 0d 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0d 0a 70 6c 2e 69 6d 73 68 6f 77 | ..pl.subplot(1,.2,.1)..pl.imshow |
d3c0 | 28 77 30 2c 20 63 6d 61 70 3d 27 6a 65 74 27 29 0d 0a 70 6c 2e 74 69 74 6c 65 28 27 50 61 72 74 | (w0,.cmap='jet')..pl.title('Part |
d3e0 | 69 61 6c 20 57 61 73 73 65 72 73 74 65 69 6e 27 29 0d 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c | ial.Wasserstein')..pl.subplot(1, |
d400 | 20 32 2c 20 32 29 0d 0a 70 6c 2e 69 6d 73 68 6f 77 28 77 2c 20 63 6d 61 70 3d 27 6a 65 74 27 29 | .2,.2)..pl.imshow(w,.cmap='jet') |
d420 | 0d 0a 70 6c 2e 74 69 74 6c 65 28 27 45 6e 74 72 6f 70 69 63 20 70 61 72 74 69 61 6c 20 57 61 73 | ..pl.title('Entropic.partial.Was |
d440 | 73 65 72 73 74 65 69 6e 27 29 0d 0a 70 6c 2e 73 68 6f 77 28 29 0d 0a 0d 0a 0d 0a 23 23 23 23 23 | serstein')..pl.show()......##### |
d460 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
d480 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
d4a0 | 23 23 23 23 23 23 23 23 0d 0a 23 0d 0a 23 20 53 61 6d 70 6c 65 20 6f 6e 65 20 32 44 20 61 6e 64 | ########..#..#.Sample.one.2D.and |
d4c0 | 20 33 44 20 47 61 75 73 73 69 61 6e 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 61 6e 64 20 70 | .3D.Gaussian.distributions.and.p |
d4e0 | 6c 6f 74 20 74 68 65 6d 0d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | lot.them..#.-------------------- |
d500 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
d520 | 2d 2d 2d 2d 2d 0d 0a 23 0d 0a 23 20 54 68 65 20 47 72 6f 6d 6f 76 2d 57 61 73 73 65 72 73 74 65 | -----..#..#.The.Gromov-Wasserste |
d540 | 69 6e 20 64 69 73 74 61 6e 63 65 20 61 6c 6c 6f 77 73 20 74 6f 20 63 6f 6d 70 75 74 65 20 64 69 | in.distance.allows.to.compute.di |
d560 | 73 74 61 6e 63 65 73 20 77 69 74 68 20 73 61 6d 70 6c 65 73 20 74 68 61 74 0d 0a 23 20 64 6f 20 | stances.with.samples.that..#.do. |
d580 | 6e 6f 74 20 62 65 6c 6f 6e 67 20 74 6f 20 74 68 65 20 73 61 6d 65 20 6d 65 74 72 69 63 20 73 70 | not.belong.to.the.same.metric.sp |
d5a0 | 61 63 65 2e 20 46 6f 72 20 64 65 6d 6f 6e 73 74 72 61 74 69 6f 6e 20 70 75 72 70 6f 73 65 2c 20 | ace..For.demonstration.purpose,. |
d5c0 | 77 65 20 73 61 6d 70 6c 65 0d 0a 23 20 74 77 6f 20 47 61 75 73 73 69 61 6e 20 64 69 73 74 72 69 | we.sample..#.two.Gaussian.distri |
d5e0 | 62 75 74 69 6f 6e 73 20 69 6e 20 32 2d 20 61 6e 64 20 33 2d 64 69 6d 65 6e 73 69 6f 6e 61 6c 20 | butions.in.2-.and.3-dimensional. |
d600 | 73 70 61 63 65 73 2e 0d 0a 0d 0a 6e 5f 73 61 6d 70 6c 65 73 20 3d 20 32 30 20 20 23 20 6e 62 20 | spaces.....n_samples.=.20..#.nb. |
d620 | 73 61 6d 70 6c 65 73 0d 0a 6e 5f 6e 6f 69 73 65 20 3d 20 31 30 20 20 23 20 6e 62 20 6f 66 20 73 | samples..n_noise.=.10..#.nb.of.s |
d640 | 61 6d 70 6c 65 73 20 28 6e 6f 69 73 65 29 0d 0a 0d 0a 70 20 3d 20 6f 74 2e 75 6e 69 66 28 6e 5f | amples.(noise)....p.=.ot.unif(n_ |
d660 | 73 61 6d 70 6c 65 73 20 2b 20 6e 5f 6e 6f 69 73 65 29 0d 0a 71 20 3d 20 6f 74 2e 75 6e 69 66 28 | samples.+.n_noise)..q.=.ot.unif( |
d680 | 6e 5f 73 61 6d 70 6c 65 73 20 2b 20 6e 5f 6e 6f 69 73 65 29 0d 0a 0d 0a 6d 75 5f 73 20 3d 20 6e | n_samples.+.n_noise)....mu_s.=.n |
d6a0 | 70 2e 61 72 72 61 79 28 5b 30 2c 20 30 5d 29 0d 0a 63 6f 76 5f 73 20 3d 20 6e 70 2e 61 72 72 61 | p.array([0,.0])..cov_s.=.np.arra |
d6c0 | 79 28 5b 5b 31 2c 20 30 5d 2c 20 5b 30 2c 20 31 5d 5d 29 0d 0a 0d 0a 6d 75 5f 74 20 3d 20 6e 70 | y([[1,.0],.[0,.1]])....mu_t.=.np |
d6e0 | 2e 61 72 72 61 79 28 5b 30 2c 20 30 2c 20 30 5d 29 0d 0a 63 6f 76 5f 74 20 3d 20 6e 70 2e 61 72 | .array([0,.0,.0])..cov_t.=.np.ar |
d700 | 72 61 79 28 5b 5b 31 2c 20 30 2c 20 30 5d 2c 20 5b 30 2c 20 31 2c 20 30 5d 2c 20 5b 30 2c 20 30 | ray([[1,.0,.0],.[0,.1,.0],.[0,.0 |
d720 | 2c 20 31 5d 5d 29 0d 0a 0d 0a 0d 0a 78 73 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b | ,.1]])......xs.=.ot.datasets.mak |
d740 | 65 5f 32 44 5f 73 61 6d 70 6c 65 73 5f 67 61 75 73 73 28 6e 5f 73 61 6d 70 6c 65 73 2c 20 6d 75 | e_2D_samples_gauss(n_samples,.mu |
d760 | 5f 73 2c 20 63 6f 76 5f 73 29 0d 0a 78 73 20 3d 20 6e 70 2e 63 6f 6e 63 61 74 65 6e 61 74 65 28 | _s,.cov_s)..xs.=.np.concatenate( |
d780 | 28 78 73 2c 20 28 28 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 28 6e 5f 6e 6f 69 73 65 2c 20 32 | (xs,.((np.random.rand(n_noise,.2 |
d7a0 | 29 20 2b 20 31 29 20 2a 20 34 29 29 2c 20 61 78 69 73 3d 30 29 0d 0a 50 20 3d 20 73 70 2e 6c 69 | ).+.1).*.4)),.axis=0)..P.=.sp.li |
d7c0 | 6e 61 6c 67 2e 73 71 72 74 6d 28 63 6f 76 5f 74 29 0d 0a 78 74 20 3d 20 6e 70 2e 72 61 6e 64 6f | nalg.sqrtm(cov_t)..xt.=.np.rando |
d7e0 | 6d 2e 72 61 6e 64 6e 28 6e 5f 73 61 6d 70 6c 65 73 2c 20 33 29 2e 64 6f 74 28 50 29 20 2b 20 6d | m.randn(n_samples,.3).dot(P).+.m |
d800 | 75 5f 74 0d 0a 78 74 20 3d 20 6e 70 2e 63 6f 6e 63 61 74 65 6e 61 74 65 28 28 78 74 2c 20 28 28 | u_t..xt.=.np.concatenate((xt,.(( |
d820 | 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 28 6e 5f 6e 6f 69 73 65 2c 20 33 29 20 2b 20 31 29 20 | np.random.rand(n_noise,.3).+.1). |
d840 | 2a 20 31 30 29 29 2c 20 61 78 69 73 3d 30 29 0d 0a 0d 0a 66 69 67 20 3d 20 70 6c 2e 66 69 67 75 | *.10)),.axis=0)....fig.=.pl.figu |
d860 | 72 65 28 29 0d 0a 61 78 31 20 3d 20 66 69 67 2e 61 64 64 5f 73 75 62 70 6c 6f 74 28 31 32 31 29 | re()..ax1.=.fig.add_subplot(121) |
d880 | 0d 0a 61 78 31 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 | ..ax1.plot(xs[:,.0],.xs[:,.1],.' |
d8a0 | 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0d 0a 61 78 | +b',.label='Source.samples')..ax |
d8c0 | 32 20 3d 20 66 69 67 2e 61 64 64 5f 73 75 62 70 6c 6f 74 28 31 32 32 2c 20 70 72 6f 6a 65 63 74 | 2.=.fig.add_subplot(122,.project |
d8e0 | 69 6f 6e 3d 27 33 64 27 29 0d 0a 61 78 32 2e 73 63 61 74 74 65 72 28 78 74 5b 3a 2c 20 30 5d 2c | ion='3d')..ax2.scatter(xt[:,.0], |
d900 | 20 78 74 5b 3a 2c 20 31 5d 2c 20 78 74 5b 3a 2c 20 32 5d 2c 20 63 6f 6c 6f 72 3d 27 72 27 29 0d | .xt[:,.1],.xt[:,.2],.color='r'). |
d920 | 0a 70 6c 2e 73 68 6f 77 28 29 0d 0a 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | .pl.show()......################ |
d940 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
d960 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 23 | #############################..# |
d980 | 0d 0a 23 20 43 6f 6d 70 75 74 65 20 70 61 72 74 69 61 6c 20 47 72 6f 6d 6f 76 2d 57 61 73 73 65 | ..#.Compute.partial.Gromov-Wasse |
d9a0 | 72 73 74 65 69 6e 20 70 6c 61 6e 73 20 61 6e 64 20 64 69 73 74 61 6e 63 65 0d 0a 23 20 2d 2d 2d | rstein.plans.and.distance..#.--- |
d9c0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
d9e0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 43 31 20 3d 20 73 70 2e 73 70 | ------------------....C1.=.sp.sp |
da00 | 61 74 69 61 6c 2e 64 69 73 74 61 6e 63 65 2e 63 64 69 73 74 28 78 73 2c 20 78 73 29 0d 0a 43 32 | atial.distance.cdist(xs,.xs)..C2 |
da20 | 20 3d 20 73 70 2e 73 70 61 74 69 61 6c 2e 64 69 73 74 61 6e 63 65 2e 63 64 69 73 74 28 78 74 2c | .=.sp.spatial.distance.cdist(xt, |
da40 | 20 78 74 29 0d 0a 0d 0a 23 20 74 72 61 6e 73 70 6f 72 74 20 31 30 30 25 20 6f 66 20 74 68 65 20 | .xt)....#.transport.100%.of.the. |
da60 | 6d 61 73 73 0d 0a 70 72 69 6e 74 28 27 2d 2d 2d 2d 2d 6d 20 3d 20 31 27 29 0d 0a 6d 20 3d 20 31 | mass..print('-----m.=.1')..m.=.1 |
da80 | 0d 0a 72 65 73 30 2c 20 6c 6f 67 30 20 3d 20 6f 74 2e 70 61 72 74 69 61 6c 2e 70 61 72 74 69 61 | ..res0,.log0.=.ot.partial.partia |
daa0 | 6c 5f 67 72 6f 6d 6f 76 5f 77 61 73 73 65 72 73 74 65 69 6e 28 43 31 2c 20 43 32 2c 20 70 2c 20 | l_gromov_wasserstein(C1,.C2,.p,. |
dac0 | 71 2c 20 6d 3d 6d 2c 20 6c 6f 67 3d 54 72 75 65 29 0d 0a 72 65 73 2c 20 6c 6f 67 20 3d 20 6f 74 | q,.m=m,.log=True)..res,.log.=.ot |
dae0 | 2e 70 61 72 74 69 61 6c 2e 65 6e 74 72 6f 70 69 63 5f 70 61 72 74 69 61 6c 5f 67 72 6f 6d 6f 76 | .partial.entropic_partial_gromov |
db00 | 5f 77 61 73 73 65 72 73 74 65 69 6e 28 43 31 2c 20 43 32 2c 20 70 2c 20 71 2c 20 31 30 2c 0d 0a | _wasserstein(C1,.C2,.p,.q,.10,.. |
db20 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
db40 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 3d 6d 2c 20 6c | ..........................m=m,.l |
db60 | 6f 67 3d 54 72 75 65 29 0d 0a 0d 0a 70 72 69 6e 74 28 27 57 61 73 73 65 72 73 74 65 69 6e 20 64 | og=True)....print('Wasserstein.d |
db80 | 69 73 74 61 6e 63 65 20 28 6d 20 3d 20 31 29 3a 20 27 20 2b 20 73 74 72 28 6c 6f 67 30 5b 27 70 | istance.(m.=.1):.'.+.str(log0['p |
dba0 | 61 72 74 69 61 6c 5f 67 77 5f 64 69 73 74 27 5d 29 29 0d 0a 70 72 69 6e 74 28 27 45 6e 74 72 6f | artial_gw_dist']))..print('Entro |
dbc0 | 70 69 63 20 57 61 73 73 65 72 73 74 65 69 6e 20 64 69 73 74 61 6e 63 65 20 28 6d 20 3d 20 31 29 | pic.Wasserstein.distance.(m.=.1) |
dbe0 | 3a 20 27 20 2b 20 73 74 72 28 6c 6f 67 5b 27 70 61 72 74 69 61 6c 5f 67 77 5f 64 69 73 74 27 5d | :.'.+.str(log['partial_gw_dist'] |
dc00 | 29 29 0d 0a 0d 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 28 31 30 2c 20 35 29 29 0d 0a 70 6c 2e | ))....pl.figure(1,.(10,.5))..pl. |
dc20 | 74 69 74 6c 65 28 22 6d 61 73 73 20 74 6f 20 62 65 20 74 72 61 6e 73 70 6f 72 74 65 64 20 6d 20 | title("mass.to.be.transported.m. |
dc40 | 3d 20 31 22 29 0d 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0d 0a 70 6c 2e 69 | =.1")..pl.subplot(1,.2,.1)..pl.i |
dc60 | 6d 73 68 6f 77 28 72 65 73 30 2c 20 63 6d 61 70 3d 27 6a 65 74 27 29 0d 0a 70 6c 2e 74 69 74 6c | mshow(res0,.cmap='jet')..pl.titl |
dc80 | 65 28 27 57 61 73 73 65 72 73 74 65 69 6e 27 29 0d 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 | e('Wasserstein')..pl.subplot(1,. |
dca0 | 32 2c 20 32 29 0d 0a 70 6c 2e 69 6d 73 68 6f 77 28 72 65 73 2c 20 63 6d 61 70 3d 27 6a 65 74 27 | 2,.2)..pl.imshow(res,.cmap='jet' |
dcc0 | 29 0d 0a 70 6c 2e 74 69 74 6c 65 28 27 45 6e 74 72 6f 70 69 63 20 57 61 73 73 65 72 73 74 65 69 | )..pl.title('Entropic.Wasserstei |
dce0 | 6e 27 29 0d 0a 70 6c 2e 73 68 6f 77 28 29 0d 0a 0d 0a 23 20 74 72 61 6e 73 70 6f 72 74 20 32 2f | n')..pl.show()....#.transport.2/ |
dd00 | 33 20 6f 66 20 74 68 65 20 6d 61 73 73 0d 0a 70 72 69 6e 74 28 27 2d 2d 2d 2d 2d 6d 20 3d 20 32 | 3.of.the.mass..print('-----m.=.2 |
dd20 | 2f 33 27 29 0d 0a 6d 20 3d 20 32 20 2f 20 33 0d 0a 72 65 73 30 2c 20 6c 6f 67 30 20 3d 20 6f 74 | /3')..m.=.2./.3..res0,.log0.=.ot |
dd40 | 2e 70 61 72 74 69 61 6c 2e 70 61 72 74 69 61 6c 5f 67 72 6f 6d 6f 76 5f 77 61 73 73 65 72 73 74 | .partial.partial_gromov_wasserst |
dd60 | 65 69 6e 28 43 31 2c 20 43 32 2c 20 70 2c 20 71 2c 20 6d 3d 6d 2c 20 6c 6f 67 3d 54 72 75 65 29 | ein(C1,.C2,.p,.q,.m=m,.log=True) |
dd80 | 0d 0a 72 65 73 2c 20 6c 6f 67 20 3d 20 6f 74 2e 70 61 72 74 69 61 6c 2e 65 6e 74 72 6f 70 69 63 | ..res,.log.=.ot.partial.entropic |
dda0 | 5f 70 61 72 74 69 61 6c 5f 67 72 6f 6d 6f 76 5f 77 61 73 73 65 72 73 74 65 69 6e 28 43 31 2c 20 | _partial_gromov_wasserstein(C1,. |
ddc0 | 43 32 2c 20 70 2c 20 71 2c 20 31 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | C2,.p,.q,.10,................... |
dde0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
de00 | 20 20 20 20 20 20 20 20 20 6d 3d 6d 2c 20 6c 6f 67 3d 54 72 75 65 29 0d 0a 0d 0a 70 72 69 6e 74 | .........m=m,.log=True)....print |
de20 | 28 27 50 61 72 74 69 61 6c 20 57 61 73 73 65 72 73 74 65 69 6e 20 64 69 73 74 61 6e 63 65 20 28 | ('Partial.Wasserstein.distance.( |
de40 | 6d 20 3d 20 32 2f 33 29 3a 20 27 20 2b 0d 0a 20 20 20 20 20 20 73 74 72 28 6c 6f 67 30 5b 27 70 | m.=.2/3):.'.+........str(log0['p |
de60 | 61 72 74 69 61 6c 5f 67 77 5f 64 69 73 74 27 5d 29 29 0d 0a 70 72 69 6e 74 28 27 45 6e 74 72 6f | artial_gw_dist']))..print('Entro |
de80 | 70 69 63 20 70 61 72 74 69 61 6c 20 57 61 73 73 65 72 73 74 65 69 6e 20 64 69 73 74 61 6e 63 65 | pic.partial.Wasserstein.distance |
dea0 | 20 28 6d 20 3d 20 32 2f 33 29 3a 20 27 20 2b 0d 0a 20 20 20 20 20 20 73 74 72 28 6c 6f 67 5b 27 | .(m.=.2/3):.'.+........str(log[' |
dec0 | 70 61 72 74 69 61 6c 5f 67 77 5f 64 69 73 74 27 5d 29 29 0d 0a 0d 0a 70 6c 2e 66 69 67 75 72 65 | partial_gw_dist']))....pl.figure |
dee0 | 28 31 2c 20 28 31 30 2c 20 35 29 29 0d 0a 70 6c 2e 74 69 74 6c 65 28 22 6d 61 73 73 20 74 6f 20 | (1,.(10,.5))..pl.title("mass.to. |
df00 | 62 65 20 74 72 61 6e 73 70 6f 72 74 65 64 20 6d 20 3d 20 32 2f 33 22 29 0d 0a 70 6c 2e 73 75 62 | be.transported.m.=.2/3")..pl.sub |
df20 | 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0d 0a 70 6c 2e 69 6d 73 68 6f 77 28 72 65 73 30 2c 20 63 | plot(1,.2,.1)..pl.imshow(res0,.c |
df40 | 6d 61 70 3d 27 6a 65 74 27 29 0d 0a 70 6c 2e 74 69 74 6c 65 28 27 50 61 72 74 69 61 6c 20 57 61 | map='jet')..pl.title('Partial.Wa |
df60 | 73 73 65 72 73 74 65 69 6e 27 29 0d 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 32 29 | sserstein')..pl.subplot(1,.2,.2) |
df80 | 0d 0a 70 6c 2e 69 6d 73 68 6f 77 28 72 65 73 2c 20 63 6d 61 70 3d 27 6a 65 74 27 29 0d 0a 70 6c | ..pl.imshow(res,.cmap='jet')..pl |
dfa0 | 2e 74 69 74 6c 65 28 27 45 6e 74 72 6f 70 69 63 20 70 61 72 74 69 61 6c 20 57 61 73 73 65 72 73 | .title('Entropic.partial.Wassers |
dfc0 | 74 65 69 6e 27 29 0d 0a 70 6c 2e 73 68 6f 77 28 29 0d 0a 50 4b 03 04 14 00 00 00 00 00 7c 68 3a | tein')..pl.show()..PK........|h: |
dfe0 | 4f 0b 5c 2a af a2 06 00 00 a2 06 00 00 0d 00 00 00 70 6c 6f 74 5f 4f 54 5f 31 44 2e 70 79 23 20 | O.\*.............plot_OT_1D.py#. |
e000 | 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.-*-.""".====== |
e020 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 31 44 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 | ==============.1D.optimal.transp |
e040 | 6f 72 74 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 | ort.====================..This.e |
e060 | 78 61 6d 70 6c 65 20 69 6c 6c 75 73 74 72 61 74 65 73 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69 | xample.illustrates.the.computati |
e080 | 6f 6e 20 6f 66 20 45 4d 44 20 61 6e 64 20 53 69 6e 6b 68 6f 72 6e 20 74 72 61 6e 73 70 6f 72 74 | on.of.EMD.and.Sinkhorn.transport |
e0a0 | 20 70 6c 61 6e 73 0a 61 6e 64 20 74 68 65 69 72 20 76 69 73 75 61 6c 69 7a 61 74 69 6f 6e 2e 0a | .plans.and.their.visualization.. |
e0c0 | 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 | ."""..#.Author:.Remi.Flamary.<re |
e0e0 | 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 | mi.flamary@unice.fr>.#.#.License |
e100 | 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e | :.MIT.License..import.numpy.as.n |
e120 | 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a | p.import.matplotlib.pylab.as.pl. |
e140 | 69 6d 70 6f 72 74 20 6f 74 0a 69 6d 70 6f 72 74 20 6f 74 2e 70 6c 6f 74 0a 66 72 6f 6d 20 6f 74 | import.ot.import.ot.plot.from.ot |
e160 | 2e 64 61 74 61 73 65 74 73 20 69 6d 70 6f 72 74 20 6d 61 6b 65 5f 31 44 5f 67 61 75 73 73 20 61 | .datasets.import.make_1D_gauss.a |
e180 | 73 20 67 61 75 73 73 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | s.gauss..####################### |
e1a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
e1c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 47 65 6e 65 72 61 | #######################.#.Genera |
e1e0 | 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 25 25 20 70 61 | te.data.#.-------------...#%%.pa |
e200 | 72 61 6d 65 74 65 72 73 0a 0a 6e 20 3d 20 31 30 30 20 20 23 20 6e 62 20 62 69 6e 73 0a 0a 23 20 | rameters..n.=.100..#.nb.bins..#. |
e220 | 62 69 6e 20 70 6f 73 69 74 69 6f 6e 73 0a 78 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 2c 20 64 | bin.positions.x.=.np.arange(n,.d |
e240 | 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 64 69 73 | type=np.float64)..#.Gaussian.dis |
e260 | 74 72 69 62 75 74 69 6f 6e 73 0a 61 20 3d 20 67 61 75 73 73 28 6e 2c 20 6d 3d 32 30 2c 20 73 3d | tributions.a.=.gauss(n,.m=20,.s= |
e280 | 35 29 20 20 23 20 6d 3d 20 6d 65 61 6e 2c 20 73 3d 20 73 74 64 0a 62 20 3d 20 67 61 75 73 73 28 | 5)..#.m=.mean,.s=.std.b.=.gauss( |
e2a0 | 6e 2c 20 6d 3d 36 30 2c 20 73 3d 31 30 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 20 | n,.m=60,.s=10)..#.loss.matrix.M. |
e2c0 | 3d 20 6f 74 2e 64 69 73 74 28 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 2c 20 78 2e 72 | =.ot.dist(x.reshape((n,.1)),.x.r |
e2e0 | 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 29 0a 0a 0a 23 | eshape((n,.1))).M./=.M.max()...# |
e300 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
e320 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
e340 | 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 64 69 73 74 72 69 62 75 74 69 6f | #############.#.Plot.distributio |
e360 | 6e 73 20 61 6e 64 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | ns.and.loss.matrix.#.----------- |
e380 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 6c 6f | -----------------------..#%%.plo |
e3a0 | 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 |
e3c0 | 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 29 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 61 | ,.figsize=(6.4,.3)).pl.plot(x,.a |
e3e0 | 2c 20 27 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 64 69 73 74 72 69 62 75 74 69 6f | ,.'b',.label='Source.distributio |
e400 | 6e 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 2c 20 27 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 | n').pl.plot(x,.b,.'r',.label='Ta |
e420 | 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(). |
e440 | 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 |
e460 | 20 6d 61 74 72 69 78 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 35 | .matrix..pl.figure(2,.figsize=(5 |
e480 | 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 4d | ,.5)).ot.plot.plot1D_mat(a,.b,.M |
e4a0 | 2c 20 27 43 6f 73 74 20 6d 61 74 72 69 78 20 4d 27 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 | ,.'Cost.matrix.M')..############ |
e4c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
e4e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
e500 | 23 23 0a 23 20 53 6f 6c 76 65 20 45 4d 44 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 25 25 | ##.#.Solve.EMD.#.---------...#%% |
e520 | 20 45 4d 44 0a 0a 47 30 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 29 0a 0a 70 6c 2e 66 | .EMD..G0.=.ot.emd(a,.b,.M)..pl.f |
e540 | 69 67 75 72 65 28 33 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 | igure(3,.figsize=(5,.5)).ot.plot |
e560 | 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 47 30 2c 20 27 4f 54 20 6d 61 74 72 69 78 | .plot1D_mat(a,.b,.G0,.'OT.matrix |
e580 | 20 47 30 27 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | .G0')..######################### |
e5a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
e5c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 53 6f 6c 76 65 20 53 69 | #####################.#.Solve.Si |
e5e0 | 6e 6b 68 6f 72 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 25 25 20 53 69 | nkhorn.#.--------------...#%%.Si |
e600 | 6e 6b 68 6f 72 6e 0a 0a 6c 61 6d 62 64 20 3d 20 31 65 2d 33 0a 47 73 20 3d 20 6f 74 2e 73 69 6e | nkhorn..lambd.=.1e-3.Gs.=.ot.sin |
e620 | 6b 68 6f 72 6e 28 61 2c 20 62 2c 20 4d 2c 20 6c 61 6d 62 64 2c 20 76 65 72 62 6f 73 65 3d 54 72 | khorn(a,.b,.M,.lambd,.verbose=Tr |
e640 | 75 65 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 | ue)..pl.figure(4,.figsize=(5,.5) |
e660 | 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 47 73 2c 20 27 | ).ot.plot.plot1D_mat(a,.b,.Gs,.' |
e680 | 4f 54 20 6d 61 74 72 69 78 20 53 69 6e 6b 68 6f 72 6e 27 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a | OT.matrix.Sinkhorn')..pl.show(). |
e6a0 | 50 4b 03 04 14 00 00 00 00 00 84 68 3a 4f 6d 8a 53 18 e2 17 00 00 e2 17 00 00 12 00 00 00 70 6c | PK.........h:Om.S.............pl |
e6c0 | 6f 74 5f 73 74 6f 63 68 61 73 74 69 63 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ot_stochastic.py""".============ |
e6e0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 53 74 6f 63 68 61 73 74 69 63 20 65 78 61 6d 70 6c | ==============.Stochastic.exampl |
e700 | 65 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 | es.==========================..T |
e720 | 68 69 73 20 65 78 61 6d 70 6c 65 20 69 73 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73 68 6f 77 20 | his.example.is.designed.to.show. |
e740 | 68 6f 77 20 74 6f 20 75 73 65 20 74 68 65 20 73 74 6f 63 68 61 74 69 63 20 6f 70 74 69 6d 69 7a | how.to.use.the.stochatic.optimiz |
e760 | 61 74 69 6f 6e 0a 61 6c 67 6f 72 69 74 68 6d 73 20 66 6f 72 20 64 65 73 63 72 65 74 65 20 61 6e | ation.algorithms.for.descrete.an |
e780 | 64 20 73 65 6d 69 63 6f 6e 74 69 6e 6f 75 73 20 6d 65 61 73 75 72 65 73 20 66 72 6f 6d 20 74 68 | d.semicontinous.measures.from.th |
e7a0 | 65 20 50 4f 54 20 6c 69 62 72 61 72 79 2e 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a 20 4b | e.POT.library..."""..#.Author:.K |
e7c0 | 69 6c 69 61 6e 20 46 61 74 72 61 73 20 3c 6b 69 6c 69 61 6e 2e 66 61 74 72 61 73 40 67 6d 61 69 | ilian.Fatras.<kilian.fatras@gmai |
e7e0 | 6c 2e 63 6f 6d 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a | l.com>.#.#.License:.MIT.License. |
e800 | 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 | .import.matplotlib.pylab.as.pl.i |
e820 | 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 6f 74 0a 69 6d 70 6f | mport.numpy.as.np.import.ot.impo |
e840 | 72 74 20 6f 74 2e 70 6c 6f 74 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | rt.ot.plot...################### |
e860 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
e880 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 43 4f 4d | ##########################.#.COM |
e8a0 | 50 55 54 45 20 54 52 41 4e 53 50 4f 52 54 41 54 49 4f 4e 20 4d 41 54 52 49 58 20 46 4f 52 20 53 | PUTE.TRANSPORTATION.MATRIX.FOR.S |
e8c0 | 45 4d 49 2d 44 55 41 4c 20 50 52 4f 42 4c 45 4d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | EMI-DUAL.PROBLEM.############### |
e8e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
e900 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 | ##############################.# |
e920 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
e940 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
e960 | 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 44 49 53 43 52 45 54 45 20 43 41 53 45 3a 0a 23 0a | ############.#.DISCRETE.CASE:.#. |
e980 | 23 20 53 61 6d 70 6c 65 20 74 77 6f 20 64 69 73 63 72 65 74 65 20 6d 65 61 73 75 72 65 73 20 66 | #.Sample.two.discrete.measures.f |
e9a0 | 6f 72 20 74 68 65 20 64 69 73 63 72 65 74 65 20 63 61 73 65 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d | or.the.discrete.case.#.--------- |
e9c0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
e9e0 | 2d 2d 2d 2d 0a 23 0a 23 20 44 65 66 69 6e 65 20 32 20 64 69 73 63 72 65 74 65 20 6d 65 61 73 75 | ----.#.#.Define.2.discrete.measu |
ea00 | 72 65 73 20 61 20 61 6e 64 20 62 2c 20 74 68 65 20 70 6f 69 6e 74 73 20 77 68 65 72 65 20 61 72 | res.a.and.b,.the.points.where.ar |
ea20 | 65 20 64 65 66 69 6e 65 64 20 74 68 65 20 73 6f 75 72 63 65 0a 23 20 61 6e 64 20 74 68 65 20 74 | e.defined.the.source.#.and.the.t |
ea40 | 61 72 67 65 74 20 6d 65 61 73 75 72 65 73 20 61 6e 64 20 66 69 6e 61 6c 6c 79 20 74 68 65 20 63 | arget.measures.and.finally.the.c |
ea60 | 6f 73 74 20 6d 61 74 72 69 78 20 63 2e 0a 0a 6e 5f 73 6f 75 72 63 65 20 3d 20 37 0a 6e 5f 74 61 | ost.matrix.c...n_source.=.7.n_ta |
ea80 | 72 67 65 74 20 3d 20 34 0a 72 65 67 20 3d 20 31 0a 6e 75 6d 49 74 65 72 6d 61 78 20 3d 20 31 30 | rget.=.4.reg.=.1.numItermax.=.10 |
eaa0 | 30 30 0a 0a 61 20 3d 20 6f 74 2e 75 74 69 6c 73 2e 75 6e 69 66 28 6e 5f 73 6f 75 72 63 65 29 0a | 00..a.=.ot.utils.unif(n_source). |
eac0 | 62 20 3d 20 6f 74 2e 75 74 69 6c 73 2e 75 6e 69 66 28 6e 5f 74 61 72 67 65 74 29 0a 0a 72 6e 67 | b.=.ot.utils.unif(n_target)..rng |
eae0 | 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 52 61 6e 64 6f 6d 53 74 61 74 65 28 30 29 0a 58 5f 73 6f | .=.np.random.RandomState(0).X_so |
eb00 | 75 72 63 65 20 3d 20 72 6e 67 2e 72 61 6e 64 6e 28 6e 5f 73 6f 75 72 63 65 2c 20 32 29 0a 59 5f | urce.=.rng.randn(n_source,.2).Y_ |
eb20 | 74 61 72 67 65 74 20 3d 20 72 6e 67 2e 72 61 6e 64 6e 28 6e 5f 74 61 72 67 65 74 2c 20 32 29 0a | target.=.rng.randn(n_target,.2). |
eb40 | 4d 20 3d 20 6f 74 2e 64 69 73 74 28 58 5f 73 6f 75 72 63 65 2c 20 59 5f 74 61 72 67 65 74 29 0a | M.=.ot.dist(X_source,.Y_target). |
eb60 | 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | .############################### |
eb80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
eba0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 0a 23 20 43 61 6c 6c 20 74 68 65 20 22 53 41 47 | ##############.#.#.Call.the."SAG |
ebc0 | 22 20 6d 65 74 68 6f 64 20 74 6f 20 66 69 6e 64 20 74 68 65 20 74 72 61 6e 73 70 6f 72 74 61 74 | ".method.to.find.the.transportat |
ebe0 | 69 6f 6e 20 6d 61 74 72 69 78 20 69 6e 20 74 68 65 20 64 69 73 63 72 65 74 65 20 63 61 73 65 0a | ion.matrix.in.the.discrete.case. |
ec00 | 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | #.------------------------------ |
ec20 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 23 20 44 65 66 69 6e 65 20 74 68 65 20 6d | ---------------.#.#.Define.the.m |
ec40 | 65 74 68 6f 64 20 22 53 41 47 22 2c 20 63 61 6c 6c 20 6f 74 2e 73 6f 6c 76 65 5f 73 65 6d 69 5f | ethod."SAG",.call.ot.solve_semi_ |
ec60 | 64 75 61 6c 5f 65 6e 74 72 6f 70 69 63 20 61 6e 64 20 70 6c 6f 74 20 74 68 65 0a 23 20 72 65 73 | dual_entropic.and.plot.the.#.res |
ec80 | 75 6c 74 73 2e 0a 0a 6d 65 74 68 6f 64 20 3d 20 22 53 41 47 22 0a 73 61 67 5f 70 69 20 3d 20 6f | ults...method.=."SAG".sag_pi.=.o |
eca0 | 74 2e 73 74 6f 63 68 61 73 74 69 63 2e 73 6f 6c 76 65 5f 73 65 6d 69 5f 64 75 61 6c 5f 65 6e 74 | t.stochastic.solve_semi_dual_ent |
ecc0 | 72 6f 70 69 63 28 61 2c 20 62 2c 20 4d 2c 20 72 65 67 2c 20 6d 65 74 68 6f 64 2c 0a 20 20 20 20 | ropic(a,.b,.M,.reg,.method,..... |
ece0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
ed00 | 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6d 49 74 65 72 6d 61 78 29 0a 70 72 69 6e 74 28 73 61 | ............numItermax).print(sa |
ed20 | 67 5f 70 69 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | g_pi)..######################### |
ed40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
ed60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 53 45 4d 49 43 4f 4e 54 49 | ####################.#.SEMICONTI |
ed80 | 4e 4f 55 53 20 43 41 53 45 3a 0a 23 0a 23 20 53 61 6d 70 6c 65 20 6f 6e 65 20 67 65 6e 65 72 61 | NOUS.CASE:.#.#.Sample.one.genera |
eda0 | 6c 20 6d 65 61 73 75 72 65 20 61 2c 20 6f 6e 65 20 64 69 73 63 72 65 74 65 20 6d 65 61 73 75 72 | l.measure.a,.one.discrete.measur |
edc0 | 65 73 20 62 20 66 6f 72 20 74 68 65 20 73 65 6d 69 63 6f 6e 74 69 6e 6f 75 73 0a 23 20 63 61 73 | es.b.for.the.semicontinous.#.cas |
ede0 | 65 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | e.#.---------------------------- |
ee00 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 23 20 44 65 66 69 6e 65 20 6f 6e 65 | -----------------.#.#.Define.one |
ee20 | 20 67 65 6e 65 72 61 6c 20 6d 65 61 73 75 72 65 20 61 2c 20 6f 6e 65 20 64 69 73 63 72 65 74 65 | .general.measure.a,.one.discrete |
ee40 | 20 6d 65 61 73 75 72 65 73 20 62 2c 20 74 68 65 20 70 6f 69 6e 74 73 20 77 68 65 72 65 0a 23 20 | .measures.b,.the.points.where.#. |
ee60 | 61 72 65 20 64 65 66 69 6e 65 64 20 74 68 65 20 73 6f 75 72 63 65 20 61 6e 64 20 74 68 65 20 74 | are.defined.the.source.and.the.t |
ee80 | 61 72 67 65 74 20 6d 65 61 73 75 72 65 73 20 61 6e 64 20 66 69 6e 61 6c 6c 79 20 74 68 65 20 63 | arget.measures.and.finally.the.c |
eea0 | 6f 73 74 20 6d 61 74 72 69 78 20 63 2e 0a 0a 6e 5f 73 6f 75 72 63 65 20 3d 20 37 0a 6e 5f 74 61 | ost.matrix.c...n_source.=.7.n_ta |
eec0 | 72 67 65 74 20 3d 20 34 0a 72 65 67 20 3d 20 31 0a 6e 75 6d 49 74 65 72 6d 61 78 20 3d 20 31 30 | rget.=.4.reg.=.1.numItermax.=.10 |
eee0 | 30 30 0a 6c 6f 67 20 3d 20 54 72 75 65 0a 0a 61 20 3d 20 6f 74 2e 75 74 69 6c 73 2e 75 6e 69 66 | 00.log.=.True..a.=.ot.utils.unif |
ef00 | 28 6e 5f 73 6f 75 72 63 65 29 0a 62 20 3d 20 6f 74 2e 75 74 69 6c 73 2e 75 6e 69 66 28 6e 5f 74 | (n_source).b.=.ot.utils.unif(n_t |
ef20 | 61 72 67 65 74 29 0a 0a 72 6e 67 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 52 61 6e 64 6f 6d 53 74 | arget)..rng.=.np.random.RandomSt |
ef40 | 61 74 65 28 30 29 0a 58 5f 73 6f 75 72 63 65 20 3d 20 72 6e 67 2e 72 61 6e 64 6e 28 6e 5f 73 6f | ate(0).X_source.=.rng.randn(n_so |
ef60 | 75 72 63 65 2c 20 32 29 0a 59 5f 74 61 72 67 65 74 20 3d 20 72 6e 67 2e 72 61 6e 64 6e 28 6e 5f | urce,.2).Y_target.=.rng.randn(n_ |
ef80 | 74 61 72 67 65 74 2c 20 32 29 0a 4d 20 3d 20 6f 74 2e 64 69 73 74 28 58 5f 73 6f 75 72 63 65 2c | target,.2).M.=.ot.dist(X_source, |
efa0 | 20 59 5f 74 61 72 67 65 74 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | .Y_target)..#################### |
efc0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
efe0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 0a 23 20 43 61 | #########################.#.#.Ca |
f000 | 6c 6c 20 74 68 65 20 22 41 53 47 44 22 20 6d 65 74 68 6f 64 20 74 6f 20 66 69 6e 64 20 74 68 65 | ll.the."ASGD".method.to.find.the |
f020 | 20 74 72 61 6e 73 70 6f 72 74 61 74 69 6f 6e 20 6d 61 74 72 69 78 20 69 6e 20 74 68 65 20 73 65 | .transportation.matrix.in.the.se |
f040 | 6d 69 63 6f 6e 74 69 6e 6f 75 73 0a 23 20 63 61 73 65 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | micontinous.#.case.#.----------- |
f060 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
f080 | 2d 2d 0a 23 0a 23 20 44 65 66 69 6e 65 20 74 68 65 20 6d 65 74 68 6f 64 20 22 41 53 47 44 22 2c | --.#.#.Define.the.method."ASGD", |
f0a0 | 20 63 61 6c 6c 20 6f 74 2e 73 6f 6c 76 65 5f 73 65 6d 69 5f 64 75 61 6c 5f 65 6e 74 72 6f 70 69 | .call.ot.solve_semi_dual_entropi |
f0c0 | 63 20 61 6e 64 20 70 6c 6f 74 20 74 68 65 0a 23 20 72 65 73 75 6c 74 73 2e 0a 0a 6d 65 74 68 6f | c.and.plot.the.#.results...metho |
f0e0 | 64 20 3d 20 22 41 53 47 44 22 0a 61 73 67 64 5f 70 69 2c 20 6c 6f 67 5f 61 73 67 64 20 3d 20 6f | d.=."ASGD".asgd_pi,.log_asgd.=.o |
f100 | 74 2e 73 74 6f 63 68 61 73 74 69 63 2e 73 6f 6c 76 65 5f 73 65 6d 69 5f 64 75 61 6c 5f 65 6e 74 | t.stochastic.solve_semi_dual_ent |
f120 | 72 6f 70 69 63 28 61 2c 20 62 2c 20 4d 2c 20 72 65 67 2c 20 6d 65 74 68 6f 64 2c 0a 20 20 20 20 | ropic(a,.b,.M,.reg,.method,..... |
f140 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
f160 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6d 49 74 65 72 6d 61 | .......................numIterma |
f180 | 78 2c 20 6c 6f 67 3d 6c 6f 67 29 0a 70 72 69 6e 74 28 6c 6f 67 5f 61 73 67 64 5b 27 61 6c 70 68 | x,.log=log).print(log_asgd['alph |
f1a0 | 61 27 5d 2c 20 6c 6f 67 5f 61 73 67 64 5b 27 62 65 74 61 27 5d 29 0a 70 72 69 6e 74 28 61 73 67 | a'],.log_asgd['beta']).print(asg |
f1c0 | 64 5f 70 69 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | d_pi)..######################### |
f1e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f200 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 0a 23 20 43 6f 6d 70 61 72 65 | ####################.#.#.Compare |
f220 | 20 74 68 65 20 72 65 73 75 6c 74 73 20 77 69 74 68 20 74 68 65 20 53 69 6e 6b 68 6f 72 6e 20 61 | .the.results.with.the.Sinkhorn.a |
f240 | 6c 67 6f 72 69 74 68 6d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | lgorithm.#.--------------------- |
f260 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 23 20 43 61 6c | ------------------------.#.#.Cal |
f280 | 6c 20 74 68 65 20 53 69 6e 6b 68 6f 72 6e 20 61 6c 67 6f 72 69 74 68 6d 20 66 72 6f 6d 20 50 4f | l.the.Sinkhorn.algorithm.from.PO |
f2a0 | 54 0a 0a 73 69 6e 6b 68 6f 72 6e 5f 70 69 20 3d 20 6f 74 2e 73 69 6e 6b 68 6f 72 6e 28 61 2c 20 | T..sinkhorn_pi.=.ot.sinkhorn(a,. |
f2c0 | 62 2c 20 4d 2c 20 72 65 67 29 0a 70 72 69 6e 74 28 73 69 6e 6b 68 6f 72 6e 5f 70 69 29 0a 0a 0a | b,.M,.reg).print(sinkhorn_pi)... |
f2e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f300 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f320 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 4c 4f 54 20 54 52 41 4e 53 50 4f 52 54 41 | ##############.#.PLOT.TRANSPORTA |
f340 | 54 49 4f 4e 20 4d 41 54 52 49 58 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | TION.MATRIX.#################### |
f360 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f380 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23 23 23 23 | ##########################..#### |
f3a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f3c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f3e0 | 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 53 41 47 20 72 65 73 75 6c 74 73 0a 23 20 | ##########.#.Plot.SAG.results.#. |
f400 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 34 2c 20 66 | ----------------..pl.figure(4,.f |
f420 | 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 | igsize=(5,.5)).ot.plot.plot1D_ma |
f440 | 74 28 61 2c 20 62 2c 20 73 61 67 5f 70 69 2c 20 27 73 65 6d 69 2d 64 75 61 6c 20 3a 20 4f 54 20 | t(a,.b,.sag_pi,.'semi-dual.:.OT. |
f460 | 6d 61 74 72 69 78 20 53 41 47 27 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 0a 0a 23 23 23 23 23 23 23 | matrix.SAG').pl.show()...####### |
f480 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f4a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f4c0 | 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 41 53 47 44 20 72 65 73 75 6c 74 73 0a 23 20 2d 2d | #######.#.Plot.ASGD.results.#.-- |
f4e0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 34 2c 20 66 69 | ---------------..pl.figure(4,.fi |
f500 | 67 73 69 7a 65 3d 28 35 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 | gsize=(5,.5)).ot.plot.plot1D_mat |
f520 | 28 61 2c 20 62 2c 20 61 73 67 64 5f 70 69 2c 20 27 73 65 6d 69 2d 64 75 61 6c 20 3a 20 4f 54 20 | (a,.b,.asgd_pi,.'semi-dual.:.OT. |
f540 | 6d 61 74 72 69 78 20 41 53 47 44 27 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 0a 0a 23 23 23 23 23 23 | matrix.ASGD').pl.show()...###### |
f560 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f580 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f5a0 | 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 53 69 6e 6b 68 6f 72 6e 20 72 65 73 75 6c 74 73 | ########.#.Plot.Sinkhorn.results |
f5c0 | 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 | .#.---------------------..pl.fig |
f5e0 | 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 | ure(4,.figsize=(5,.5)).ot.plot.p |
f600 | 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 73 69 6e 6b 68 6f 72 6e 5f 70 69 2c 20 27 4f 54 | lot1D_mat(a,.b,.sinkhorn_pi,.'OT |
f620 | 20 6d 61 74 72 69 78 20 53 69 6e 6b 68 6f 72 6e 27 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 0a 0a 23 | .matrix.Sinkhorn').pl.show()...# |
f640 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f660 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f680 | 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 43 4f 4d 50 55 54 45 20 54 52 41 4e 53 50 4f 52 54 | ############.#.COMPUTE.TRANSPORT |
f6a0 | 41 54 49 4f 4e 20 4d 41 54 52 49 58 20 46 4f 52 20 44 55 41 4c 20 50 52 4f 42 4c 45 4d 0a 23 23 | ATION.MATRIX.FOR.DUAL.PROBLEM.## |
f6c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f6e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f700 | 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ###########.#################### |
f720 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f740 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 53 45 4d 49 | #########################.#.SEMI |
f760 | 43 4f 4e 54 49 4e 4f 55 53 20 43 41 53 45 3a 0a 23 0a 23 20 53 61 6d 70 6c 65 20 6f 6e 65 20 67 | CONTINOUS.CASE:.#.#.Sample.one.g |
f780 | 65 6e 65 72 61 6c 20 6d 65 61 73 75 72 65 20 61 2c 20 6f 6e 65 20 64 69 73 63 72 65 74 65 20 6d | eneral.measure.a,.one.discrete.m |
f7a0 | 65 61 73 75 72 65 73 20 62 20 66 6f 72 20 74 68 65 20 73 65 6d 69 63 6f 6e 74 69 6e 6f 75 73 0a | easures.b.for.the.semicontinous. |
f7c0 | 23 20 63 61 73 65 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | #.case.#.----------------------- |
f7e0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 23 20 44 65 66 69 6e | ----------------------.#.#.Defin |
f800 | 65 20 6f 6e 65 20 67 65 6e 65 72 61 6c 20 6d 65 61 73 75 72 65 20 61 2c 20 6f 6e 65 20 64 69 73 | e.one.general.measure.a,.one.dis |
f820 | 63 72 65 74 65 20 6d 65 61 73 75 72 65 73 20 62 2c 20 74 68 65 20 70 6f 69 6e 74 73 20 77 68 65 | crete.measures.b,.the.points.whe |
f840 | 72 65 0a 23 20 61 72 65 20 64 65 66 69 6e 65 64 20 74 68 65 20 73 6f 75 72 63 65 20 61 6e 64 20 | re.#.are.defined.the.source.and. |
f860 | 74 68 65 20 74 61 72 67 65 74 20 6d 65 61 73 75 72 65 73 20 61 6e 64 20 66 69 6e 61 6c 6c 79 20 | the.target.measures.and.finally. |
f880 | 74 68 65 20 63 6f 73 74 20 6d 61 74 72 69 78 20 63 2e 0a 0a 6e 5f 73 6f 75 72 63 65 20 3d 20 37 | the.cost.matrix.c...n_source.=.7 |
f8a0 | 0a 6e 5f 74 61 72 67 65 74 20 3d 20 34 0a 72 65 67 20 3d 20 31 0a 6e 75 6d 49 74 65 72 6d 61 78 | .n_target.=.4.reg.=.1.numItermax |
f8c0 | 20 3d 20 31 30 30 30 30 30 0a 6c 72 20 3d 20 30 2e 31 0a 62 61 74 63 68 5f 73 69 7a 65 20 3d 20 | .=.100000.lr.=.0.1.batch_size.=. |
f8e0 | 33 0a 6c 6f 67 20 3d 20 54 72 75 65 0a 0a 61 20 3d 20 6f 74 2e 75 74 69 6c 73 2e 75 6e 69 66 28 | 3.log.=.True..a.=.ot.utils.unif( |
f900 | 6e 5f 73 6f 75 72 63 65 29 0a 62 20 3d 20 6f 74 2e 75 74 69 6c 73 2e 75 6e 69 66 28 6e 5f 74 61 | n_source).b.=.ot.utils.unif(n_ta |
f920 | 72 67 65 74 29 0a 0a 72 6e 67 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 52 61 6e 64 6f 6d 53 74 61 | rget)..rng.=.np.random.RandomSta |
f940 | 74 65 28 30 29 0a 58 5f 73 6f 75 72 63 65 20 3d 20 72 6e 67 2e 72 61 6e 64 6e 28 6e 5f 73 6f 75 | te(0).X_source.=.rng.randn(n_sou |
f960 | 72 63 65 2c 20 32 29 0a 59 5f 74 61 72 67 65 74 20 3d 20 72 6e 67 2e 72 61 6e 64 6e 28 6e 5f 74 | rce,.2).Y_target.=.rng.randn(n_t |
f980 | 61 72 67 65 74 2c 20 32 29 0a 4d 20 3d 20 6f 74 2e 64 69 73 74 28 58 5f 73 6f 75 72 63 65 2c 20 | arget,.2).M.=.ot.dist(X_source,. |
f9a0 | 59 5f 74 61 72 67 65 74 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | Y_target)..##################### |
f9c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f9e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 0a 23 20 43 61 6c | ########################.#.#.Cal |
fa00 | 6c 20 74 68 65 20 22 53 47 44 22 20 64 75 61 6c 20 6d 65 74 68 6f 64 20 74 6f 20 66 69 6e 64 20 | l.the."SGD".dual.method.to.find. |
fa20 | 74 68 65 20 74 72 61 6e 73 70 6f 72 74 61 74 69 6f 6e 20 6d 61 74 72 69 78 20 69 6e 20 74 68 65 | the.transportation.matrix.in.the |
fa40 | 0a 23 20 73 65 6d 69 63 6f 6e 74 69 6e 6f 75 73 20 63 61 73 65 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d | .#.semicontinous.case.#.-------- |
fa60 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
fa80 | 2d 2d 2d 2d 2d 0a 23 0a 23 20 43 61 6c 6c 20 6f 74 2e 73 6f 6c 76 65 5f 64 75 61 6c 5f 65 6e 74 | -----.#.#.Call.ot.solve_dual_ent |
faa0 | 72 6f 70 69 63 20 61 6e 64 20 70 6c 6f 74 20 74 68 65 20 72 65 73 75 6c 74 73 2e 0a 0a 73 67 64 | ropic.and.plot.the.results...sgd |
fac0 | 5f 64 75 61 6c 5f 70 69 2c 20 6c 6f 67 5f 73 67 64 20 3d 20 6f 74 2e 73 74 6f 63 68 61 73 74 69 | _dual_pi,.log_sgd.=.ot.stochasti |
fae0 | 63 2e 73 6f 6c 76 65 5f 64 75 61 6c 5f 65 6e 74 72 6f 70 69 63 28 61 2c 20 62 2c 20 4d 2c 20 72 | c.solve_dual_entropic(a,.b,.M,.r |
fb00 | 65 67 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | eg,............................. |
fb20 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 61 74 | .............................bat |
fb40 | 63 68 5f 73 69 7a 65 2c 20 6e 75 6d 49 74 65 72 6d 61 78 2c 0a 20 20 20 20 20 20 20 20 20 20 20 | ch_size,.numItermax,............ |
fb60 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
fb80 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 72 2c 20 6c 6f 67 3d 6c 6f 67 29 0a 70 72 69 6e 74 | ..............lr,.log=log).print |
fba0 | 28 6c 6f 67 5f 73 67 64 5b 27 61 6c 70 68 61 27 5d 2c 20 6c 6f 67 5f 73 67 64 5b 27 62 65 74 61 | (log_sgd['alpha'],.log_sgd['beta |
fbc0 | 27 5d 29 0a 70 72 69 6e 74 28 73 67 64 5f 64 75 61 6c 5f 70 69 29 0a 0a 23 23 23 23 23 23 23 23 | ']).print(sgd_dual_pi)..######## |
fbe0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
fc00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
fc20 | 23 23 23 23 23 0a 23 0a 23 20 43 6f 6d 70 61 72 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 77 69 | #####.#.#.Compare.the.results.wi |
fc40 | 74 68 20 74 68 65 20 53 69 6e 6b 68 6f 72 6e 20 61 6c 67 6f 72 69 74 68 6d 0a 23 20 2d 2d 2d 2d | th.the.Sinkhorn.algorithm.#.---- |
fc60 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
fc80 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 23 20 43 61 6c 6c 20 74 68 65 20 53 69 6e 6b 68 6f 72 6e 20 | ---------.#.#.Call.the.Sinkhorn. |
fca0 | 61 6c 67 6f 72 69 74 68 6d 20 66 72 6f 6d 20 50 4f 54 0a 0a 73 69 6e 6b 68 6f 72 6e 5f 70 69 20 | algorithm.from.POT..sinkhorn_pi. |
fcc0 | 3d 20 6f 74 2e 73 69 6e 6b 68 6f 72 6e 28 61 2c 20 62 2c 20 4d 2c 20 72 65 67 29 0a 70 72 69 6e | =.ot.sinkhorn(a,.b,.M,.reg).prin |
fce0 | 74 28 73 69 6e 6b 68 6f 72 6e 5f 70 69 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | t(sinkhorn_pi)..################ |
fd00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
fd20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 | ##############################.# |
fd40 | 20 50 6c 6f 74 20 20 53 47 44 20 72 65 73 75 6c 74 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | .Plot..SGD.results.#.----------- |
fd60 | 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c | ------..pl.figure(4,.figsize=(5, |
fd80 | 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 73 67 | .5)).ot.plot.plot1D_mat(a,.b,.sg |
fda0 | 64 5f 64 75 61 6c 5f 70 69 2c 20 27 64 75 61 6c 20 3a 20 4f 54 20 6d 61 74 72 69 78 20 53 47 44 | d_dual_pi,.'dual.:.OT.matrix.SGD |
fdc0 | 27 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ').pl.show()...################# |
fde0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
fe00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 | #############################.#. |
fe20 | 50 6c 6f 74 20 53 69 6e 6b 68 6f 72 6e 20 72 65 73 75 6c 74 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d | Plot.Sinkhorn.results.#.-------- |
fe40 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 | -------------..pl.figure(4,.figs |
fe60 | 69 7a 65 3d 28 35 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 | ize=(5,.5)).ot.plot.plot1D_mat(a |
fe80 | 2c 20 62 2c 20 73 69 6e 6b 68 6f 72 6e 5f 70 69 2c 20 27 4f 54 20 6d 61 74 72 69 78 20 53 69 6e | ,.b,.sinkhorn_pi,.'OT.matrix.Sin |
fea0 | 6b 68 6f 72 6e 27 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 84 68 3a 4f | khorn').pl.show().PK.........h:O |
fec0 | e5 5f 4e 9c 14 11 00 00 14 11 00 00 0b 00 00 00 70 6c 6f 74 5f 66 67 77 2e 70 79 23 20 2d 2a 2d | ._N.............plot_fgw.py#.-*- |
fee0 | 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.-*-.""".========= |
ff00 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 50 6c 6f 74 20 46 75 73 65 64 | =====================.Plot.Fused |
ff20 | 2d 67 72 6f 6d 6f 76 2d 57 61 73 73 65 72 73 74 65 69 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | -gromov-Wasserstein.============ |
ff40 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 | ==================..This.example |
ff60 | 20 69 6c 6c 75 73 74 72 61 74 65 73 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66 20 | .illustrates.the.computation.of. |
ff80 | 46 47 57 20 66 6f 72 20 31 44 20 6d 65 61 73 75 72 65 73 5b 31 38 5d 2e 0a 0a 2e 2e 20 5b 31 38 | FGW.for.1D.measures[18]......[18 |
ffa0 | 5d 20 56 61 79 65 72 20 54 69 74 6f 75 61 6e 2c 20 43 68 61 70 65 6c 20 4c 61 65 74 69 74 69 61 | ].Vayer.Titouan,.Chapel.Laetitia |
ffc0 | 2c 20 46 6c 61 6d 61 72 79 20 52 7b 5c 27 65 7d 6d 69 2c 20 54 61 76 65 6e 61 72 64 20 52 6f 6d | ,.Flamary.R{\'e}mi,.Tavenard.Rom |
ffe0 | 61 69 6e 0a 20 20 20 20 20 20 61 6e 64 20 43 6f 75 72 74 79 20 4e 69 63 6f 6c 61 73 0a 20 20 20 | ain.......and.Courty.Nicolas.... |
10000 | 20 22 4f 70 74 69 6d 61 6c 20 54 72 61 6e 73 70 6f 72 74 20 66 6f 72 20 73 74 72 75 63 74 75 72 | ."Optimal.Transport.for.structur |
10020 | 65 64 20 64 61 74 61 20 77 69 74 68 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 6f 6e 20 67 72 61 70 | ed.data.with.application.on.grap |
10040 | 68 73 22 0a 20 20 20 20 49 6e 74 65 72 6e 61 74 69 6f 6e 61 6c 20 43 6f 6e 66 65 72 65 6e 63 65 | hs".....International.Conference |
10060 | 20 6f 6e 20 4d 61 63 68 69 6e 65 20 4c 65 61 72 6e 69 6e 67 20 28 49 43 4d 4c 29 2e 20 32 30 31 | .on.Machine.Learning.(ICML)..201 |
10080 | 39 2e 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a 20 54 69 74 6f 75 61 6e 20 56 61 79 65 72 | 9..."""..#.Author:.Titouan.Vayer |
100a0 | 20 3c 74 69 74 6f 75 61 6e 2e 76 61 79 65 72 40 69 72 69 73 61 2e 66 72 3e 0a 23 0a 23 20 4c 69 | .<titouan.vayer@irisa.fr>.#.#.Li |
100c0 | 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c | cense:.MIT.License..import.matpl |
100e0 | 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 | otlib.pyplot.as.pl.import.numpy. |
10100 | 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6f 74 0a 66 72 6f 6d 20 6f 74 2e 67 72 6f 6d 6f 76 20 69 | as.np.import.ot.from.ot.gromov.i |
10120 | 6d 70 6f 72 74 20 67 72 6f 6d 6f 76 5f 77 61 73 73 65 72 73 74 65 69 6e 2c 20 66 75 73 65 64 5f | mport.gromov_wasserstein,.fused_ |
10140 | 67 72 6f 6d 6f 76 5f 77 61 73 73 65 72 73 74 65 69 6e 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 | gromov_wasserstein..############ |
10160 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
10180 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
101a0 | 23 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a | ##.#.Generate.data.#.---------.. |
101c0 | 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 0a 23 20 57 65 20 63 72 65 61 74 65 20 74 77 6f 20 31 | #%%.parameters.#.We.create.two.1 |
101e0 | 44 20 72 61 6e 64 6f 6d 20 6d 65 61 73 75 72 65 73 0a 6e 20 3d 20 32 30 20 20 23 20 6e 75 6d 62 | D.random.measures.n.=.20..#.numb |
10200 | 65 72 20 6f 66 20 70 6f 69 6e 74 73 20 69 6e 20 74 68 65 20 66 69 72 73 74 20 64 69 73 74 72 69 | er.of.points.in.the.first.distri |
10220 | 62 75 74 69 6f 6e 0a 6e 32 20 3d 20 33 30 20 20 23 20 6e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e | bution.n2.=.30..#.number.of.poin |
10240 | 74 73 20 69 6e 20 74 68 65 20 73 65 63 6f 6e 64 20 64 69 73 74 72 69 62 75 74 69 6f 6e 0a 73 69 | ts.in.the.second.distribution.si |
10260 | 67 20 3d 20 31 20 20 23 20 73 74 64 20 6f 66 20 66 69 72 73 74 20 64 69 73 74 72 69 62 75 74 69 | g.=.1..#.std.of.first.distributi |
10280 | 6f 6e 0a 73 69 67 32 20 3d 20 30 2e 31 20 20 23 20 73 74 64 20 6f 66 20 73 65 63 6f 6e 64 20 64 | on.sig2.=.0.1..#.std.of.second.d |
102a0 | 69 73 74 72 69 62 75 74 69 6f 6e 0a 0a 6e 70 2e 72 61 6e 64 6f 6d 2e 73 65 65 64 28 30 29 0a 0a | istribution..np.random.seed(0).. |
102c0 | 70 68 69 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 29 5b 3a 2c 20 4e 6f 6e 65 5d 0a 78 73 20 3d | phi.=.np.arange(n)[:,.None].xs.= |
102e0 | 20 70 68 69 20 2b 20 73 69 67 20 2a 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 6e 28 6e 2c 20 | .phi.+.sig.*.np.random.randn(n,. |
10300 | 31 29 0a 79 73 20 3d 20 6e 70 2e 76 73 74 61 63 6b 28 28 6e 70 2e 6f 6e 65 73 28 28 6e 20 2f 2f | 1).ys.=.np.vstack((np.ones((n.// |
10320 | 20 32 2c 20 31 29 29 2c 20 30 20 2a 20 6e 70 2e 6f 6e 65 73 28 28 6e 20 2f 2f 20 32 2c 20 31 29 | .2,.1)),.0.*.np.ones((n.//.2,.1) |
10340 | 29 29 29 20 2b 20 73 69 67 32 20 2a 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 6e 28 6e 2c 20 | ))).+.sig2.*.np.random.randn(n,. |
10360 | 31 29 0a 0a 70 68 69 32 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 32 29 5b 3a 2c 20 4e 6f 6e 65 | 1)..phi2.=.np.arange(n2)[:,.None |
10380 | 5d 0a 78 74 20 3d 20 70 68 69 32 20 2b 20 73 69 67 20 2a 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 | ].xt.=.phi2.+.sig.*.np.random.ra |
103a0 | 6e 64 6e 28 6e 32 2c 20 31 29 0a 79 74 20 3d 20 6e 70 2e 76 73 74 61 63 6b 28 28 6e 70 2e 6f 6e | ndn(n2,.1).yt.=.np.vstack((np.on |
103c0 | 65 73 28 28 6e 32 20 2f 2f 20 32 2c 20 31 29 29 2c 20 30 20 2a 20 6e 70 2e 6f 6e 65 73 28 28 6e | es((n2.//.2,.1)),.0.*.np.ones((n |
103e0 | 32 20 2f 2f 20 32 2c 20 31 29 29 29 29 20 2b 20 73 69 67 32 20 2a 20 6e 70 2e 72 61 6e 64 6f 6d | 2.//.2,.1)))).+.sig2.*.np.random |
10400 | 2e 72 61 6e 64 6e 28 6e 32 2c 20 31 29 0a 79 74 20 3d 20 79 74 5b 3a 3a 2d 31 2c 20 3a 5d 0a 0a | .randn(n2,.1).yt.=.yt[::-1,.:].. |
10420 | 70 20 3d 20 6f 74 2e 75 6e 69 66 28 6e 29 0a 71 20 3d 20 6f 74 2e 75 6e 69 66 28 6e 32 29 0a 0a | p.=.ot.unif(n).q.=.ot.unif(n2).. |
10440 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
10460 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
10480 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 64 61 74 61 0a 23 20 2d 2d 2d | ##############.#.Plot.data.#.--- |
104a0 | 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 6c 6f 74 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f | ------..#%%.plot.the.distributio |
104c0 | 6e 73 0a 0a 70 6c 2e 63 6c 6f 73 65 28 31 30 29 0a 70 6c 2e 66 69 67 75 72 65 28 31 30 2c 20 28 | ns..pl.close(10).pl.figure(10,.( |
104e0 | 37 2c 20 37 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 31 2c 20 31 29 0a 0a 70 6c 2e | 7,.7))..pl.subplot(2,.1,.1)..pl. |
10500 | 73 63 61 74 74 65 72 28 79 73 2c 20 78 73 2c 20 63 3d 70 68 69 2c 20 73 3d 37 30 29 0a 70 6c 2e | scatter(ys,.xs,.c=phi,.s=70).pl. |
10520 | 79 6c 61 62 65 6c 28 27 46 65 61 74 75 72 65 20 76 61 6c 75 65 20 61 27 2c 20 66 6f 6e 74 73 69 | ylabel('Feature.value.a',.fontsi |
10540 | 7a 65 3d 32 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 24 5c 6d 75 3d 5c 73 75 6d 5f 69 20 5c 64 65 | ze=20).pl.title('$\mu=\sum_i.\de |
10560 | 6c 74 61 5f 7b 78 5f 69 2c 61 5f 69 7d 24 27 2c 20 66 6f 6e 74 73 69 7a 65 3d 32 35 2c 20 75 73 | lta_{x_i,a_i}$',.fontsize=25,.us |
10580 | 65 74 65 78 3d 54 72 75 65 2c 20 79 3d 31 29 0a 70 6c 2e 78 74 69 63 6b 73 28 28 29 29 0a 70 6c | etex=True,.y=1).pl.xticks(()).pl |
105a0 | 2e 79 74 69 63 6b 73 28 28 29 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 31 2c 20 32 29 0a | .yticks(()).pl.subplot(2,.1,.2). |
105c0 | 70 6c 2e 73 63 61 74 74 65 72 28 79 74 2c 20 78 74 2c 20 63 3d 70 68 69 32 2c 20 73 3d 37 30 29 | pl.scatter(yt,.xt,.c=phi2,.s=70) |
105e0 | 0a 70 6c 2e 78 6c 61 62 65 6c 28 27 63 6f 6f 72 64 69 6e 61 74 65 73 20 78 2f 79 27 2c 20 66 6f | .pl.xlabel('coordinates.x/y',.fo |
10600 | 6e 74 73 69 7a 65 3d 32 35 29 0a 70 6c 2e 79 6c 61 62 65 6c 28 27 46 65 61 74 75 72 65 20 76 61 | ntsize=25).pl.ylabel('Feature.va |
10620 | 6c 75 65 20 62 27 2c 20 66 6f 6e 74 73 69 7a 65 3d 32 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 24 | lue.b',.fontsize=20).pl.title('$ |
10640 | 5c 5c 6e 75 3d 5c 73 75 6d 5f 6a 20 5c 64 65 6c 74 61 5f 7b 79 5f 6a 2c 62 5f 6a 7d 24 27 2c 20 | \\nu=\sum_j.\delta_{y_j,b_j}$',. |
10660 | 66 6f 6e 74 73 69 7a 65 3d 32 35 2c 20 75 73 65 74 65 78 3d 54 72 75 65 2c 20 79 3d 31 29 0a 70 | fontsize=25,.usetex=True,.y=1).p |
10680 | 6c 2e 79 74 69 63 6b 73 28 28 29 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 70 | l.yticks(()).pl.tight_layout().p |
106a0 | 6c 2e 73 68 6f 77 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | l.show()..###################### |
106c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
106e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 43 72 65 61 74 | ########################.#.Creat |
10700 | 65 20 73 74 72 75 63 74 75 72 65 20 6d 61 74 72 69 63 65 73 20 61 6e 64 20 61 63 72 6f 73 73 2d | e.structure.matrices.and.across- |
10720 | 66 65 61 74 75 72 65 20 64 69 73 74 61 6e 63 65 20 6d 61 74 72 69 78 0a 23 20 2d 2d 2d 2d 2d 2d | feature.distance.matrix.#.------ |
10740 | 2d 2d 2d 0a 0a 23 25 25 20 53 74 72 75 63 74 75 72 65 20 6d 61 74 72 69 63 65 73 20 61 6e 64 20 | ---..#%%.Structure.matrices.and. |
10760 | 61 63 72 6f 73 73 2d 66 65 61 74 75 72 65 73 20 64 69 73 74 61 6e 63 65 20 6d 61 74 72 69 78 0a | across-features.distance.matrix. |
10780 | 43 31 20 3d 20 6f 74 2e 64 69 73 74 28 78 73 29 0a 43 32 20 3d 20 6f 74 2e 64 69 73 74 28 78 74 | C1.=.ot.dist(xs).C2.=.ot.dist(xt |
107a0 | 29 0a 4d 20 3d 20 6f 74 2e 64 69 73 74 28 79 73 2c 20 79 74 29 0a 77 31 20 3d 20 6f 74 2e 75 6e | ).M.=.ot.dist(ys,.yt).w1.=.ot.un |
107c0 | 69 66 28 43 31 2e 73 68 61 70 65 5b 30 5d 29 0a 77 32 20 3d 20 6f 74 2e 75 6e 69 66 28 43 32 2e | if(C1.shape[0]).w2.=.ot.unif(C2. |
107e0 | 73 68 61 70 65 5b 30 5d 29 0a 47 6f 74 20 3d 20 6f 74 2e 65 6d 64 28 5b 5d 2c 20 5b 5d 2c 20 4d | shape[0]).Got.=.ot.emd([],.[],.M |
10800 | 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | )..############################# |
10820 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
10840 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 6d 61 74 72 69 63 65 | #################.#.Plot.matrice |
10860 | 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 0a 63 6d 61 70 20 3d 20 27 52 65 64 73 27 | s.#.---------..#%%.cmap.=.'Reds' |
10880 | 0a 70 6c 2e 63 6c 6f 73 65 28 31 30 29 0a 70 6c 2e 66 69 67 75 72 65 28 31 30 2c 20 28 35 2c 20 | .pl.close(10).pl.figure(10,.(5,. |
108a0 | 35 29 29 0a 66 73 20 3d 20 31 35 0a 6c 5f 78 20 3d 20 5b 30 2c 20 35 2c 20 31 30 2c 20 31 35 5d | 5)).fs.=.15.l_x.=.[0,.5,.10,.15] |
108c0 | 0a 6c 5f 79 20 3d 20 5b 30 2c 20 35 2c 20 31 30 2c 20 31 35 2c 20 32 30 2c 20 32 35 5d 0a 67 73 | .l_y.=.[0,.5,.10,.15,.20,.25].gs |
108e0 | 20 3d 20 70 6c 2e 47 72 69 64 53 70 65 63 28 35 2c 20 35 29 0a 0a 61 78 31 20 3d 20 70 6c 2e 73 | .=.pl.GridSpec(5,.5)..ax1.=.pl.s |
10900 | 75 62 70 6c 6f 74 28 67 73 5b 33 3a 2c 20 3a 32 5d 29 0a 0a 70 6c 2e 69 6d 73 68 6f 77 28 43 31 | ubplot(gs[3:,.:2])..pl.imshow(C1 |
10920 | 2c 20 63 6d 61 70 3d 63 6d 61 70 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 | ,.cmap=cmap,.interpolation='near |
10940 | 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 22 24 43 5f 31 24 22 2c 20 66 6f 6e 74 73 69 7a 65 | est').pl.title("$C_1$",.fontsize |
10960 | 3d 66 73 29 0a 70 6c 2e 78 6c 61 62 65 6c 28 22 24 6b 24 22 2c 20 66 6f 6e 74 73 69 7a 65 3d 66 | =fs).pl.xlabel("$k$",.fontsize=f |
10980 | 73 29 0a 70 6c 2e 79 6c 61 62 65 6c 28 22 24 69 24 22 2c 20 66 6f 6e 74 73 69 7a 65 3d 66 73 29 | s).pl.ylabel("$i$",.fontsize=fs) |
109a0 | 0a 70 6c 2e 78 74 69 63 6b 73 28 6c 5f 78 29 0a 70 6c 2e 79 74 69 63 6b 73 28 6c 5f 78 29 0a 0a | .pl.xticks(l_x).pl.yticks(l_x).. |
109c0 | 61 78 32 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 28 67 73 5b 3a 33 2c 20 32 3a 5d 29 0a 0a 70 6c | ax2.=.pl.subplot(gs[:3,.2:])..pl |
109e0 | 2e 69 6d 73 68 6f 77 28 43 32 2c 20 63 6d 61 70 3d 63 6d 61 70 2c 20 69 6e 74 65 72 70 6f 6c 61 | .imshow(C2,.cmap=cmap,.interpola |
10a00 | 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 22 24 43 5f 32 24 22 | tion='nearest').pl.title("$C_2$" |
10a20 | 2c 20 66 6f 6e 74 73 69 7a 65 3d 66 73 29 0a 70 6c 2e 79 6c 61 62 65 6c 28 22 24 6c 24 22 2c 20 | ,.fontsize=fs).pl.ylabel("$l$",. |
10a40 | 66 6f 6e 74 73 69 7a 65 3d 66 73 29 0a 23 70 6c 2e 79 6c 61 62 65 6c 28 22 24 6c 24 22 2c 66 6f | fontsize=fs).#pl.ylabel("$l$",fo |
10a60 | 6e 74 73 69 7a 65 3d 66 73 29 0a 70 6c 2e 78 74 69 63 6b 73 28 28 29 29 0a 70 6c 2e 79 74 69 63 | ntsize=fs).pl.xticks(()).pl.ytic |
10a80 | 6b 73 28 6c 5f 79 29 0a 61 78 32 2e 73 65 74 5f 61 73 70 65 63 74 28 27 61 75 74 6f 27 29 0a 0a | ks(l_y).ax2.set_aspect('auto').. |
10aa0 | 61 78 33 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 28 67 73 5b 33 3a 2c 20 32 3a 5d 2c 20 73 68 61 | ax3.=.pl.subplot(gs[3:,.2:],.sha |
10ac0 | 72 65 78 3d 61 78 32 2c 20 73 68 61 72 65 79 3d 61 78 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 4d | rex=ax2,.sharey=ax1).pl.imshow(M |
10ae0 | 2c 20 63 6d 61 70 3d 63 6d 61 70 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 | ,.cmap=cmap,.interpolation='near |
10b00 | 65 73 74 27 29 0a 70 6c 2e 79 74 69 63 6b 73 28 6c 5f 78 29 0a 70 6c 2e 78 74 69 63 6b 73 28 6c | est').pl.yticks(l_x).pl.xticks(l |
10b20 | 5f 79 29 0a 70 6c 2e 79 6c 61 62 65 6c 28 22 24 69 24 22 2c 20 66 6f 6e 74 73 69 7a 65 3d 66 73 | _y).pl.ylabel("$i$",.fontsize=fs |
10b40 | 29 0a 70 6c 2e 74 69 74 6c 65 28 22 24 4d 5f 7b 41 42 7d 24 22 2c 20 66 6f 6e 74 73 69 7a 65 3d | ).pl.title("$M_{AB}$",.fontsize= |
10b60 | 66 73 29 0a 70 6c 2e 78 6c 61 62 65 6c 28 22 24 6a 24 22 2c 20 66 6f 6e 74 73 69 7a 65 3d 66 73 | fs).pl.xlabel("$j$",.fontsize=fs |
10b80 | 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 61 78 33 2e 73 65 74 5f 61 73 70 65 | ).pl.tight_layout().ax3.set_aspe |
10ba0 | 63 74 28 27 61 75 74 6f 27 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 | ct('auto').pl.show()..########## |
10bc0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
10be0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
10c00 | 23 23 23 23 0a 23 20 43 6f 6d 70 75 74 65 20 46 47 57 2f 47 57 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d | ####.#.Compute.FGW/GW.#.-------- |
10c20 | 2d 0a 0a 23 25 25 20 43 6f 6d 70 75 74 69 6e 67 20 46 47 57 20 61 6e 64 20 47 57 0a 61 6c 70 68 | -..#%%.Computing.FGW.and.GW.alph |
10c40 | 61 20 3d 20 31 65 2d 33 0a 0a 6f 74 2e 74 69 63 28 29 0a 47 77 67 2c 20 6c 6f 67 77 20 3d 20 66 | a.=.1e-3..ot.tic().Gwg,.logw.=.f |
10c60 | 75 73 65 64 5f 67 72 6f 6d 6f 76 5f 77 61 73 73 65 72 73 74 65 69 6e 28 4d 2c 20 43 31 2c 20 43 | used_gromov_wasserstein(M,.C1,.C |
10c80 | 32 2c 20 70 2c 20 71 2c 20 6c 6f 73 73 5f 66 75 6e 3d 27 73 71 75 61 72 65 5f 6c 6f 73 73 27 2c | 2,.p,.q,.loss_fun='square_loss', |
10ca0 | 20 61 6c 70 68 61 3d 61 6c 70 68 61 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 2c 20 6c 6f 67 3d | .alpha=alpha,.verbose=True,.log= |
10cc0 | 54 72 75 65 29 0a 6f 74 2e 74 6f 63 28 29 0a 0a 23 25 72 65 6c 6f 61 64 5f 65 78 74 20 57 47 57 | True).ot.toc()..#%reload_ext.WGW |
10ce0 | 0a 47 67 2c 20 6c 6f 67 20 3d 20 67 72 6f 6d 6f 76 5f 77 61 73 73 65 72 73 74 65 69 6e 28 43 31 | .Gg,.log.=.gromov_wasserstein(C1 |
10d00 | 2c 20 43 32 2c 20 70 2c 20 71 2c 20 6c 6f 73 73 5f 66 75 6e 3d 27 73 71 75 61 72 65 5f 6c 6f 73 | ,.C2,.p,.q,.loss_fun='square_los |
10d20 | 73 27 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 2c 20 6c 6f 67 3d 54 72 75 65 29 0a 0a 23 23 23 | s',.verbose=True,.log=True)..### |
10d40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
10d60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
10d80 | 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 56 69 73 75 61 6c 69 7a 65 20 74 72 61 6e 73 70 6f 72 | ###########.#.Visualize.transpor |
10da0 | 74 20 6d 61 74 72 69 63 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 76 69 73 75 | t.matrices.#.---------..#%%.visu |
10dc0 | 20 4f 54 20 6d 61 74 72 69 78 0a 63 6d 61 70 20 3d 20 27 42 6c 75 65 73 27 0a 66 73 20 3d 20 31 | .OT.matrix.cmap.=.'Blues'.fs.=.1 |
10de0 | 35 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 28 31 33 2c 20 35 29 29 0a 70 6c 2e 63 6c 66 28 29 | 5.pl.figure(2,.(13,.5)).pl.clf() |
10e00 | 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 47 | .pl.subplot(1,.3,.1).pl.imshow(G |
10e20 | 6f 74 2c 20 63 6d 61 70 3d 63 6d 61 70 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 | ot,.cmap=cmap,.interpolation='ne |
10e40 | 61 72 65 73 74 27 29 0a 23 70 6c 2e 78 6c 61 62 65 6c 28 22 24 79 24 22 2c 66 6f 6e 74 73 69 7a | arest').#pl.xlabel("$y$",fontsiz |
10e60 | 65 3d 66 73 29 0a 70 6c 2e 79 6c 61 62 65 6c 28 22 24 69 24 22 2c 20 66 6f 6e 74 73 69 7a 65 3d | e=fs).pl.ylabel("$i$",.fontsize= |
10e80 | 66 73 29 0a 70 6c 2e 78 74 69 63 6b 73 28 28 29 29 0a 0a 70 6c 2e 74 69 74 6c 65 28 27 57 61 73 | fs).pl.xticks(())..pl.title('Was |
10ea0 | 73 65 72 73 74 65 69 6e 20 28 24 4d 24 20 6f 6e 6c 79 29 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f | serstein.($M$.only)')..pl.subplo |
10ec0 | 74 28 31 2c 20 33 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 47 67 2c 20 63 6d 61 70 3d 63 6d | t(1,.3,.2).pl.imshow(Gg,.cmap=cm |
10ee0 | 61 70 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e | ap,.interpolation='nearest').pl. |
10f00 | 74 69 74 6c 65 28 27 47 72 6f 6d 6f 76 20 28 24 43 5f 31 2c 43 5f 32 24 20 6f 6e 6c 79 29 27 29 | title('Gromov.($C_1,C_2$.only)') |
10f20 | 0a 70 6c 2e 78 74 69 63 6b 73 28 28 29 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 | .pl.xticks(()).pl.subplot(1,.3,. |
10f40 | 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 47 77 67 2c 20 63 6d 61 70 3d 63 6d 61 70 2c 20 69 6e 74 | 3).pl.imshow(Gwg,.cmap=cmap,.int |
10f60 | 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 | erpolation='nearest').pl.title(' |
10f80 | 46 47 57 20 20 28 24 4d 2b 43 5f 31 2c 43 5f 32 24 29 27 29 0a 0a 70 6c 2e 78 6c 61 62 65 6c 28 | FGW..($M+C_1,C_2$)')..pl.xlabel( |
10fa0 | 22 24 6a 24 22 2c 20 66 6f 6e 74 73 69 7a 65 3d 66 73 29 0a 70 6c 2e 79 6c 61 62 65 6c 28 22 24 | "$j$",.fontsize=fs).pl.ylabel("$ |
10fc0 | 69 24 22 2c 20 66 6f 6e 74 73 69 7a 65 3d 66 73 29 0a 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f | i$",.fontsize=fs)..pl.tight_layo |
10fe0 | 75 74 28 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 7c 68 3a 4f 6f 6c 58 | ut().pl.show().PK........|h:OolX |
11000 | 5b 88 13 00 00 88 13 00 00 13 00 00 00 70 6c 6f 74 5f 4f 54 5f 4c 31 5f 76 73 5f 4c 32 2e 70 79 | [............plot_OT_L1_vs_L2.py |
11020 | 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d | #.-*-.coding:.utf-8.-*-.""".==== |
11040 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
11060 | 3d 3d 3d 3d 3d 3d 0a 32 44 20 4f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 20 66 6f 72 20 | ======.2D.Optimal.transport.for. |
11080 | 64 69 66 66 65 72 65 6e 74 20 6d 65 74 72 69 63 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | different.metrics.============== |
110a0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 32 44 | ============================..2D |
110c0 | 20 4f 54 20 6f 6e 20 65 6d 70 69 72 69 63 61 6c 20 64 69 73 74 72 69 62 75 74 69 6f 20 20 77 69 | .OT.on.empirical.distributio..wi |
110e0 | 74 68 20 64 69 66 66 65 72 65 6e 74 20 67 6f 75 6e 64 20 6d 65 74 72 69 63 2e 0a 0a 53 74 6f 6c | th.different.gound.metric...Stol |
11100 | 65 20 74 68 65 20 66 69 67 75 72 65 20 69 64 65 61 20 66 72 6f 6d 20 46 69 67 2e 20 31 20 61 6e | e.the.figure.idea.from.Fig..1.an |
11120 | 64 20 32 20 69 6e 0a 68 74 74 70 73 3a 2f 2f 61 72 78 69 76 2e 6f 72 67 2f 70 64 66 2f 31 37 30 | d.2.in.https://arxiv.org/pdf/170 |
11140 | 36 2e 30 37 36 35 30 2e 70 64 66 0a 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a 20 52 65 6d | 6.07650.pdf..."""..#.Author:.Rem |
11160 | 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 | i.Flamary.<remi.flamary@unice.fr |
11180 | 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f | >.#.#.License:.MIT.License..impo |
111a0 | 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 |
111c0 | 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 69 6d 70 6f 72 74 20 6f 74 | .pylab.as.pl.import.ot.import.ot |
111e0 | 2e 70 6c 6f 74 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | .plot..######################### |
11200 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
11220 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 44 61 74 61 73 65 74 20 | #####################.#.Dataset. |
11240 | 31 20 3a 20 75 6e 69 66 6f 72 6d 20 73 61 6d 70 6c 69 6e 67 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d | 1.:.uniform.sampling.#.--------- |
11260 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 6e 20 3d 20 32 30 20 20 23 20 6e | -------------------..n.=.20..#.n |
11280 | 62 20 73 61 6d 70 6c 65 73 0a 78 73 20 3d 20 6e 70 2e 7a 65 72 6f 73 28 28 6e 2c 20 32 29 29 0a | b.samples.xs.=.np.zeros((n,.2)). |
112a0 | 78 73 5b 3a 2c 20 30 5d 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 29 20 2b 20 31 0a 78 73 5b 3a | xs[:,.0].=.np.arange(n).+.1.xs[: |
112c0 | 2c 20 31 5d 20 3d 20 28 6e 70 2e 61 72 61 6e 67 65 28 6e 29 20 2b 20 31 29 20 2a 20 2d 30 2e 30 | ,.1].=.(np.arange(n).+.1).*.-0.0 |
112e0 | 30 31 20 20 23 20 74 6f 20 6d 61 6b 65 20 69 74 20 73 74 72 69 63 74 6c 79 20 63 6f 6e 76 65 78 | 01..#.to.make.it.strictly.convex |
11300 | 2e 2e 2e 0a 0a 78 74 20 3d 20 6e 70 2e 7a 65 72 6f 73 28 28 6e 2c 20 32 29 29 0a 78 74 5b 3a 2c | .....xt.=.np.zeros((n,.2)).xt[:, |
11320 | 20 31 5d 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 29 20 2b 20 31 0a 0a 61 2c 20 62 20 3d 20 6f | .1].=.np.arange(n).+.1..a,.b.=.o |
11340 | 74 2e 75 6e 69 66 28 6e 29 2c 20 6f 74 2e 75 6e 69 66 28 6e 29 20 20 23 20 75 6e 69 66 6f 72 6d | t.unif(n),.ot.unif(n)..#.uniform |
11360 | 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6f 6e 20 73 61 6d 70 6c 65 73 0a 0a 23 20 6c 6f 73 73 | .distribution.on.samples..#.loss |
11380 | 20 6d 61 74 72 69 78 0a 4d 31 20 3d 20 6f 74 2e 64 69 73 74 28 78 73 2c 20 78 74 2c 20 6d 65 74 | .matrix.M1.=.ot.dist(xs,.xt,.met |
113a0 | 72 69 63 3d 27 65 75 63 6c 69 64 65 61 6e 27 29 0a 4d 31 20 2f 3d 20 4d 31 2e 6d 61 78 28 29 0a | ric='euclidean').M1./=.M1.max(). |
113c0 | 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 32 20 3d 20 6f 74 2e 64 69 73 74 28 78 73 2c 20 | .#.loss.matrix.M2.=.ot.dist(xs,. |
113e0 | 78 74 2c 20 6d 65 74 72 69 63 3d 27 73 71 65 75 63 6c 69 64 65 61 6e 27 29 0a 4d 32 20 2f 3d 20 | xt,.metric='sqeuclidean').M2./=. |
11400 | 4d 32 2e 6d 61 78 28 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 70 20 3d 20 6e 70 2e | M2.max()..#.loss.matrix.Mp.=.np. |
11420 | 73 71 72 74 28 6f 74 2e 64 69 73 74 28 78 73 2c 20 78 74 2c 20 6d 65 74 72 69 63 3d 27 65 75 63 | sqrt(ot.dist(xs,.xt,.metric='euc |
11440 | 6c 69 64 65 61 6e 27 29 29 0a 4d 70 20 2f 3d 20 4d 70 2e 6d 61 78 28 29 0a 0a 23 20 44 61 74 61 | lidean')).Mp./=.Mp.max()..#.Data |
11460 | 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 37 2c 20 33 29 29 0a 70 6c | .pl.figure(1,.figsize=(7,.3)).pl |
11480 | 2e 63 6c 66 28 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 | .clf().pl.plot(xs[:,.0],.xs[:,.1 |
114a0 | 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 | ],.'+b',.label='Source.samples') |
114c0 | 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 | .pl.plot(xt[:,.0],.xt[:,.1],.'xr |
114e0 | 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 61 78 | ',.label='Target.samples').pl.ax |
11500 | 69 73 28 27 65 71 75 61 6c 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 20 61 6e 64 | is('equal').pl.title('Source.and |
11520 | 20 74 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 0a 23 20 43 6f 73 74 | .target.distributions')...#.Cost |
11540 | 20 6d 61 74 72 69 63 65 73 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 | .matrices.pl.figure(2,.figsize=( |
11560 | 37 2c 20 33 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 31 29 0a 70 6c 2e 69 | 7,.3))..pl.subplot(1,.3,.1).pl.i |
11580 | 6d 73 68 6f 77 28 4d 31 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 | mshow(M1,.interpolation='nearest |
115a0 | 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 45 75 63 6c 69 64 65 61 6e 20 63 6f 73 74 27 29 0a 0a 70 | ').pl.title('Euclidean.cost')..p |
115c0 | 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 4d 32 2c | l.subplot(1,.3,.2).pl.imshow(M2, |
115e0 | 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 74 69 74 | .interpolation='nearest').pl.tit |
11600 | 6c 65 28 27 53 71 75 61 72 65 64 20 45 75 63 6c 69 64 65 61 6e 20 63 6f 73 74 27 29 0a 0a 70 6c | le('Squared.Euclidean.cost')..pl |
11620 | 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 4d 70 2c 20 | .subplot(1,.3,.3).pl.imshow(Mp,. |
11640 | 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c | interpolation='nearest').pl.titl |
11660 | 65 28 27 53 71 72 74 20 45 75 63 6c 69 64 65 61 6e 20 63 6f 73 74 27 29 0a 70 6c 2e 74 69 67 68 | e('Sqrt.Euclidean.cost').pl.tigh |
11680 | 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | t_layout()..#################### |
116a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
116c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 44 61 74 | ##########################.#.Dat |
116e0 | 61 73 65 74 20 31 20 3a 20 50 6c 6f 74 20 4f 54 20 4d 61 74 72 69 63 65 73 0a 23 20 2d 2d 2d 2d | aset.1.:.Plot.OT.Matrices.#.---- |
11700 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 25 25 20 45 | ------------------------...#%%.E |
11720 | 4d 44 0a 47 31 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 31 29 0a 47 32 20 3d 20 6f 74 | MD.G1.=.ot.emd(a,.b,.M1).G2.=.ot |
11740 | 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 32 29 0a 47 70 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c | .emd(a,.b,.M2).Gp.=.ot.emd(a,.b, |
11760 | 20 4d 70 29 0a 0a 23 20 4f 54 20 6d 61 74 72 69 63 65 73 0a 70 6c 2e 66 69 67 75 72 65 28 33 2c | .Mp)..#.OT.matrices.pl.figure(3, |
11780 | 20 66 69 67 73 69 7a 65 3d 28 37 2c 20 33 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 | .figsize=(7,.3))..pl.subplot(1,. |
117a0 | 33 2c 20 31 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 | 3,.1).ot.plot.plot2D_samples_mat |
117c0 | 28 78 73 2c 20 78 74 2c 20 47 31 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 70 | (xs,.xt,.G1,.c=[.5,..5,.1]).pl.p |
117e0 | 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 | lot(xs[:,.0],.xs[:,.1],.'+b',.la |
11800 | 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 | bel='Source.samples').pl.plot(xt |
11820 | 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 | [:,.0],.xt[:,.1],.'xr',.label='T |
11840 | 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 61 78 69 73 28 27 65 71 75 61 6c 27 29 | arget.samples').pl.axis('equal') |
11860 | 0a 23 20 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 | .#.pl.legend(loc=0).pl.title('OT |
11880 | 20 45 75 63 6c 69 64 65 61 6e 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 32 | .Euclidean')..pl.subplot(1,.3,.2 |
118a0 | 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 78 73 2c | ).ot.plot.plot2D_samples_mat(xs, |
118c0 | 20 78 74 2c 20 47 32 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 70 6c 6f 74 28 | .xt,.G2,.c=[.5,..5,.1]).pl.plot( |
118e0 | 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d | xs[:,.0],.xs[:,.1],.'+b',.label= |
11900 | 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 | 'Source.samples').pl.plot(xt[:,. |
11920 | 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 | 0],.xt[:,.1],.'xr',.label='Targe |
11940 | 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 61 78 69 73 28 27 65 71 75 61 6c 27 29 0a 23 20 70 | t.samples').pl.axis('equal').#.p |
11960 | 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 73 71 75 | l.legend(loc=0).pl.title('OT.squ |
11980 | 61 72 65 64 20 45 75 63 6c 69 64 65 61 6e 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 | ared.Euclidean')..pl.subplot(1,. |
119a0 | 33 2c 20 33 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 | 3,.3).ot.plot.plot2D_samples_mat |
119c0 | 28 78 73 2c 20 78 74 2c 20 47 70 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 70 | (xs,.xt,.Gp,.c=[.5,..5,.1]).pl.p |
119e0 | 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 | lot(xs[:,.0],.xs[:,.1],.'+b',.la |
11a00 | 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 | bel='Source.samples').pl.plot(xt |
11a20 | 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 | [:,.0],.xt[:,.1],.'xr',.label='T |
11a40 | 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 61 78 69 73 28 27 65 71 75 61 6c 27 29 | arget.samples').pl.axis('equal') |
11a60 | 0a 23 20 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 | .#.pl.legend(loc=0).pl.title('OT |
11a80 | 20 73 71 72 74 20 45 75 63 6c 69 64 65 61 6e 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 | .sqrt.Euclidean').pl.tight_layou |
11aa0 | 74 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | t()..pl.show()...############### |
11ac0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
11ae0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a | ###############################. |
11b00 | 23 20 44 61 74 61 73 65 74 20 32 20 3a 20 50 61 72 74 69 61 6c 20 63 69 72 63 6c 65 0a 23 20 2d | #.Dataset.2.:.Partial.circle.#.- |
11b20 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 6e 20 3d 20 35 | -------------------------..n.=.5 |
11b40 | 30 20 20 23 20 6e 62 20 73 61 6d 70 6c 65 73 0a 78 74 6f 74 20 3d 20 6e 70 2e 7a 65 72 6f 73 28 | 0..#.nb.samples.xtot.=.np.zeros( |
11b60 | 28 6e 20 2b 20 31 2c 20 32 29 29 0a 78 74 6f 74 5b 3a 2c 20 30 5d 20 3d 20 6e 70 2e 63 6f 73 28 | (n.+.1,.2)).xtot[:,.0].=.np.cos( |
11b80 | 0a 20 20 20 20 28 6e 70 2e 61 72 61 6e 67 65 28 6e 20 2b 20 31 29 20 2b 20 31 2e 30 29 20 2a 20 | .....(np.arange(n.+.1).+.1.0).*. |
11ba0 | 30 2e 39 20 2f 20 28 6e 20 2b 20 32 29 20 2a 20 32 20 2a 20 6e 70 2e 70 69 29 0a 78 74 6f 74 5b | 0.9./.(n.+.2).*.2.*.np.pi).xtot[ |
11bc0 | 3a 2c 20 31 5d 20 3d 20 6e 70 2e 73 69 6e 28 0a 20 20 20 20 28 6e 70 2e 61 72 61 6e 67 65 28 6e | :,.1].=.np.sin(.....(np.arange(n |
11be0 | 20 2b 20 31 29 20 2b 20 31 2e 30 29 20 2a 20 30 2e 39 20 2f 20 28 6e 20 2b 20 32 29 20 2a 20 32 | .+.1).+.1.0).*.0.9./.(n.+.2).*.2 |
11c00 | 20 2a 20 6e 70 2e 70 69 29 0a 0a 78 73 20 3d 20 78 74 6f 74 5b 3a 6e 2c 20 3a 5d 0a 78 74 20 3d | .*.np.pi)..xs.=.xtot[:n,.:].xt.= |
11c20 | 20 78 74 6f 74 5b 31 3a 2c 20 3a 5d 0a 0a 61 2c 20 62 20 3d 20 6f 74 2e 75 6e 69 66 28 6e 29 2c | .xtot[1:,.:]..a,.b.=.ot.unif(n), |
11c40 | 20 6f 74 2e 75 6e 69 66 28 6e 29 20 20 23 20 75 6e 69 66 6f 72 6d 20 64 69 73 74 72 69 62 75 74 | .ot.unif(n)..#.uniform.distribut |
11c60 | 69 6f 6e 20 6f 6e 20 73 61 6d 70 6c 65 73 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 31 | ion.on.samples..#.loss.matrix.M1 |
11c80 | 20 3d 20 6f 74 2e 64 69 73 74 28 78 73 2c 20 78 74 2c 20 6d 65 74 72 69 63 3d 27 65 75 63 6c 69 | .=.ot.dist(xs,.xt,.metric='eucli |
11ca0 | 64 65 61 6e 27 29 0a 4d 31 20 2f 3d 20 4d 31 2e 6d 61 78 28 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 | dean').M1./=.M1.max()..#.loss.ma |
11cc0 | 74 72 69 78 0a 4d 32 20 3d 20 6f 74 2e 64 69 73 74 28 78 73 2c 20 78 74 2c 20 6d 65 74 72 69 63 | trix.M2.=.ot.dist(xs,.xt,.metric |
11ce0 | 3d 27 73 71 65 75 63 6c 69 64 65 61 6e 27 29 0a 4d 32 20 2f 3d 20 4d 32 2e 6d 61 78 28 29 0a 0a | ='sqeuclidean').M2./=.M2.max().. |
11d00 | 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 70 20 3d 20 6e 70 2e 73 71 72 74 28 6f 74 2e 64 69 | #.loss.matrix.Mp.=.np.sqrt(ot.di |
11d20 | 73 74 28 78 73 2c 20 78 74 2c 20 6d 65 74 72 69 63 3d 27 65 75 63 6c 69 64 65 61 6e 27 29 29 0a | st(xs,.xt,.metric='euclidean')). |
11d40 | 4d 70 20 2f 3d 20 4d 70 2e 6d 61 78 28 29 0a 0a 0a 23 20 44 61 74 61 0a 70 6c 2e 66 69 67 75 72 | Mp./=.Mp.max()...#.Data.pl.figur |
11d60 | 65 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 37 2c 20 33 29 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c | e(4,.figsize=(7,.3)).pl.clf().pl |
11d80 | 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 | .plot(xs[:,.0],.xs[:,.1],.'+b',. |
11da0 | 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 | label='Source.samples').pl.plot( |
11dc0 | 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d | xt[:,.0],.xt[:,.1],.'xr',.label= |
11de0 | 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 61 78 69 73 28 27 65 71 75 61 6c | 'Target.samples').pl.axis('equal |
11e00 | 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 20 61 6e 64 20 74 72 61 67 65 74 20 64 | ').pl.title('Source.and.traget.d |
11e20 | 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 0a 23 20 43 6f 73 74 20 6d 61 74 72 69 63 65 73 | istributions')...#.Cost.matrices |
11e40 | 0a 70 6c 2e 66 69 67 75 72 65 28 35 2c 20 66 69 67 73 69 7a 65 3d 28 37 2c 20 33 29 29 0a 0a 70 | .pl.figure(5,.figsize=(7,.3))..p |
11e60 | 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 4d 31 2c | l.subplot(1,.3,.1).pl.imshow(M1, |
11e80 | 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 74 69 74 | .interpolation='nearest').pl.tit |
11ea0 | 6c 65 28 27 45 75 63 6c 69 64 65 61 6e 20 63 6f 73 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 | le('Euclidean.cost')..pl.subplot |
11ec0 | 28 31 2c 20 33 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 4d 32 2c 20 69 6e 74 65 72 70 6f 6c | (1,.3,.2).pl.imshow(M2,.interpol |
11ee0 | 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 71 75 61 72 | ation='nearest').pl.title('Squar |
11f00 | 65 64 20 45 75 63 6c 69 64 65 61 6e 20 63 6f 73 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 | ed.Euclidean.cost')..pl.subplot( |
11f20 | 31 2c 20 33 2c 20 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 4d 70 2c 20 69 6e 74 65 72 70 6f 6c 61 | 1,.3,.3).pl.imshow(Mp,.interpola |
11f40 | 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 71 72 74 20 45 | tion='nearest').pl.title('Sqrt.E |
11f60 | 75 63 6c 69 64 65 61 6e 20 63 6f 73 74 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 | uclidean.cost').pl.tight_layout( |
11f80 | 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | )..############################# |
11fa0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
11fc0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 44 61 74 61 73 65 74 20 32 20 3a 20 | #################.#.Dataset.2.:. |
11fe0 | 50 6c 6f 74 20 20 4f 54 20 4d 61 74 72 69 63 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | Plot..OT.Matrices.#.------------ |
12000 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 25 25 20 45 4d 44 0a 47 31 20 3d | -----------------...#%%.EMD.G1.= |
12020 | 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 31 29 0a 47 32 20 3d 20 6f 74 2e 65 6d 64 28 61 2c | .ot.emd(a,.b,.M1).G2.=.ot.emd(a, |
12040 | 20 62 2c 20 4d 32 29 0a 47 70 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 70 29 0a 0a 23 | .b,.M2).Gp.=.ot.emd(a,.b,.Mp)..# |
12060 | 20 4f 54 20 6d 61 74 72 69 63 65 73 0a 70 6c 2e 66 69 67 75 72 65 28 36 2c 20 66 69 67 73 69 7a | .OT.matrices.pl.figure(6,.figsiz |
12080 | 65 3d 28 37 2c 20 33 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 31 29 0a 6f | e=(7,.3))..pl.subplot(1,.3,.1).o |
120a0 | 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 78 73 2c 20 78 74 | t.plot.plot2D_samples_mat(xs,.xt |
120c0 | 2c 20 47 31 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b | ,.G1,.c=[.5,..5,.1]).pl.plot(xs[ |
120e0 | 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f | :,.0],.xs[:,.1],.'+b',.label='So |
12100 | 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c | urce.samples').pl.plot(xt[:,.0], |
12120 | 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 | .xt[:,.1],.'xr',.label='Target.s |
12140 | 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 61 78 69 73 28 27 65 71 75 61 6c 27 29 0a 23 20 70 6c 2e 6c | amples').pl.axis('equal').#.pl.l |
12160 | 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 45 75 63 6c 69 64 | egend(loc=0).pl.title('OT.Euclid |
12180 | 65 61 6e 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 32 29 0a 6f 74 2e 70 6c | ean')..pl.subplot(1,.3,.2).ot.pl |
121a0 | 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 78 73 2c 20 78 74 2c 20 47 32 | ot.plot2D_samples_mat(xs,.xt,.G2 |
121c0 | 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 | ,.c=[.5,..5,.1]).pl.plot(xs[:,.0 |
121e0 | 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 | ],.xs[:,.1],.'+b',.label='Source |
12200 | 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b | .samples').pl.plot(xt[:,.0],.xt[ |
12220 | 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c | :,.1],.'xr',.label='Target.sampl |
12240 | 65 73 27 29 0a 70 6c 2e 61 78 69 73 28 27 65 71 75 61 6c 27 29 0a 23 20 70 6c 2e 6c 65 67 65 6e | es').pl.axis('equal').#.pl.legen |
12260 | 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 73 71 75 61 72 65 64 20 45 75 | d(loc=0).pl.title('OT.squared.Eu |
12280 | 63 6c 69 64 65 61 6e 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 33 29 0a 6f | clidean')..pl.subplot(1,.3,.3).o |
122a0 | 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 78 73 2c 20 78 74 | t.plot.plot2D_samples_mat(xs,.xt |
122c0 | 2c 20 47 70 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b | ,.Gp,.c=[.5,..5,.1]).pl.plot(xs[ |
122e0 | 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f | :,.0],.xs[:,.1],.'+b',.label='So |
12300 | 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c | urce.samples').pl.plot(xt[:,.0], |
12320 | 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 | .xt[:,.1],.'xr',.label='Target.s |
12340 | 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 61 78 69 73 28 27 65 71 75 61 6c 27 29 0a 23 20 70 6c 2e 6c | amples').pl.axis('equal').#.pl.l |
12360 | 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 73 71 72 74 20 45 | egend(loc=0).pl.title('OT.sqrt.E |
12380 | 75 63 6c 69 64 65 61 6e 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c | uclidean').pl.tight_layout()..pl |
123a0 | 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 7c b0 94 50 e9 d6 9c 70 1d 07 00 00 1d 07 | .show().PK........|..P...p...... |
123c0 | 00 00 16 00 00 00 70 6c 6f 74 5f 73 63 72 65 65 6e 6b 68 6f 72 6e 5f 31 44 2e 70 79 23 20 2d 2a | ......plot_screenkhorn_1D.py#.-* |
123e0 | 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d | -.coding:.utf-8.-*-.""".======== |
12400 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 31 44 20 53 63 72 65 65 | =======================.1D.Scree |
12420 | 6e 65 64 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ned.optimal.transport.========== |
12440 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d | =====================..This.exam |
12460 | 70 6c 65 20 69 6c 6c 75 73 74 72 61 74 65 73 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 | ple.illustrates.the.computation. |
12480 | 6f 66 20 53 63 72 65 65 6e 6b 68 6f 72 6e 3a 0a 53 63 72 65 65 6e 69 6e 67 20 53 69 6e 6b 68 6f | of.Screenkhorn:.Screening.Sinkho |
124a0 | 72 6e 20 41 6c 67 6f 72 69 74 68 6d 20 66 6f 72 20 4f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f | rn.Algorithm.for.Optimal.transpo |
124c0 | 72 74 2e 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a 20 4d 6f 6b 68 74 61 72 20 5a 2e 20 41 6c | rt.."""..#.Author:.Mokhtar.Z..Al |
124e0 | 61 79 61 20 3c 6d 6f 6b 68 74 61 72 7a 61 68 64 69 2e 61 6c 61 79 61 40 67 6d 61 69 6c 2e 63 6f | aya.<mokhtarzahdi.alaya@gmail.co |
12500 | 6d 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 | m>.#.#.License:.MIT.License..imp |
12520 | 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 |
12540 | 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 2e 70 6c 6f 74 0a 66 72 6f | b.pylab.as.pl.import.ot.plot.fro |
12560 | 6d 20 6f 74 2e 64 61 74 61 73 65 74 73 20 69 6d 70 6f 72 74 20 6d 61 6b 65 5f 31 44 5f 67 61 75 | m.ot.datasets.import.make_1D_gau |
12580 | 73 73 20 61 73 20 67 61 75 73 73 0a 66 72 6f 6d 20 6f 74 2e 62 72 65 67 6d 61 6e 20 69 6d 70 6f | ss.as.gauss.from.ot.bregman.impo |
125a0 | 72 74 20 73 63 72 65 65 6e 6b 68 6f 72 6e 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | rt.screenkhorn..################ |
125c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
125e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 | ##############################.# |
12600 | 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a | .Generate.data.#.-------------.. |
12620 | 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 6e 20 3d 20 31 30 30 20 20 23 20 6e 62 20 62 69 | #%%.parameters..n.=.100..#.nb.bi |
12640 | 6e 73 0a 0a 23 20 62 69 6e 20 70 6f 73 69 74 69 6f 6e 73 0a 78 20 3d 20 6e 70 2e 61 72 61 6e 67 | ns..#.bin.positions.x.=.np.arang |
12660 | 65 28 6e 2c 20 64 74 79 70 65 3d 6e 70 2e 66 6c 6f 61 74 36 34 29 0a 0a 23 20 47 61 75 73 73 69 | e(n,.dtype=np.float64)..#.Gaussi |
12680 | 61 6e 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 61 20 3d 20 67 61 75 73 73 28 6e 2c 20 6d 3d | an.distributions.a.=.gauss(n,.m= |
126a0 | 32 30 2c 20 73 3d 35 29 20 20 23 20 6d 3d 20 6d 65 61 6e 2c 20 73 3d 20 73 74 64 0a 62 20 3d 20 | 20,.s=5)..#.m=.mean,.s=.std.b.=. |
126c0 | 67 61 75 73 73 28 6e 2c 20 6d 3d 36 30 2c 20 73 3d 31 30 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 | gauss(n,.m=60,.s=10)..#.loss.mat |
126e0 | 72 69 78 0a 4d 20 3d 20 6f 74 2e 64 69 73 74 28 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 | rix.M.=.ot.dist(x.reshape((n,.1) |
12700 | 29 2c 20 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 | ),.x.reshape((n,.1))).M./=.M.max |
12720 | 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ()..############################ |
12740 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
12760 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 64 69 73 74 72 69 | ##################.#.Plot.distri |
12780 | 62 75 74 69 6f 6e 73 20 61 6e 64 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 23 20 2d 2d 2d 2d 2d 2d | butions.and.loss.matrix.#.------ |
127a0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 | ----------------------------..#% |
127c0 | 25 20 70 6c 6f 74 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 70 6c 2e 66 69 67 | %.plot.the.distributions..pl.fig |
127e0 | 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 29 29 0a 70 6c 2e 70 6c 6f 74 | ure(1,.figsize=(6.4,.3)).pl.plot |
12800 | 28 78 2c 20 61 2c 20 27 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 64 69 73 74 72 69 | (x,.a,.'b',.label='Source.distri |
12820 | 62 75 74 69 6f 6e 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 2c 20 27 72 27 2c 20 6c 61 62 65 | bution').pl.plot(x,.b,.'r',.labe |
12840 | 6c 3d 27 54 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 27 29 0a 70 6c 2e 6c 65 67 65 | l='Target.distribution').pl.lege |
12860 | 6e 64 28 29 0a 0a 23 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 | nd()..#.plot.distributions.and.l |
12880 | 6f 73 73 20 6d 61 74 72 69 78 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 | oss.matrix..pl.figure(2,.figsize |
128a0 | 3d 28 35 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 | =(5,.5)).ot.plot.plot1D_mat(a,.b |
128c0 | 2c 20 4d 2c 20 27 43 6f 73 74 20 6d 61 74 72 69 78 20 4d 27 29 0a 0a 23 23 23 23 23 23 23 23 23 | ,.M,.'Cost.matrix.M')..######### |
128e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
12900 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
12920 | 23 23 23 23 23 0a 23 20 53 6f 6c 76 65 20 53 63 72 65 65 6e 6b 68 6f 72 6e 0a 23 20 2d 2d 2d 2d | #####.#.Solve.Screenkhorn.#.---- |
12940 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 20 53 63 72 65 65 6e 6b 68 6f | -------------------..#.Screenkho |
12960 | 72 6e 0a 6c 61 6d 62 64 20 3d 20 32 65 2d 30 33 20 20 23 20 65 6e 74 72 6f 70 79 20 70 61 72 61 | rn.lambd.=.2e-03..#.entropy.para |
12980 | 6d 65 74 65 72 0a 6e 73 5f 62 75 64 67 65 74 20 3d 20 33 30 20 20 23 20 62 75 64 67 65 74 20 6e | meter.ns_budget.=.30..#.budget.n |
129a0 | 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 73 20 74 6f 20 62 65 20 6b 65 65 70 65 64 20 69 6e 20 | umber.of.points.to.be.keeped.in. |
129c0 | 74 68 65 20 73 6f 75 72 63 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 0a 6e 74 5f 62 75 64 67 65 | the.source.distribution.nt_budge |
129e0 | 74 20 3d 20 33 30 20 20 23 20 62 75 64 67 65 74 20 6e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 | t.=.30..#.budget.number.of.point |
12a00 | 73 20 74 6f 20 62 65 20 6b 65 65 70 65 64 20 69 6e 20 74 68 65 20 74 61 72 67 65 74 20 64 69 73 | s.to.be.keeped.in.the.target.dis |
12a20 | 74 72 69 62 75 74 69 6f 6e 0a 0a 47 5f 73 63 72 65 65 6e 20 3d 20 73 63 72 65 65 6e 6b 68 6f 72 | tribution..G_screen.=.screenkhor |
12a40 | 6e 28 61 2c 20 62 2c 20 4d 2c 20 6c 61 6d 62 64 2c 20 6e 73 5f 62 75 64 67 65 74 2c 20 6e 74 5f | n(a,.b,.M,.lambd,.ns_budget,.nt_ |
12a60 | 62 75 64 67 65 74 2c 20 75 6e 69 66 6f 72 6d 3d 46 61 6c 73 65 2c 20 72 65 73 74 72 69 63 74 65 | budget,.uniform=False,.restricte |
12a80 | 64 3d 54 72 75 65 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 70 6c 2e 66 69 67 75 72 65 28 | d=True,.verbose=True).pl.figure( |
12aa0 | 34 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 | 4,.figsize=(5,.5)).ot.plot.plot1 |
12ac0 | 44 5f 6d 61 74 28 61 2c 20 62 2c 20 47 5f 73 63 72 65 65 6e 2c 20 27 4f 54 20 6d 61 74 72 69 78 | D_mat(a,.b,.G_screen,.'OT.matrix |
12ae0 | 20 53 63 72 65 65 6e 6b 68 6f 72 6e 27 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 | .Screenkhorn').pl.show().PK..... |
12b00 | 00 00 00 7c 68 3a 4f 7a 2e b5 2b 65 09 00 00 65 09 00 00 13 00 00 00 70 6c 6f 74 5f 63 6f 6d 70 | ...|h:Oz..+e...e.......plot_comp |
12b20 | 75 74 65 5f 65 6d 64 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a | ute_emd.py#.-*-.coding:.utf-8.-* |
12b40 | 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 50 6c 6f 74 20 6d 75 6c | -.""".=================.Plot.mul |
12b60 | 74 69 70 6c 65 20 45 4d 44 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 53 68 6f | tiple.EMD.=================..Sho |
12b80 | 77 73 20 68 6f 77 20 74 6f 20 63 6f 6d 70 75 74 65 20 6d 75 6c 74 69 70 6c 65 20 45 4d 44 20 61 | ws.how.to.compute.multiple.EMD.a |
12ba0 | 6e 64 20 53 69 6e 6b 68 6f 72 6e 20 77 69 74 68 20 74 77 6f 20 64 69 66 66 65 72 6e 74 0a 67 72 | nd.Sinkhorn.with.two.differnt.gr |
12bc0 | 6f 75 6e 64 20 6d 65 74 72 69 63 73 20 61 6e 64 20 70 6c 6f 74 20 74 68 65 69 72 20 76 61 6c 75 | ound.metrics.and.plot.their.valu |
12be0 | 65 73 20 66 6f 72 20 64 69 66 66 65 65 6e 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 2e 0a 0a | es.for.diffeent.distributions... |
12c00 | 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 | ."""..#.Author:.Remi.Flamary.<re |
12c20 | 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 | mi.flamary@unice.fr>.#.#.License |
12c40 | 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e | :.MIT.License..import.numpy.as.n |
12c60 | 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a | p.import.matplotlib.pylab.as.pl. |
12c80 | 69 6d 70 6f 72 74 20 6f 74 0a 66 72 6f 6d 20 6f 74 2e 64 61 74 61 73 65 74 73 20 69 6d 70 6f 72 | import.ot.from.ot.datasets.impor |
12ca0 | 74 20 6d 61 6b 65 5f 31 44 5f 67 61 75 73 73 20 61 73 20 67 61 75 73 73 0a 0a 0a 23 23 23 23 23 | t.make_1D_gauss.as.gauss...##### |
12cc0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
12ce0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
12d00 | 23 23 23 23 23 23 23 23 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d | #########.#.Generate.data.#.---- |
12d20 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 6e 20 3d 20 31 | ---------..#%%.parameters..n.=.1 |
12d40 | 30 30 20 20 23 20 6e 62 20 62 69 6e 73 0a 6e 5f 74 61 72 67 65 74 20 3d 20 35 30 20 20 23 20 6e | 00..#.nb.bins.n_target.=.50..#.n |
12d60 | 62 20 74 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 0a 23 20 62 69 6e 20 70 | b.target.distributions...#.bin.p |
12d80 | 6f 73 69 74 69 6f 6e 73 0a 78 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 2c 20 64 74 79 70 65 3d | ositions.x.=.np.arange(n,.dtype= |
12da0 | 6e 70 2e 66 6c 6f 61 74 36 34 29 0a 0a 6c 73 74 5f 6d 20 3d 20 6e 70 2e 6c 69 6e 73 70 61 63 65 | np.float64)..lst_m.=.np.linspace |
12dc0 | 28 32 30 2c 20 39 30 2c 20 6e 5f 74 61 72 67 65 74 29 0a 0a 23 20 47 61 75 73 73 69 61 6e 20 64 | (20,.90,.n_target)..#.Gaussian.d |
12de0 | 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 61 20 3d 20 67 61 75 73 73 28 6e 2c 20 6d 3d 32 30 2c 20 | istributions.a.=.gauss(n,.m=20,. |
12e00 | 73 3d 35 29 20 20 23 20 6d 3d 20 6d 65 61 6e 2c 20 73 3d 20 73 74 64 0a 0a 42 20 3d 20 6e 70 2e | s=5)..#.m=.mean,.s=.std..B.=.np. |
12e20 | 7a 65 72 6f 73 28 28 6e 2c 20 6e 5f 74 61 72 67 65 74 29 29 0a 0a 66 6f 72 20 69 2c 20 6d 20 69 | zeros((n,.n_target))..for.i,.m.i |
12e40 | 6e 20 65 6e 75 6d 65 72 61 74 65 28 6c 73 74 5f 6d 29 3a 0a 20 20 20 20 42 5b 3a 2c 20 69 5d 20 | n.enumerate(lst_m):.....B[:,.i]. |
12e60 | 3d 20 67 61 75 73 73 28 6e 2c 20 6d 3d 6d 2c 20 73 3d 35 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 | =.gauss(n,.m=m,.s=5)..#.loss.mat |
12e80 | 72 69 78 20 61 6e 64 20 6e 6f 72 6d 61 6c 69 7a 61 74 69 6f 6e 0a 4d 20 3d 20 6f 74 2e 64 69 73 | rix.and.normalization.M.=.ot.dis |
12ea0 | 74 28 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 2c 20 78 2e 72 65 73 68 61 70 65 28 28 | t(x.reshape((n,.1)),.x.reshape(( |
12ec0 | 6e 2c 20 31 29 29 2c 20 27 65 75 63 6c 69 64 65 61 6e 27 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 | n,.1)),.'euclidean').M./=.M.max( |
12ee0 | 29 0a 4d 32 20 3d 20 6f 74 2e 64 69 73 74 28 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 | ).M2.=.ot.dist(x.reshape((n,.1)) |
12f00 | 2c 20 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 2c 20 27 73 71 65 75 63 6c 69 64 65 61 | ,.x.reshape((n,.1)),.'sqeuclidea |
12f20 | 6e 27 29 0a 4d 32 20 2f 3d 20 4d 32 2e 6d 61 78 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 | n').M2./=.M2.max()..############ |
12f40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
12f60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
12f80 | 23 23 0a 23 20 50 6c 6f 74 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 | ##.#.Plot.data.#.---------..#%%. |
12fa0 | 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 |
12fc0 | 65 28 31 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 31 2c 20 31 29 0a 70 6c 2e 70 6c 6f 74 | e(1).pl.subplot(2,.1,.1).pl.plot |
12fe0 | 28 78 2c 20 61 2c 20 27 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 64 69 73 74 72 69 | (x,.a,.'b',.label='Source.distri |
13000 | 62 75 74 69 6f 6e 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 20 64 69 73 74 72 69 | bution').pl.title('Source.distri |
13020 | 62 75 74 69 6f 6e 27 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 31 2c 20 32 29 0a 70 6c 2e | bution').pl.subplot(2,.1,.2).pl. |
13040 | 70 6c 6f 74 28 78 2c 20 42 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 64 69 73 74 72 69 62 | plot(x,.B,.label='Target.distrib |
13060 | 75 74 69 6f 6e 73 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 61 72 67 65 74 20 64 69 73 74 72 69 | utions').pl.title('Target.distri |
13080 | 62 75 74 69 6f 6e 73 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 0a 23 23 | butions').pl.tight_layout()...## |
130a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
130c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
130e0 | 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 43 6f 6d 70 75 74 65 20 45 4d 44 20 66 6f 72 20 74 | ############.#.Compute.EMD.for.t |
13100 | 68 65 20 64 69 66 66 65 72 65 6e 74 20 6c 6f 73 73 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | he.different.losses.#.---------- |
13120 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 | --------------------------..#%%. |
13140 | 43 6f 6d 70 75 74 65 20 61 6e 64 20 70 6c 6f 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 61 | Compute.and.plot.distributions.a |
13160 | 6e 64 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 0a 64 5f 65 6d 64 20 3d 20 6f 74 2e 65 6d 64 32 28 | nd.loss.matrix..d_emd.=.ot.emd2( |
13180 | 61 2c 20 42 2c 20 4d 29 20 20 23 20 64 69 72 65 63 74 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f | a,.B,.M)..#.direct.computation.o |
131a0 | 66 20 45 4d 44 0a 64 5f 65 6d 64 32 20 3d 20 6f 74 2e 65 6d 64 32 28 61 2c 20 42 2c 20 4d 32 29 | f.EMD.d_emd2.=.ot.emd2(a,.B,.M2) |
131c0 | 20 20 23 20 64 69 72 65 63 74 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66 20 45 4d 44 20 77 69 | ..#.direct.computation.of.EMD.wi |
131e0 | 74 68 20 6c 6f 73 73 20 4d 32 0a 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 29 0a 70 6c 2e 70 6c 6f | th.loss.M2...pl.figure(2).pl.plo |
13200 | 74 28 64 5f 65 6d 64 2c 20 6c 61 62 65 6c 3d 27 45 75 63 6c 69 64 65 61 6e 20 45 4d 44 27 29 0a | t(d_emd,.label='Euclidean.EMD'). |
13220 | 70 6c 2e 70 6c 6f 74 28 64 5f 65 6d 64 32 2c 20 6c 61 62 65 6c 3d 27 53 71 75 61 72 65 64 20 45 | pl.plot(d_emd2,.label='Squared.E |
13240 | 75 63 6c 69 64 65 61 6e 20 45 4d 44 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 45 4d 44 20 64 69 73 | uclidean.EMD').pl.title('EMD.dis |
13260 | 74 61 6e 63 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 | tances').pl.legend()..########## |
13280 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
132a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
132c0 | 23 23 23 23 0a 23 20 43 6f 6d 70 75 74 65 20 53 69 6e 6b 68 6f 72 6e 20 66 6f 72 20 74 68 65 20 | ####.#.Compute.Sinkhorn.for.the. |
132e0 | 64 69 66 66 65 72 65 6e 74 20 6c 6f 73 73 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | different.losses.#.------------- |
13300 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 | ----------------------------..#% |
13320 | 25 0a 72 65 67 20 3d 20 31 65 2d 32 0a 64 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 2e 73 69 6e | %.reg.=.1e-2.d_sinkhorn.=.ot.sin |
13340 | 6b 68 6f 72 6e 32 28 61 2c 20 42 2c 20 4d 2c 20 72 65 67 29 0a 64 5f 73 69 6e 6b 68 6f 72 6e 32 | khorn2(a,.B,.M,.reg).d_sinkhorn2 |
13360 | 20 3d 20 6f 74 2e 73 69 6e 6b 68 6f 72 6e 32 28 61 2c 20 42 2c 20 4d 32 2c 20 72 65 67 29 0a 0a | .=.ot.sinkhorn2(a,.B,.M2,.reg).. |
13380 | 70 6c 2e 66 69 67 75 72 65 28 32 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 2e 70 6c 6f 74 28 64 5f | pl.figure(2).pl.clf().pl.plot(d_ |
133a0 | 65 6d 64 2c 20 6c 61 62 65 6c 3d 27 45 75 63 6c 69 64 65 61 6e 20 45 4d 44 27 29 0a 70 6c 2e 70 | emd,.label='Euclidean.EMD').pl.p |
133c0 | 6c 6f 74 28 64 5f 65 6d 64 32 2c 20 6c 61 62 65 6c 3d 27 53 71 75 61 72 65 64 20 45 75 63 6c 69 | lot(d_emd2,.label='Squared.Eucli |
133e0 | 64 65 61 6e 20 45 4d 44 27 29 0a 70 6c 2e 70 6c 6f 74 28 64 5f 73 69 6e 6b 68 6f 72 6e 2c 20 27 | dean.EMD').pl.plot(d_sinkhorn,.' |
13400 | 2b 27 2c 20 6c 61 62 65 6c 3d 27 45 75 63 6c 69 64 65 61 6e 20 53 69 6e 6b 68 6f 72 6e 27 29 0a | +',.label='Euclidean.Sinkhorn'). |
13420 | 70 6c 2e 70 6c 6f 74 28 64 5f 73 69 6e 6b 68 6f 72 6e 32 2c 20 27 2b 27 2c 20 6c 61 62 65 6c 3d | pl.plot(d_sinkhorn2,.'+',.label= |
13440 | 27 53 71 75 61 72 65 64 20 45 75 63 6c 69 64 65 61 6e 20 53 69 6e 6b 68 6f 72 6e 27 29 0a 70 6c | 'Squared.Euclidean.Sinkhorn').pl |
13460 | 2e 74 69 74 6c 65 28 27 45 4d 44 20 64 69 73 74 61 6e 63 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e | .title('EMD.distances').pl.legen |
13480 | 64 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 7c b0 94 50 09 53 8e | d()..pl.show().PK........|..P.S. |
134a0 | 8d 14 16 00 00 14 16 00 00 12 00 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 6a 63 70 6f 74 2e 70 79 23 | .............plot_otda_jcpot.py# |
134c0 | 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d | .-*-.coding:.utf-8.-*-.""".===== |
134e0 | 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 6d 75 6c 74 69 | ===================.OT.for.multi |
13500 | 2d 73 6f 75 72 63 65 20 74 61 72 67 65 74 20 73 68 69 66 74 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | -source.target.shift.=========== |
13520 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 6e 74 72 | =============..This.example.intr |
13540 | 6f 64 75 63 65 73 20 61 20 74 61 72 67 65 74 20 73 68 69 66 74 20 70 72 6f 62 6c 65 6d 20 77 69 | oduces.a.target.shift.problem.wi |
13560 | 74 68 20 74 77 6f 20 32 44 20 73 6f 75 72 63 65 20 61 6e 64 20 31 20 74 61 72 67 65 74 20 64 6f | th.two.2D.source.and.1.target.do |
13580 | 6d 61 69 6e 2e 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 73 3a 20 52 65 6d 69 20 46 6c 61 6d | main..."""..#.Authors:.Remi.Flam |
135a0 | 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 20 20 20 | ary.<remi.flamary@unice.fr>.#... |
135c0 | 20 20 20 20 20 20 20 49 65 76 67 65 6e 20 52 65 64 6b 6f 20 3c 69 65 76 67 65 6e 2e 72 65 64 6b | .......Ievgen.Redko.<ievgen.redk |
135e0 | 6f 40 75 6e 69 76 2d 73 74 2d 65 74 69 65 6e 6e 65 2e 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 | o@univ-st-etienne.fr>.#.#.Licens |
13600 | 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 70 79 6c 61 62 20 61 73 20 | e:.MIT.License..import.pylab.as. |
13620 | 70 6c 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 6f 74 0a | pl.import.numpy.as.np.import.ot. |
13640 | 66 72 6f 6d 20 6f 74 2e 64 61 74 61 73 65 74 73 20 69 6d 70 6f 72 74 20 6d 61 6b 65 5f 64 61 74 | from.ot.datasets.import.make_dat |
13660 | 61 5f 63 6c 61 73 73 69 66 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | a_classif..##################### |
13680 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
136a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 47 65 6e 65 | #########################.#.Gene |
136c0 | 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 6e 20 3d 20 35 30 | rate.data.#.-------------.n.=.50 |
136e0 | 0a 73 69 67 6d 61 20 3d 20 30 2e 33 0a 6e 70 2e 72 61 6e 64 6f 6d 2e 73 65 65 64 28 31 39 38 35 | .sigma.=.0.3.np.random.seed(1985 |
13700 | 29 0a 0a 70 31 20 3d 20 2e 32 0a 64 65 63 31 20 3d 20 5b 30 2c 20 32 5d 0a 0a 70 32 20 3d 20 2e | )..p1.=..2.dec1.=.[0,.2]..p2.=.. |
13720 | 39 0a 64 65 63 32 20 3d 20 5b 30 2c 20 2d 32 5d 0a 0a 70 74 20 3d 20 2e 34 0a 64 65 63 74 20 3d | 9.dec2.=.[0,.-2]..pt.=..4.dect.= |
13740 | 20 5b 34 2c 20 30 5d 0a 0a 78 73 31 2c 20 79 73 31 20 3d 20 6d 61 6b 65 5f 64 61 74 61 5f 63 6c | .[4,.0]..xs1,.ys1.=.make_data_cl |
13760 | 61 73 73 69 66 28 27 32 67 61 75 73 73 5f 70 72 6f 70 27 2c 20 6e 2c 20 6e 7a 3d 73 69 67 6d 61 | assif('2gauss_prop',.n,.nz=sigma |
13780 | 2c 20 70 3d 70 31 2c 20 62 69 61 73 3d 64 65 63 31 29 0a 78 73 32 2c 20 79 73 32 20 3d 20 6d 61 | ,.p=p1,.bias=dec1).xs2,.ys2.=.ma |
137a0 | 6b 65 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 27 32 67 61 75 73 73 5f 70 72 6f 70 27 2c 20 6e | ke_data_classif('2gauss_prop',.n |
137c0 | 20 2b 20 31 2c 20 6e 7a 3d 73 69 67 6d 61 2c 20 70 3d 70 32 2c 20 62 69 61 73 3d 64 65 63 32 29 | .+.1,.nz=sigma,.p=p2,.bias=dec2) |
137e0 | 0a 78 74 2c 20 79 74 20 3d 20 6d 61 6b 65 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 27 32 67 61 | .xt,.yt.=.make_data_classif('2ga |
13800 | 75 73 73 5f 70 72 6f 70 27 2c 20 6e 2c 20 6e 7a 3d 73 69 67 6d 61 2c 20 70 3d 70 74 2c 20 62 69 | uss_prop',.n,.nz=sigma,.p=pt,.bi |
13820 | 61 73 3d 64 65 63 74 29 0a 0a 61 6c 6c 5f 58 72 20 3d 20 5b 78 73 31 2c 20 78 73 32 5d 0a 61 6c | as=dect)..all_Xr.=.[xs1,.xs2].al |
13840 | 6c 5f 59 72 20 3d 20 5b 79 73 31 2c 20 79 73 32 5d 0a 23 20 25 25 0a 0a 64 61 20 3d 20 31 2e 35 | l_Yr.=.[ys1,.ys2].#.%%..da.=.1.5 |
13860 | 0a 0a 0a 64 65 66 20 70 6c 6f 74 5f 61 78 28 64 65 63 2c 20 6e 61 6d 65 29 3a 0a 20 20 20 20 70 | ...def.plot_ax(dec,.name):.....p |
13880 | 6c 2e 70 6c 6f 74 28 5b 64 65 63 5b 30 5d 2c 20 64 65 63 5b 30 5d 5d 2c 20 5b 64 65 63 5b 31 5d | l.plot([dec[0],.dec[0]],.[dec[1] |
138a0 | 20 2d 20 64 61 2c 20 64 65 63 5b 31 5d 20 2b 20 64 61 5d 2c 20 27 6b 27 2c 20 61 6c 70 68 61 3d | .-.da,.dec[1].+.da],.'k',.alpha= |
138c0 | 30 2e 35 29 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 28 5b 64 65 63 5b 30 5d 20 2d 20 64 61 2c 20 64 | 0.5).....pl.plot([dec[0].-.da,.d |
138e0 | 65 63 5b 30 5d 20 2b 20 64 61 5d 2c 20 5b 64 65 63 5b 31 5d 2c 20 64 65 63 5b 31 5d 5d 2c 20 27 | ec[0].+.da],.[dec[1],.dec[1]],.' |
13900 | 6b 27 2c 20 61 6c 70 68 61 3d 30 2e 35 29 0a 20 20 20 20 70 6c 2e 74 65 78 74 28 64 65 63 5b 30 | k',.alpha=0.5).....pl.text(dec[0 |
13920 | 5d 20 2d 20 2e 35 2c 20 64 65 63 5b 31 5d 20 2b 20 32 2c 20 6e 61 6d 65 29 0a 0a 0a 23 23 23 23 | ].-..5,.dec[1].+.2,.name)...#### |
13940 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
13960 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
13980 | 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 67 20 31 20 3a 20 70 6c 6f 74 73 20 73 6f 75 72 63 | ##########.#.Fig.1.:.plots.sourc |
139a0 | 65 20 61 6e 64 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d | e.and.target.samples.#.--------- |
139c0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a | ------------------------------.. |
139e0 | 70 6c 2e 66 69 67 75 72 65 28 31 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 6f 74 5f 61 78 28 64 65 | pl.figure(1).pl.clf().plot_ax(de |
13a00 | 63 31 2c 20 27 53 6f 75 72 63 65 20 31 27 29 0a 70 6c 6f 74 5f 61 78 28 64 65 63 32 2c 20 27 53 | c1,.'Source.1').plot_ax(dec2,.'S |
13a20 | 6f 75 72 63 65 20 32 27 29 0a 70 6c 6f 74 5f 61 78 28 64 65 63 74 2c 20 27 54 61 72 67 65 74 27 | ource.2').plot_ax(dect,.'Target' |
13a40 | 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 73 31 5b 3a 2c 20 30 5d 2c 20 78 73 31 5b 3a 2c 20 31 | ).pl.scatter(xs1[:,.0],.xs1[:,.1 |
13a60 | 5d 2c 20 63 3d 79 73 31 2c 20 73 3d 33 35 2c 20 6d 61 72 6b 65 72 3d 27 78 27 2c 20 63 6d 61 70 | ],.c=ys1,.s=35,.marker='x',.cmap |
13a80 | 3d 27 53 65 74 31 27 2c 20 76 6d 61 78 3d 39 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 | ='Set1',.vmax=9,............labe |
13aa0 | 6c 3d 27 53 6f 75 72 63 65 20 31 20 28 7b 3a 31 2e 32 66 7d 2c 20 7b 3a 31 2e 32 66 7d 29 27 2e | l='Source.1.({:1.2f},.{:1.2f})'. |
13ac0 | 66 6f 72 6d 61 74 28 31 20 2d 20 70 31 2c 20 70 31 29 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 | format(1.-.p1,.p1)).pl.scatter(x |
13ae0 | 73 32 5b 3a 2c 20 30 5d 2c 20 78 73 32 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 32 2c 20 73 3d 33 35 | s2[:,.0],.xs2[:,.1],.c=ys2,.s=35 |
13b00 | 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 63 6d 61 70 3d 27 53 65 74 31 27 2c 20 76 6d 61 78 3d | ,.marker='+',.cmap='Set1',.vmax= |
13b20 | 39 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 32 20 28 7b | 9,............label='Source.2.({ |
13b40 | 3a 31 2e 32 66 7d 2c 20 7b 3a 31 2e 32 66 7d 29 27 2e 66 6f 72 6d 61 74 28 31 20 2d 20 70 32 2c | :1.2f},.{:1.2f})'.format(1.-.p2, |
13b60 | 20 70 32 29 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c | .p2)).pl.scatter(xt[:,.0],.xt[:, |
13b80 | 20 31 5d 2c 20 63 3d 79 74 2c 20 73 3d 33 35 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 20 63 6d 61 | .1],.c=yt,.s=35,.marker='o',.cma |
13ba0 | 70 3d 27 53 65 74 31 27 2c 20 76 6d 61 78 3d 39 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 | p='Set1',.vmax=9,............lab |
13bc0 | 65 6c 3d 27 54 61 72 67 65 74 20 28 7b 3a 31 2e 32 66 7d 2c 20 7b 3a 31 2e 32 66 7d 29 27 2e 66 | el='Target.({:1.2f},.{:1.2f})'.f |
13be0 | 6f 72 6d 61 74 28 31 20 2d 20 70 74 2c 20 70 74 29 29 0a 70 6c 2e 74 69 74 6c 65 28 27 44 61 74 | ormat(1.-.pt,.pt)).pl.title('Dat |
13c00 | 61 27 29 0a 0a 70 6c 2e 6c 65 67 65 6e 64 28 29 0a 70 6c 2e 61 78 69 73 28 27 65 71 75 61 6c 27 | a')..pl.legend().pl.axis('equal' |
13c20 | 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ).pl.axis('off')..############## |
13c40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
13c60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
13c80 | 0a 23 20 49 6e 73 74 61 6e 74 69 61 74 65 20 53 69 6e 6b 68 6f 72 6e 20 74 72 61 6e 73 70 6f 72 | .#.Instantiate.Sinkhorn.transpor |
13ca0 | 74 20 61 6c 67 6f 72 69 74 68 6d 20 61 6e 64 20 66 69 74 20 74 68 65 6d 20 66 6f 72 20 61 6c 6c | t.algorithm.and.fit.them.for.all |
13cc0 | 20 73 6f 75 72 63 65 20 64 6f 6d 61 69 6e 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | .source.domains.#.-------------- |
13ce0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
13d00 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 6f | ------------------------------.o |
13d20 | 74 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 | t_sinkhorn.=.ot.da.SinkhornTrans |
13d40 | 70 6f 72 74 28 72 65 67 5f 65 3d 31 65 2d 31 2c 20 6d 65 74 72 69 63 3d 27 73 71 65 75 63 6c 69 | port(reg_e=1e-1,.metric='sqeucli |
13d60 | 64 65 61 6e 27 29 0a 0a 0a 64 65 66 20 70 72 69 6e 74 5f 47 28 47 2c 20 78 73 2c 20 79 73 2c 20 | dean')...def.print_G(G,.xs,.ys,. |
13d80 | 78 74 29 3a 0a 20 20 20 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 47 2e 73 68 61 70 65 5b | xt):.....for.i.in.range(G.shape[ |
13da0 | 30 5d 29 3a 0a 20 20 20 20 20 20 20 20 66 6f 72 20 6a 20 69 6e 20 72 61 6e 67 65 28 47 2e 73 68 | 0]):.........for.j.in.range(G.sh |
13dc0 | 61 70 65 5b 31 5d 29 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 47 5b 69 2c 20 6a 5d 20 | ape[1]):.............if.G[i,.j]. |
13de0 | 3e 20 35 65 2d 34 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 79 73 5b 69 5d | >.5e-4:.................if.ys[i] |
13e00 | 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 20 3d 20 27 62 27 0a 20 20 | :.....................c.=.'b'... |
13e20 | 20 20 20 20 20 20 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 | ..............else:............. |
13e40 | 20 20 20 20 20 20 20 20 63 20 3d 20 27 72 27 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ........c.=.'r'................. |
13e60 | 70 6c 2e 70 6c 6f 74 28 5b 78 73 5b 69 2c 20 30 5d 2c 20 78 74 5b 6a 2c 20 30 5d 5d 2c 20 5b 78 | pl.plot([xs[i,.0],.xt[j,.0]],.[x |
13e80 | 73 5b 69 2c 20 31 5d 2c 20 78 74 5b 6a 2c 20 31 5d 5d 2c 20 63 2c 20 61 6c 70 68 61 3d 2e 32 29 | s[i,.1],.xt[j,.1]],.c,.alpha=.2) |
13ea0 | 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ...############################# |
13ec0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
13ee0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 67 20 32 20 3a 20 70 6c 6f 74 | #################.#.Fig.2.:.plot |
13f00 | 20 6f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 73 20 61 6e 64 20 74 72 61 6e 73 70 6f 72 74 | .optimal.couplings.and.transport |
13f20 | 65 64 20 73 61 6d 70 6c 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | ed.samples.#.------------------- |
13f40 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
13f60 | 2d 2d 2d 0a 70 6c 2e 66 69 67 75 72 65 28 32 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 6f 74 5f 61 | ---.pl.figure(2).pl.clf().plot_a |
13f80 | 78 28 64 65 63 31 2c 20 27 53 6f 75 72 63 65 20 31 27 29 0a 70 6c 6f 74 5f 61 78 28 64 65 63 32 | x(dec1,.'Source.1').plot_ax(dec2 |
13fa0 | 2c 20 27 53 6f 75 72 63 65 20 32 27 29 0a 70 6c 6f 74 5f 61 78 28 64 65 63 74 2c 20 27 54 61 72 | ,.'Source.2').plot_ax(dect,.'Tar |
13fc0 | 67 65 74 27 29 0a 70 72 69 6e 74 5f 47 28 6f 74 5f 73 69 6e 6b 68 6f 72 6e 2e 66 69 74 28 58 73 | get').print_G(ot_sinkhorn.fit(Xs |
13fe0 | 3d 78 73 31 2c 20 58 74 3d 78 74 29 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 78 73 31 2c 20 79 73 31 | =xs1,.Xt=xt).coupling_,.xs1,.ys1 |
14000 | 2c 20 78 74 29 0a 70 72 69 6e 74 5f 47 28 6f 74 5f 73 69 6e 6b 68 6f 72 6e 2e 66 69 74 28 58 73 | ,.xt).print_G(ot_sinkhorn.fit(Xs |
14020 | 3d 78 73 32 2c 20 58 74 3d 78 74 29 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 78 73 32 2c 20 79 73 32 | =xs2,.Xt=xt).coupling_,.xs2,.ys2 |
14040 | 2c 20 78 74 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 73 31 5b 3a 2c 20 30 5d 2c 20 78 73 31 5b | ,.xt).pl.scatter(xs1[:,.0],.xs1[ |
14060 | 3a 2c 20 31 5d 2c 20 63 3d 79 73 31 2c 20 73 3d 33 35 2c 20 6d 61 72 6b 65 72 3d 27 78 27 2c 20 | :,.1],.c=ys1,.s=35,.marker='x',. |
14080 | 63 6d 61 70 3d 27 53 65 74 31 27 2c 20 76 6d 61 78 3d 39 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 | cmap='Set1',.vmax=9).pl.scatter( |
140a0 | 78 73 32 5b 3a 2c 20 30 5d 2c 20 78 73 32 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 32 2c 20 73 3d 33 | xs2[:,.0],.xs2[:,.1],.c=ys2,.s=3 |
140c0 | 35 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 63 6d 61 70 3d 27 53 65 74 31 27 2c 20 76 6d 61 78 | 5,.marker='+',.cmap='Set1',.vmax |
140e0 | 3d 39 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 | =9).pl.scatter(xt[:,.0],.xt[:,.1 |
14100 | 5d 2c 20 63 3d 79 74 2c 20 73 3d 33 35 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 20 63 6d 61 70 3d | ],.c=yt,.s=35,.marker='o',.cmap= |
14120 | 27 53 65 74 31 27 2c 20 76 6d 61 78 3d 39 29 0a 0a 70 6c 2e 70 6c 6f 74 28 5b 5d 2c 20 5b 5d 2c | 'Set1',.vmax=9)..pl.plot([],.[], |
14140 | 20 27 72 27 2c 20 61 6c 70 68 61 3d 2e 32 2c 20 6c 61 62 65 6c 3d 27 4d 61 73 73 20 66 72 6f 6d | .'r',.alpha=.2,.label='Mass.from |
14160 | 20 43 6c 61 73 73 20 31 27 29 0a 70 6c 2e 70 6c 6f 74 28 5b 5d 2c 20 5b 5d 2c 20 27 62 27 2c 20 | .Class.1').pl.plot([],.[],.'b',. |
14180 | 61 6c 70 68 61 3d 2e 32 2c 20 6c 61 62 65 6c 3d 27 4d 61 73 73 20 66 72 6f 6d 20 43 6c 61 73 73 | alpha=.2,.label='Mass.from.Class |
141a0 | 20 32 27 29 0a 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6e 64 65 70 65 6e 64 65 6e 74 20 4f 54 27 29 | .2')..pl.title('Independent.OT') |
141c0 | 0a 0a 70 6c 2e 6c 65 67 65 6e 64 28 29 0a 70 6c 2e 61 78 69 73 28 27 65 71 75 61 6c 27 29 0a 70 | ..pl.legend().pl.axis('equal').p |
141e0 | 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | l.axis('off')..################# |
14200 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
14220 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 | #############################.#. |
14240 | 49 6e 73 74 61 6e 74 69 61 74 65 20 4a 43 50 4f 54 20 61 64 61 70 74 61 74 69 6f 6e 20 61 6c 67 | Instantiate.JCPOT.adaptation.alg |
14260 | 6f 72 69 74 68 6d 20 61 6e 64 20 66 69 74 20 69 74 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | orithm.and.fit.it.#.------------ |
14280 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
142a0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
142c0 | 0a 6f 74 64 61 20 3d 20 6f 74 2e 64 61 2e 4a 43 50 4f 54 54 72 61 6e 73 70 6f 72 74 28 72 65 67 | .otda.=.ot.da.JCPOTTransport(reg |
142e0 | 5f 65 3d 31 2c 20 6d 61 78 5f 69 74 65 72 3d 31 30 30 30 2c 20 6d 65 74 72 69 63 3d 27 73 71 65 | _e=1,.max_iter=1000,.metric='sqe |
14300 | 75 63 6c 69 64 65 61 6e 27 2c 20 74 6f 6c 3d 31 65 2d 39 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 | uclidean',.tol=1e-9,.verbose=Tru |
14320 | 65 2c 20 6c 6f 67 3d 54 72 75 65 29 0a 6f 74 64 61 2e 66 69 74 28 61 6c 6c 5f 58 72 2c 20 61 6c | e,.log=True).otda.fit(all_Xr,.al |
14340 | 6c 5f 59 72 2c 20 78 74 29 0a 0a 77 73 31 20 3d 20 6f 74 64 61 2e 70 72 6f 70 6f 72 74 69 6f 6e | l_Yr,.xt)..ws1.=.otda.proportion |
14360 | 73 5f 2e 64 6f 74 28 6f 74 64 61 2e 6c 6f 67 5f 5b 27 44 32 27 5d 5b 30 5d 29 0a 77 73 32 20 3d | s_.dot(otda.log_['D2'][0]).ws2.= |
14380 | 20 6f 74 64 61 2e 70 72 6f 70 6f 72 74 69 6f 6e 73 5f 2e 64 6f 74 28 6f 74 64 61 2e 6c 6f 67 5f | .otda.proportions_.dot(otda.log_ |
143a0 | 5b 27 44 32 27 5d 5b 31 5d 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 33 29 0a 70 6c 2e 63 6c 66 28 | ['D2'][1])..pl.figure(3).pl.clf( |
143c0 | 29 0a 70 6c 6f 74 5f 61 78 28 64 65 63 31 2c 20 27 53 6f 75 72 63 65 20 31 27 29 0a 70 6c 6f 74 | ).plot_ax(dec1,.'Source.1').plot |
143e0 | 5f 61 78 28 64 65 63 32 2c 20 27 53 6f 75 72 63 65 20 32 27 29 0a 70 6c 6f 74 5f 61 78 28 64 65 | _ax(dec2,.'Source.2').plot_ax(de |
14400 | 63 74 2c 20 27 54 61 72 67 65 74 27 29 0a 70 72 69 6e 74 5f 47 28 6f 74 2e 62 72 65 67 6d 61 6e | ct,.'Target').print_G(ot.bregman |
14420 | 2e 73 69 6e 6b 68 6f 72 6e 28 77 73 31 2c 20 5b 5d 2c 20 6f 74 64 61 2e 6c 6f 67 5f 5b 27 4d 27 | .sinkhorn(ws1,.[],.otda.log_['M' |
14440 | 5d 5b 30 5d 2c 20 72 65 67 3d 31 65 2d 31 29 2c 20 78 73 31 2c 20 79 73 31 2c 20 78 74 29 0a 70 | ][0],.reg=1e-1),.xs1,.ys1,.xt).p |
14460 | 72 69 6e 74 5f 47 28 6f 74 2e 62 72 65 67 6d 61 6e 2e 73 69 6e 6b 68 6f 72 6e 28 77 73 32 2c 20 | rint_G(ot.bregman.sinkhorn(ws2,. |
14480 | 5b 5d 2c 20 6f 74 64 61 2e 6c 6f 67 5f 5b 27 4d 27 5d 5b 31 5d 2c 20 72 65 67 3d 31 65 2d 31 29 | [],.otda.log_['M'][1],.reg=1e-1) |
144a0 | 2c 20 78 73 32 2c 20 79 73 32 2c 20 78 74 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 73 31 5b 3a | ,.xs2,.ys2,.xt).pl.scatter(xs1[: |
144c0 | 2c 20 30 5d 2c 20 78 73 31 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 31 2c 20 73 3d 33 35 2c 20 6d 61 | ,.0],.xs1[:,.1],.c=ys1,.s=35,.ma |
144e0 | 72 6b 65 72 3d 27 78 27 2c 20 63 6d 61 70 3d 27 53 65 74 31 27 2c 20 76 6d 61 78 3d 39 29 0a 70 | rker='x',.cmap='Set1',.vmax=9).p |
14500 | 6c 2e 73 63 61 74 74 65 72 28 78 73 32 5b 3a 2c 20 30 5d 2c 20 78 73 32 5b 3a 2c 20 31 5d 2c 20 | l.scatter(xs2[:,.0],.xs2[:,.1],. |
14520 | 63 3d 79 73 32 2c 20 73 3d 33 35 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 63 6d 61 70 3d 27 53 | c=ys2,.s=35,.marker='+',.cmap='S |
14540 | 65 74 31 27 2c 20 76 6d 61 78 3d 39 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 74 5b 3a 2c 20 30 | et1',.vmax=9).pl.scatter(xt[:,.0 |
14560 | 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 73 3d 33 35 2c 20 6d 61 72 6b 65 72 3d | ],.xt[:,.1],.c=yt,.s=35,.marker= |
14580 | 27 6f 27 2c 20 63 6d 61 70 3d 27 53 65 74 31 27 2c 20 76 6d 61 78 3d 39 29 0a 0a 70 6c 2e 70 6c | 'o',.cmap='Set1',.vmax=9)..pl.pl |
145a0 | 6f 74 28 5b 5d 2c 20 5b 5d 2c 20 27 72 27 2c 20 61 6c 70 68 61 3d 2e 32 2c 20 6c 61 62 65 6c 3d | ot([],.[],.'r',.alpha=.2,.label= |
145c0 | 27 4d 61 73 73 20 66 72 6f 6d 20 43 6c 61 73 73 20 31 27 29 0a 70 6c 2e 70 6c 6f 74 28 5b 5d 2c | 'Mass.from.Class.1').pl.plot([], |
145e0 | 20 5b 5d 2c 20 27 62 27 2c 20 61 6c 70 68 61 3d 2e 32 2c 20 6c 61 62 65 6c 3d 27 4d 61 73 73 20 | .[],.'b',.alpha=.2,.label='Mass. |
14600 | 66 72 6f 6d 20 43 6c 61 73 73 20 32 27 29 0a 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 77 69 74 | from.Class.2')..pl.title('OT.wit |
14620 | 68 20 70 72 6f 70 20 65 73 74 69 6d 61 74 69 6f 6e 20 28 7b 3a 31 2e 33 66 7d 2c 7b 3a 31 2e 33 | h.prop.estimation.({:1.3f},{:1.3 |
14640 | 66 7d 29 27 2e 66 6f 72 6d 61 74 28 6f 74 64 61 2e 70 72 6f 70 6f 72 74 69 6f 6e 73 5f 5b 30 5d | f})'.format(otda.proportions_[0] |
14660 | 2c 20 6f 74 64 61 2e 70 72 6f 70 6f 72 74 69 6f 6e 73 5f 5b 31 5d 29 29 0a 0a 70 6c 2e 6c 65 67 | ,.otda.proportions_[1]))..pl.leg |
14680 | 65 6e 64 28 29 0a 70 6c 2e 61 78 69 73 28 27 65 71 75 61 6c 27 29 0a 70 6c 2e 61 78 69 73 28 27 | end().pl.axis('equal').pl.axis(' |
146a0 | 6f 66 66 27 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | off')..######################### |
146c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
146e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 52 75 6e 20 6f 72 61 63 | #####################.#.Run.orac |
14700 | 6c 65 20 74 72 61 6e 73 70 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d 20 77 69 74 68 20 6b 6e 6f 77 | le.transport.algorithm.with.know |
14720 | 6e 20 70 72 6f 70 6f 72 74 69 6f 6e 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | n.proportions.#.---------------- |
14740 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
14760 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 68 5f 72 | ----------------------------.h_r |
14780 | 65 73 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 31 20 2d 20 70 74 2c 20 70 74 5d 29 0a 0a 77 73 31 | es.=.np.array([1.-.pt,.pt])..ws1 |
147a0 | 20 3d 20 68 5f 72 65 73 2e 64 6f 74 28 6f 74 64 61 2e 6c 6f 67 5f 5b 27 44 32 27 5d 5b 30 5d 29 | .=.h_res.dot(otda.log_['D2'][0]) |
147c0 | 0a 77 73 32 20 3d 20 68 5f 72 65 73 2e 64 6f 74 28 6f 74 64 61 2e 6c 6f 67 5f 5b 27 44 32 27 5d | .ws2.=.h_res.dot(otda.log_['D2'] |
147e0 | 5b 31 5d 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 34 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 6f 74 | [1])..pl.figure(4).pl.clf().plot |
14800 | 5f 61 78 28 64 65 63 31 2c 20 27 53 6f 75 72 63 65 20 31 27 29 0a 70 6c 6f 74 5f 61 78 28 64 65 | _ax(dec1,.'Source.1').plot_ax(de |
14820 | 63 32 2c 20 27 53 6f 75 72 63 65 20 32 27 29 0a 70 6c 6f 74 5f 61 78 28 64 65 63 74 2c 20 27 54 | c2,.'Source.2').plot_ax(dect,.'T |
14840 | 61 72 67 65 74 27 29 0a 70 72 69 6e 74 5f 47 28 6f 74 2e 62 72 65 67 6d 61 6e 2e 73 69 6e 6b 68 | arget').print_G(ot.bregman.sinkh |
14860 | 6f 72 6e 28 77 73 31 2c 20 5b 5d 2c 20 6f 74 64 61 2e 6c 6f 67 5f 5b 27 4d 27 5d 5b 30 5d 2c 20 | orn(ws1,.[],.otda.log_['M'][0],. |
14880 | 72 65 67 3d 31 65 2d 31 29 2c 20 78 73 31 2c 20 79 73 31 2c 20 78 74 29 0a 70 72 69 6e 74 5f 47 | reg=1e-1),.xs1,.ys1,.xt).print_G |
148a0 | 28 6f 74 2e 62 72 65 67 6d 61 6e 2e 73 69 6e 6b 68 6f 72 6e 28 77 73 32 2c 20 5b 5d 2c 20 6f 74 | (ot.bregman.sinkhorn(ws2,.[],.ot |
148c0 | 64 61 2e 6c 6f 67 5f 5b 27 4d 27 5d 5b 31 5d 2c 20 72 65 67 3d 31 65 2d 31 29 2c 20 78 73 32 2c | da.log_['M'][1],.reg=1e-1),.xs2, |
148e0 | 20 79 73 32 2c 20 78 74 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 73 31 5b 3a 2c 20 30 5d 2c 20 | .ys2,.xt).pl.scatter(xs1[:,.0],. |
14900 | 78 73 31 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 31 2c 20 73 3d 33 35 2c 20 6d 61 72 6b 65 72 3d 27 | xs1[:,.1],.c=ys1,.s=35,.marker=' |
14920 | 78 27 2c 20 63 6d 61 70 3d 27 53 65 74 31 27 2c 20 76 6d 61 78 3d 39 29 0a 70 6c 2e 73 63 61 74 | x',.cmap='Set1',.vmax=9).pl.scat |
14940 | 74 65 72 28 78 73 32 5b 3a 2c 20 30 5d 2c 20 78 73 32 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 32 2c | ter(xs2[:,.0],.xs2[:,.1],.c=ys2, |
14960 | 20 73 3d 33 35 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 63 6d 61 70 3d 27 53 65 74 31 27 2c 20 | .s=35,.marker='+',.cmap='Set1',. |
14980 | 76 6d 61 78 3d 39 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b | vmax=9).pl.scatter(xt[:,.0],.xt[ |
149a0 | 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 73 3d 33 35 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 20 63 | :,.1],.c=yt,.s=35,.marker='o',.c |
149c0 | 6d 61 70 3d 27 53 65 74 31 27 2c 20 76 6d 61 78 3d 39 29 0a 0a 70 6c 2e 70 6c 6f 74 28 5b 5d 2c | map='Set1',.vmax=9)..pl.plot([], |
149e0 | 20 5b 5d 2c 20 27 72 27 2c 20 61 6c 70 68 61 3d 2e 32 2c 20 6c 61 62 65 6c 3d 27 4d 61 73 73 20 | .[],.'r',.alpha=.2,.label='Mass. |
14a00 | 66 72 6f 6d 20 43 6c 61 73 73 20 31 27 29 0a 70 6c 2e 70 6c 6f 74 28 5b 5d 2c 20 5b 5d 2c 20 27 | from.Class.1').pl.plot([],.[],.' |
14a20 | 62 27 2c 20 61 6c 70 68 61 3d 2e 32 2c 20 6c 61 62 65 6c 3d 27 4d 61 73 73 20 66 72 6f 6d 20 43 | b',.alpha=.2,.label='Mass.from.C |
14a40 | 6c 61 73 73 20 32 27 29 0a 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 77 69 74 68 20 6b 6e 6f 77 | lass.2')..pl.title('OT.with.know |
14a60 | 6e 20 70 72 6f 70 6f 72 74 69 6f 6e 20 28 7b 3a 31 2e 31 66 7d 2c 7b 3a 31 2e 31 66 7d 29 27 2e | n.proportion.({:1.1f},{:1.1f})'. |
14a80 | 66 6f 72 6d 61 74 28 68 5f 72 65 73 5b 30 5d 2c 20 68 5f 72 65 73 5b 31 5d 29 29 0a 0a 70 6c 2e | format(h_res[0],.h_res[1]))..pl. |
14aa0 | 6c 65 67 65 6e 64 28 29 0a 70 6c 2e 61 78 69 73 28 27 65 71 75 61 6c 27 29 0a 70 6c 2e 61 78 69 | legend().pl.axis('equal').pl.axi |
14ac0 | 73 28 27 6f 66 66 27 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 83 68 3a | s('off').pl.show().PK.........h: |
14ae0 | 4f 71 12 0d cb 23 12 00 00 23 12 00 00 1c 00 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 73 65 6d 69 5f | Oq...#...#.......plot_otda_semi_ |
14b00 | 73 75 70 65 72 76 69 73 65 64 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 | supervised.py#.-*-.coding:.utf-8 |
14b20 | 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | .-*-.""".======================= |
14b40 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4f 54 44 41 20 75 6e 73 75 70 | =====================.OTDA.unsup |
14b60 | 65 72 76 69 73 65 64 20 76 73 20 73 65 6d 69 2d 73 75 70 65 72 76 69 73 65 64 20 73 65 74 74 69 | ervised.vs.semi-supervised.setti |
14b80 | 6e 67 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 | ng.============================= |
14ba0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 6e | ===============..This.example.in |
14bc0 | 74 72 6f 64 75 63 65 73 20 61 20 73 65 6d 69 20 73 75 70 65 72 76 69 73 65 64 20 64 6f 6d 61 69 | troduces.a.semi.supervised.domai |
14be0 | 6e 20 61 64 61 70 74 61 74 69 6f 6e 20 69 6e 20 61 20 32 44 20 73 65 74 74 69 6e 67 2e 0a 49 74 | n.adaptation.in.a.2D.setting..It |
14c00 | 20 65 78 70 6c 69 63 69 74 73 20 74 68 65 20 70 72 6f 62 6c 65 6d 20 6f 66 20 73 65 6d 69 20 73 | .explicits.the.problem.of.semi.s |
14c20 | 75 70 65 72 76 69 73 65 64 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 20 61 6e 64 20 | upervised.domain.adaptation.and. |
14c40 | 69 6e 74 72 6f 64 75 63 65 73 0a 73 6f 6d 65 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 | introduces.some.optimal.transpor |
14c60 | 74 20 61 70 70 72 6f 61 63 68 65 73 20 74 6f 20 73 6f 6c 76 65 20 69 74 2e 0a 0a 51 75 61 6e 74 | t.approaches.to.solve.it...Quant |
14c80 | 69 74 69 65 73 20 73 75 63 68 20 61 73 20 6f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 73 2c | ities.such.as.optimal.couplings, |
14ca0 | 20 67 72 65 61 74 65 72 20 63 6f 75 70 6c 69 6e 67 20 63 6f 65 66 66 69 63 69 65 6e 74 73 20 61 | .greater.coupling.coefficients.a |
14cc0 | 6e 64 0a 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 20 61 72 65 20 72 65 70 72 65 | nd.transported.samples.are.repre |
14ce0 | 73 65 6e 74 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 67 69 76 65 20 61 20 76 69 73 75 61 6c | sented.in.order.to.give.a.visual |
14d00 | 20 75 6e 64 65 72 73 74 61 6e 64 69 6e 67 0a 6f 66 20 77 68 61 74 20 74 68 65 20 74 72 61 6e 73 | .understanding.of.what.the.trans |
14d20 | 70 6f 72 74 20 6d 65 74 68 6f 64 73 20 61 72 65 20 64 6f 69 6e 67 2e 0a 22 22 22 0a 0a 23 20 41 | port.methods.are.doing.."""..#.A |
14d40 | 75 74 68 6f 72 73 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 | uthors:.Remi.Flamary.<remi.flama |
14d60 | 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 20 20 20 20 20 20 20 20 20 20 53 74 61 6e 69 73 6c 61 | ry@unice.fr>.#..........Stanisla |
14d80 | 73 20 43 68 61 6d 62 6f 6e 20 3c 73 74 61 6e 2e 63 68 61 6d 62 6f 6e 40 67 6d 61 69 6c 2e 63 6f | s.Chambon.<stan.chambon@gmail.co |
14da0 | 6d 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 | m>.#.#.License:.MIT.License..imp |
14dc0 | 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 | ort.matplotlib.pylab.as.pl.impor |
14de0 | 74 20 6f 74 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | t.ot...######################### |
14e00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
14e20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 47 65 6e 65 72 61 74 65 | #####################.#.Generate |
14e40 | 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 6e 5f 73 61 6d 70 6c 65 73 | .data.#.-------------..n_samples |
14e60 | 5f 73 6f 75 72 63 65 20 3d 20 31 35 30 0a 6e 5f 73 61 6d 70 6c 65 73 5f 74 61 72 67 65 74 20 3d | _source.=.150.n_samples_target.= |
14e80 | 20 31 35 30 0a 0a 58 73 2c 20 79 73 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f | .150..Xs,.ys.=.ot.datasets.make_ |
14ea0 | 64 61 74 61 5f 63 6c 61 73 73 69 66 28 27 33 67 61 75 73 73 27 2c 20 6e 5f 73 61 6d 70 6c 65 73 | data_classif('3gauss',.n_samples |
14ec0 | 5f 73 6f 75 72 63 65 29 0a 58 74 2c 20 79 74 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 | _source).Xt,.yt.=.ot.datasets.ma |
14ee0 | 6b 65 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 27 33 67 61 75 73 73 32 27 2c 20 6e 5f 73 61 6d | ke_data_classif('3gauss2',.n_sam |
14f00 | 70 6c 65 73 5f 74 61 72 67 65 74 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ples_target)...################# |
14f20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
14f40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 | #############################.#. |
14f60 | 54 72 61 6e 73 70 6f 72 74 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 20 6f 6e 74 6f 20 74 61 | Transport.source.samples.onto.ta |
14f80 | 72 67 65 74 20 73 61 6d 70 6c 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | rget.samples.#.----------------- |
14fa0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 20 | ---------------------------...#. |
14fc0 | 75 6e 73 75 70 65 72 76 69 73 65 64 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 0a 6f | unsupervised.domain.adaptation.o |
14fe0 | 74 5f 73 69 6e 6b 68 6f 72 6e 5f 75 6e 20 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b 68 6f 72 6e 54 72 | t_sinkhorn_un.=.ot.da.SinkhornTr |
15000 | 61 6e 73 70 6f 72 74 28 72 65 67 5f 65 3d 31 65 2d 31 29 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f | ansport(reg_e=1e-1).ot_sinkhorn_ |
15020 | 75 6e 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 74 72 61 6e 73 70 5f 58 73 5f 73 | un.fit(Xs=Xs,.Xt=Xt).transp_Xs_s |
15040 | 69 6e 6b 68 6f 72 6e 5f 75 6e 20 3d 20 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f 75 6e 2e 74 72 61 6e | inkhorn_un.=.ot_sinkhorn_un.tran |
15060 | 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 0a 23 20 73 65 6d 69 2d 73 75 70 65 72 76 69 73 65 64 20 | sform(Xs=Xs)..#.semi-supervised. |
15080 | 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f 73 65 | domain.adaptation.ot_sinkhorn_se |
150a0 | 6d 69 20 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 28 72 65 67 | mi.=.ot.da.SinkhornTransport(reg |
150c0 | 5f 65 3d 31 65 2d 31 29 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f 73 65 6d 69 2e 66 69 74 28 58 73 | _e=1e-1).ot_sinkhorn_semi.fit(Xs |
150e0 | 3d 58 73 2c 20 58 74 3d 58 74 2c 20 79 73 3d 79 73 2c 20 79 74 3d 79 74 29 0a 74 72 61 6e 73 70 | =Xs,.Xt=Xt,.ys=ys,.yt=yt).transp |
15100 | 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 5f 73 65 6d 69 20 3d 20 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f | _Xs_sinkhorn_semi.=.ot_sinkhorn_ |
15120 | 73 65 6d 69 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 0a 23 20 73 65 6d 69 20 73 75 | semi.transform(Xs=Xs)..#.semi.su |
15140 | 70 65 72 76 69 73 65 64 20 44 41 20 75 73 65 73 20 61 76 61 69 6c 61 62 6c 65 20 6c 61 62 61 6c | pervised.DA.uses.available.labal |
15160 | 65 64 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 20 | ed.target.samples.to.modify.the. |
15180 | 63 6f 73 74 0a 23 20 6d 61 74 72 69 78 20 69 6e 76 6f 6c 76 65 64 20 69 6e 20 74 68 65 20 4f 54 | cost.#.matrix.involved.in.the.OT |
151a0 | 20 70 72 6f 62 6c 65 6d 2e 20 54 68 65 20 63 6f 73 74 20 6f 66 20 74 72 61 6e 73 70 6f 72 74 69 | .problem..The.cost.of.transporti |
151c0 | 6e 67 20 61 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 0a 23 20 6f 66 20 63 6c 61 73 73 20 41 20 | ng.a.source.sample.#.of.class.A. |
151e0 | 6f 6e 74 6f 20 61 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 20 6f 66 20 63 6c 61 73 73 20 42 20 | onto.a.target.sample.of.class.B. |
15200 | 21 3d 20 41 20 69 73 20 73 65 74 20 74 6f 20 69 6e 66 69 6e 69 74 65 2c 20 6f 72 20 61 0a 23 20 | !=.A.is.set.to.infinite,.or.a.#. |
15220 | 76 65 72 79 20 6c 61 72 67 65 20 76 61 6c 75 65 0a 0a 23 20 6e 6f 74 65 20 74 68 61 74 20 69 6e | very.large.value..#.note.that.in |
15240 | 20 74 68 65 20 70 72 65 73 65 6e 74 20 63 61 73 65 20 77 65 20 63 6f 6e 73 69 64 65 72 20 74 68 | .the.present.case.we.consider.th |
15260 | 61 74 20 61 6c 6c 20 74 68 65 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 20 61 72 65 0a 23 20 | at.all.the.target.samples.are.#. |
15280 | 6c 61 62 65 6c 65 64 2e 20 46 6f 72 20 64 61 69 6c 79 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 2c | labeled..For.daily.applications, |
152a0 | 20 73 6f 6d 65 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 20 6d 69 67 68 74 20 6e 6f 74 20 68 61 | .some.target.sample.might.not.ha |
152c0 | 76 65 20 6c 61 62 65 6c 73 2c 0a 23 20 69 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20 65 6c | ve.labels,.#.in.this.case.the.el |
152e0 | 65 6d 65 6e 74 20 6f 66 20 79 74 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65 | ement.of.yt.corresponding.to.the |
15300 | 73 65 20 73 61 6d 70 6c 65 73 20 73 68 6f 75 6c 64 20 62 65 0a 23 20 66 69 6c 6c 65 64 20 77 69 | se.samples.should.be.#.filled.wi |
15320 | 74 68 20 2d 31 2e 0a 0a 23 20 57 61 72 6e 69 6e 67 3a 20 77 65 20 72 65 63 61 6c 6c 20 74 68 61 | th.-1...#.Warning:.we.recall.tha |
15340 | 74 20 2d 31 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 61 73 20 61 20 63 6c 61 73 73 20 6c | t.-1.cannot.be.used.as.a.class.l |
15360 | 61 62 65 6c 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | abel...######################### |
15380 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
153a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 67 20 31 20 3a 20 | #####################.#.Fig.1.:. |
153c0 | 70 6c 6f 74 73 20 73 6f 75 72 63 65 20 61 6e 64 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 20 | plots.source.and.target.samples. |
153e0 | 2b 20 6d 61 74 72 69 78 20 6f 66 20 70 61 69 72 77 69 73 65 20 64 69 73 74 61 6e 63 65 0a 23 20 | +.matrix.of.pairwise.distance.#. |
15400 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
15420 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
15440 | 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 31 30 2c | -----..pl.figure(1,.figsize=(10, |
15460 | 20 31 30 29 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 63 61 | .10)).pl.subplot(2,.2,.1).pl.sca |
15480 | 74 74 65 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 58 73 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d | tter(Xs[:,.0],.Xs[:,.1],.c=ys,.m |
154a0 | 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 | arker='+',.label='Source.samples |
154c0 | 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 | ').pl.xticks([]).pl.yticks([]).p |
154e0 | 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 | l.legend(loc=0).pl.title('Source |
15500 | 20 20 73 61 6d 70 6c 65 73 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 32 29 | ..samples')..pl.subplot(2,.2,.2) |
15520 | 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 | .pl.scatter(Xt[:,.0],.Xt[:,.1],. |
15540 | 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 | c=yt,.marker='o',.label='Target. |
15560 | 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b | samples').pl.xticks([]).pl.ytick |
15580 | 73 28 5b 5d 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 | s([]).pl.legend(loc=0).pl.title( |
155a0 | 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c | 'Target.samples')..pl.subplot(2, |
155c0 | 20 32 2c 20 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f 75 6e 2e | .2,.3).pl.imshow(ot_sinkhorn_un. |
155e0 | 63 6f 73 74 5f 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a | cost_,.interpolation='nearest'). |
15600 | 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 | pl.xticks([]).pl.yticks([]).pl.t |
15620 | 69 74 6c 65 28 27 43 6f 73 74 20 6d 61 74 72 69 78 20 2d 20 75 6e 73 75 70 65 72 76 69 73 65 64 | itle('Cost.matrix.-.unsupervised |
15640 | 20 44 41 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 34 29 0a 70 6c 2e 69 6d | .DA')..pl.subplot(2,.2,.4).pl.im |
15660 | 73 68 6f 77 28 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f 73 65 6d 69 2e 63 6f 73 74 5f 2c 20 69 6e 74 | show(ot_sinkhorn_semi.cost_,.int |
15680 | 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 | erpolation='nearest').pl.xticks( |
156a0 | 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 43 6f 73 74 | []).pl.yticks([]).pl.title('Cost |
156c0 | 20 6d 61 74 72 69 78 20 2d 20 73 65 6d 69 73 75 70 65 72 76 69 73 65 64 20 44 41 27 29 0a 0a 70 | .matrix.-.semisupervised.DA')..p |
156e0 | 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 23 20 74 68 65 20 6f 70 74 69 6d 61 6c 20 | l.tight_layout()..#.the.optimal. |
15700 | 63 6f 75 70 6c 69 6e 67 20 69 6e 20 74 68 65 20 73 65 6d 69 2d 73 75 70 65 72 76 69 73 65 64 20 | coupling.in.the.semi-supervised. |
15720 | 44 41 20 63 61 73 65 20 77 69 6c 6c 20 65 78 68 69 62 69 74 20 22 20 73 68 61 70 65 0a 23 20 73 | DA.case.will.exhibit.".shape.#.s |
15740 | 69 6d 69 6c 61 72 22 20 74 6f 20 74 68 65 20 63 6f 73 74 20 6d 61 74 72 69 78 2c 20 28 62 6c 6f | imilar".to.the.cost.matrix,.(blo |
15760 | 63 6b 20 64 69 61 67 6f 6e 61 6c 20 6d 61 74 72 69 78 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 | ck.diagonal.matrix)...########## |
15780 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
157a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
157c0 | 23 23 23 23 0a 23 20 46 69 67 20 32 20 3a 20 70 6c 6f 74 73 20 6f 70 74 69 6d 61 6c 20 63 6f 75 | ####.#.Fig.2.:.plots.optimal.cou |
157e0 | 70 6c 69 6e 67 73 20 66 6f 72 20 74 68 65 20 64 69 66 66 65 72 65 6e 74 20 6d 65 74 68 6f 64 73 | plings.for.the.different.methods |
15800 | 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | .#.----------------------------- |
15820 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c | ----------------------------..pl |
15840 | 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 38 2c 20 34 29 29 0a 0a 70 6c 2e 73 | .figure(2,.figsize=(8,.4))..pl.s |
15860 | 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 73 69 6e | ubplot(1,.2,.1).pl.imshow(ot_sin |
15880 | 6b 68 6f 72 6e 5f 75 6e 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f | khorn_un.coupling_,.interpolatio |
158a0 | 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 | n='nearest').pl.xticks([]).pl.yt |
158c0 | 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 70 74 69 6d 61 6c 20 63 6f 75 70 6c | icks([]).pl.title('Optimal.coupl |
158e0 | 69 6e 67 5c 6e 55 6e 73 75 70 65 72 76 69 73 65 64 20 44 41 27 29 0a 0a 70 6c 2e 73 75 62 70 6c | ing\nUnsupervised.DA')..pl.subpl |
15900 | 6f 74 28 31 2c 20 32 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 73 69 6e 6b 68 6f 72 | ot(1,.2,.2).pl.imshow(ot_sinkhor |
15920 | 6e 5f 73 65 6d 69 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d | n_semi.coupling_,.interpolation= |
15940 | 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 | 'nearest').pl.xticks([]).pl.ytic |
15960 | 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e | ks([]).pl.title('Optimal.couplin |
15980 | 67 5c 6e 53 65 6d 69 2d 73 75 70 65 72 76 69 73 65 64 20 44 41 27 29 0a 0a 70 6c 2e 74 69 67 68 | g\nSemi-supervised.DA')..pl.tigh |
159a0 | 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | t_layout()...################### |
159c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
159e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 | ###########################.#.Fi |
15a00 | 67 20 33 20 3a 20 70 6c 6f 74 20 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 0a 23 | g.3.:.plot.transported.samples.# |
15a20 | 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | .------------------------------- |
15a40 | 2d 0a 0a 23 20 64 69 73 70 6c 61 79 20 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 | -..#.display.transported.samples |
15a60 | 0a 70 6c 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 38 2c 20 34 29 29 0a 70 6c | .pl.figure(4,.figsize=(8,.4)).pl |
15a80 | 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b | .subplot(1,.2,.1).pl.scatter(Xt[ |
15aa0 | 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f | :,.0],.Xt[:,.1],.c=yt,.marker='o |
15ac0 | 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 | ',............label='Target.samp |
15ae0 | 6c 65 73 27 2c 20 61 6c 70 68 61 3d 30 2e 35 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e | les',.alpha=0.5).pl.scatter(tran |
15b00 | 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 5f 75 6e 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f | sp_Xs_sinkhorn_un[:,.0],.transp_ |
15b20 | 58 73 5f 73 69 6e 6b 68 6f 72 6e 5f 75 6e 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 | Xs_sinkhorn_un[:,.1],.c=ys,..... |
15b40 | 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 54 72 61 6e 73 70 | .......marker='+',.label='Transp |
15b60 | 20 73 61 6d 70 6c 65 73 27 2c 20 73 3d 33 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 72 61 6e 73 | .samples',.s=30).pl.title('Trans |
15b80 | 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 5c 6e 45 6d 64 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 | ported.samples\nEmdTransport').p |
15ba0 | 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c | l.legend(loc=0).pl.xticks([]).pl |
15bc0 | 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 32 29 | .yticks([])..pl.subplot(1,.2,.2) |
15be0 | 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 | .pl.scatter(Xt[:,.0],.Xt[:,.1],. |
15c00 | 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 | c=yt,.marker='o',............lab |
15c20 | 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 30 2e 35 29 0a | el='Target.samples',.alpha=0.5). |
15c40 | 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 5f 73 65 | pl.scatter(transp_Xs_sinkhorn_se |
15c60 | 6d 69 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 5f 73 65 6d | mi[:,.0],.transp_Xs_sinkhorn_sem |
15c80 | 69 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 | i[:,.1],.c=ys,............marker |
15ca0 | 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 20 73 3d | ='+',.label='Transp.samples',.s= |
15cc0 | 33 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 | 30).pl.title('Transported.sample |
15ce0 | 73 5c 6e 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 | s\nSinkhornTransport').pl.xticks |
15d00 | 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 | ([]).pl.yticks([])..pl.tight_lay |
15d20 | 6f 75 74 28 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 83 68 3a 4f cd ad | out().pl.show().PK.........h:O.. |
15d40 | d9 82 f4 0f 00 00 f4 0f 00 00 14 00 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 6d 61 70 70 69 6e 67 2e | ..............plot_otda_mapping. |
15d60 | 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d | py#.-*-.coding:.utf-8.-*-.""".== |
15d80 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
15da0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4f 54 20 6d 61 70 70 69 6e 67 20 65 73 74 69 6d 61 74 69 6f 6e 20 | =========.OT.mapping.estimation. |
15dc0 | 66 6f 72 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | for.domain.adaptation.========== |
15de0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
15e00 | 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 70 72 65 73 65 6e 74 73 20 68 6f 77 20 74 6f 20 | =..This.example.presents.how.to. |
15e20 | 75 73 65 20 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 20 74 6f 20 65 73 74 69 6d 61 74 65 | use.MappingTransport.to.estimate |
15e40 | 20 61 74 20 74 68 65 20 73 61 6d 65 0a 74 69 6d 65 20 62 6f 74 68 20 74 68 65 20 63 6f 75 70 6c | .at.the.same.time.both.the.coupl |
15e60 | 69 6e 67 20 74 72 61 6e 73 70 6f 72 74 20 61 6e 64 20 61 70 70 72 6f 78 69 6d 61 74 65 20 74 68 | ing.transport.and.approximate.th |
15e80 | 65 20 74 72 61 6e 73 70 6f 72 74 20 6d 61 70 20 77 69 74 68 20 65 69 74 68 65 72 0a 61 20 6c 69 | e.transport.map.with.either.a.li |
15ea0 | 6e 65 61 72 20 6f 72 20 61 20 6b 65 72 6e 65 6c 69 7a 65 64 20 6d 61 70 70 69 6e 67 20 61 73 20 | near.or.a.kernelized.mapping.as. |
15ec0 | 69 6e 74 72 6f 64 75 63 65 64 20 69 6e 20 5b 38 5d 2e 0a 0a 5b 38 5d 20 4d 2e 20 50 65 72 72 6f | introduced.in.[8]...[8].M..Perro |
15ee0 | 74 2c 20 4e 2e 20 43 6f 75 72 74 79 2c 20 52 2e 20 46 6c 61 6d 61 72 79 2c 20 41 2e 20 48 61 62 | t,.N..Courty,.R..Flamary,.A..Hab |
15f00 | 72 61 72 64 2c 0a 20 20 20 20 22 4d 61 70 70 69 6e 67 20 65 73 74 69 6d 61 74 69 6f 6e 20 66 6f | rard,....."Mapping.estimation.fo |
15f20 | 72 20 64 69 73 63 72 65 74 65 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 22 2c 0a 20 | r.discrete.optimal.transport",.. |
15f40 | 20 20 20 4e 65 75 72 61 6c 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 50 72 6f 63 65 73 73 69 6e 67 | ...Neural.Information.Processing |
15f60 | 20 53 79 73 74 65 6d 73 20 28 4e 49 50 53 29 2c 20 32 30 31 36 2e 0a 22 22 22 0a 0a 23 20 41 75 | .Systems.(NIPS),.2016.."""..#.Au |
15f80 | 74 68 6f 72 73 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 | thors:.Remi.Flamary.<remi.flamar |
15fa0 | 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 20 20 20 20 20 20 20 20 20 20 53 74 61 6e 69 73 6c 61 73 | y@unice.fr>.#..........Stanislas |
15fc0 | 20 43 68 61 6d 62 6f 6e 20 3c 73 74 61 6e 2e 63 68 61 6d 62 6f 6e 40 67 6d 61 69 6c 2e 63 6f 6d | .Chambon.<stan.chambon@gmail.com |
15fe0 | 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f | >.#.#.License:.MIT.License..impo |
16000 | 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 |
16020 | 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 0a 0a 23 23 23 23 23 23 23 | .pylab.as.pl.import.ot...####### |
16040 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
16060 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
16080 | 23 23 23 23 23 23 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d | #######.#.Generate.data.#.------ |
160a0 | 2d 2d 2d 2d 2d 2d 2d 0a 0a 6e 5f 73 6f 75 72 63 65 5f 73 61 6d 70 6c 65 73 20 3d 20 31 30 30 0a | -------..n_source_samples.=.100. |
160c0 | 6e 5f 74 61 72 67 65 74 5f 73 61 6d 70 6c 65 73 20 3d 20 31 30 30 0a 74 68 65 74 61 20 3d 20 32 | n_target_samples.=.100.theta.=.2 |
160e0 | 20 2a 20 6e 70 2e 70 69 20 2f 20 32 30 0a 6e 6f 69 73 65 5f 6c 65 76 65 6c 20 3d 20 30 2e 31 0a | .*.np.pi./.20.noise_level.=.0.1. |
16100 | 0a 58 73 2c 20 79 73 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 61 5f | .Xs,.ys.=.ot.datasets.make_data_ |
16120 | 63 6c 61 73 73 69 66 28 0a 20 20 20 20 27 67 61 75 73 73 72 6f 74 27 2c 20 6e 5f 73 6f 75 72 63 | classif(.....'gaussrot',.n_sourc |
16140 | 65 5f 73 61 6d 70 6c 65 73 2c 20 6e 7a 3d 6e 6f 69 73 65 5f 6c 65 76 65 6c 29 0a 58 73 5f 6e 65 | e_samples,.nz=noise_level).Xs_ne |
16160 | 77 2c 20 5f 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 61 5f 63 6c 61 | w,._.=.ot.datasets.make_data_cla |
16180 | 73 73 69 66 28 0a 20 20 20 20 27 67 61 75 73 73 72 6f 74 27 2c 20 6e 5f 73 6f 75 72 63 65 5f 73 | ssif(.....'gaussrot',.n_source_s |
161a0 | 61 6d 70 6c 65 73 2c 20 6e 7a 3d 6e 6f 69 73 65 5f 6c 65 76 65 6c 29 0a 58 74 2c 20 79 74 20 3d | amples,.nz=noise_level).Xt,.yt.= |
161c0 | 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 0a | .ot.datasets.make_data_classif(. |
161e0 | 20 20 20 20 27 67 61 75 73 73 72 6f 74 27 2c 20 6e 5f 74 61 72 67 65 74 5f 73 61 6d 70 6c 65 73 | ....'gaussrot',.n_target_samples |
16200 | 2c 20 74 68 65 74 61 3d 74 68 65 74 61 2c 20 6e 7a 3d 6e 6f 69 73 65 5f 6c 65 76 65 6c 29 0a 0a | ,.theta=theta,.nz=noise_level).. |
16220 | 23 20 6f 6e 65 20 6f 66 20 74 68 65 20 74 61 72 67 65 74 20 6d 6f 64 65 20 63 68 61 6e 67 65 73 | #.one.of.the.target.mode.changes |
16240 | 20 69 74 73 20 76 61 72 69 61 6e 63 65 20 28 6e 6f 20 6c 69 6e 65 61 72 20 6d 61 70 70 69 6e 67 | .its.variance.(no.linear.mapping |
16260 | 29 0a 58 74 5b 79 74 20 3d 3d 20 32 5d 20 2a 3d 20 33 0a 58 74 20 3d 20 58 74 20 2b 20 34 0a 0a | ).Xt[yt.==.2].*=.3.Xt.=.Xt.+.4.. |
16280 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
162a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
162c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 64 61 74 61 0a 23 20 2d 2d 2d | ##############.#.Plot.data.#.--- |
162e0 | 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 28 31 30 2c 20 35 29 29 0a 70 6c | ------..pl.figure(1,.(10,.5)).pl |
16300 | 2e 63 6c 66 28 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 58 73 5b 3a | .clf().pl.scatter(Xs[:,.0],.Xs[: |
16320 | 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 53 | ,.1],.c=ys,.marker='+',.label='S |
16340 | 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c | ource.samples').pl.scatter(Xt[:, |
16360 | 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c | .0],.Xt[:,.1],.c=yt,.marker='o', |
16380 | 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 65 | .label='Target.samples').pl.lege |
163a0 | 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 20 61 6e 64 20 74 | nd(loc=0).pl.title('Source.and.t |
163c0 | 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 0a 23 23 23 23 23 23 23 23 | arget.distributions')...######## |
163e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
16400 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
16420 | 23 23 23 23 23 23 0a 23 20 49 6e 73 74 61 6e 74 69 61 74 65 20 74 68 65 20 64 69 66 66 65 72 65 | ######.#.Instantiate.the.differe |
16440 | 6e 74 20 74 72 61 6e 73 70 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d 73 20 61 6e 64 20 66 69 74 20 | nt.transport.algorithms.and.fit. |
16460 | 74 68 65 6d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | them.#.------------------------- |
16480 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
164a0 | 2d 2d 0a 0a 23 20 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 20 77 69 74 68 20 6c 69 6e 65 | --..#.MappingTransport.with.line |
164c0 | 61 72 20 6b 65 72 6e 65 6c 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 20 3d 20 6f 74 | ar.kernel.ot_mapping_linear.=.ot |
164e0 | 2e 64 61 2e 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 28 0a 20 20 20 20 6b 65 72 6e 65 6c | .da.MappingTransport(.....kernel |
16500 | 3d 22 6c 69 6e 65 61 72 22 2c 20 6d 75 3d 31 65 30 2c 20 65 74 61 3d 31 65 2d 38 2c 20 62 69 61 | ="linear",.mu=1e0,.eta=1e-8,.bia |
16520 | 73 3d 54 72 75 65 2c 0a 20 20 20 20 6d 61 78 5f 69 74 65 72 3d 32 30 2c 20 76 65 72 62 6f 73 65 | s=True,.....max_iter=20,.verbose |
16540 | 3d 54 72 75 65 29 0a 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 2e 66 69 74 28 58 73 | =True)..ot_mapping_linear.fit(Xs |
16560 | 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 66 6f 72 20 6f 72 69 67 69 6e 61 6c 20 73 6f 75 72 | =Xs,.Xt=Xt)..#.for.original.sour |
16580 | 63 65 20 73 61 6d 70 6c 65 73 2c 20 74 72 61 6e 73 66 6f 72 6d 20 61 70 70 6c 69 65 73 20 62 61 | ce.samples,.transform.applies.ba |
165a0 | 72 79 63 65 6e 74 72 69 63 20 6d 61 70 70 69 6e 67 0a 74 72 61 6e 73 70 5f 58 73 5f 6c 69 6e 65 | rycentric.mapping.transp_Xs_line |
165c0 | 61 72 20 3d 20 6f 74 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 2e 74 72 61 6e 73 66 6f 72 6d | ar.=.ot_mapping_linear.transform |
165e0 | 28 58 73 3d 58 73 29 0a 0a 23 20 66 6f 72 20 6f 75 74 20 6f 66 20 73 6f 75 72 63 65 20 73 61 6d | (Xs=Xs)..#.for.out.of.source.sam |
16600 | 70 6c 65 73 2c 20 74 72 61 6e 73 66 6f 72 6d 20 61 70 70 6c 69 65 73 20 74 68 65 20 6c 69 6e 65 | ples,.transform.applies.the.line |
16620 | 61 72 20 6d 61 70 70 69 6e 67 0a 74 72 61 6e 73 70 5f 58 73 5f 6c 69 6e 65 61 72 5f 6e 65 77 20 | ar.mapping.transp_Xs_linear_new. |
16640 | 3d 20 6f 74 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 | =.ot_mapping_linear.transform(Xs |
16660 | 3d 58 73 5f 6e 65 77 29 0a 0a 0a 23 20 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 20 77 69 | =Xs_new)...#.MappingTransport.wi |
16680 | 74 68 20 67 61 75 73 73 69 61 6e 20 6b 65 72 6e 65 6c 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 67 61 | th.gaussian.kernel.ot_mapping_ga |
166a0 | 75 73 73 69 61 6e 20 3d 20 6f 74 2e 64 61 2e 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 28 | ussian.=.ot.da.MappingTransport( |
166c0 | 0a 20 20 20 20 6b 65 72 6e 65 6c 3d 22 67 61 75 73 73 69 61 6e 22 2c 20 65 74 61 3d 31 65 2d 35 | .....kernel="gaussian",.eta=1e-5 |
166e0 | 2c 20 6d 75 3d 31 65 2d 31 2c 20 62 69 61 73 3d 54 72 75 65 2c 20 73 69 67 6d 61 3d 31 2c 0a 20 | ,.mu=1e-1,.bias=True,.sigma=1,.. |
16700 | 20 20 20 6d 61 78 5f 69 74 65 72 3d 31 30 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 6f 74 | ...max_iter=10,.verbose=True).ot |
16720 | 5f 6d 61 70 70 69 6e 67 5f 67 61 75 73 73 69 61 6e 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d | _mapping_gaussian.fit(Xs=Xs,.Xt= |
16740 | 58 74 29 0a 0a 23 20 66 6f 72 20 6f 72 69 67 69 6e 61 6c 20 73 6f 75 72 63 65 20 73 61 6d 70 6c | Xt)..#.for.original.source.sampl |
16760 | 65 73 2c 20 74 72 61 6e 73 66 6f 72 6d 20 61 70 70 6c 69 65 73 20 62 61 72 79 63 65 6e 74 72 69 | es,.transform.applies.barycentri |
16780 | 63 20 6d 61 70 70 69 6e 67 0a 74 72 61 6e 73 70 5f 58 73 5f 67 61 75 73 73 69 61 6e 20 3d 20 6f | c.mapping.transp_Xs_gaussian.=.o |
167a0 | 74 5f 6d 61 70 70 69 6e 67 5f 67 61 75 73 73 69 61 6e 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d | t_mapping_gaussian.transform(Xs= |
167c0 | 58 73 29 0a 0a 23 20 66 6f 72 20 6f 75 74 20 6f 66 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 | Xs)..#.for.out.of.source.samples |
167e0 | 2c 20 74 72 61 6e 73 66 6f 72 6d 20 61 70 70 6c 69 65 73 20 74 68 65 20 67 61 75 73 73 69 61 6e | ,.transform.applies.the.gaussian |
16800 | 20 6d 61 70 70 69 6e 67 0a 74 72 61 6e 73 70 5f 58 73 5f 67 61 75 73 73 69 61 6e 5f 6e 65 77 20 | .mapping.transp_Xs_gaussian_new. |
16820 | 3d 20 6f 74 5f 6d 61 70 70 69 6e 67 5f 67 61 75 73 73 69 61 6e 2e 74 72 61 6e 73 66 6f 72 6d 28 | =.ot_mapping_gaussian.transform( |
16840 | 58 73 3d 58 73 5f 6e 65 77 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | Xs=Xs_new)...################### |
16860 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
16880 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c | ###########################.#.Pl |
168a0 | 6f 74 20 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d | ot.transported.samples.#.------- |
168c0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 29 0a | -----------------..pl.figure(2). |
168e0 | 70 6c 2e 63 6c 66 28 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 31 29 0a 70 6c 2e | pl.clf().pl.subplot(2,.2,.1).pl. |
16900 | 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 | scatter(Xt[:,.0],.Xt[:,.1],.c=yt |
16920 | 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 | ,.marker='o',............label=' |
16940 | 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 2e 32 29 0a 70 6c 2e 73 63 | Target.samples',.alpha=.2).pl.sc |
16960 | 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 6c 69 6e 65 61 72 5b 3a 2c 20 30 5d 2c 20 74 72 | atter(transp_Xs_linear[:,.0],.tr |
16980 | 61 6e 73 70 5f 58 73 5f 6c 69 6e 65 61 72 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b | ansp_Xs_linear[:,.1],.c=ys,.mark |
169a0 | 65 72 3d 27 2b 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 4d 61 70 70 65 64 | er='+',............label='Mapped |
169c0 | 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 74 69 74 6c 65 28 22 42 61 72 79 | .source.samples').pl.title("Bary |
169e0 | 2e 20 6d 61 70 70 69 6e 67 20 28 6c 69 6e 65 61 72 29 22 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c | ..mapping.(linear)").pl.legend(l |
16a00 | 6f 63 3d 30 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 32 29 0a 70 6c 2e 73 63 | oc=0)..pl.subplot(2,.2,.2).pl.sc |
16a20 | 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 | atter(Xt[:,.0],.Xt[:,.1],.c=yt,. |
16a40 | 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 | marker='o',............label='Ta |
16a60 | 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 2e 32 29 0a 70 6c 2e 73 63 61 74 | rget.samples',.alpha=.2).pl.scat |
16a80 | 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 6c 69 6e 65 61 72 5f 6e 65 77 5b 3a 2c 20 30 5d 2c 20 | ter(transp_Xs_linear_new[:,.0],. |
16aa0 | 74 72 61 6e 73 70 5f 58 73 5f 6c 69 6e 65 61 72 5f 6e 65 77 5b 3a 2c 20 31 5d 2c 0a 20 20 20 20 | transp_Xs_linear_new[:,.1],..... |
16ac0 | 20 20 20 20 20 20 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 | .......c=ys,.marker='+',.label=' |
16ae0 | 4c 65 61 72 6e 65 64 20 6d 61 70 70 69 6e 67 27 29 0a 70 6c 2e 74 69 74 6c 65 28 22 45 73 74 69 | Learned.mapping').pl.title("Esti |
16b00 | 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 70 6c 6f | m..mapping.(linear)")..pl.subplo |
16b20 | 74 28 32 2c 20 32 2c 20 33 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 | t(2,.2,.3).pl.scatter(Xt[:,.0],. |
16b40 | 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 | Xt[:,.1],.c=yt,.marker='o',..... |
16b60 | 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 | .......label='Target.samples',.a |
16b80 | 6c 70 68 61 3d 2e 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 67 61 | lpha=.2).pl.scatter(transp_Xs_ga |
16ba0 | 75 73 73 69 61 6e 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 67 61 75 73 73 69 61 6e | ussian[:,.0],.transp_Xs_gaussian |
16bc0 | 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d | [:,.1],.c=ys,............marker= |
16be0 | 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 62 61 72 79 63 65 6e 74 72 69 63 20 6d 61 70 70 69 6e 67 27 | '+',.label='barycentric.mapping' |
16c00 | 29 0a 70 6c 2e 74 69 74 6c 65 28 22 42 61 72 79 2e 20 6d 61 70 70 69 6e 67 20 28 6b 65 72 6e 65 | ).pl.title("Bary..mapping.(kerne |
16c20 | 6c 29 22 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 34 29 0a 70 6c 2e 73 63 61 | l)")..pl.subplot(2,.2,.4).pl.sca |
16c40 | 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d | tter(Xt[:,.0],.Xt[:,.1],.c=yt,.m |
16c60 | 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 | arker='o',............label='Tar |
16c80 | 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 2e 32 29 0a 70 6c 2e 73 63 61 74 74 | get.samples',.alpha=.2).pl.scatt |
16ca0 | 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 67 61 75 73 73 69 61 6e 5f 6e 65 77 5b 3a 2c 20 30 5d 2c | er(transp_Xs_gaussian_new[:,.0], |
16cc0 | 20 74 72 61 6e 73 70 5f 58 73 5f 67 61 75 73 73 69 61 6e 5f 6e 65 77 5b 3a 2c 20 31 5d 2c 20 63 | .transp_Xs_gaussian_new[:,.1],.c |
16ce0 | 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 | =ys,............marker='+',.labe |
16d00 | 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 |
16d20 | 73 74 69 6d 2e 20 6d 61 70 70 69 6e 67 20 28 6b 65 72 6e 65 6c 29 22 29 0a 70 6c 2e 74 69 67 68 | stim..mapping.(kernel)").pl.tigh |
16d40 | 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 | t_layout()..pl.show().PK........ |
16d60 | 83 68 3a 4f 39 06 7c 60 0c 15 00 00 0c 15 00 00 0f 00 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 64 32 | .h:O9.|`............plot_otda_d2 |
16d80 | 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d | .py#.-*-.coding:.utf-8.-*-.""".= |
16da0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
16dc0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4f 54 20 66 6f 72 20 64 6f 6d 61 69 6e | ==================.OT.for.domain |
16de0 | 20 61 64 61 70 74 61 74 69 6f 6e 20 6f 6e 20 65 6d 70 69 72 69 63 61 6c 20 64 69 73 74 72 69 62 | .adaptation.on.empirical.distrib |
16e00 | 75 74 69 6f 6e 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | utions.========================= |
16e20 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 | ==========================..This |
16e40 | 20 65 78 61 6d 70 6c 65 20 69 6e 74 72 6f 64 75 63 65 73 20 61 20 64 6f 6d 61 69 6e 20 61 64 61 | .example.introduces.a.domain.ada |
16e60 | 70 74 61 74 69 6f 6e 20 69 6e 20 61 20 32 44 20 73 65 74 74 69 6e 67 2e 20 49 74 20 65 78 70 6c | ptation.in.a.2D.setting..It.expl |
16e80 | 69 63 69 74 73 0a 74 68 65 20 70 72 6f 62 6c 65 6d 20 6f 66 20 64 6f 6d 61 69 6e 20 61 64 61 70 | icits.the.problem.of.domain.adap |
16ea0 | 74 61 74 69 6f 6e 20 61 6e 64 20 69 6e 74 72 6f 64 75 63 65 73 20 73 6f 6d 65 20 6f 70 74 69 6d | tation.and.introduces.some.optim |
16ec0 | 61 6c 20 74 72 61 6e 73 70 6f 72 74 0a 61 70 70 72 6f 61 63 68 65 73 20 74 6f 20 73 6f 6c 76 65 | al.transport.approaches.to.solve |
16ee0 | 20 69 74 2e 0a 0a 51 75 61 6e 74 69 74 69 65 73 20 73 75 63 68 20 61 73 20 6f 70 74 69 6d 61 6c | .it...Quantities.such.as.optimal |
16f00 | 20 63 6f 75 70 6c 69 6e 67 73 2c 20 67 72 65 61 74 65 72 20 63 6f 75 70 6c 69 6e 67 20 63 6f 65 | .couplings,.greater.coupling.coe |
16f20 | 66 66 69 63 69 65 6e 74 73 20 61 6e 64 0a 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 | fficients.and.transported.sample |
16f40 | 73 20 61 72 65 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 67 69 | s.are.represented.in.order.to.gi |
16f60 | 76 65 20 61 20 76 69 73 75 61 6c 20 75 6e 64 65 72 73 74 61 6e 64 69 6e 67 0a 6f 66 20 77 68 61 | ve.a.visual.understanding.of.wha |
16f80 | 74 20 74 68 65 20 74 72 61 6e 73 70 6f 72 74 20 6d 65 74 68 6f 64 73 20 61 72 65 20 64 6f 69 6e | t.the.transport.methods.are.doin |
16fa0 | 67 2e 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 73 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 | g.."""..#.Authors:.Remi.Flamary. |
16fc0 | 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 20 20 20 20 20 20 20 | <remi.flamary@unice.fr>.#....... |
16fe0 | 20 20 20 53 74 61 6e 69 73 6c 61 73 20 43 68 61 6d 62 6f 6e 20 3c 73 74 61 6e 2e 63 68 61 6d 62 | ...Stanislas.Chambon.<stan.chamb |
17000 | 6f 6e 40 67 6d 61 69 6c 2e 63 6f 6d 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c | on@gmail.com>.#.#.License:.MIT.L |
17020 | 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 | icense..import.matplotlib.pylab. |
17040 | 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 69 6d 70 6f 72 74 20 6f 74 2e 70 6c 6f 74 0a 0a | as.pl.import.ot.import.ot.plot.. |
17060 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
17080 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
170a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 67 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 | ##############.#.generate.data.# |
170c0 | 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 6e 5f 73 61 6d 70 6c 65 73 5f 73 6f 75 72 63 65 | .-------------..n_samples_source |
170e0 | 20 3d 20 31 35 30 0a 6e 5f 73 61 6d 70 6c 65 73 5f 74 61 72 67 65 74 20 3d 20 31 35 30 0a 0a 58 | .=.150.n_samples_target.=.150..X |
17100 | 73 2c 20 79 73 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 61 5f 63 6c | s,.ys.=.ot.datasets.make_data_cl |
17120 | 61 73 73 69 66 28 27 33 67 61 75 73 73 27 2c 20 6e 5f 73 61 6d 70 6c 65 73 5f 73 6f 75 72 63 65 | assif('3gauss',.n_samples_source |
17140 | 29 0a 58 74 2c 20 79 74 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 61 | ).Xt,.yt.=.ot.datasets.make_data |
17160 | 5f 63 6c 61 73 73 69 66 28 27 33 67 61 75 73 73 32 27 2c 20 6e 5f 73 61 6d 70 6c 65 73 5f 74 61 | _classif('3gauss2',.n_samples_ta |
17180 | 72 67 65 74 29 0a 0a 23 20 43 6f 73 74 20 6d 61 74 72 69 78 0a 4d 20 3d 20 6f 74 2e 64 69 73 74 | rget)..#.Cost.matrix.M.=.ot.dist |
171a0 | 28 58 73 2c 20 58 74 2c 20 6d 65 74 72 69 63 3d 27 73 71 65 75 63 6c 69 64 65 61 6e 27 29 0a 0a | (Xs,.Xt,.metric='sqeuclidean').. |
171c0 | 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | .############################### |
171e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
17200 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 49 6e 73 74 61 6e 74 69 61 74 65 20 74 68 | ###############.#.Instantiate.th |
17220 | 65 20 64 69 66 66 65 72 65 6e 74 20 74 72 61 6e 73 70 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d 73 | e.different.transport.algorithms |
17240 | 20 61 6e 64 20 66 69 74 20 74 68 65 6d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | .and.fit.them.#.---------------- |
17260 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
17280 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 20 45 4d 44 20 54 72 61 6e 73 70 6f 72 74 0a 6f 74 5f | -----------..#.EMD.Transport.ot_ |
172a0 | 65 6d 64 20 3d 20 6f 74 2e 64 61 2e 45 4d 44 54 72 61 6e 73 70 6f 72 74 28 29 0a 6f 74 5f 65 6d | emd.=.ot.da.EMDTransport().ot_em |
172c0 | 64 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 53 69 6e 6b 68 6f 72 6e 20 | d.fit(Xs=Xs,.Xt=Xt)..#.Sinkhorn. |
172e0 | 54 72 61 6e 73 70 6f 72 74 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 2e 64 61 2e 53 69 | Transport.ot_sinkhorn.=.ot.da.Si |
17300 | 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 28 72 65 67 5f 65 3d 31 65 2d 31 29 0a 6f 74 5f 73 | nkhornTransport(reg_e=1e-1).ot_s |
17320 | 69 6e 6b 68 6f 72 6e 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 53 69 6e | inkhorn.fit(Xs=Xs,.Xt=Xt)..#.Sin |
17340 | 6b 68 6f 72 6e 20 54 72 61 6e 73 70 6f 72 74 20 77 69 74 68 20 47 72 6f 75 70 20 6c 61 73 73 6f | khorn.Transport.with.Group.lasso |
17360 | 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 6f 74 5f 6c 70 6c 31 20 3d 20 6f 74 2e 64 61 2e | .regularization.ot_lpl1.=.ot.da. |
17380 | 53 69 6e 6b 68 6f 72 6e 4c 70 6c 31 54 72 61 6e 73 70 6f 72 74 28 72 65 67 5f 65 3d 31 65 2d 31 | SinkhornLpl1Transport(reg_e=1e-1 |
173a0 | 2c 20 72 65 67 5f 63 6c 3d 31 65 30 29 0a 6f 74 5f 6c 70 6c 31 2e 66 69 74 28 58 73 3d 58 73 2c | ,.reg_cl=1e0).ot_lpl1.fit(Xs=Xs, |
173c0 | 20 79 73 3d 79 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 74 72 61 6e 73 70 6f 72 74 20 73 6f 75 72 | .ys=ys,.Xt=Xt)..#.transport.sour |
173e0 | 63 65 20 73 61 6d 70 6c 65 73 20 6f 6e 74 6f 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 0a 74 | ce.samples.onto.target.samples.t |
17400 | 72 61 6e 73 70 5f 58 73 5f 65 6d 64 20 3d 20 6f 74 5f 65 6d 64 2e 74 72 61 6e 73 66 6f 72 6d 28 | ransp_Xs_emd.=.ot_emd.transform( |
17420 | 58 73 3d 58 73 29 0a 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 5f 73 | Xs=Xs).transp_Xs_sinkhorn.=.ot_s |
17440 | 69 6e 6b 68 6f 72 6e 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 74 72 61 6e 73 70 5f | inkhorn.transform(Xs=Xs).transp_ |
17460 | 58 73 5f 6c 70 6c 31 20 3d 20 6f 74 5f 6c 70 6c 31 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 | Xs_lpl1.=.ot_lpl1.transform(Xs=X |
17480 | 73 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | s)...########################### |
174a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
174c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 67 20 31 20 3a 20 70 6c | ###################.#.Fig.1.:.pl |
174e0 | 6f 74 73 20 73 6f 75 72 63 65 20 61 6e 64 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 20 2b 20 | ots.source.and.target.samples.+. |
17500 | 6d 61 74 72 69 78 20 6f 66 20 70 61 69 72 77 69 73 65 20 64 69 73 74 61 6e 63 65 0a 23 20 2d 2d | matrix.of.pairwise.distance.#.-- |
17520 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
17540 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
17560 | 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 31 30 2c 20 31 | ---..pl.figure(1,.figsize=(10,.1 |
17580 | 30 29 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 63 61 74 74 | 0)).pl.subplot(2,.2,.1).pl.scatt |
175a0 | 65 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 58 73 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 | er(Xs[:,.0],.Xs[:,.1],.c=ys,.mar |
175c0 | 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 | ker='+',.label='Source.samples') |
175e0 | 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e | .pl.xticks([]).pl.yticks([]).pl. |
17600 | 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 20 20 | legend(loc=0).pl.title('Source.. |
17620 | 73 61 6d 70 6c 65 73 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 32 29 0a 70 | samples')..pl.subplot(2,.2,.2).p |
17640 | 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d | l.scatter(Xt[:,.0],.Xt[:,.1],.c= |
17660 | 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 | yt,.marker='o',.label='Target.sa |
17680 | 6d 70 6c 65 73 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 | mples').pl.xticks([]).pl.yticks( |
176a0 | 5b 5d 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 | []).pl.legend(loc=0).pl.title('T |
176c0 | 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 | arget.samples')..pl.subplot(2,.2 |
176e0 | 2c 20 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 4d 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d | ,.3).pl.imshow(M,.interpolation= |
17700 | 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 | 'nearest').pl.xticks([]).pl.ytic |
17720 | 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4d 61 74 72 69 78 20 6f 66 20 70 61 69 72 77 | ks([]).pl.title('Matrix.of.pairw |
17740 | 69 73 65 20 64 69 73 74 61 6e 63 65 73 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 | ise.distances').pl.tight_layout( |
17760 | 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | )...############################ |
17780 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
177a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 67 20 32 20 3a 20 70 6c 6f | ##################.#.Fig.2.:.plo |
177c0 | 74 73 20 6f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 73 20 66 6f 72 20 74 68 65 20 64 69 66 | ts.optimal.couplings.for.the.dif |
177e0 | 66 65 72 65 6e 74 20 6d 65 74 68 6f 64 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | ferent.methods.#.--------------- |
17800 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
17820 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 3d | ----------.pl.figure(2,.figsize= |
17840 | 28 31 30 2c 20 36 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 31 29 0a 70 6c | (10,.6))..pl.subplot(2,.3,.1).pl |
17860 | 2e 69 6d 73 68 6f 77 28 6f 74 5f 65 6d 64 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 69 6e 74 65 72 70 | .imshow(ot_emd.coupling_,.interp |
17880 | 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 | olation='nearest').pl.xticks([]) |
178a0 | 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 70 74 69 6d 61 6c | .pl.yticks([]).pl.title('Optimal |
178c0 | 20 63 6f 75 70 6c 69 6e 67 5c 6e 45 4d 44 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 | .coupling\nEMDTransport')..pl.su |
178e0 | 62 70 6c 6f 74 28 32 2c 20 33 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 73 69 6e 6b | bplot(2,.3,.2).pl.imshow(ot_sink |
17900 | 68 6f 72 6e 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e | horn.coupling_,.interpolation='n |
17920 | 65 61 72 65 73 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 | earest').pl.xticks([]).pl.yticks |
17940 | 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 5c | ([]).pl.title('Optimal.coupling\ |
17960 | 6e 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 | nSinkhornTransport')..pl.subplot |
17980 | 28 32 2c 20 33 2c 20 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 6c 70 6c 31 2e 63 6f 75 70 | (2,.3,.3).pl.imshow(ot_lpl1.coup |
179a0 | 6c 69 6e 67 5f 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a | ling_,.interpolation='nearest'). |
179c0 | 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 | pl.xticks([]).pl.yticks([]).pl.t |
179e0 | 69 74 6c 65 28 27 4f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 5c 6e 53 69 6e 6b 68 6f 72 6e | itle('Optimal.coupling\nSinkhorn |
17a00 | 4c 70 6c 31 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 | Lpl1Transport')..pl.subplot(2,.3 |
17a20 | 2c 20 34 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 | ,.4).ot.plot.plot2D_samples_mat( |
17a40 | 58 73 2c 20 58 74 2c 20 6f 74 5f 65 6d 64 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 63 3d 5b 2e 35 2c | Xs,.Xt,.ot_emd.coupling_,.c=[.5, |
17a60 | 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 58 73 | ..5,.1]).pl.scatter(Xs[:,.0],.Xs |
17a80 | 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d | [:,.1],.c=ys,.marker='+',.label= |
17aa0 | 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b | 'Source.samples').pl.scatter(Xt[ |
17ac0 | 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f | :,.0],.Xt[:,.1],.c=yt,.marker='o |
17ae0 | 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 78 74 | ',.label='Target.samples').pl.xt |
17b00 | 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 | icks([]).pl.yticks([]).pl.title( |
17b20 | 27 4d 61 69 6e 20 63 6f 75 70 6c 69 6e 67 20 63 6f 65 66 66 69 63 69 65 6e 74 73 5c 6e 45 4d 44 | 'Main.coupling.coefficients\nEMD |
17b40 | 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 35 29 | Transport')..pl.subplot(2,.3,.5) |
17b60 | 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 58 73 2c 20 | .ot.plot.plot2D_samples_mat(Xs,. |
17b80 | 58 74 2c 20 6f 74 5f 73 69 6e 6b 68 6f 72 6e 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 63 3d 5b 2e 35 | Xt,.ot_sinkhorn.coupling_,.c=[.5 |
17ba0 | 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 58 | ,..5,.1]).pl.scatter(Xs[:,.0],.X |
17bc0 | 73 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c | s[:,.1],.c=ys,.marker='+',.label |
17be0 | 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 | ='Source.samples').pl.scatter(Xt |
17c00 | 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 | [:,.0],.Xt[:,.1],.c=yt,.marker=' |
17c20 | 6f 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 78 | o',.label='Target.samples').pl.x |
17c40 | 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 | ticks([]).pl.yticks([]).pl.title |
17c60 | 28 27 4d 61 69 6e 20 63 6f 75 70 6c 69 6e 67 20 63 6f 65 66 66 69 63 69 65 6e 74 73 5c 6e 53 69 | ('Main.coupling.coefficients\nSi |
17c80 | 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c | nkhornTransport')..pl.subplot(2, |
17ca0 | 20 33 2c 20 36 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 | .3,.6).ot.plot.plot2D_samples_ma |
17cc0 | 74 28 58 73 2c 20 58 74 2c 20 6f 74 5f 6c 70 6c 31 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 63 3d 5b | t(Xs,.Xt,.ot_lpl1.coupling_,.c=[ |
17ce0 | 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 73 5b 3a 2c 20 30 5d 2c | .5,..5,.1]).pl.scatter(Xs[:,.0], |
17d00 | 20 58 73 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 | .Xs[:,.1],.c=ys,.marker='+',.lab |
17d20 | 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 | el='Source.samples').pl.scatter( |
17d40 | 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 | Xt[:,.0],.Xt[:,.1],.c=yt,.marker |
17d60 | 3d 27 6f 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c | ='o',.label='Target.samples').pl |
17d80 | 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 | .xticks([]).pl.yticks([]).pl.tit |
17da0 | 6c 65 28 27 4d 61 69 6e 20 63 6f 75 70 6c 69 6e 67 20 63 6f 65 66 66 69 63 69 65 6e 74 73 5c 6e | le('Main.coupling.coefficients\n |
17dc0 | 53 69 6e 6b 68 6f 72 6e 4c 70 6c 31 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 6c 2e 74 69 67 68 74 | SinkhornLpl1Transport').pl.tight |
17de0 | 5f 6c 61 79 6f 75 74 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | _layout()...#################### |
17e00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
17e20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 67 | ##########################.#.Fig |
17e40 | 20 33 20 3a 20 70 6c 6f 74 20 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 0a 23 20 | .3.:.plot.transported.samples.#. |
17e60 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
17e80 | 0a 0a 23 20 64 69 73 70 6c 61 79 20 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 0a | ..#.display.transported.samples. |
17ea0 | 70 6c 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 31 30 2c 20 34 29 29 0a 70 6c | pl.figure(4,.figsize=(10,.4)).pl |
17ec0 | 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b | .subplot(1,.3,.1).pl.scatter(Xt[ |
17ee0 | 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f | :,.0],.Xt[:,.1],.c=yt,.marker='o |
17f00 | 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 | ',............label='Target.samp |
17f20 | 6c 65 73 27 2c 20 61 6c 70 68 61 3d 30 2e 35 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e | les',.alpha=0.5).pl.scatter(tran |
17f40 | 73 70 5f 58 73 5f 65 6d 64 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 5b 3a | sp_Xs_emd[:,.0],.transp_Xs_emd[: |
17f60 | 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b | ,.1],.c=ys,............marker='+ |
17f80 | 27 2c 20 6c 61 62 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 20 73 3d 33 30 29 | ',.label='Transp.samples',.s=30) |
17fa0 | 0a 70 6c 2e 74 69 74 6c 65 28 27 54 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 5c 6e | .pl.title('Transported.samples\n |
17fc0 | 45 6d 64 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a | EmdTransport').pl.legend(loc=0). |
17fe0 | 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 0a 70 6c 2e | pl.xticks([]).pl.yticks([])..pl. |
18000 | 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a | subplot(1,.3,.2).pl.scatter(Xt[: |
18020 | 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 | ,.0],.Xt[:,.1],.c=yt,.marker='o' |
18040 | 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c | ,............label='Target.sampl |
18060 | 65 73 27 2c 20 61 6c 70 68 61 3d 30 2e 35 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 | es',.alpha=0.5).pl.scatter(trans |
18080 | 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 73 | p_Xs_sinkhorn[:,.0],.transp_Xs_s |
180a0 | 69 6e 6b 68 6f 72 6e 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 | inkhorn[:,.1],.c=ys,............ |
180c0 | 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d 70 6c 65 | marker='+',.label='Transp.sample |
180e0 | 73 27 2c 20 73 3d 33 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 72 61 6e 73 70 6f 72 74 65 64 20 | s',.s=30).pl.title('Transported. |
18100 | 73 61 6d 70 6c 65 73 5c 6e 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 6c 2e | samples\nSinkhornTransport').pl. |
18120 | 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 0a 70 6c 2e 73 75 62 | xticks([]).pl.yticks([])..pl.sub |
18140 | 70 6c 6f 74 28 31 2c 20 33 2c 20 33 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 | plot(1,.3,.3).pl.scatter(Xt[:,.0 |
18160 | 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 | ],.Xt[:,.1],.c=yt,.marker='o',.. |
18180 | 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 | ..........label='Target.samples' |
181a0 | 2c 20 61 6c 70 68 61 3d 30 2e 35 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 | ,.alpha=0.5).pl.scatter(transp_X |
181c0 | 73 5f 6c 70 6c 31 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 6c 70 6c 31 5b 3a 2c 20 | s_lpl1[:,.0],.transp_Xs_lpl1[:,. |
181e0 | 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b 27 2c | 1],.c=ys,............marker='+', |
18200 | 20 6c 61 62 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 20 73 3d 33 30 29 0a 70 | .label='Transp.samples',.s=30).p |
18220 | 6c 2e 74 69 74 6c 65 28 27 54 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 5c 6e 53 69 | l.title('Transported.samples\nSi |
18240 | 6e 6b 68 6f 72 6e 4c 70 6c 31 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 | nkhornLpl1Transport').pl.xticks( |
18260 | 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f | []).pl.yticks([])..pl.tight_layo |
18280 | 75 74 28 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 ad b0 94 50 e2 52 a4 | ut().pl.show().PK...........P.R. |
182a0 | 49 81 0e 00 00 81 0e 00 00 16 00 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 6c 61 70 6c 61 63 69 61 6e | I............plot_otda_laplacian |
182c0 | 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d | .py#.-*-.coding:.utf-8.-*-.""".= |
182e0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
18300 | 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 77 69 74 68 20 4c 61 | =====================.OT.with.La |
18320 | 70 6c 61 63 69 61 6e 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 20 66 6f 72 20 64 6f 6d 61 69 | placian.regularization.for.domai |
18340 | 6e 20 61 64 61 70 74 61 74 69 6f 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | n.adaptation.=================== |
18360 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
18380 | 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 6e 74 72 6f 64 75 63 65 73 20 61 20 64 | ===..This.example.introduces.a.d |
183a0 | 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 20 69 6e 20 61 20 32 44 20 73 65 74 74 69 6e 67 | omain.adaptation.in.a.2D.setting |
183c0 | 20 61 6e 64 20 4f 54 44 41 0a 61 70 70 72 6f 61 63 68 20 77 69 74 68 20 4c 61 70 6c 61 63 69 61 | .and.OTDA.approach.with.Laplacia |
183e0 | 6e 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 2e 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 | n.regularization..."""..#.Author |
18400 | 73 3a 20 49 65 76 67 65 6e 20 52 65 64 6b 6f 20 3c 69 65 76 67 65 6e 2e 72 65 64 6b 6f 40 75 6e | s:.Ievgen.Redko.<ievgen.redko@un |
18420 | 69 76 2d 73 74 2d 65 74 69 65 6e 6e 65 2e 66 72 3e 0a 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 | iv-st-etienne.fr>..#.License:.MI |
18440 | 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c | T.License..import.matplotlib.pyl |
18460 | 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 | ab.as.pl.import.ot..############ |
18480 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
184a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
184c0 | 23 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | ##.#.Generate.data.#.----------- |
184e0 | 2d 2d 0a 0a 6e 5f 73 6f 75 72 63 65 5f 73 61 6d 70 6c 65 73 20 3d 20 31 35 30 0a 6e 5f 74 61 72 | --..n_source_samples.=.150.n_tar |
18500 | 67 65 74 5f 73 61 6d 70 6c 65 73 20 3d 20 31 35 30 0a 0a 58 73 2c 20 79 73 20 3d 20 6f 74 2e 64 | get_samples.=.150..Xs,.ys.=.ot.d |
18520 | 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 27 33 67 61 75 73 | atasets.make_data_classif('3gaus |
18540 | 73 27 2c 20 6e 5f 73 6f 75 72 63 65 5f 73 61 6d 70 6c 65 73 29 0a 58 74 2c 20 79 74 20 3d 20 6f | s',.n_source_samples).Xt,.yt.=.o |
18560 | 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 27 33 67 | t.datasets.make_data_classif('3g |
18580 | 61 75 73 73 32 27 2c 20 6e 5f 74 61 72 67 65 74 5f 73 61 6d 70 6c 65 73 29 0a 0a 0a 23 23 23 23 | auss2',.n_target_samples)...#### |
185a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
185c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
185e0 | 23 23 23 23 23 23 23 23 23 23 0a 23 20 49 6e 73 74 61 6e 74 69 61 74 65 20 74 68 65 20 64 69 66 | ##########.#.Instantiate.the.dif |
18600 | 66 65 72 65 6e 74 20 74 72 61 6e 73 70 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d 73 20 61 6e 64 20 | ferent.transport.algorithms.and. |
18620 | 66 69 74 20 74 68 65 6d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | fit.them.#.--------------------- |
18640 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
18660 | 2d 2d 2d 2d 2d 2d 0a 0a 23 20 45 4d 44 20 54 72 61 6e 73 70 6f 72 74 0a 6f 74 5f 65 6d 64 20 3d | ------..#.EMD.Transport.ot_emd.= |
18680 | 20 6f 74 2e 64 61 2e 45 4d 44 54 72 61 6e 73 70 6f 72 74 28 29 0a 6f 74 5f 65 6d 64 2e 66 69 74 | .ot.da.EMDTransport().ot_emd.fit |
186a0 | 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 53 69 6e 6b 68 6f 72 6e 20 54 72 61 6e 73 | (Xs=Xs,.Xt=Xt)..#.Sinkhorn.Trans |
186c0 | 70 6f 72 74 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b 68 6f 72 | port.ot_sinkhorn.=.ot.da.Sinkhor |
186e0 | 6e 54 72 61 6e 73 70 6f 72 74 28 72 65 67 5f 65 3d 2e 30 31 29 0a 6f 74 5f 73 69 6e 6b 68 6f 72 | nTransport(reg_e=.01).ot_sinkhor |
18700 | 6e 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 45 4d 44 20 54 72 61 6e 73 | n.fit(Xs=Xs,.Xt=Xt)..#.EMD.Trans |
18720 | 70 6f 72 74 20 77 69 74 68 20 4c 61 70 6c 61 63 69 61 6e 20 72 65 67 75 6c 61 72 69 7a 61 74 69 | port.with.Laplacian.regularizati |
18740 | 6f 6e 0a 6f 74 5f 65 6d 64 5f 6c 61 70 6c 61 63 65 20 3d 20 6f 74 2e 64 61 2e 45 4d 44 4c 61 70 | on.ot_emd_laplace.=.ot.da.EMDLap |
18760 | 6c 61 63 65 54 72 61 6e 73 70 6f 72 74 28 72 65 67 5f 6c 61 70 3d 31 30 30 2c 20 72 65 67 5f 73 | laceTransport(reg_lap=100,.reg_s |
18780 | 72 63 3d 31 29 0a 6f 74 5f 65 6d 64 5f 6c 61 70 6c 61 63 65 2e 66 69 74 28 58 73 3d 58 73 2c 20 | rc=1).ot_emd_laplace.fit(Xs=Xs,. |
187a0 | 58 74 3d 58 74 29 0a 0a 23 20 74 72 61 6e 73 70 6f 72 74 20 73 6f 75 72 63 65 20 73 61 6d 70 6c | Xt=Xt)..#.transport.source.sampl |
187c0 | 65 73 20 6f 6e 74 6f 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 0a 74 72 61 6e 73 70 5f 58 73 | es.onto.target.samples.transp_Xs |
187e0 | 5f 65 6d 64 20 3d 20 6f 74 5f 65 6d 64 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 74 | _emd.=.ot_emd.transform(Xs=Xs).t |
18800 | 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 5f 73 69 6e 6b 68 6f 72 6e 2e | ransp_Xs_sinkhorn.=.ot_sinkhorn. |
18820 | 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 5f 6c | transform(Xs=Xs).transp_Xs_emd_l |
18840 | 61 70 6c 61 63 65 20 3d 20 6f 74 5f 65 6d 64 5f 6c 61 70 6c 61 63 65 2e 74 72 61 6e 73 66 6f 72 | aplace.=.ot_emd_laplace.transfor |
18860 | 6d 28 58 73 3d 58 73 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | m(Xs=Xs)..###################### |
18880 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
188a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 67 20 31 | ########################.#.Fig.1 |
188c0 | 20 3a 20 70 6c 6f 74 73 20 73 6f 75 72 63 65 20 61 6e 64 20 74 61 72 67 65 74 20 73 61 6d 70 6c | .:.plots.source.and.target.sampl |
188e0 | 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | es.#.--------------------------- |
18900 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 | ------------..pl.figure(1,.figsi |
18920 | 7a 65 3d 28 31 30 2c 20 35 29 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0a | ze=(10,.5)).pl.subplot(1,.2,.1). |
18940 | 70 6c 2e 73 63 61 74 74 65 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 58 73 5b 3a 2c 20 31 5d 2c 20 63 | pl.scatter(Xs[:,.0],.Xs[:,.1],.c |
18960 | 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 | =ys,.marker='+',.label='Source.s |
18980 | 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 | amples').pl.xticks([]).pl.yticks |
189a0 | 28 5b 5d 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 | ([]).pl.legend(loc=0).pl.title(' |
189c0 | 53 6f 75 72 63 65 20 20 73 61 6d 70 6c 65 73 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c | Source..samples')..pl.subplot(1, |
189e0 | 20 32 2c 20 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a | .2,.2).pl.scatter(Xt[:,.0],.Xt[: |
18a00 | 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 20 6c 61 62 65 6c 3d 27 54 | ,.1],.c=yt,.marker='o',.label='T |
18a20 | 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c | arget.samples').pl.xticks([]).pl |
18a40 | 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e | .yticks([]).pl.legend(loc=0).pl. |
18a60 | 74 69 74 6c 65 28 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 74 69 67 68 74 | title('Target.samples').pl.tight |
18a80 | 5f 6c 61 79 6f 75 74 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | _layout()...#################### |
18aa0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
18ac0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 67 | ##########################.#.Fig |
18ae0 | 20 32 20 3a 20 70 6c 6f 74 20 6f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 73 20 61 6e 64 20 | .2.:.plot.optimal.couplings.and. |
18b00 | 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | transported.samples.#.---------- |
18b20 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
18b40 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 61 72 61 6d 5f 69 6d 67 20 3d 20 7b 27 69 6e 74 65 | ------------..param_img.=.{'inte |
18b60 | 72 70 6f 6c 61 74 69 6f 6e 27 3a 20 27 6e 65 61 72 65 73 74 27 7d 0a 0a 70 6c 2e 66 69 67 75 72 | rpolation':.'nearest'}..pl.figur |
18b80 | 65 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 31 35 2c 20 38 29 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 | e(2,.figsize=(15,.8)).pl.subplot |
18ba0 | 28 32 2c 20 33 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 65 6d 64 2e 63 6f 75 70 6c | (2,.3,.1).pl.imshow(ot_emd.coupl |
18bc0 | 69 6e 67 5f 2c 20 2a 2a 70 61 72 61 6d 5f 69 6d 67 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 | ing_,.**param_img).pl.xticks([]) |
18be0 | 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 70 74 69 6d 61 6c | .pl.yticks([]).pl.title('Optimal |
18c00 | 20 63 6f 75 70 6c 69 6e 67 5c 6e 45 4d 44 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 66 69 | .coupling\nEMDTransport')..pl.fi |
18c20 | 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 31 35 2c 20 38 29 29 0a 70 6c 2e 73 75 62 70 | gure(2,.figsize=(15,.8)).pl.subp |
18c40 | 6c 6f 74 28 32 2c 20 33 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 73 69 6e 6b 68 6f | lot(2,.3,.2).pl.imshow(ot_sinkho |
18c60 | 72 6e 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 2a 2a 70 61 72 61 6d 5f 69 6d 67 29 0a 70 6c 2e 78 74 | rn.coupling_,.**param_img).pl.xt |
18c80 | 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 | icks([]).pl.yticks([]).pl.title( |
18ca0 | 27 4f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 5c 6e 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 | 'Optimal.coupling\nSinkhornTrans |
18cc0 | 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 33 29 0a 70 6c 2e 69 | port')..pl.subplot(2,.3,.3).pl.i |
18ce0 | 6d 73 68 6f 77 28 6f 74 5f 65 6d 64 5f 6c 61 70 6c 61 63 65 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 | mshow(ot_emd_laplace.coupling_,. |
18d00 | 2a 2a 70 61 72 61 6d 5f 69 6d 67 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 | **param_img).pl.xticks([]).pl.yt |
18d20 | 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 70 74 69 6d 61 6c 20 63 6f 75 70 6c | icks([]).pl.title('Optimal.coupl |
18d40 | 69 6e 67 5c 6e 45 4d 44 4c 61 70 6c 61 63 65 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 | ing\nEMDLaplaceTransport')..pl.s |
18d60 | 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 34 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c | ubplot(2,.3,.4).pl.scatter(Xt[:, |
18d80 | 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c | .0],.Xt[:,.1],.c=yt,.marker='o', |
18da0 | 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 | ............label='Target.sample |
18dc0 | 73 27 2c 20 61 6c 70 68 61 3d 30 2e 33 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 | s',.alpha=0.3).pl.scatter(transp |
18de0 | 5f 58 73 5f 65 6d 64 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 5b 3a 2c 20 | _Xs_emd[:,.0],.transp_Xs_emd[:,. |
18e00 | 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b 27 2c | 1],.c=ys,............marker='+', |
18e20 | 20 6c 61 62 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 20 73 3d 33 30 29 0a 70 | .label='Transp.samples',.s=30).p |
18e40 | 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 | l.xticks([]).pl.yticks([]).pl.ti |
18e60 | 74 6c 65 28 27 54 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 5c 6e 45 6d 64 54 72 61 | tle('Transported.samples\nEmdTra |
18e80 | 6e 73 70 6f 72 74 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 22 6c 6f 77 65 72 20 6c 65 | nsport').pl.legend(loc="lower.le |
18ea0 | 66 74 22 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 35 29 0a 70 6c 2e 73 63 61 | ft")..pl.subplot(2,.3,.5).pl.sca |
18ec0 | 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d | tter(Xt[:,.0],.Xt[:,.1],.c=yt,.m |
18ee0 | 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 | arker='o',............label='Tar |
18f00 | 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 30 2e 33 29 0a 70 6c 2e 73 63 61 74 | get.samples',.alpha=0.3).pl.scat |
18f20 | 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 5b 3a 2c 20 30 5d 2c 20 74 72 | ter(transp_Xs_sinkhorn[:,.0],.tr |
18f40 | 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 | ansp_Xs_sinkhorn[:,.1],.c=ys,... |
18f60 | 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 54 72 61 6e | .........marker='+',.label='Tran |
18f80 | 73 70 20 73 61 6d 70 6c 65 73 27 2c 20 73 3d 33 30 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 | sp.samples',.s=30).pl.xticks([]) |
18fa0 | 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 72 61 6e 73 70 6f | .pl.yticks([]).pl.title('Transpo |
18fc0 | 72 74 65 64 20 73 61 6d 70 6c 65 73 5c 6e 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 27 | rted.samples\nSinkhornTransport' |
18fe0 | 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 36 29 0a 70 6c 2e 73 63 61 74 74 65 | )..pl.subplot(2,.3,.6).pl.scatte |
19000 | 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b | r(Xt[:,.0],.Xt[:,.1],.c=yt,.mark |
19020 | 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 | er='o',............label='Target |
19040 | 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 30 2e 33 29 0a 70 6c 2e 73 63 61 74 74 65 72 | .samples',.alpha=0.3).pl.scatter |
19060 | 28 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 5f 6c 61 70 6c 61 63 65 5b 3a 2c 20 30 5d 2c 20 74 72 | (transp_Xs_emd_laplace[:,.0],.tr |
19080 | 61 6e 73 70 5f 58 73 5f 65 6d 64 5f 6c 61 70 6c 61 63 65 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c | ansp_Xs_emd_laplace[:,.1],.c=ys, |
190a0 | 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 54 | ............marker='+',.label='T |
190c0 | 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 20 73 3d 33 30 29 0a 70 6c 2e 78 74 69 63 6b 73 28 | ransp.samples',.s=30).pl.xticks( |
190e0 | 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 72 61 6e | []).pl.yticks([]).pl.title('Tran |
19100 | 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 5c 6e 45 4d 44 4c 61 70 6c 61 63 65 54 72 61 6e 73 | sported.samples\nEMDLaplaceTrans |
19120 | 70 6f 72 74 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 68 6f | port').pl.tight_layout()..pl.sho |
19140 | 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 7c b0 94 50 a3 22 30 45 30 10 00 00 30 10 00 00 22 00 | w().PK........|..P."0E0...0...". |
19160 | 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 6d 61 70 70 69 6e 67 5f 63 6f 6c 6f 72 73 5f 69 6d 61 67 65 | ..plot_otda_mapping_colors_image |
19180 | 73 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a | s.py#.-*-.coding:.utf-8.-*-.""". |
191a0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
191c0 | 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 69 6d 61 | =====================.OT.for.ima |
191e0 | 67 65 20 63 6f 6c 6f 72 20 61 64 61 70 74 61 74 69 6f 6e 20 77 69 74 68 20 6d 61 70 70 69 6e 67 | ge.color.adaptation.with.mapping |
19200 | 20 65 73 74 69 6d 61 74 69 6f 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | .estimation.==================== |
19220 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
19240 | 3d 0a 0a 4f 54 20 66 6f 72 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 20 77 69 74 68 | =..OT.for.domain.adaptation.with |
19260 | 20 69 6d 61 67 65 20 63 6f 6c 6f 72 20 61 64 61 70 74 61 74 69 6f 6e 20 5b 36 5d 20 77 69 74 68 | .image.color.adaptation.[6].with |
19280 | 20 6d 61 70 70 69 6e 67 0a 65 73 74 69 6d 61 74 69 6f 6e 20 5b 38 5d 2e 0a 0a 5b 36 5d 20 46 65 | .mapping.estimation.[8]...[6].Fe |
192a0 | 72 72 61 64 61 6e 73 2c 20 53 2e 2c 20 50 61 70 61 64 61 6b 69 73 2c 20 4e 2e 2c 20 50 65 79 72 | rradans,.S.,.Papadakis,.N.,.Peyr |
192c0 | 65 2c 20 47 2e 2c 20 26 20 41 75 6a 6f 6c 2c 20 4a 2e 20 46 2e 20 28 32 30 31 34 29 2e 20 52 65 | e,.G.,.&.Aujol,.J..F..(2014)..Re |
192e0 | 67 75 6c 61 72 69 7a 65 64 0a 20 20 20 20 64 69 73 63 72 65 74 65 20 6f 70 74 69 6d 61 6c 20 74 | gularized.....discrete.optimal.t |
19300 | 72 61 6e 73 70 6f 72 74 2e 20 53 49 41 4d 20 4a 6f 75 72 6e 61 6c 20 6f 6e 20 49 6d 61 67 69 6e | ransport..SIAM.Journal.on.Imagin |
19320 | 67 20 53 63 69 65 6e 63 65 73 2c 20 37 28 33 29 2c 0a 20 20 20 20 31 38 35 33 2d 31 38 38 32 2e | g.Sciences,.7(3),.....1853-1882. |
19340 | 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 20 46 6c | .[8].M..Perrot,.N..Courty,.R..Fl |
19360 | 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 73 74 69 | amary,.A..Habrard,."Mapping.esti |
19380 | 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 61 6c 20 | mation.for.....discrete.optimal. |
193a0 | 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 6e 20 50 | transport",.Neural.Information.P |
193c0 | 72 6f 63 65 73 73 69 6e 67 20 53 79 73 74 65 6d 73 20 28 4e 49 50 53 29 2c 0a 20 20 20 20 32 30 | rocessing.Systems.(NIPS),.....20 |
193e0 | 31 36 2e 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 73 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 | 16..."""..#.Authors:.Remi.Flamar |
19400 | 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 20 20 20 20 20 | y.<remi.flamary@unice.fr>.#..... |
19420 | 20 20 20 20 20 53 74 61 6e 69 73 6c 61 73 20 43 68 61 6d 62 6f 6e 20 3c 73 74 61 6e 2e 63 68 61 | .....Stanislas.Chambon.<stan.cha |
19440 | 6d 62 6f 6e 40 67 6d 61 69 6c 2e 63 6f 6d 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 | mbon@gmail.com>.#.#.License:.MIT |
19460 | 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 | .License..import.numpy.as.np.imp |
19480 | 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 | ort.matplotlib.pylab.as.pl.impor |
194a0 | 74 20 6f 74 0a 0a 72 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 52 61 6e 64 6f 6d 53 74 61 74 65 28 | t.ot..r.=.np.random.RandomState( |
194c0 | 34 32 29 0a 0a 0a 64 65 66 20 69 6d 32 6d 61 74 28 49 29 3a 0a 20 20 20 20 22 22 22 43 6f 6e 76 | 42)...def.im2mat(I):....."""Conv |
194e0 | 65 72 74 73 20 61 6e 64 20 69 6d 61 67 65 20 74 6f 20 6d 61 74 72 69 78 20 28 6f 6e 65 20 70 69 | erts.and.image.to.matrix.(one.pi |
19500 | 78 65 6c 20 70 65 72 20 6c 69 6e 65 29 22 22 22 0a 20 20 20 20 72 65 74 75 72 6e 20 49 2e 72 65 | xel.per.line)""".....return.I.re |
19520 | 73 68 61 70 65 28 28 49 2e 73 68 61 70 65 5b 30 5d 20 2a 20 49 2e 73 68 61 70 65 5b 31 5d 2c 20 | shape((I.shape[0].*.I.shape[1],. |
19540 | 49 2e 73 68 61 70 65 5b 32 5d 29 29 0a 0a 0a 64 65 66 20 6d 61 74 32 69 6d 28 58 2c 20 73 68 61 | I.shape[2]))...def.mat2im(X,.sha |
19560 | 70 65 29 3a 0a 20 20 20 20 22 22 22 43 6f 6e 76 65 72 74 73 20 62 61 63 6b 20 61 20 6d 61 74 72 | pe):....."""Converts.back.a.matr |
19580 | 69 78 20 74 6f 20 61 6e 20 69 6d 61 67 65 22 22 22 0a 20 20 20 20 72 65 74 75 72 6e 20 58 2e 72 | ix.to.an.image""".....return.X.r |
195a0 | 65 73 68 61 70 65 28 73 68 61 70 65 29 0a 0a 0a 64 65 66 20 6d 69 6e 6d 61 78 28 49 29 3a 0a 20 | eshape(shape)...def.minmax(I):.. |
195c0 | 20 20 20 72 65 74 75 72 6e 20 6e 70 2e 63 6c 69 70 28 49 2c 20 30 2c 20 31 29 0a 0a 0a 23 23 23 | ...return.np.clip(I,.0,.1)...### |
195e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
19600 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
19620 | 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d | ###########.#.Generate.data.#.-- |
19640 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 20 4c 6f 61 64 69 6e 67 20 69 6d 61 67 65 73 0a 49 31 | -----------..#.Loading.images.I1 |
19660 | 20 3d 20 70 6c 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 6f 63 65 61 6e 5f 64 61 79 2e | .=.pl.imread('../data/ocean_day. |
19680 | 6a 70 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 20 2f 20 32 35 36 0a 49 | jpg').astype(np.float64)./.256.I |
196a0 | 32 20 3d 20 70 6c 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 6f 63 65 61 6e 5f 73 75 6e | 2.=.pl.imread('../data/ocean_sun |
196c0 | 73 65 74 2e 6a 70 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 20 2f 20 32 | set.jpg').astype(np.float64)./.2 |
196e0 | 35 36 0a 0a 0a 58 31 20 3d 20 69 6d 32 6d 61 74 28 49 31 29 0a 58 32 20 3d 20 69 6d 32 6d 61 74 | 56...X1.=.im2mat(I1).X2.=.im2mat |
19700 | 28 49 32 29 0a 0a 23 20 74 72 61 69 6e 69 6e 67 20 73 61 6d 70 6c 65 73 0a 6e 62 20 3d 20 31 30 | (I2)..#.training.samples.nb.=.10 |
19720 | 30 30 0a 69 64 78 31 20 3d 20 72 2e 72 61 6e 64 69 6e 74 28 58 31 2e 73 68 61 70 65 5b 30 5d 2c | 00.idx1.=.r.randint(X1.shape[0], |
19740 | 20 73 69 7a 65 3d 28 6e 62 2c 29 29 0a 69 64 78 32 20 3d 20 72 2e 72 61 6e 64 69 6e 74 28 58 32 | .size=(nb,)).idx2.=.r.randint(X2 |
19760 | 2e 73 68 61 70 65 5b 30 5d 2c 20 73 69 7a 65 3d 28 6e 62 2c 29 29 0a 0a 58 73 20 3d 20 58 31 5b | .shape[0],.size=(nb,))..Xs.=.X1[ |
19780 | 69 64 78 31 2c 20 3a 5d 0a 58 74 20 3d 20 58 32 5b 69 64 78 32 2c 20 3a 5d 0a 0a 0a 23 23 23 23 | idx1,.:].Xt.=.X2[idx2,.:]...#### |
197a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
197c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
197e0 | 23 23 23 23 23 23 23 23 23 23 0a 23 20 44 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 20 66 | ##########.#.Domain.adaptation.f |
19800 | 6f 72 20 70 69 78 65 6c 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20 74 72 61 6e 73 66 65 72 0a 23 | or.pixel.distribution.transfer.# |
19820 | 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | .------------------------------- |
19840 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 20 45 4d 44 54 72 61 6e 73 70 6f | ------------------..#.EMDTranspo |
19860 | 72 74 0a 6f 74 5f 65 6d 64 20 3d 20 6f 74 2e 64 61 2e 45 4d 44 54 72 61 6e 73 70 6f 72 74 28 29 | rt.ot_emd.=.ot.da.EMDTransport() |
19880 | 0a 6f 74 5f 65 6d 64 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 74 72 61 6e 73 70 | .ot_emd.fit(Xs=Xs,.Xt=Xt).transp |
198a0 | 5f 58 73 5f 65 6d 64 20 3d 20 6f 74 5f 65 6d 64 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 31 | _Xs_emd.=.ot_emd.transform(Xs=X1 |
198c0 | 29 0a 49 6d 61 67 65 5f 65 6d 64 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 74 72 61 6e | ).Image_emd.=.minmax(mat2im(tran |
198e0 | 73 70 5f 58 73 5f 65 6d 64 2c 20 49 31 2e 73 68 61 70 65 29 29 0a 0a 23 20 53 69 6e 6b 68 6f 72 | sp_Xs_emd,.I1.shape))..#.Sinkhor |
19900 | 6e 54 72 61 6e 73 70 6f 72 74 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 2e 64 61 2e 53 | nTransport.ot_sinkhorn.=.ot.da.S |
19920 | 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 28 72 65 67 5f 65 3d 31 65 2d 31 29 0a 6f 74 5f | inkhornTransport(reg_e=1e-1).ot_ |
19940 | 73 69 6e 6b 68 6f 72 6e 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 74 72 61 6e 73 | sinkhorn.fit(Xs=Xs,.Xt=Xt).trans |
19960 | 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 5f 73 69 6e 6b 68 6f 72 6e 2e 74 72 61 6e | p_Xs_sinkhorn.=.ot_sinkhorn.tran |
19980 | 73 66 6f 72 6d 28 58 73 3d 58 31 29 0a 49 6d 61 67 65 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6d 69 | sform(Xs=X1).Image_sinkhorn.=.mi |
199a0 | 6e 6d 61 78 28 6d 61 74 32 69 6d 28 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 2c 20 | nmax(mat2im(transp_Xs_sinkhorn,. |
199c0 | 49 31 2e 73 68 61 70 65 29 29 0a 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 20 3d 20 | I1.shape))..ot_mapping_linear.=. |
199e0 | 6f 74 2e 64 61 2e 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 28 0a 20 20 20 20 6d 75 3d 31 | ot.da.MappingTransport(.....mu=1 |
19a00 | 65 30 2c 20 65 74 61 3d 31 65 2d 38 2c 20 62 69 61 73 3d 54 72 75 65 2c 20 6d 61 78 5f 69 74 65 | e0,.eta=1e-8,.bias=True,.max_ite |
19a20 | 72 3d 32 30 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 6c | r=20,.verbose=True).ot_mapping_l |
19a40 | 69 6e 65 61 72 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 58 31 74 6c 20 3d 20 | inear.fit(Xs=Xs,.Xt=Xt)..X1tl.=. |
19a60 | 6f 74 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 | ot_mapping_linear.transform(Xs=X |
19a80 | 31 29 0a 49 6d 61 67 65 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 20 3d 20 6d 69 6e 6d 61 78 | 1).Image_mapping_linear.=.minmax |
19aa0 | 28 6d 61 74 32 69 6d 28 58 31 74 6c 2c 20 49 31 2e 73 68 61 70 65 29 29 0a 0a 6f 74 5f 6d 61 70 | (mat2im(X1tl,.I1.shape))..ot_map |
19ac0 | 70 69 6e 67 5f 67 61 75 73 73 69 61 6e 20 3d 20 6f 74 2e 64 61 2e 4d 61 70 70 69 6e 67 54 72 61 | ping_gaussian.=.ot.da.MappingTra |
19ae0 | 6e 73 70 6f 72 74 28 0a 20 20 20 20 6d 75 3d 31 65 30 2c 20 65 74 61 3d 31 65 2d 32 2c 20 73 69 | nsport(.....mu=1e0,.eta=1e-2,.si |
19b00 | 67 6d 61 3d 31 2c 20 62 69 61 73 3d 46 61 6c 73 65 2c 20 6d 61 78 5f 69 74 65 72 3d 31 30 2c 20 | gma=1,.bias=False,.max_iter=10,. |
19b20 | 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 67 61 75 73 73 69 61 | verbose=True).ot_mapping_gaussia |
19b40 | 6e 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 58 31 74 6e 20 3d 20 6f 74 5f 6d | n.fit(Xs=Xs,.Xt=Xt)..X1tn.=.ot_m |
19b60 | 61 70 70 69 6e 67 5f 67 61 75 73 73 69 61 6e 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 31 29 | apping_gaussian.transform(Xs=X1) |
19b80 | 20 20 23 20 75 73 65 20 74 68 65 20 65 73 74 69 6d 61 74 65 64 20 6d 61 70 70 69 6e 67 0a 49 6d | ..#.use.the.estimated.mapping.Im |
19ba0 | 61 67 65 5f 6d 61 70 70 69 6e 67 5f 67 61 75 73 73 69 61 6e 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 | age_mapping_gaussian.=.minmax(ma |
19bc0 | 74 32 69 6d 28 58 31 74 6e 2c 20 49 31 2e 73 68 61 70 65 29 29 0a 0a 0a 23 23 23 23 23 23 23 23 | t2im(X1tn,.I1.shape))...######## |
19be0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
19c00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
19c20 | 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 6f 72 69 67 69 6e 61 6c 20 69 6d 61 67 65 73 0a 23 20 | ######.#.Plot.original.images.#. |
19c40 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 | --------------------..pl.figure( |
19c60 | 31 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 29 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 | 1,.figsize=(6.4,.3)).pl.subplot( |
19c80 | 31 2c 20 32 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 29 0a 70 6c 2e 61 78 69 73 28 27 | 1,.2,.1).pl.imshow(I1).pl.axis(' |
19ca0 | 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 31 27 29 0a 0a 70 6c 2e 73 75 | off').pl.title('Image.1')..pl.su |
19cc0 | 62 70 6c 6f 74 28 31 2c 20 32 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 29 0a 70 6c 2e | bplot(1,.2,.2).pl.imshow(I2).pl. |
19ce0 | 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 32 27 29 0a | axis('off').pl.title('Image.2'). |
19d00 | 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 | pl.tight_layout()...############ |
19d20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
19d40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
19d60 | 23 23 0a 23 20 50 6c 6f 74 20 70 69 78 65 6c 20 76 61 6c 75 65 73 20 64 69 73 74 72 69 62 75 74 | ##.#.Plot.pixel.values.distribut |
19d80 | 69 6f 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | ion.#.-------------------------- |
19da0 | 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c | ----..pl.figure(2,.figsize=(6.4, |
19dc0 | 20 35 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 63 61 | .5))..pl.subplot(1,.2,.1).pl.sca |
19de0 | 74 74 65 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 58 73 5b 3a 2c 20 32 5d 2c 20 63 3d 58 73 29 0a 70 | tter(Xs[:,.0],.Xs[:,.2],.c=Xs).p |
19e00 | 6c 2e 61 78 69 73 28 5b 30 2c 20 31 2c 20 30 2c 20 31 5d 29 0a 70 6c 2e 78 6c 61 62 65 6c 28 27 | l.axis([0,.1,.0,.1]).pl.xlabel(' |
19e20 | 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 65 | Red').pl.ylabel('Blue').pl.title |
19e40 | 28 27 49 6d 61 67 65 20 31 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 32 29 | ('Image.1')..pl.subplot(1,.2,.2) |
19e60 | 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 32 5d 2c 20 | .pl.scatter(Xt[:,.0],.Xt[:,.2],. |
19e80 | 63 3d 58 74 29 0a 70 6c 2e 61 78 69 73 28 5b 30 2c 20 31 2c 20 30 2c 20 31 5d 29 0a 70 6c 2e 78 | c=Xt).pl.axis([0,.1,.0,.1]).pl.x |
19ea0 | 6c 61 62 65 6c 28 27 52 65 64 27 29 0a 70 6c 2e 79 6c 61 62 65 6c 28 27 42 6c 75 65 27 29 0a 70 | label('Red').pl.ylabel('Blue').p |
19ec0 | 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 32 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f | l.title('Image.2').pl.tight_layo |
19ee0 | 75 74 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ut()...######################### |
19f00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
19f20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 74 72 61 | #####################.#.Plot.tra |
19f40 | 6e 73 66 6f 72 6d 65 64 20 69 6d 61 67 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | nsformed.images.#.-------------- |
19f60 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 3d | ---------..pl.figure(2,.figsize= |
19f80 | 28 31 30 2c 20 35 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 31 29 0a 70 6c | (10,.5))..pl.subplot(2,.3,.1).pl |
19fa0 | 2e 69 6d 73 68 6f 77 28 49 31 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 | .imshow(I1).pl.axis('off').pl.ti |
19fc0 | 74 6c 65 28 27 49 6d 2e 20 31 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 34 | tle('Im..1')..pl.subplot(2,.3,.4 |
19fe0 | 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 | ).pl.imshow(I2).pl.axis('off').p |
1a000 | 6c 2e 74 69 74 6c 65 28 27 49 6d 2e 20 32 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 | l.title('Im..2')..pl.subplot(2,. |
1a020 | 33 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 6d 61 67 65 5f 65 6d 64 29 0a 70 6c 2e 61 78 | 3,.2).pl.imshow(Image_emd).pl.ax |
1a040 | 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 45 6d 64 54 72 61 6e 73 70 6f 72 74 | is('off').pl.title('EmdTransport |
1a060 | 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 35 29 0a 70 6c 2e 69 6d 73 68 6f | ')..pl.subplot(2,.3,.5).pl.imsho |
1a080 | 77 28 49 6d 61 67 65 5f 73 69 6e 6b 68 6f 72 6e 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 | w(Image_sinkhorn).pl.axis('off') |
1a0a0 | 0a 70 6c 2e 74 69 74 6c 65 28 27 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a | .pl.title('SinkhornTransport').. |
1a0c0 | 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 6d | pl.subplot(2,.3,.3).pl.imshow(Im |
1a0e0 | 61 67 65 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 | age_mapping_linear).pl.axis('off |
1a100 | 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 20 28 6c | ').pl.title('MappingTransport.(l |
1a120 | 69 6e 65 61 72 29 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 36 29 0a 70 6c | inear)')..pl.subplot(2,.3,.6).pl |
1a140 | 2e 69 6d 73 68 6f 77 28 49 6d 61 67 65 5f 6d 61 70 70 69 6e 67 5f 67 61 75 73 73 69 61 6e 29 0a | .imshow(Image_mapping_gaussian). |
1a160 | 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4d 61 70 70 69 6e 67 | pl.axis('off').pl.title('Mapping |
1a180 | 54 72 61 6e 73 70 6f 72 74 20 28 67 61 75 73 73 69 61 6e 29 27 29 0a 70 6c 2e 74 69 67 68 74 5f | Transport.(gaussian)').pl.tight_ |
1a1a0 | 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 7c b0 | layout()..pl.show().PK........|. |
1a1c0 | 94 50 20 e7 75 c2 7c 1c 00 00 7c 1c 00 00 19 00 00 00 70 6c 6f 74 5f 67 72 6f 6d 6f 76 5f 62 61 | .P..u.|...|.......plot_gromov_ba |
1a1e0 | 72 79 63 65 6e 74 65 72 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d | rycenter.py#.-*-.coding:.utf-8.- |
1a200 | 2a 2d 0d 0a 22 22 22 0d 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | *-.."""..======================= |
1a220 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 47 72 6f 6d 6f 76 2d 57 61 73 73 65 72 73 74 65 | ==============..Gromov-Wasserste |
1a240 | 69 6e 20 42 61 72 79 63 65 6e 74 65 72 20 65 78 61 6d 70 6c 65 0d 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d | in.Barycenter.example..========= |
1a260 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 0d 0a | ============================.... |
1a280 | 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 73 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73 68 6f 77 | This.example.is.designed.to.show |
1a2a0 | 20 68 6f 77 20 74 6f 20 75 73 65 20 74 68 65 20 47 72 6f 6d 6f 76 2d 57 61 73 73 65 72 73 74 65 | .how.to.use.the.Gromov-Wasserste |
1a2c0 | 69 6e 20 64 69 73 74 61 6e 63 65 0d 0a 63 6f 6d 70 75 74 61 74 69 6f 6e 20 69 6e 20 50 4f 54 2e | in.distance..computation.in.POT. |
1a2e0 | 0d 0a 22 22 22 0d 0a 0d 0a 23 20 41 75 74 68 6f 72 3a 20 45 72 77 61 6e 20 56 61 75 74 69 65 72 | .."""....#.Author:.Erwan.Vautier |
1a300 | 20 3c 65 72 77 61 6e 2e 76 61 75 74 69 65 72 40 67 6d 61 69 6c 2e 63 6f 6d 3e 0d 0a 23 20 20 20 | .<erwan.vautier@gmail.com>..#... |
1a320 | 20 20 20 20 20 20 4e 69 63 6f 6c 61 73 20 43 6f 75 72 74 79 20 3c 6e 63 6f 75 72 74 79 40 69 72 | ......Nicolas.Courty.<ncourty@ir |
1a340 | 69 73 61 2e 66 72 3e 0d 0a 23 0d 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e | isa.fr>..#..#.License:.MIT.Licen |
1a360 | 73 65 0d 0a 0d 0a 0d 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0d 0a 69 6d 70 6f | se......import.numpy.as.np..impo |
1a380 | 72 74 20 73 63 69 70 79 20 61 73 20 73 70 0d 0a 0d 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 | rt.scipy.as.sp....import.matplot |
1a3a0 | 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0d 0a 66 72 6f 6d 20 73 6b 6c 65 61 72 6e 20 69 6d | lib.pylab.as.pl..from.sklearn.im |
1a3c0 | 70 6f 72 74 20 6d 61 6e 69 66 6f 6c 64 0d 0a 66 72 6f 6d 20 73 6b 6c 65 61 72 6e 2e 64 65 63 6f | port.manifold..from.sklearn.deco |
1a3e0 | 6d 70 6f 73 69 74 69 6f 6e 20 69 6d 70 6f 72 74 20 50 43 41 0d 0a 0d 0a 69 6d 70 6f 72 74 20 6f | mposition.import.PCA....import.o |
1a400 | 74 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | t....########################### |
1a420 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
1a440 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 23 20 53 6d 61 63 6f 66 20 4d 44 | ###################..#.Smacof.MD |
1a460 | 53 0d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 0d 0a 23 20 54 68 69 73 20 66 75 6e 63 74 | S..#.----------..#..#.This.funct |
1a480 | 69 6f 6e 20 61 6c 6c 6f 77 73 20 74 6f 20 66 69 6e 64 20 61 6e 20 65 6d 62 65 64 64 69 6e 67 20 | ion.allows.to.find.an.embedding. |
1a4a0 | 6f 66 20 70 6f 69 6e 74 73 20 67 69 76 65 6e 20 61 20 64 69 73 73 69 6d 69 6c 61 72 69 74 79 20 | of.points.given.a.dissimilarity. |
1a4c0 | 6d 61 74 72 69 78 0d 0a 23 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 67 69 76 65 6e 20 62 79 20 | matrix..#.that.will.be.given.by. |
1a4e0 | 74 68 65 20 6f 75 74 70 75 74 20 6f 66 20 74 68 65 20 61 6c 67 6f 72 69 74 68 6d 0d 0a 0d 0a 0d | the.output.of.the.algorithm..... |
1a500 | 0a 64 65 66 20 73 6d 61 63 6f 66 5f 6d 64 73 28 43 2c 20 64 69 6d 2c 20 6d 61 78 5f 69 74 65 72 | .def.smacof_mds(C,.dim,.max_iter |
1a520 | 3d 33 30 30 30 2c 20 65 70 73 3d 31 65 2d 39 29 3a 0d 0a 20 20 20 20 22 22 22 0d 0a 20 20 20 20 | =3000,.eps=1e-9):......"""...... |
1a540 | 52 65 74 75 72 6e 73 20 61 6e 20 69 6e 74 65 72 70 6f 6c 61 74 65 64 20 70 6f 69 6e 74 20 63 6c | Returns.an.interpolated.point.cl |
1a560 | 6f 75 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 64 69 73 73 69 6d 69 6c 61 72 69 74 79 20 | oud.following.the.dissimilarity. |
1a580 | 6d 61 74 72 69 78 20 43 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 4d 41 43 4f 46 20 6d 75 6c 74 69 | matrix.C......using.SMACOF.multi |
1a5a0 | 64 69 6d 65 6e 73 69 6f 6e 61 6c 20 73 63 61 6c 69 6e 67 20 28 4d 44 53 29 20 69 6e 20 73 70 65 | dimensional.scaling.(MDS).in.spe |
1a5c0 | 63 69 66 69 63 20 64 69 6d 65 6e 73 69 6f 6e 6e 65 64 0d 0a 20 20 20 20 74 61 72 67 65 74 20 73 | cific.dimensionned......target.s |
1a5e0 | 70 61 63 65 0d 0a 0d 0a 20 20 20 20 50 61 72 61 6d 65 74 65 72 73 0d 0a 20 20 20 20 2d 2d 2d 2d | pace........Parameters......---- |
1a600 | 2d 2d 2d 2d 2d 2d 0d 0a 20 20 20 20 43 20 3a 20 6e 64 61 72 72 61 79 2c 20 73 68 61 70 65 20 28 | ------......C.:.ndarray,.shape.( |
1a620 | 6e 73 2c 20 6e 73 29 0d 0a 20 20 20 20 20 20 20 20 64 69 73 73 69 6d 69 6c 61 72 69 74 79 20 6d | ns,.ns)..........dissimilarity.m |
1a640 | 61 74 72 69 78 0d 0a 20 20 20 20 64 69 6d 20 3a 20 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 | atrix......dim.:.int............ |
1a660 | 64 69 6d 65 6e 73 69 6f 6e 20 6f 66 20 74 68 65 20 74 61 72 67 65 74 65 64 20 73 70 61 63 65 0d | dimension.of.the.targeted.space. |
1a680 | 0a 20 20 20 20 6d 61 78 5f 69 74 65 72 20 3a 20 20 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 4d 61 | .....max_iter.:..int..........Ma |
1a6a0 | 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 74 68 | ximum.number.of.iterations.of.th |
1a6c0 | 65 20 53 4d 41 43 4f 46 20 61 6c 67 6f 72 69 74 68 6d 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 | e.SMACOF.algorithm.for.a.single. |
1a6e0 | 72 75 6e 0d 0a 20 20 20 20 65 70 73 20 3a 20 66 6c 6f 61 74 0d 0a 20 20 20 20 20 20 20 20 72 65 | run......eps.:.float..........re |
1a700 | 6c 61 74 69 76 65 20 74 6f 6c 65 72 61 6e 63 65 20 77 2e 72 2e 74 20 73 74 72 65 73 73 20 74 6f | lative.tolerance.w.r.t.stress.to |
1a720 | 20 64 65 63 6c 61 72 65 20 63 6f 6e 76 65 72 67 65 0d 0a 0d 0a 20 20 20 20 52 65 74 75 72 6e 73 | .declare.converge........Returns |
1a740 | 0d 0a 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 0d 0a 20 20 20 20 6e 70 6f 73 20 3a 20 6e 64 61 72 72 61 | ......-------......npos.:.ndarra |
1a760 | 79 2c 20 73 68 61 70 65 20 28 52 2c 20 64 69 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 45 6d | y,.shape.(R,.dim).............Em |
1a780 | 62 65 64 64 65 64 20 63 6f 6f 72 64 69 6e 61 74 65 73 20 6f 66 20 74 68 65 20 69 6e 74 65 72 70 | bedded.coordinates.of.the.interp |
1a7a0 | 6f 6c 61 74 65 64 20 70 6f 69 6e 74 20 63 6c 6f 75 64 20 28 64 65 66 69 6e 65 64 20 77 69 74 68 | olated.point.cloud.(defined.with |
1a7c0 | 0d 0a 20 20 20 20 20 20 20 20 20 20 20 6f 6e 65 20 69 73 6f 6d 65 74 72 79 29 0d 0a 20 20 20 20 | .............one.isometry)...... |
1a7e0 | 22 22 22 0d 0a 0d 0a 20 20 20 20 72 6e 67 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 52 61 6e 64 6f | """........rng.=.np.random.Rando |
1a800 | 6d 53 74 61 74 65 28 73 65 65 64 3d 33 29 0d 0a 0d 0a 20 20 20 20 6d 64 73 20 3d 20 6d 61 6e 69 | mState(seed=3)........mds.=.mani |
1a820 | 66 6f 6c 64 2e 4d 44 53 28 0d 0a 20 20 20 20 20 20 20 20 64 69 6d 2c 0d 0a 20 20 20 20 20 20 20 | fold.MDS(..........dim,......... |
1a840 | 20 6d 61 78 5f 69 74 65 72 3d 6d 61 78 5f 69 74 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 65 70 73 | .max_iter=max_iter,..........eps |
1a860 | 3d 31 65 2d 39 2c 0d 0a 20 20 20 20 20 20 20 20 64 69 73 73 69 6d 69 6c 61 72 69 74 79 3d 27 70 | =1e-9,..........dissimilarity='p |
1a880 | 72 65 63 6f 6d 70 75 74 65 64 27 2c 0d 0a 20 20 20 20 20 20 20 20 6e 5f 69 6e 69 74 3d 31 29 0d | recomputed',..........n_init=1). |
1a8a0 | 0a 20 20 20 20 70 6f 73 20 3d 20 6d 64 73 2e 66 69 74 28 43 29 2e 65 6d 62 65 64 64 69 6e 67 5f | .....pos.=.mds.fit(C).embedding_ |
1a8c0 | 0d 0a 0d 0a 20 20 20 20 6e 6d 64 73 20 3d 20 6d 61 6e 69 66 6f 6c 64 2e 4d 44 53 28 0d 0a 20 20 | ........nmds.=.manifold.MDS(.... |
1a8e0 | 20 20 20 20 20 20 32 2c 0d 0a 20 20 20 20 20 20 20 20 6d 61 78 5f 69 74 65 72 3d 6d 61 78 5f 69 | ......2,..........max_iter=max_i |
1a900 | 74 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 65 70 73 3d 31 65 2d 39 2c 0d 0a 20 20 20 20 20 20 20 | ter,..........eps=1e-9,......... |
1a920 | 20 64 69 73 73 69 6d 69 6c 61 72 69 74 79 3d 22 70 72 65 63 6f 6d 70 75 74 65 64 22 2c 0d 0a 20 | .dissimilarity="precomputed",... |
1a940 | 20 20 20 20 20 20 20 72 61 6e 64 6f 6d 5f 73 74 61 74 65 3d 72 6e 67 2c 0d 0a 20 20 20 20 20 20 | .......random_state=rng,........ |
1a960 | 20 20 6e 5f 69 6e 69 74 3d 31 29 0d 0a 20 20 20 20 6e 70 6f 73 20 3d 20 6e 6d 64 73 2e 66 69 74 | ..n_init=1)......npos.=.nmds.fit |
1a980 | 5f 74 72 61 6e 73 66 6f 72 6d 28 43 2c 20 69 6e 69 74 3d 70 6f 73 29 0d 0a 0d 0a 20 20 20 20 72 | _transform(C,.init=pos)........r |
1a9a0 | 65 74 75 72 6e 20 6e 70 6f 73 0d 0a 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | eturn.npos......################ |
1a9c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
1a9e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a | ##############################.. |
1aa00 | 23 20 44 61 74 61 20 70 72 65 70 61 72 61 74 69 6f 6e 0d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | #.Data.preparation..#.---------- |
1aa20 | 2d 2d 2d 2d 2d 2d 0d 0a 23 0d 0a 23 20 54 68 65 20 66 6f 75 72 20 64 69 73 74 72 69 62 75 74 69 | ------..#..#.The.four.distributi |
1aa40 | 6f 6e 73 20 61 72 65 20 63 6f 6e 73 74 72 75 63 74 65 64 20 66 72 6f 6d 20 34 20 73 69 6d 70 6c | ons.are.constructed.from.4.simpl |
1aa60 | 65 20 69 6d 61 67 65 73 0d 0a 0d 0a 0d 0a 64 65 66 20 69 6d 32 6d 61 74 28 49 29 3a 0d 0a 20 20 | e.images......def.im2mat(I):.... |
1aa80 | 20 20 22 22 22 43 6f 6e 76 65 72 74 73 20 61 6e 64 20 69 6d 61 67 65 20 74 6f 20 6d 61 74 72 69 | .."""Converts.and.image.to.matri |
1aaa0 | 78 20 28 6f 6e 65 20 70 69 78 65 6c 20 70 65 72 20 6c 69 6e 65 29 22 22 22 0d 0a 20 20 20 20 72 | x.(one.pixel.per.line)"""......r |
1aac0 | 65 74 75 72 6e 20 49 2e 72 65 73 68 61 70 65 28 28 49 2e 73 68 61 70 65 5b 30 5d 20 2a 20 49 2e | eturn.I.reshape((I.shape[0].*.I. |
1aae0 | 73 68 61 70 65 5b 31 5d 2c 20 49 2e 73 68 61 70 65 5b 32 5d 29 29 0d 0a 0d 0a 0d 0a 73 71 75 61 | shape[1],.I.shape[2]))......squa |
1ab00 | 72 65 20 3d 20 70 6c 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 73 71 75 61 72 65 2e 70 | re.=.pl.imread('../data/square.p |
1ab20 | 6e 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 5b 3a 2c 20 3a 2c 20 32 5d | ng').astype(np.float64)[:,.:,.2] |
1ab40 | 20 2f 20 32 35 36 0d 0a 63 72 6f 73 73 20 3d 20 70 6c 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 | ./.256..cross.=.pl.imread('../da |
1ab60 | 74 61 2f 63 72 6f 73 73 2e 70 6e 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 | ta/cross.png').astype(np.float64 |
1ab80 | 29 5b 3a 2c 20 3a 2c 20 32 5d 20 2f 20 32 35 36 0d 0a 74 72 69 61 6e 67 6c 65 20 3d 20 70 6c 2e | )[:,.:,.2]./.256..triangle.=.pl. |
1aba0 | 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 74 72 69 61 6e 67 6c 65 2e 70 6e 67 27 29 2e 61 | imread('../data/triangle.png').a |
1abc0 | 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 5b 3a 2c 20 3a 2c 20 32 5d 20 2f 20 32 35 36 | stype(np.float64)[:,.:,.2]./.256 |
1abe0 | 0d 0a 73 74 61 72 20 3d 20 70 6c 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 73 74 61 72 | ..star.=.pl.imread('../data/star |
1ac00 | 2e 70 6e 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 5b 3a 2c 20 3a 2c 20 | .png').astype(np.float64)[:,.:,. |
1ac20 | 32 5d 20 2f 20 32 35 36 0d 0a 0d 0a 73 68 61 70 65 73 20 3d 20 5b 73 71 75 61 72 65 2c 20 63 72 | 2]./.256....shapes.=.[square,.cr |
1ac40 | 6f 73 73 2c 20 74 72 69 61 6e 67 6c 65 2c 20 73 74 61 72 5d 0d 0a 0d 0a 53 20 3d 20 34 0d 0a 78 | oss,.triangle,.star]....S.=.4..x |
1ac60 | 73 20 3d 20 5b 5b 5d 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 53 29 5d 0d 0a 0d 0a 0d 0a | s.=.[[].for.i.in.range(S)]...... |
1ac80 | 66 6f 72 20 6e 62 20 69 6e 20 72 61 6e 67 65 28 34 29 3a 0d 0a 20 20 20 20 66 6f 72 20 69 20 69 | for.nb.in.range(4):......for.i.i |
1aca0 | 6e 20 72 61 6e 67 65 28 38 29 3a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 20 6a 20 69 6e 20 72 61 | n.range(8):..........for.j.in.ra |
1acc0 | 6e 67 65 28 38 29 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 73 68 61 70 65 73 5b 6e | nge(8):..............if.shapes[n |
1ace0 | 62 5d 5b 69 2c 20 6a 5d 20 3c 20 30 2e 39 35 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | b][i,.j].<.0.95:................ |
1ad00 | 20 20 78 73 5b 6e 62 5d 2e 61 70 70 65 6e 64 28 5b 6a 2c 20 38 20 2d 20 69 5d 29 0d 0a 0d 0a 78 | ..xs[nb].append([j,.8.-.i])....x |
1ad20 | 73 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 6e 70 2e 61 72 72 61 79 28 78 73 5b 30 5d 29 2c 20 6e | s.=.np.array([np.array(xs[0]),.n |
1ad40 | 70 2e 61 72 72 61 79 28 78 73 5b 31 5d 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | p.array(xs[1]),................. |
1ad60 | 6e 70 2e 61 72 72 61 79 28 78 73 5b 32 5d 29 2c 20 6e 70 2e 61 72 72 61 79 28 78 73 5b 33 5d 29 | np.array(xs[2]),.np.array(xs[3]) |
1ad80 | 5d 29 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ])....########################## |
1ada0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
1adc0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 23 20 42 61 72 79 63 65 6e 74 | ####################..#.Barycent |
1ade0 | 65 72 20 63 6f 6d 70 75 74 61 74 69 6f 6e 0d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | er.computation..#.-------------- |
1ae00 | 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 0d 0a 6e 73 20 3d 20 5b 6c 65 6e 28 78 73 5b 73 5d 29 20 66 | --------......ns.=.[len(xs[s]).f |
1ae20 | 6f 72 20 73 20 69 6e 20 72 61 6e 67 65 28 53 29 5d 0d 0a 6e 5f 73 61 6d 70 6c 65 73 20 3d 20 33 | or.s.in.range(S)]..n_samples.=.3 |
1ae40 | 30 0d 0a 0d 0a 22 22 22 43 6f 6d 70 75 74 65 20 61 6c 6c 20 64 69 73 74 61 6e 63 65 73 20 6d 61 | 0...."""Compute.all.distances.ma |
1ae60 | 74 72 69 63 65 73 20 66 6f 72 20 74 68 65 20 66 6f 75 72 20 73 68 61 70 65 73 22 22 22 0d 0a 43 | trices.for.the.four.shapes"""..C |
1ae80 | 73 20 3d 20 5b 73 70 2e 73 70 61 74 69 61 6c 2e 64 69 73 74 61 6e 63 65 2e 63 64 69 73 74 28 78 | s.=.[sp.spatial.distance.cdist(x |
1aea0 | 73 5b 73 5d 2c 20 78 73 5b 73 5d 29 20 66 6f 72 20 73 20 69 6e 20 72 61 6e 67 65 28 53 29 5d 0d | s[s],.xs[s]).for.s.in.range(S)]. |
1aec0 | 0a 43 73 20 3d 20 5b 63 73 20 2f 20 63 73 2e 6d 61 78 28 29 20 66 6f 72 20 63 73 20 69 6e 20 43 | .Cs.=.[cs./.cs.max().for.cs.in.C |
1aee0 | 73 5d 0d 0a 0d 0a 70 73 20 3d 20 5b 6f 74 2e 75 6e 69 66 28 6e 73 5b 73 5d 29 20 66 6f 72 20 73 | s]....ps.=.[ot.unif(ns[s]).for.s |
1af00 | 20 69 6e 20 72 61 6e 67 65 28 53 29 5d 0d 0a 70 20 3d 20 6f 74 2e 75 6e 69 66 28 6e 5f 73 61 6d | .in.range(S)]..p.=.ot.unif(n_sam |
1af20 | 70 6c 65 73 29 0d 0a 0d 0a 0d 0a 6c 61 6d 62 64 61 73 74 20 3d 20 5b 5b 66 6c 6f 61 74 28 69 29 | ples)......lambdast.=.[[float(i) |
1af40 | 20 2f 20 33 2c 20 66 6c 6f 61 74 28 33 20 2d 20 69 29 20 2f 20 33 5d 20 66 6f 72 20 69 20 69 6e | ./.3,.float(3.-.i)./.3].for.i.in |
1af60 | 20 5b 31 2c 20 32 5d 5d 0d 0a 0d 0a 43 74 30 31 20 3d 20 5b 30 20 66 6f 72 20 69 20 69 6e 20 72 | .[1,.2]]....Ct01.=.[0.for.i.in.r |
1af80 | 61 6e 67 65 28 32 29 5d 0d 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 32 29 3a 0d 0a 20 20 | ange(2)]..for.i.in.range(2):.... |
1afa0 | 20 20 43 74 30 31 5b 69 5d 20 3d 20 6f 74 2e 67 72 6f 6d 6f 76 2e 67 72 6f 6d 6f 76 5f 62 61 72 | ..Ct01[i].=.ot.gromov.gromov_bar |
1afc0 | 79 63 65 6e 74 65 72 73 28 6e 5f 73 61 6d 70 6c 65 73 2c 20 5b 43 73 5b 30 5d 2c 20 43 73 5b 31 | ycenters(n_samples,.[Cs[0],.Cs[1 |
1afe0 | 5d 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ]],............................. |
1b000 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 70 73 5b 30 5d 2c 20 70 73 5b 31 5d 0d 0a 20 | ................[ps[0],.ps[1]... |
1b020 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
1b040 | 20 20 20 20 20 20 20 20 20 20 20 5d 2c 20 70 2c 20 6c 61 6d 62 64 61 73 74 5b 69 5d 2c 20 27 73 | ...........],.p,.lambdast[i],.'s |
1b060 | 71 75 61 72 65 5f 6c 6f 73 73 27 2c 20 20 23 20 35 65 2d 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 | quare_loss',..#.5e-4,........... |
1b080 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
1b0a0 | 20 20 6d 61 78 5f 69 74 65 72 3d 31 30 30 2c 20 74 6f 6c 3d 31 65 2d 33 29 0d 0a 0d 0a 43 74 30 | ..max_iter=100,.tol=1e-3)....Ct0 |
1b0c0 | 32 20 3d 20 5b 30 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 32 29 5d 0d 0a 66 6f 72 20 69 | 2.=.[0.for.i.in.range(2)]..for.i |
1b0e0 | 20 69 6e 20 72 61 6e 67 65 28 32 29 3a 0d 0a 20 20 20 20 43 74 30 32 5b 69 5d 20 3d 20 6f 74 2e | .in.range(2):......Ct02[i].=.ot. |
1b100 | 67 72 6f 6d 6f 76 2e 67 72 6f 6d 6f 76 5f 62 61 72 79 63 65 6e 74 65 72 73 28 6e 5f 73 61 6d 70 | gromov.gromov_barycenters(n_samp |
1b120 | 6c 65 73 2c 20 5b 43 73 5b 30 5d 2c 20 43 73 5b 32 5d 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 | les,.[Cs[0],.Cs[2]],............ |
1b140 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
1b160 | 20 5b 70 73 5b 30 5d 2c 20 70 73 5b 32 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .[ps[0],.ps[2].................. |
1b180 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5d 2c 20 70 | ............................],.p |
1b1a0 | 2c 20 6c 61 6d 62 64 61 73 74 5b 69 5d 2c 20 27 73 71 75 61 72 65 5f 6c 6f 73 73 27 2c 20 20 23 | ,.lambdast[i],.'square_loss',..# |
1b1c0 | 20 35 65 2d 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .5e-4,.......................... |
1b1e0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 78 5f 69 74 65 72 3d 31 30 30 2c | ...................max_iter=100, |
1b200 | 20 74 6f 6c 3d 31 65 2d 33 29 0d 0a 0d 0a 43 74 31 33 20 3d 20 5b 30 20 66 6f 72 20 69 20 69 6e | .tol=1e-3)....Ct13.=.[0.for.i.in |
1b220 | 20 72 61 6e 67 65 28 32 29 5d 0d 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 32 29 3a 0d 0a | .range(2)]..for.i.in.range(2):.. |
1b240 | 20 20 20 20 43 74 31 33 5b 69 5d 20 3d 20 6f 74 2e 67 72 6f 6d 6f 76 2e 67 72 6f 6d 6f 76 5f 62 | ....Ct13[i].=.ot.gromov.gromov_b |
1b260 | 61 72 79 63 65 6e 74 65 72 73 28 6e 5f 73 61 6d 70 6c 65 73 2c 20 5b 43 73 5b 31 5d 2c 20 43 73 | arycenters(n_samples,.[Cs[1],.Cs |
1b280 | 5b 33 5d 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | [3]],........................... |
1b2a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 70 73 5b 31 5d 2c 20 70 73 5b 33 5d 0d | ..................[ps[1],.ps[3]. |
1b2c0 | 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
1b2e0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 5d 2c 20 70 2c 20 6c 61 6d 62 64 61 73 74 5b 69 5d 2c 20 | .............],.p,.lambdast[i],. |
1b300 | 27 73 71 75 61 72 65 5f 6c 6f 73 73 27 2c 20 20 23 20 35 65 2d 34 2c 0d 0a 20 20 20 20 20 20 20 | 'square_loss',..#.5e-4,......... |
1b320 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
1b340 | 20 20 20 20 6d 61 78 5f 69 74 65 72 3d 31 30 30 2c 20 74 6f 6c 3d 31 65 2d 33 29 0d 0a 0d 0a 43 | ....max_iter=100,.tol=1e-3)....C |
1b360 | 74 32 33 20 3d 20 5b 30 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 32 29 5d 0d 0a 66 6f 72 | t23.=.[0.for.i.in.range(2)]..for |
1b380 | 20 69 20 69 6e 20 72 61 6e 67 65 28 32 29 3a 0d 0a 20 20 20 20 43 74 32 33 5b 69 5d 20 3d 20 6f | .i.in.range(2):......Ct23[i].=.o |
1b3a0 | 74 2e 67 72 6f 6d 6f 76 2e 67 72 6f 6d 6f 76 5f 62 61 72 79 63 65 6e 74 65 72 73 28 6e 5f 73 61 | t.gromov.gromov_barycenters(n_sa |
1b3c0 | 6d 70 6c 65 73 2c 20 5b 43 73 5b 32 5d 2c 20 43 73 5b 33 5d 5d 2c 0d 0a 20 20 20 20 20 20 20 20 | mples,.[Cs[2],.Cs[3]],.......... |
1b3e0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
1b400 | 20 20 20 5b 70 73 5b 32 5d 2c 20 70 73 5b 33 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ...[ps[2],.ps[3]................ |
1b420 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5d 2c | ..............................], |
1b440 | 20 70 2c 20 6c 61 6d 62 64 61 73 74 5b 69 5d 2c 20 27 73 71 75 61 72 65 5f 6c 6f 73 73 27 2c 20 | .p,.lambdast[i],.'square_loss',. |
1b460 | 20 23 20 35 65 2d 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .#.5e-4,........................ |
1b480 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 78 5f 69 74 65 72 3d 31 30 | .....................max_iter=10 |
1b4a0 | 30 2c 20 74 6f 6c 3d 31 65 2d 33 29 0d 0a 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | 0,.tol=1e-3)......############## |
1b4c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
1b4e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
1b500 | 0d 0a 23 20 56 69 73 75 61 6c 69 7a 61 74 69 6f 6e 0d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | ..#.Visualization..#.----------- |
1b520 | 2d 2d 0d 0a 23 0d 0a 23 20 54 68 65 20 50 43 41 20 68 65 6c 70 73 20 69 6e 20 67 65 74 74 69 6e | --..#..#.The.PCA.helps.in.gettin |
1b540 | 67 20 63 6f 6e 73 69 73 74 65 6e 63 79 20 62 65 74 77 65 65 6e 20 74 68 65 20 72 6f 74 61 74 69 | g.consistency.between.the.rotati |
1b560 | 6f 6e 73 0d 0a 0d 0a 0d 0a 63 6c 66 20 3d 20 50 43 41 28 6e 5f 63 6f 6d 70 6f 6e 65 6e 74 73 3d | ons......clf.=.PCA(n_components= |
1b580 | 32 29 0d 0a 6e 70 6f 73 20 3d 20 5b 30 2c 20 30 2c 20 30 2c 20 30 5d 0d 0a 6e 70 6f 73 20 3d 20 | 2)..npos.=.[0,.0,.0,.0]..npos.=. |
1b5a0 | 5b 73 6d 61 63 6f 66 5f 6d 64 73 28 43 73 5b 73 5d 2c 20 32 29 20 66 6f 72 20 73 20 69 6e 20 72 | [smacof_mds(Cs[s],.2).for.s.in.r |
1b5c0 | 61 6e 67 65 28 53 29 5d 0d 0a 0d 0a 6e 70 6f 73 74 30 31 20 3d 20 5b 30 2c 20 30 5d 0d 0a 6e 70 | ange(S)]....npost01.=.[0,.0]..np |
1b5e0 | 6f 73 74 30 31 20 3d 20 5b 73 6d 61 63 6f 66 5f 6d 64 73 28 43 74 30 31 5b 73 5d 2c 20 32 29 20 | ost01.=.[smacof_mds(Ct01[s],.2). |
1b600 | 66 6f 72 20 73 20 69 6e 20 72 61 6e 67 65 28 32 29 5d 0d 0a 6e 70 6f 73 74 30 31 20 3d 20 5b 63 | for.s.in.range(2)]..npost01.=.[c |
1b620 | 6c 66 2e 66 69 74 5f 74 72 61 6e 73 66 6f 72 6d 28 6e 70 6f 73 74 30 31 5b 73 5d 29 20 66 6f 72 | lf.fit_transform(npost01[s]).for |
1b640 | 20 73 20 69 6e 20 72 61 6e 67 65 28 32 29 5d 0d 0a 0d 0a 6e 70 6f 73 74 30 32 20 3d 20 5b 30 2c | .s.in.range(2)]....npost02.=.[0, |
1b660 | 20 30 5d 0d 0a 6e 70 6f 73 74 30 32 20 3d 20 5b 73 6d 61 63 6f 66 5f 6d 64 73 28 43 74 30 32 5b | .0]..npost02.=.[smacof_mds(Ct02[ |
1b680 | 73 5d 2c 20 32 29 20 66 6f 72 20 73 20 69 6e 20 72 61 6e 67 65 28 32 29 5d 0d 0a 6e 70 6f 73 74 | s],.2).for.s.in.range(2)]..npost |
1b6a0 | 30 32 20 3d 20 5b 63 6c 66 2e 66 69 74 5f 74 72 61 6e 73 66 6f 72 6d 28 6e 70 6f 73 74 30 32 5b | 02.=.[clf.fit_transform(npost02[ |
1b6c0 | 73 5d 29 20 66 6f 72 20 73 20 69 6e 20 72 61 6e 67 65 28 32 29 5d 0d 0a 0d 0a 6e 70 6f 73 74 31 | s]).for.s.in.range(2)]....npost1 |
1b6e0 | 33 20 3d 20 5b 30 2c 20 30 5d 0d 0a 6e 70 6f 73 74 31 33 20 3d 20 5b 73 6d 61 63 6f 66 5f 6d 64 | 3.=.[0,.0]..npost13.=.[smacof_md |
1b700 | 73 28 43 74 31 33 5b 73 5d 2c 20 32 29 20 66 6f 72 20 73 20 69 6e 20 72 61 6e 67 65 28 32 29 5d | s(Ct13[s],.2).for.s.in.range(2)] |
1b720 | 0d 0a 6e 70 6f 73 74 31 33 20 3d 20 5b 63 6c 66 2e 66 69 74 5f 74 72 61 6e 73 66 6f 72 6d 28 6e | ..npost13.=.[clf.fit_transform(n |
1b740 | 70 6f 73 74 31 33 5b 73 5d 29 20 66 6f 72 20 73 20 69 6e 20 72 61 6e 67 65 28 32 29 5d 0d 0a 0d | post13[s]).for.s.in.range(2)]... |
1b760 | 0a 6e 70 6f 73 74 32 33 20 3d 20 5b 30 2c 20 30 5d 0d 0a 6e 70 6f 73 74 32 33 20 3d 20 5b 73 6d | .npost23.=.[0,.0]..npost23.=.[sm |
1b780 | 61 63 6f 66 5f 6d 64 73 28 43 74 32 33 5b 73 5d 2c 20 32 29 20 66 6f 72 20 73 20 69 6e 20 72 61 | acof_mds(Ct23[s],.2).for.s.in.ra |
1b7a0 | 6e 67 65 28 32 29 5d 0d 0a 6e 70 6f 73 74 32 33 20 3d 20 5b 63 6c 66 2e 66 69 74 5f 74 72 61 6e | nge(2)]..npost23.=.[clf.fit_tran |
1b7c0 | 73 66 6f 72 6d 28 6e 70 6f 73 74 32 33 5b 73 5d 29 20 66 6f 72 20 73 20 69 6e 20 72 61 6e 67 65 | sform(npost23[s]).for.s.in.range |
1b7e0 | 28 32 29 5d 0d 0a 0d 0a 0d 0a 66 69 67 20 3d 20 70 6c 2e 66 69 67 75 72 65 28 66 69 67 73 69 7a | (2)]......fig.=.pl.figure(figsiz |
1b800 | 65 3d 28 31 30 2c 20 31 30 29 29 0d 0a 0d 0a 61 78 31 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 32 | e=(10,.10))....ax1.=.pl.subplot2 |
1b820 | 67 72 69 64 28 28 34 2c 20 34 29 2c 20 28 30 2c 20 30 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 2d | grid((4,.4),.(0,.0))..pl.xlim((- |
1b840 | 31 2c 20 31 29 29 0d 0a 70 6c 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 31 2e 73 63 | 1,.1))..pl.ylim((-1,.1))..ax1.sc |
1b860 | 61 74 74 65 72 28 6e 70 6f 73 5b 30 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 5b 30 5d 5b 3a 2c 20 | atter(npos[0][:,.0],.npos[0][:,. |
1b880 | 31 5d 2c 20 63 6f 6c 6f 72 3d 27 72 27 29 0d 0a 0d 0a 61 78 32 20 3d 20 70 6c 2e 73 75 62 70 6c | 1],.color='r')....ax2.=.pl.subpl |
1b8a0 | 6f 74 32 67 72 69 64 28 28 34 2c 20 34 29 2c 20 28 30 2c 20 31 29 29 0d 0a 70 6c 2e 78 6c 69 6d | ot2grid((4,.4),.(0,.1))..pl.xlim |
1b8c0 | 28 28 2d 31 2c 20 31 29 29 0d 0a 70 6c 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 32 | ((-1,.1))..pl.ylim((-1,.1))..ax2 |
1b8e0 | 2e 73 63 61 74 74 65 72 28 6e 70 6f 73 74 30 31 5b 31 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 74 | .scatter(npost01[1][:,.0],.npost |
1b900 | 30 31 5b 31 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 62 27 29 0d 0a 0d 0a 61 78 33 20 3d | 01[1][:,.1],.color='b')....ax3.= |
1b920 | 20 70 6c 2e 73 75 62 70 6c 6f 74 32 67 72 69 64 28 28 34 2c 20 34 29 2c 20 28 30 2c 20 32 29 29 | .pl.subplot2grid((4,.4),.(0,.2)) |
1b940 | 0d 0a 70 6c 2e 78 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 70 6c 2e 79 6c 69 6d 28 28 2d 31 2c | ..pl.xlim((-1,.1))..pl.ylim((-1, |
1b960 | 20 31 29 29 0d 0a 61 78 33 2e 73 63 61 74 74 65 72 28 6e 70 6f 73 74 30 31 5b 30 5d 5b 3a 2c 20 | .1))..ax3.scatter(npost01[0][:,. |
1b980 | 30 5d 2c 20 6e 70 6f 73 74 30 31 5b 30 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 62 27 29 | 0],.npost01[0][:,.1],.color='b') |
1b9a0 | 0d 0a 0d 0a 61 78 34 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 32 67 72 69 64 28 28 34 2c 20 34 29 | ....ax4.=.pl.subplot2grid((4,.4) |
1b9c0 | 2c 20 28 30 2c 20 33 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 70 6c 2e | ,.(0,.3))..pl.xlim((-1,.1))..pl. |
1b9e0 | 79 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 34 2e 73 63 61 74 74 65 72 28 6e 70 6f 73 5b | ylim((-1,.1))..ax4.scatter(npos[ |
1ba00 | 31 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 5b 31 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 | 1][:,.0],.npos[1][:,.1],.color=' |
1ba20 | 72 27 29 0d 0a 0d 0a 61 78 35 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 32 67 72 69 64 28 28 34 2c | r')....ax5.=.pl.subplot2grid((4, |
1ba40 | 20 34 29 2c 20 28 31 2c 20 30 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a | .4),.(1,.0))..pl.xlim((-1,.1)).. |
1ba60 | 70 6c 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 35 2e 73 63 61 74 74 65 72 28 6e 70 | pl.ylim((-1,.1))..ax5.scatter(np |
1ba80 | 6f 73 74 30 32 5b 31 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 74 30 32 5b 31 5d 5b 3a 2c 20 31 5d | ost02[1][:,.0],.npost02[1][:,.1] |
1baa0 | 2c 20 63 6f 6c 6f 72 3d 27 62 27 29 0d 0a 0d 0a 61 78 36 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 | ,.color='b')....ax6.=.pl.subplot |
1bac0 | 32 67 72 69 64 28 28 34 2c 20 34 29 2c 20 28 31 2c 20 33 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 | 2grid((4,.4),.(1,.3))..pl.xlim(( |
1bae0 | 2d 31 2c 20 31 29 29 0d 0a 70 6c 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 36 2e 73 | -1,.1))..pl.ylim((-1,.1))..ax6.s |
1bb00 | 63 61 74 74 65 72 28 6e 70 6f 73 74 31 33 5b 31 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 74 31 33 | catter(npost13[1][:,.0],.npost13 |
1bb20 | 5b 31 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 62 27 29 0d 0a 0d 0a 61 78 37 20 3d 20 70 | [1][:,.1],.color='b')....ax7.=.p |
1bb40 | 6c 2e 73 75 62 70 6c 6f 74 32 67 72 69 64 28 28 34 2c 20 34 29 2c 20 28 32 2c 20 30 29 29 0d 0a | l.subplot2grid((4,.4),.(2,.0)).. |
1bb60 | 70 6c 2e 78 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 70 6c 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 | pl.xlim((-1,.1))..pl.ylim((-1,.1 |
1bb80 | 29 29 0d 0a 61 78 37 2e 73 63 61 74 74 65 72 28 6e 70 6f 73 74 30 32 5b 30 5d 5b 3a 2c 20 30 5d | ))..ax7.scatter(npost02[0][:,.0] |
1bba0 | 2c 20 6e 70 6f 73 74 30 32 5b 30 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 62 27 29 0d 0a | ,.npost02[0][:,.1],.color='b').. |
1bbc0 | 0d 0a 61 78 38 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 32 67 72 69 64 28 28 34 2c 20 34 29 2c 20 | ..ax8.=.pl.subplot2grid((4,.4),. |
1bbe0 | 28 32 2c 20 33 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 70 6c 2e 79 6c | (2,.3))..pl.xlim((-1,.1))..pl.yl |
1bc00 | 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 38 2e 73 63 61 74 74 65 72 28 6e 70 6f 73 74 31 33 | im((-1,.1))..ax8.scatter(npost13 |
1bc20 | 5b 30 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 74 31 33 5b 30 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c | [0][:,.0],.npost13[0][:,.1],.col |
1bc40 | 6f 72 3d 27 62 27 29 0d 0a 0d 0a 61 78 39 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 32 67 72 69 64 | or='b')....ax9.=.pl.subplot2grid |
1bc60 | 28 28 34 2c 20 34 29 2c 20 28 33 2c 20 30 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 2d 31 2c 20 31 | ((4,.4),.(3,.0))..pl.xlim((-1,.1 |
1bc80 | 29 29 0d 0a 70 6c 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 39 2e 73 63 61 74 74 65 | ))..pl.ylim((-1,.1))..ax9.scatte |
1bca0 | 72 28 6e 70 6f 73 5b 32 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 5b 32 5d 5b 3a 2c 20 31 5d 2c 20 | r(npos[2][:,.0],.npos[2][:,.1],. |
1bcc0 | 63 6f 6c 6f 72 3d 27 72 27 29 0d 0a 0d 0a 61 78 31 30 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 32 | color='r')....ax10.=.pl.subplot2 |
1bce0 | 67 72 69 64 28 28 34 2c 20 34 29 2c 20 28 33 2c 20 31 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 2d | grid((4,.4),.(3,.1))..pl.xlim((- |
1bd00 | 31 2c 20 31 29 29 0d 0a 70 6c 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 31 30 2e 73 | 1,.1))..pl.ylim((-1,.1))..ax10.s |
1bd20 | 63 61 74 74 65 72 28 6e 70 6f 73 74 32 33 5b 31 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 74 32 33 | catter(npost23[1][:,.0],.npost23 |
1bd40 | 5b 31 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 62 27 29 0d 0a 0d 0a 61 78 31 31 20 3d 20 | [1][:,.1],.color='b')....ax11.=. |
1bd60 | 70 6c 2e 73 75 62 70 6c 6f 74 32 67 72 69 64 28 28 34 2c 20 34 29 2c 20 28 33 2c 20 32 29 29 0d | pl.subplot2grid((4,.4),.(3,.2)). |
1bd80 | 0a 70 6c 2e 78 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 70 6c 2e 79 6c 69 6d 28 28 2d 31 2c 20 | .pl.xlim((-1,.1))..pl.ylim((-1,. |
1bda0 | 31 29 29 0d 0a 61 78 31 31 2e 73 63 61 74 74 65 72 28 6e 70 6f 73 74 32 33 5b 30 5d 5b 3a 2c 20 | 1))..ax11.scatter(npost23[0][:,. |
1bdc0 | 30 5d 2c 20 6e 70 6f 73 74 32 33 5b 30 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 62 27 29 | 0],.npost23[0][:,.1],.color='b') |
1bde0 | 0d 0a 0d 0a 61 78 31 32 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 32 67 72 69 64 28 28 34 2c 20 34 | ....ax12.=.pl.subplot2grid((4,.4 |
1be00 | 29 2c 20 28 33 2c 20 33 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 70 6c | ),.(3,.3))..pl.xlim((-1,.1))..pl |
1be20 | 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 31 32 2e 73 63 61 74 74 65 72 28 6e 70 6f | .ylim((-1,.1))..ax12.scatter(npo |
1be40 | 73 5b 33 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 5b 33 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 | s[3][:,.0],.npos[3][:,.1],.color |
1be60 | 3d 27 72 27 29 0d 0a 50 4b 01 02 14 03 14 00 00 00 00 00 7c 68 3a 4f a4 4f 47 3f 0c 0c 00 00 0c | ='r')..PK..........|h:O.OG?..... |
1be80 | 0c 00 00 0b 00 00 00 00 00 00 00 00 00 00 00 b4 81 00 00 00 00 70 6c 6f 74 5f 57 44 41 2e 70 79 | .....................plot_WDA.py |
1bea0 | 50 4b 01 02 14 03 14 00 00 00 00 00 7c 68 3a 4f c6 3b 52 da f3 0a 00 00 f3 0a 00 00 0e 00 00 00 | PK..........|h:O.;R............. |
1bec0 | 00 00 00 00 00 00 00 00 b4 81 35 0c 00 00 70 6c 6f 74 5f 67 72 6f 6d 6f 76 2e 70 79 50 4b 01 02 | ..........5...plot_gromov.pyPK.. |
1bee0 | 14 03 14 00 00 00 00 00 84 68 3a 4f ea 88 04 1c d5 18 00 00 d5 18 00 00 16 00 00 00 00 00 00 00 | .........h:O.................... |
1bf00 | 00 00 00 00 b4 81 54 17 00 00 70 6c 6f 74 5f 62 61 72 79 63 65 6e 74 65 72 5f 66 67 77 2e 70 79 | ......T...plot_barycenter_fgw.py |
1bf20 | 50 4b 01 02 14 03 14 00 00 00 00 00 7c 68 3a 4f f2 7c 7e 9e 5c 0e 00 00 5c 0e 00 00 15 00 00 00 | PK..........|h:O.|~.\...\....... |
1bf40 | 00 00 00 00 00 00 00 00 b4 81 5d 30 00 00 70 6c 6f 74 5f 62 61 72 79 63 65 6e 74 65 72 5f 31 44 | ..........]0..plot_barycenter_1D |
1bf60 | 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 7c 68 3a 4f a7 6b f0 c3 bf 0b 00 00 bf 0b 00 00 15 | .pyPK..........|h:O.k........... |
1bf80 | 00 00 00 00 00 00 00 00 00 00 00 b4 81 ec 3e 00 00 70 6c 6f 74 5f 4f 54 5f 32 44 5f 73 61 6d 70 | ..............>..plot_OT_2D_samp |
1bfa0 | 6c 65 73 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 84 68 3a 4f 0a ba a4 e6 91 06 00 00 91 06 | les.pyPK...........h:O.......... |
1bfc0 | 00 00 0e 00 00 00 00 00 00 00 00 00 00 00 b4 81 de 4a 00 00 70 6c 6f 74 5f 55 4f 54 5f 31 44 2e | .................J..plot_UOT_1D. |
1bfe0 | 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 7c b0 94 50 e2 7d 4e c5 18 0f 00 00 18 0f 00 00 19 00 | pyPK..........|..P.}N........... |
1c000 | 00 00 00 00 00 00 00 00 00 00 b4 81 9b 51 00 00 70 6c 6f 74 5f 55 4f 54 5f 62 61 72 79 63 65 6e | .............Q..plot_UOT_barycen |
1c020 | 74 65 72 5f 31 44 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 7c b0 94 50 43 c3 5c 58 99 17 00 | ter_1D.pyPK..........|..PC.\X... |
1c040 | 00 99 17 00 00 21 00 00 00 00 00 00 00 00 00 00 00 b4 81 ea 60 00 00 70 6c 6f 74 5f 62 61 72 79 | .....!..............`..plot_bary |
1c060 | 63 65 6e 74 65 72 5f 6c 70 5f 76 73 5f 65 6e 74 72 6f 70 69 63 2e 70 79 50 4b 01 02 14 03 14 00 | center_lp_vs_entropic.pyPK...... |
1c080 | 00 00 00 00 7c b0 94 50 b2 21 63 15 fc 07 00 00 fc 07 00 00 1f 00 00 00 00 00 00 00 00 00 00 00 | ....|..P.!c..................... |
1c0a0 | b4 81 c2 78 00 00 70 6c 6f 74 5f 66 72 65 65 5f 73 75 70 70 6f 72 74 5f 62 61 72 79 63 65 6e 74 | ...x..plot_free_support_barycent |
1c0c0 | 65 72 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 7c 68 3a 4f b8 cd f6 1b 7e 0b 00 00 7e 0b 00 | er.pyPK..........|h:O....~...~.. |
1c0e0 | 00 13 00 00 00 00 00 00 00 00 00 00 00 b4 81 fb 80 00 00 70 6c 6f 74 5f 6f 70 74 69 6d 5f 4f 54 | ...................plot_optim_OT |
1c100 | 72 65 67 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 83 68 3a 4f 0e e0 72 82 97 0b 00 00 97 0b | reg.pyPK...........h:O..r....... |
1c120 | 00 00 1b 00 00 00 00 00 00 00 00 00 00 00 b4 81 aa 8c 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 6c 69 | ....................plot_otda_li |
1c140 | 6e 65 61 72 5f 6d 61 70 70 69 6e 67 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 7c b0 94 50 e7 | near_mapping.pyPK..........|..P. |
1c160 | 4f 7f d3 f3 0d 00 00 f3 0d 00 00 19 00 00 00 00 00 00 00 00 00 00 00 b4 81 7a 98 00 00 70 6c 6f | O........................z...plo |
1c180 | 74 5f 6f 74 64 61 5f 63 6f 6c 6f 72 5f 69 6d 61 67 65 73 2e 70 79 50 4b 01 02 14 03 14 00 00 00 | t_otda_color_images.pyPK........ |
1c1a0 | 00 00 83 68 3a 4f d1 a8 d7 2e a9 09 00 00 a9 09 00 00 20 00 00 00 00 00 00 00 00 00 00 00 b4 81 | ...h:O.......................... |
1c1c0 | a4 a6 00 00 70 6c 6f 74 5f 63 6f 6e 76 6f 6c 75 74 69 6f 6e 61 6c 5f 62 61 72 79 63 65 6e 74 65 | ....plot_convolutional_barycente |
1c1e0 | 72 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 83 68 3a 4f ff 09 e8 78 dd 08 00 00 dd 08 00 00 | r.pyPK...........h:O...x........ |
1c200 | 14 00 00 00 00 00 00 00 00 00 00 00 b4 81 8b b0 00 00 70 6c 6f 74 5f 4f 54 5f 31 44 5f 73 6d 6f | ..................plot_OT_1D_smo |
1c220 | 6f 74 68 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 7c b0 94 50 72 6d af 7b ed 10 00 00 ed 10 | oth.pyPK..........|..Prm.{...... |
1c240 | 00 00 14 00 00 00 00 00 00 00 00 00 00 00 b4 81 9a b9 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 63 6c | ....................plot_otda_cl |
1c260 | 61 73 73 65 73 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 ae b0 94 50 b3 9e fa 08 dd 14 00 00 | asses.pyPK.............P........ |
1c280 | dd 14 00 00 1f 00 00 00 00 00 00 00 00 00 00 00 b4 81 b9 ca 00 00 70 6c 6f 74 5f 70 61 72 74 69 | ......................plot_parti |
1c2a0 | 61 6c 5f 77 61 73 73 5f 61 6e 64 5f 67 72 6f 6d 6f 76 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 | al_wass_and_gromov.pyPK......... |
1c2c0 | 00 7c 68 3a 4f 0b 5c 2a af a2 06 00 00 a2 06 00 00 0d 00 00 00 00 00 00 00 00 00 00 00 b4 81 d3 | .|h:O.\*........................ |
1c2e0 | df 00 00 70 6c 6f 74 5f 4f 54 5f 31 44 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 84 68 3a 4f | ...plot_OT_1D.pyPK...........h:O |
1c300 | 6d 8a 53 18 e2 17 00 00 e2 17 00 00 12 00 00 00 00 00 00 00 00 00 00 00 a4 81 a0 e6 00 00 70 6c | m.S...........................pl |
1c320 | 6f 74 5f 73 74 6f 63 68 61 73 74 69 63 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 84 68 3a 4f | ot_stochastic.pyPK...........h:O |
1c340 | e5 5f 4e 9c 14 11 00 00 14 11 00 00 0b 00 00 00 00 00 00 00 00 00 00 00 b4 81 b2 fe 00 00 70 6c | ._N...........................pl |
1c360 | 6f 74 5f 66 67 77 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 7c 68 3a 4f 6f 6c 58 5b 88 13 00 | ot_fgw.pyPK..........|h:OolX[... |
1c380 | 00 88 13 00 00 13 00 00 00 00 00 00 00 00 00 00 00 b4 81 ef 0f 01 00 70 6c 6f 74 5f 4f 54 5f 4c | .......................plot_OT_L |
1c3a0 | 31 5f 76 73 5f 4c 32 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 7c b0 94 50 e9 d6 9c 70 1d 07 | 1_vs_L2.pyPK..........|..P...p.. |
1c3c0 | 00 00 1d 07 00 00 16 00 00 00 00 00 00 00 00 00 00 00 b4 81 a8 23 01 00 70 6c 6f 74 5f 73 63 72 | .....................#..plot_scr |
1c3e0 | 65 65 6e 6b 68 6f 72 6e 5f 31 44 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 7c 68 3a 4f 7a 2e | eenkhorn_1D.pyPK..........|h:Oz. |
1c400 | b5 2b 65 09 00 00 65 09 00 00 13 00 00 00 00 00 00 00 00 00 00 00 b4 81 f9 2a 01 00 70 6c 6f 74 | .+e...e..................*..plot |
1c420 | 5f 63 6f 6d 70 75 74 65 5f 65 6d 64 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 7c b0 94 50 09 | _compute_emd.pyPK..........|..P. |
1c440 | 53 8e 8d 14 16 00 00 14 16 00 00 12 00 00 00 00 00 00 00 00 00 00 00 b4 81 8f 34 01 00 70 6c 6f | S.........................4..plo |
1c460 | 74 5f 6f 74 64 61 5f 6a 63 70 6f 74 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 83 68 3a 4f 71 | t_otda_jcpot.pyPK...........h:Oq |
1c480 | 12 0d cb 23 12 00 00 23 12 00 00 1c 00 00 00 00 00 00 00 00 00 00 00 b4 81 d3 4a 01 00 70 6c 6f | ...#...#..................J..plo |
1c4a0 | 74 5f 6f 74 64 61 5f 73 65 6d 69 5f 73 75 70 65 72 76 69 73 65 64 2e 70 79 50 4b 01 02 14 03 14 | t_otda_semi_supervised.pyPK..... |
1c4c0 | 00 00 00 00 00 83 68 3a 4f cd ad d9 82 f4 0f 00 00 f4 0f 00 00 14 00 00 00 00 00 00 00 00 00 00 | ......h:O....................... |
1c4e0 | 00 b4 81 30 5d 01 00 70 6c 6f 74 5f 6f 74 64 61 5f 6d 61 70 70 69 6e 67 2e 70 79 50 4b 01 02 14 | ...0]..plot_otda_mapping.pyPK... |
1c500 | 03 14 00 00 00 00 00 83 68 3a 4f 39 06 7c 60 0c 15 00 00 0c 15 00 00 0f 00 00 00 00 00 00 00 00 | ........h:O9.|`................. |
1c520 | 00 00 00 b4 81 56 6d 01 00 70 6c 6f 74 5f 6f 74 64 61 5f 64 32 2e 70 79 50 4b 01 02 14 03 14 00 | .....Vm..plot_otda_d2.pyPK...... |
1c540 | 00 00 00 00 ad b0 94 50 e2 52 a4 49 81 0e 00 00 81 0e 00 00 16 00 00 00 00 00 00 00 00 00 00 00 | .......P.R.I.................... |
1c560 | b4 81 8f 82 01 00 70 6c 6f 74 5f 6f 74 64 61 5f 6c 61 70 6c 61 63 69 61 6e 2e 70 79 50 4b 01 02 | ......plot_otda_laplacian.pyPK.. |
1c580 | 14 03 14 00 00 00 00 00 7c b0 94 50 a3 22 30 45 30 10 00 00 30 10 00 00 22 00 00 00 00 00 00 00 | ........|..P."0E0...0..."....... |
1c5a0 | 00 00 00 00 b4 81 44 91 01 00 70 6c 6f 74 5f 6f 74 64 61 5f 6d 61 70 70 69 6e 67 5f 63 6f 6c 6f | ......D...plot_otda_mapping_colo |
1c5c0 | 72 73 5f 69 6d 61 67 65 73 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 7c b0 94 50 20 e7 75 c2 | rs_images.pyPK..........|..P..u. |
1c5e0 | 7c 1c 00 00 7c 1c 00 00 19 00 00 00 00 00 00 00 00 00 00 00 b4 81 b4 a1 01 00 70 6c 6f 74 5f 67 | |...|.....................plot_g |
1c600 | 72 6f 6d 6f 76 5f 62 61 72 79 63 65 6e 74 65 72 2e 70 79 50 4b 05 06 00 00 00 00 1d 00 1d 00 ac | romov_barycenter.pyPK........... |
1c620 | 07 00 00 67 be 01 00 00 00 | ...g..... |