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 03 78 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 | ......x.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 d2 72 94 50 43 c3 5c 58 99 17 00 00 | pl.show().PK.........r.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 a5 72 94 50 b2 21 63 15 fc 07 00 00 fc 07 00 00 1f 00 00 00 | ).PK.........r.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 22 75 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 | ...."u.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 c2 72 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 | .....r.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 49 78 94 50 0c 2b 5b b3 1e 15 00 00 1e 15 00 00 1f 00 00 00 70 6c 6f 74 5f 70 61 72 74 | ...Ix.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 0d 0a 50 61 72 74 69 61 6c 20 57 61 73 73 65 72 73 74 | ==============..Partial.Wasserst |
cb40 | 65 69 6e 20 61 6e 64 20 47 72 6f 6d 6f 76 2d 57 61 73 73 65 72 73 74 65 69 6e 20 65 78 61 6d 70 | ein.and.Gromov-Wasserstein.examp |
cb60 | 6c 65 0d 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a | le..==========================.. |
cb80 | 0d 0a 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 | ..This.example.is.designed.to.sh |
cba0 | 6f 77 20 68 6f 77 20 74 6f 20 75 73 65 20 74 68 65 20 50 61 72 74 69 61 6c 20 28 47 72 6f 6d 6f | ow.how.to.use.the.Partial.(Gromo |
cbc0 | 76 2d 29 57 61 73 73 65 72 74 73 65 69 6e 0d 0a 64 69 73 74 61 6e 63 65 20 63 6f 6d 70 75 74 61 | v-)Wassertsein..distance.computa |
cbe0 | 74 69 6f 6e 20 69 6e 20 50 4f 54 2e 0d 0a 22 22 22 0d 0a 0d 0a 23 20 41 75 74 68 6f 72 3a 20 4c | tion.in.POT..."""....#.Author:.L |
cc00 | 61 65 74 69 74 69 61 20 43 68 61 70 65 6c 20 3c 6c 61 65 74 69 74 69 61 2e 63 68 61 70 65 6c 40 | aetitia.Chapel.<laetitia.chapel@ |
cc20 | 69 72 69 73 61 2e 66 72 3e 0d 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 | irisa.fr>..#.License:.MIT.Licens |
cc40 | 65 0d 0a 0d 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 | e....#.necessary.for.3d.plot.eve |
cc60 | 6e 20 69 66 20 6e 6f 74 20 75 73 65 64 0d 0a 66 72 6f 6d 20 6d 70 6c 5f 74 6f 6f 6c 6b 69 74 73 | n.if.not.used..from.mpl_toolkits |
cc80 | 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 0d 0a | .mplot3d.import.Axes3D..#.noqa.. |
cca0 | 69 6d 70 6f 72 74 20 73 63 69 70 79 20 61 73 20 73 70 0d 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 | import.scipy.as.sp..import.numpy |
ccc0 | 20 61 73 20 6e 70 0d 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 | .as.np..import.matplotlib.pylab. |
cce0 | 61 73 20 70 6c 0d 0a 69 6d 70 6f 72 74 20 6f 74 0d 0a 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 | as.pl..import.ot......########## |
cd00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
cd20 | 23 23 23 23 23 23 23 23 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 0d 0a 23 0d 0a 23 20 53 61 6d 70 6c 65 20 74 77 6f 20 32 44 20 47 61 75 73 73 69 61 6e | ###..#..#.Sample.two.2D.Gaussian |
cd60 | 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 61 6e 64 20 70 6c 6f 74 20 74 68 65 6d 0d 0a 23 20 | .distributions.and.plot.them..#. |
cd80 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
cda0 | 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 46 6f 72 20 64 65 6d | ------------------..#..#.For.dem |
cdc0 | 6f 6e 73 74 72 61 74 69 6f 6e 20 70 75 72 70 6f 73 65 2c 20 77 65 20 73 61 6d 70 6c 65 20 74 77 | onstration.purpose,.we.sample.tw |
cde0 | 6f 20 47 61 75 73 73 69 61 6e 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 69 6e 20 32 2d 64 0d | o.Gaussian.distributions.in.2-d. |
ce00 | 0a 23 20 73 70 61 63 65 73 20 61 6e 64 20 61 64 64 20 73 6f 6d 65 20 72 61 6e 64 6f 6d 20 6e 6f | .#.spaces.and.add.some.random.no |
ce20 | 69 73 65 2e 0d 0a 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 73 | ise.......n_samples.=.20..#.nb.s |
ce40 | 61 6d 70 6c 65 73 20 28 67 61 75 73 73 69 61 6e 29 0d 0a 6e 5f 6e 6f 69 73 65 20 3d 20 32 30 20 | amples.(gaussian)..n_noise.=.20. |
ce60 | 20 23 20 6e 62 20 6f 66 20 73 61 6d 70 6c 65 73 20 28 6e 6f 69 73 65 29 0d 0a 0d 0a 6d 75 20 3d | .#.nb.of.samples.(noise)....mu.= |
ce80 | 20 6e 70 2e 61 72 72 61 79 28 5b 30 2c 20 30 5d 29 0d 0a 63 6f 76 20 3d 20 6e 70 2e 61 72 72 61 | .np.array([0,.0])..cov.=.np.arra |
cea0 | 79 28 5b 5b 31 2c 20 30 5d 2c 20 5b 30 2c 20 32 5d 5d 29 0d 0a 0d 0a 78 73 20 3d 20 6f 74 2e 64 | y([[1,.0],.[0,.2]])....xs.=.ot.d |
cec0 | 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 32 44 5f 73 61 6d 70 6c 65 73 5f 67 61 75 73 73 28 6e 5f | atasets.make_2D_samples_gauss(n_ |
cee0 | 73 61 6d 70 6c 65 73 2c 20 6d 75 2c 20 63 6f 76 29 0d 0a 78 73 20 3d 20 6e 70 2e 61 70 70 65 6e | samples,.mu,.cov)..xs.=.np.appen |
cf00 | 64 28 78 73 2c 20 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 | d(xs,.(np.random.rand(n_noise,.2 |
cf20 | 29 20 2b 20 31 29 20 2a 20 34 29 2e 72 65 73 68 61 70 65 28 28 2d 31 2c 20 32 29 29 0d 0a 78 74 | ).+.1).*.4).reshape((-1,.2))..xt |
cf40 | 20 3d 20 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 | .=.ot.datasets.make_2D_samples_g |
cf60 | 61 75 73 73 28 6e 5f 73 61 6d 70 6c 65 73 2c 20 6d 75 2c 20 63 6f 76 29 0d 0a 78 74 20 3d 20 6e | auss(n_samples,.mu,.cov)..xt.=.n |
cf80 | 70 2e 61 70 70 65 6e 64 28 78 74 2c 20 28 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 28 6e 5f 6e | p.append(xt,.(np.random.rand(n_n |
cfa0 | 6f 69 73 65 2c 20 32 29 20 2b 20 31 29 20 2a 20 2d 33 29 2e 72 65 73 68 61 70 65 28 28 2d 31 2c | oise,.2).+.1).*.-3).reshape((-1, |
cfc0 | 20 32 29 29 0d 0a 0d 0a 4d 20 3d 20 73 70 2e 73 70 61 74 69 61 6c 2e 64 69 73 74 61 6e 63 65 2e | .2))....M.=.sp.spatial.distance. |
cfe0 | 63 64 69 73 74 28 78 73 2c 20 78 74 29 0d 0a 0d 0a 66 69 67 20 3d 20 70 6c 2e 66 69 67 75 72 65 | cdist(xs,.xt)....fig.=.pl.figure |
d000 | 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 33 31 29 0d 0a | ()..ax1.=.fig.add_subplot(131).. |
d020 | 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 2b 62 | ax1.plot(xs[:,.0],.xs[:,.1],.'+b |
d040 | 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 32 20 | ',.label='Source.samples')..ax2. |
d060 | 3d 20 66 69 67 2e 61 64 64 5f 73 75 62 70 6c 6f 74 28 31 33 32 29 0d 0a 61 78 32 2e 73 63 61 74 | =.fig.add_subplot(132)..ax2.scat |
d080 | 74 65 72 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 72 | ter(xt[:,.0],.xt[:,.1],.color='r |
d0a0 | 27 29 0d 0a 61 78 33 20 3d 20 66 69 67 2e 61 64 64 5f 73 75 62 70 6c 6f 74 28 31 33 33 29 0d 0a | ')..ax3.=.fig.add_subplot(133).. |
d0c0 | 61 78 33 2e 69 6d 73 68 6f 77 28 4d 29 0d 0a 70 6c 2e 73 68 6f 77 28 29 0d 0a 0d 0a 23 23 23 23 | ax3.imshow(M)..pl.show()....#### |
d0e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
d100 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
d120 | 23 23 23 23 23 23 23 23 23 0d 0a 23 0d 0a 23 20 43 6f 6d 70 75 74 65 20 70 61 72 74 69 61 6c 20 | #########..#..#.Compute.partial. |
d140 | 57 61 73 73 65 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 2c 0d | Wasserstein.plans.and.distance,. |
d160 | 0a 23 20 62 79 20 74 72 61 6e 73 70 6f 72 74 69 6e 67 20 35 30 25 20 6f 66 20 74 68 65 20 6d 61 | .#.by.transporting.50%.of.the.ma |
d180 | 73 73 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 | ss..#.-------------------------- |
d1a0 | 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 20 3d 20 6f 74 2e 75 | --------------------....p.=.ot.u |
d1c0 | 6e 69 66 28 6e 5f 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 | nif(n_samples.+.n_noise)..q.=.ot |
d1e0 | 2e 75 6e 69 66 28 6e 5f 73 61 6d 70 6c 65 73 20 2b 20 6e 5f 6e 6f 69 73 65 29 0d 0a 0d 0a 77 30 | .unif(n_samples.+.n_noise)....w0 |
d200 | 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 6c 5f 77 61 73 73 | ,.log0.=.ot.partial.partial_wass |
d220 | 65 72 73 74 65 69 6e 28 70 2c 20 71 2c 20 4d 2c 20 6d 3d 30 2e 35 2c 20 6c 6f 67 3d 54 72 75 65 | erstein(p,.q,.M,.m=0.5,.log=True |
d240 | 29 0d 0a 77 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 5f | )..w,.log.=.ot.partial.entropic_ |
d260 | 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 72 65 67 | partial_wasserstein(p,.q,.M,.reg |
d280 | 3d 30 2e 31 2c 20 6d 3d 30 2e 35 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | =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 6c | ...............................l |
d2c0 | 6f 67 3d 54 72 75 65 29 0d 0a 0d 0a 70 72 69 6e 74 28 27 50 61 72 74 69 61 6c 20 57 61 73 73 65 | og=True)....print('Partial.Wasse |
d2e0 | 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 20 27 20 2b 20 73 | rstein.distance.(m.=.0.5):.'.+.s |
d300 | 74 72 28 6c 6f 67 30 5b 27 70 61 72 74 69 61 6c 5f 77 5f 64 69 73 74 27 5d 29 29 0d 0a 70 72 69 | tr(log0['partial_w_dist']))..pri |
d320 | 6e 74 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 74 65 69 6e | nt('Entropic.partial.Wasserstein |
d340 | 20 64 69 73 74 61 6e 63 65 20 28 6d 20 3d 20 30 2e 35 29 3a 20 27 20 2b 0d 0a 20 20 20 20 20 20 | .distance.(m.=.0.5):.'.+........ |
d360 | 73 74 72 28 6c 6f 67 5b 27 70 61 72 74 69 61 6c 5f 77 5f 64 69 73 74 27 5d 29 29 0d 0a 0d 0a 70 | str(log['partial_w_dist']))....p |
d380 | 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 73 75 62 70 6c 6f 74 | l.figure(1,.(10,.5))..pl.subplot |
d3a0 | 28 31 2c 20 32 2c 20 31 29 0d 0a 70 6c 2e 69 6d 73 68 6f 77 28 77 30 2c 20 63 6d 61 70 3d 27 6a | (1,.2,.1)..pl.imshow(w0,.cmap='j |
d3c0 | 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 73 73 65 72 73 74 | et')..pl.title('Partial.Wasserst |
d3e0 | 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 0d 0a 70 6c 2e 69 | ein')..pl.subplot(1,.2,.2)..pl.i |
d400 | 6d 73 68 6f 77 28 77 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 | mshow(w,.cmap='jet')..pl.title(' |
d420 | 45 6e 74 72 6f 70 69 63 20 70 61 72 74 69 61 6c 20 57 61 73 73 65 72 73 74 65 69 6e 27 29 0d 0a | Entropic.partial.Wasserstein').. |
d440 | 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 23 | 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 0d 0a 23 0d | ############################..#. |
d4a0 | 0a 23 20 53 61 6d 70 6c 65 20 6f 6e 65 20 32 44 20 61 6e 64 20 33 44 20 47 61 75 73 73 69 61 6e | .#.Sample.one.2D.and.3D.Gaussian |
d4c0 | 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 61 6e 64 20 70 6c 6f 74 20 74 68 65 6d 0d 0a 23 20 | .distributions.and.plot.them..#. |
d4e0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
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 0d 0a 23 0d 0a 23 20 | -------------------------..#..#. |
d520 | 54 68 65 20 47 72 6f 6d 6f 76 2d 57 61 73 73 65 72 73 74 65 69 6e 20 64 69 73 74 61 6e 63 65 20 | The.Gromov-Wasserstein.distance. |
d540 | 61 6c 6c 6f 77 73 20 74 6f 20 63 6f 6d 70 75 74 65 20 64 69 73 74 61 6e 63 65 73 20 77 69 74 68 | allows.to.compute.distances.with |
d560 | 20 73 61 6d 70 6c 65 73 20 74 68 61 74 0d 0a 23 20 64 6f 20 6e 6f 74 20 62 65 6c 6f 6e 67 20 74 | .samples.that..#.do.not.belong.t |
d580 | 6f 20 74 68 65 20 73 61 6d 65 20 6d 65 74 72 69 63 20 73 70 61 63 65 2e 20 46 6f 72 20 64 65 6d | o.the.same.metric.space..For.dem |
d5a0 | 6f 6e 73 74 72 61 74 69 6f 6e 20 70 75 72 70 6f 73 65 2c 20 77 65 20 73 61 6d 70 6c 65 0d 0a 23 | onstration.purpose,.we.sample..# |
d5c0 | 20 74 77 6f 20 47 61 75 73 73 69 61 6e 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 69 6e 20 32 | .two.Gaussian.distributions.in.2 |
d5e0 | 2d 20 61 6e 64 20 33 2d 64 69 6d 65 6e 73 69 6f 6e 61 6c 20 73 70 61 63 65 73 2e 0d 0a 0d 0a 6e | -.and.3-dimensional.spaces.....n |
d600 | 5f 73 61 6d 70 6c 65 73 20 3d 20 32 30 20 20 23 20 6e 62 20 73 61 6d 70 6c 65 73 0d 0a 6e 5f 6e | _samples.=.20..#.nb.samples..n_n |
d620 | 6f 69 73 65 20 3d 20 31 30 20 20 23 20 6e 62 20 6f 66 20 73 61 6d 70 6c 65 73 20 28 6e 6f 69 73 | oise.=.10..#.nb.of.samples.(nois |
d640 | 65 29 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 | e)....p.=.ot.unif(n_samples.+.n_ |
d660 | 6e 6f 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 | noise)..q.=.ot.unif(n_samples.+. |
d680 | 6e 5f 6e 6f 69 73 65 29 0d 0a 0d 0a 6d 75 5f 73 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 30 2c 20 | n_noise)....mu_s.=.np.array([0,. |
d6a0 | 30 5d 29 0d 0a 63 6f 76 5f 73 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 5b 31 2c 20 30 5d 2c 20 5b | 0])..cov_s.=.np.array([[1,.0],.[ |
d6c0 | 30 2c 20 31 5d 5d 29 0d 0a 0d 0a 6d 75 5f 74 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 30 2c 20 30 | 0,.1]])....mu_t.=.np.array([0,.0 |
d6e0 | 2c 20 30 5d 29 0d 0a 63 6f 76 5f 74 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 5b 31 2c 20 30 2c 20 | ,.0])..cov_t.=.np.array([[1,.0,. |
d700 | 30 5d 2c 20 5b 30 2c 20 31 2c 20 30 5d 2c 20 5b 30 2c 20 30 2c 20 31 5d 5d 29 0d 0a 0d 0a 0d 0a | 0],.[0,.1,.0],.[0,.0,.1]])...... |
d720 | 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 73 61 6d 70 6c 65 73 | xs.=.ot.datasets.make_2D_samples |
d740 | 5f 67 61 75 73 73 28 6e 5f 73 61 6d 70 6c 65 73 2c 20 6d 75 5f 73 2c 20 63 6f 76 5f 73 29 0d 0a | _gauss(n_samples,.mu_s,.cov_s).. |
d760 | 78 73 20 3d 20 6e 70 2e 63 6f 6e 63 61 74 65 6e 61 74 65 28 28 78 73 2c 20 28 28 6e 70 2e 72 61 | xs.=.np.concatenate((xs,.((np.ra |
d780 | 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 34 29 29 | ndom.rand(n_noise,.2).+.1).*.4)) |
d7a0 | 2c 20 61 78 69 73 3d 30 29 0d 0a 50 20 3d 20 73 70 2e 6c 69 6e 61 6c 67 2e 73 71 72 74 6d 28 63 | ,.axis=0)..P.=.sp.linalg.sqrtm(c |
d7c0 | 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 5f 73 61 | ov_t)..xt.=.np.random.randn(n_sa |
d7e0 | 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 78 74 20 3d 20 6e 70 | mples,.3).dot(P).+.mu_t..xt.=.np |
d800 | 2e 63 6f 6e 63 61 74 65 6e 61 74 65 28 28 78 74 2c 20 28 28 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 | .concatenate((xt,.((np.random.ra |
d820 | 6e 64 28 6e 5f 6e 6f 69 73 65 2c 20 33 29 20 2b 20 31 29 20 2a 20 31 30 29 29 2c 20 61 78 69 73 | nd(n_noise,.3).+.1).*.10)),.axis |
d840 | 3d 30 29 0d 0a 0d 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 | =0)....fig.=.pl.figure()..ax1.=. |
d860 | 66 69 67 2e 61 64 64 5f 73 75 62 70 6c 6f 74 28 31 32 31 29 0d 0a 61 78 31 2e 70 6c 6f 74 28 78 | fig.add_subplot(121)..ax1.plot(x |
d880 | 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 | s[:,.0],.xs[:,.1],.'+b',.label=' |
d8a0 | 53 6f 75 72 63 65 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 | Source.samples')..ax2.=.fig.add_ |
d8c0 | 73 75 62 70 6c 6f 74 28 31 32 32 2c 20 70 72 6f 6a 65 63 74 69 6f 6e 3d 27 33 64 27 29 0d 0a 61 | subplot(122,.projection='3d')..a |
d8e0 | 78 32 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 5d 2c 20 78 | x2.scatter(xt[:,.0],.xt[:,.1],.x |
d900 | 74 5b 3a 2c 20 32 5d 2c 20 63 6f 6c 6f 72 3d 27 72 27 29 0d 0a 70 6c 2e 73 68 6f 77 28 29 0d 0a | t[:,.2],.color='r')..pl.show().. |
d920 | 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 23 | ....############################ |
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 0d 0a 23 0d 0a 23 20 43 6f 6d 70 75 74 65 20 | #################..#..#.Compute. |
d980 | 70 61 72 74 69 61 6c 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 | partial.Gromov-Wasserstein.plans |
d9a0 | 20 61 6e 64 20 64 69 73 74 61 6e 63 65 2c 0d 0a 23 20 62 79 20 74 72 61 6e 73 70 6f 72 74 69 6e | .and.distance,..#.by.transportin |
d9c0 | 67 20 31 30 30 25 20 61 6e 64 20 32 2f 33 20 6f 66 20 74 68 65 20 6d 61 73 73 0d 0a 23 20 2d 2d | g.100%.and.2/3.of.the.mass..#.-- |
d9e0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
da00 | 2d 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 | -------------------....C1.=.sp.s |
da20 | 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 29 0d 0a 43 | patial.distance.cdist(xs,.xs)..C |
da40 | 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 74 28 78 74 | 2.=.sp.spatial.distance.cdist(xt |
da60 | 2c 20 78 74 29 0d 0a 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 | ,.xt)....print('-----m.=.1')..m. |
da80 | 3d 20 31 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 | =.1..res0,.log0.=.ot.partial.par |
daa0 | 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 43 32 2c 20 | tial_gromov_wasserstein(C1,.C2,. |
dac0 | 70 2c 20 71 2c 20 6d 3d 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | p,.q,.m=m,...................... |
dae0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c | ...............................l |
db00 | 6f 67 3d 54 72 75 65 29 0d 0a 72 65 73 2c 20 6c 6f 67 20 3d 20 6f 74 2e 70 61 72 74 69 61 6c 2e | og=True)..res,.log.=.ot.partial. |
db20 | 65 6e 74 72 6f 70 69 63 5f 70 61 72 74 69 61 6c 5f 67 72 6f 6d 6f 76 5f 77 61 73 73 65 72 73 74 | entropic_partial_gromov_wasserst |
db40 | 65 69 6e 28 43 31 2c 20 43 32 2c 20 70 2c 20 71 2c 20 31 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 | ein(C1,.C2,.p,.q,.10,........... |
db60 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
db80 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 3d 6d 2c 20 6c 6f 67 3d 54 72 75 65 29 0d | .................m=m,.log=True). |
dba0 | 0a 0d 0a 70 72 69 6e 74 28 27 50 61 72 74 69 61 6c 20 57 61 73 73 65 72 73 74 65 69 6e 20 64 69 | ...print('Partial.Wasserstein.di |
dbc0 | 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 61 | stance.(m.=.1):.'.+.str(log0['pa |
dbe0 | 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 70 | rtial_gw_dist']))..print('Entrop |
dc00 | 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 20 | ic.partial.Wasserstein.distance. |
dc20 | 28 6d 20 3d 20 31 29 3a 20 27 20 2b 0d 0a 20 20 20 20 20 20 73 74 72 28 6c 6f 67 5b 27 70 61 72 | (m.=.1):.'.+........str(log['par |
dc40 | 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 28 31 2c | tial_gw_dist']))....pl.figure(1, |
dc60 | 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 62 65 20 | .(10,.5))..pl.title("mass.to.be. |
dc80 | 74 72 61 6e 73 70 6f 72 74 65 64 20 6d 20 3d 20 31 22 29 0d 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 | transported.m.=.1")..pl.subplot( |
dca0 | 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 6d 61 70 3d 27 | 1,.2,.1)..pl.imshow(res0,.cmap=' |
dcc0 | 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 73 73 65 72 73 | jet')..pl.title('Partial.Wassers |
dce0 | 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 0d 0a 70 6c 2e | tein')..pl.subplot(1,.2,.2)..pl. |
dd00 | 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 2e 74 69 74 6c | imshow(res,.cmap='jet')..pl.titl |
dd20 | 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 74 65 69 6e 27 | e('Entropic.partial.Wasserstein' |
dd40 | 29 0d 0a 70 6c 2e 73 68 6f 77 28 29 0d 0a 0d 0a 70 72 69 6e 74 28 27 2d 2d 2d 2d 2d 6d 20 3d 20 | )..pl.show()....print('-----m.=. |
dd60 | 32 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 | 2/3')..m.=.2./.3..res0,.log0.=.o |
dd80 | 74 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 | t.partial.partial_gromov_wassers |
dda0 | 74 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 | tein(C1,.C2,.p,.q,.m=m,.log=True |
ddc0 | 29 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 | )..res,.log.=.ot.partial.entropi |
dde0 | 63 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 | c_partial_gromov_wasserstein(C1, |
de00 | 20 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 | .C2,.p,.q,.10,.................. |
de20 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
de40 | 20 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 | ..........m=m,.log=True)....prin |
de60 | 74 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 | t('Partial.Wasserstein.distance. |
de80 | 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 30 5b 27 | (m.=.2/3):.'.+........str(log0[' |
dea0 | 70 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 | partial_gw_dist']))..print('Entr |
dec0 | 6f 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 | opic.partial.Wasserstein.distanc |
dee0 | 65 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 | e.(m.=.2/3):.'.+........str(log[ |
df00 | 27 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 | 'partial_gw_dist']))....pl.figur |
df20 | 65 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 | e(1,.(10,.5))..pl.title("mass.to |
df40 | 20 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 | .be.transported.m.=.2/3")..pl.su |
df60 | 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 72 65 73 30 2c 20 | bplot(1,.2,.1)..pl.imshow(res0,. |
df80 | 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 69 61 6c 20 57 | cmap='jet')..pl.title('Partial.W |
dfa0 | 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 32 2c 20 32 | asserstein')..pl.subplot(1,.2,.2 |
dfc0 | 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 29 0d 0a 70 | )..pl.imshow(res,.cmap='jet')..p |
dfe0 | 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 73 65 72 | l.title('Entropic.partial.Wasser |
e000 | 73 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 | stein')..pl.show()..PK........|h |
e020 | 3a 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 | :O.\*.............plot_OT_1D.py# |
e040 | 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.-*-.""".===== |
e060 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 31 44 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 | ===============.1D.optimal.trans |
e080 | 70 6f 72 74 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 | port.====================..This. |
e0a0 | 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 74 | example.illustrates.the.computat |
e0c0 | 69 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 | ion.of.EMD.and.Sinkhorn.transpor |
e0e0 | 74 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 | t.plans.and.their.visualization. |
e100 | 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 72 | .."""..#.Author:.Remi.Flamary.<r |
e120 | 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 | emi.flamary@unice.fr>.#.#.Licens |
e140 | 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 | e:.MIT.License..import.numpy.as. |
e160 | 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c | np.import.matplotlib.pylab.as.pl |
e180 | 0a 69 6d 70 6f 72 74 20 6f 74 0a 69 6d 70 6f 72 74 20 6f 74 2e 70 6c 6f 74 0a 66 72 6f 6d 20 6f | .import.ot.import.ot.plot.from.o |
e1a0 | 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 73 73 20 | t.datasets.import.make_1D_gauss. |
e1c0 | 61 73 20 67 61 75 73 73 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | as.gauss..###################### |
e1e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
e200 | 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 72 | ########################.#.Gener |
e220 | 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 25 25 20 70 | ate.data.#.-------------...#%%.p |
e240 | 61 72 61 6d 65 74 65 72 73 0a 0a 6e 20 3d 20 31 30 30 20 20 23 20 6e 62 20 62 69 6e 73 0a 0a 23 | arameters..n.=.100..#.nb.bins..# |
e260 | 20 62 69 6e 20 70 6f 73 69 74 69 6f 6e 73 0a 78 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 2c 20 | .bin.positions.x.=.np.arange(n,. |
e280 | 64 74 79 70 65 3d 6e 70 2e 66 6c 6f 61 74 36 34 29 0a 0a 23 20 47 61 75 73 73 69 61 6e 20 64 69 | dtype=np.float64)..#.Gaussian.di |
e2a0 | 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 73 | stributions.a.=.gauss(n,.m=20,.s |
e2c0 | 3d 35 29 20 20 23 20 6d 3d 20 6d 65 61 6e 2c 20 73 3d 20 73 74 64 0a 62 20 3d 20 67 61 75 73 73 | =5)..#.m=.mean,.s=.std.b.=.gauss |
e2e0 | 28 6e 2c 20 6d 3d 36 30 2c 20 73 3d 31 30 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d | (n,.m=60,.s=10)..#.loss.matrix.M |
e300 | 20 3d 20 6f 74 2e 64 69 73 74 28 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 2c 20 78 2e | .=.ot.dist(x.reshape((n,.1)),.x. |
e320 | 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 29 0a 0a 0a | reshape((n,.1))).M./=.M.max()... |
e340 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
e360 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
e380 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 64 69 73 74 72 69 62 75 74 69 | ##############.#.Plot.distributi |
e3a0 | 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 2d 2d 2d 2d | ons.and.loss.matrix.#.---------- |
e3c0 | 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 70 6c | ------------------------..#%%.pl |
e3e0 | 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 65 28 | ot.the.distributions..pl.figure( |
e400 | 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 28 78 2c 20 | 1,.figsize=(6.4,.3)).pl.plot(x,. |
e420 | 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 62 75 74 69 | a,.'b',.label='Source.distributi |
e440 | 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 6c 3d 27 54 | on').pl.plot(x,.b,.'r',.label='T |
e460 | 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 6e 64 28 29 | arget.distribution').pl.legend() |
e480 | 0a 0a 23 25 25 20 70 6c 6f 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 61 6e 64 20 6c 6f 73 | ..#%%.plot.distributions.and.los |
e4a0 | 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 3d 28 | s.matrix..pl.figure(2,.figsize=( |
e4c0 | 35 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 | 5,.5)).ot.plot.plot1D_mat(a,.b,. |
e4e0 | 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 23 23 | M,.'Cost.matrix.M')..########### |
e500 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
e520 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
e540 | 23 23 23 0a 23 20 53 6f 6c 76 65 20 45 4d 44 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 25 | ###.#.Solve.EMD.#.---------...#% |
e560 | 25 20 45 4d 44 0a 0a 47 30 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 29 0a 0a 70 6c 2e | %.EMD..G0.=.ot.emd(a,.b,.M)..pl. |
e580 | 66 69 67 75 72 65 28 33 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f | figure(3,.figsize=(5,.5)).ot.plo |
e5a0 | 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 47 30 2c 20 27 4f 54 20 6d 61 74 72 69 | t.plot1D_mat(a,.b,.G0,.'OT.matri |
e5c0 | 78 20 47 30 27 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | x.G0')..######################## |
e5e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
e600 | 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 53 | ######################.#.Solve.S |
e620 | 69 6e 6b 68 6f 72 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 25 25 20 53 | inkhorn.#.--------------...#%%.S |
e640 | 69 6e 6b 68 6f 72 6e 0a 0a 6c 61 6d 62 64 20 3d 20 31 65 2d 33 0a 47 73 20 3d 20 6f 74 2e 73 69 | inkhorn..lambd.=.1e-3.Gs.=.ot.si |
e660 | 6e 6b 68 6f 72 6e 28 61 2c 20 62 2c 20 4d 2c 20 6c 61 6d 62 64 2c 20 76 65 72 62 6f 73 65 3d 54 | nkhorn(a,.b,.M,.lambd,.verbose=T |
e680 | 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 2c 20 35 | rue)..pl.figure(4,.figsize=(5,.5 |
e6a0 | 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 73 2c 20 | )).ot.plot.plot1D_mat(a,.b,.Gs,. |
e6c0 | 27 4f 54 20 6d 61 74 72 69 78 20 53 69 6e 6b 68 6f 72 6e 27 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 | 'OT.matrix.Sinkhorn')..pl.show() |
e6e0 | 0a 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 | .PK.........h:Om.S.............p |
e700 | 6c 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 | lot_stochastic.py""".=========== |
e720 | 3d 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 | ===============.Stochastic.examp |
e740 | 6c 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 | les.==========================.. |
e760 | 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 |
e780 | 20 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 | .how.to.use.the.stochatic.optimi |
e7a0 | 7a 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 | zation.algorithms.for.descrete.a |
e7c0 | 6e 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 | nd.semicontinous.measures.from.t |
e7e0 | 68 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 | he.POT.library..."""..#.Author:. |
e800 | 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 67 6d 61 | Kilian.Fatras.<kilian.fatras@gma |
e820 | 69 6c 2e 63 6f 6d 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 | il.com>.#.#.License:.MIT.License |
e840 | 0a 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a | ..import.matplotlib.pylab.as.pl. |
e860 | 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 69 6d 70 | import.numpy.as.np.import.ot.imp |
e880 | 6f 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 | ort.ot.plot...################## |
e8a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
e8c0 | 23 23 23 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 | ###########################.#.CO |
e8e0 | 4d 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 | MPUTE.TRANSPORTATION.MATRIX.FOR. |
e900 | 53 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 | SEMI-DUAL.PROBLEM.############## |
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 0a | ###############################. |
e960 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
e980 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
e9a0 | 23 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 | #############.#.DISCRETE.CASE:.# |
e9c0 | 0a 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 | .#.Sample.two.discrete.measures. |
e9e0 | 66 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 | for.the.discrete.case.#.-------- |
ea00 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
ea20 | 2d 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 | -----.#.#.Define.2.discrete.meas |
ea40 | 75 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 | ures.a.and.b,.the.points.where.a |
ea60 | 72 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 | re.defined.the.source.#.and.the. |
ea80 | 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 74 68 65 20 | target.measures.and.finally.the. |
eaa0 | 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 0a 6e 5f 74 | cost.matrix.c...n_source.=.7.n_t |
eac0 | 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 20 3d 20 31 | arget.=.4.reg.=.1.numItermax.=.1 |
eae0 | 30 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 | 000..a.=.ot.utils.unif(n_source) |
eb00 | 0a 62 20 3d 20 6f 74 2e 75 74 69 6c 73 2e 75 6e 69 66 28 6e 5f 74 61 72 67 65 74 29 0a 0a 72 6e | .b.=.ot.utils.unif(n_target)..rn |
eb20 | 67 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 52 61 6e 64 6f 6d 53 74 61 74 65 28 30 29 0a 58 5f 73 | g.=.np.random.RandomState(0).X_s |
eb40 | 6f 75 72 63 65 20 3d 20 72 6e 67 2e 72 61 6e 64 6e 28 6e 5f 73 6f 75 72 63 65 2c 20 32 29 0a 59 | ource.=.rng.randn(n_source,.2).Y |
eb60 | 5f 74 61 72 67 65 74 20 3d 20 72 6e 67 2e 72 61 6e 64 6e 28 6e 5f 74 61 72 67 65 74 2c 20 32 29 | _target.=.rng.randn(n_target,.2) |
eb80 | 0a 4d 20 3d 20 6f 74 2e 64 69 73 74 28 58 5f 73 6f 75 72 63 65 2c 20 59 5f 74 61 72 67 65 74 29 | .M.=.ot.dist(X_source,.Y_target) |
eba0 | 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 | ..############################## |
ebc0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
ebe0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 0a 23 20 43 61 6c 6c 20 74 68 65 20 22 53 41 | ###############.#.#.Call.the."SA |
ec00 | 47 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 | G".method.to.find.the.transporta |
ec20 | 74 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 | tion.matrix.in.the.discrete.case |
ec40 | 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 | .#.----------------------------- |
ec60 | 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 74 68 65 20 | ----------------.#.#.Define.the. |
ec80 | 6d 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 | method."SAG",.call.ot.solve_semi |
eca0 | 5f 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 | _dual_entropic.and.plot.the.#.re |
ecc0 | 73 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 | sults...method.=."SAG".sag_pi.=. |
ece0 | 6f 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 | ot.stochastic.solve_semi_dual_en |
ed00 | 74 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 | tropic(a,.b,.M,.reg,.method,.... |
ed20 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
ed40 | 20 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 | .............numItermax).print(s |
ed60 | 61 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 | ag_pi)..######################## |
ed80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
eda0 | 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 43 4f 4e 54 | #####################.#.SEMICONT |
edc0 | 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 65 6e 65 72 | INOUS.CASE:.#.#.Sample.one.gener |
ede0 | 61 6c 20 6d 65 61 73 75 72 65 20 61 2c 20 6f 6e 65 20 64 69 73 63 72 65 74 65 20 6d 65 61 73 75 | al.measure.a,.one.discrete.measu |
ee00 | 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 23 20 63 61 | res.b.for.the.semicontinous.#.ca |
ee20 | 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 2d 2d 2d 2d | se.#.--------------------------- |
ee40 | 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 65 20 6f 6e | ------------------.#.#.Define.on |
ee60 | 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 63 72 65 74 | e.general.measure.a,.one.discret |
ee80 | 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 72 65 0a 23 | e.measures.b,.the.points.where.# |
eea0 | 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 74 68 65 20 | .are.defined.the.source.and.the. |
eec0 | 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 74 68 65 20 | target.measures.and.finally.the. |
eee0 | 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 0a 6e 5f 74 | cost.matrix.c...n_source.=.7.n_t |
ef00 | 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 20 3d 20 31 | arget.=.4.reg.=.1.numItermax.=.1 |
ef20 | 30 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 | 000.log.=.True..a.=.ot.utils.uni |
ef40 | 66 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 | f(n_source).b.=.ot.utils.unif(n_ |
ef60 | 74 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 | target)..rng.=.np.random.RandomS |
ef80 | 74 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 | tate(0).X_source.=.rng.randn(n_s |
efa0 | 6f 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 | ource,.2).Y_target.=.rng.randn(n |
efc0 | 5f 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 | _target,.2).M.=.ot.dist(X_source |
efe0 | 2c 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 | ,.Y_target)..################### |
f000 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f020 | 23 23 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 | ##########################.#.#.C |
f040 | 61 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 | all.the."ASGD".method.to.find.th |
f060 | 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 20 73 | e.transportation.matrix.in.the.s |
f080 | 65 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 | emicontinous.#.case.#.---------- |
f0a0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
f0c0 | 2d 2d 2d 0a 23 0a 23 20 44 65 66 69 6e 65 20 74 68 65 20 6d 65 74 68 6f 64 20 22 41 53 47 44 22 | ---.#.#.Define.the.method."ASGD" |
f0e0 | 2c 20 63 61 6c 6c 20 6f 74 2e 73 6f 6c 76 65 5f 73 65 6d 69 5f 64 75 61 6c 5f 65 6e 74 72 6f 70 | ,.call.ot.solve_semi_dual_entrop |
f100 | 69 63 20 61 6e 64 20 70 6c 6f 74 20 74 68 65 0a 23 20 72 65 73 75 6c 74 73 2e 0a 0a 6d 65 74 68 | ic.and.plot.the.#.results...meth |
f120 | 6f 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 | od.=."ASGD".asgd_pi,.log_asgd.=. |
f140 | 6f 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 | ot.stochastic.solve_semi_dual_en |
f160 | 74 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 | tropic(a,.b,.M,.reg,.method,.... |
f180 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
f1a0 | 20 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 | ........................numIterm |
f1c0 | 61 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 | ax,.log=log).print(log_asgd['alp |
f1e0 | 68 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 | ha'],.log_asgd['beta']).print(as |
f200 | 67 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 | gd_pi)..######################## |
f220 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f240 | 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 6f 6d 70 61 72 | #####################.#.#.Compar |
f260 | 65 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 | e.the.results.with.the.Sinkhorn. |
f280 | 61 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 | algorithm.#.-------------------- |
f2a0 | 2d 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 | -------------------------.#.#.Ca |
f2c0 | 6c 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 | ll.the.Sinkhorn.algorithm.from.P |
f2e0 | 4f 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 | OT..sinkhorn_pi.=.ot.sinkhorn(a, |
f300 | 20 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 | .b,.M,.reg).print(sinkhorn_pi).. |
f320 | 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 | .############################### |
f340 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f360 | 23 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 | ###############.#.PLOT.TRANSPORT |
f380 | 41 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 | ATION.MATRIX.################### |
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 0a 0a 23 23 23 | ###########################..### |
f3e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f400 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f420 | 23 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 | ###########.#.Plot.SAG.results.# |
f440 | 20 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 | .----------------..pl.figure(4,. |
f460 | 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d | figsize=(5,.5)).ot.plot.plot1D_m |
f480 | 61 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 | at(a,.b,.sag_pi,.'semi-dual.:.OT |
f4a0 | 20 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 | .matrix.SAG').pl.show()...###### |
f4c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f4e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f500 | 23 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 | ########.#.Plot.ASGD.results.#.- |
f520 | 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 |
f540 | 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 |
f560 | 74 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 | t(a,.b,.asgd_pi,.'semi-dual.:.OT |
f580 | 20 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 | .matrix.ASGD').pl.show()...##### |
f5a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f5c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f5e0 | 23 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 | #########.#.Plot.Sinkhorn.result |
f600 | 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 0a 0a 70 6c 2e 66 69 | s.#.---------------------..pl.fi |
f620 | 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 6c 6f 74 2e | gure(4,.figsize=(5,.5)).ot.plot. |
f640 | 70 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 | plot1D_mat(a,.b,.sinkhorn_pi,.'O |
f660 | 54 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 | T.matrix.Sinkhorn').pl.show()... |
f680 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f6a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f6c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 43 4f 4d 50 55 54 45 20 54 52 41 4e 53 50 4f 52 | #############.#.COMPUTE.TRANSPOR |
f6e0 | 54 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 | TATION.MATRIX.FOR.DUAL.PROBLEM.# |
f700 | 23 23 23 23 23 23 23 23 23 23 23 23 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 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ############.################### |
f760 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f780 | 23 23 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 | ##########################.#.SEM |
f7a0 | 49 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 | ICONTINOUS.CASE:.#.#.Sample.one. |
f7c0 | 67 65 6e 65 72 61 6c 20 6d 65 61 73 75 72 65 20 61 2c 20 6f 6e 65 20 64 69 73 63 72 65 74 65 20 | general.measure.a,.one.discrete. |
f7e0 | 6d 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 | measures.b.for.the.semicontinous |
f800 | 0a 23 20 63 61 73 65 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | .#.case.#.---------------------- |
f820 | 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 44 65 66 69 | -----------------------.#.#.Defi |
f840 | 6e 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 | ne.one.general.measure.a,.one.di |
f860 | 73 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 | screte.measures.b,.the.points.wh |
f880 | 65 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 | ere.#.are.defined.the.source.and |
f8a0 | 20 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 | .the.target.measures.and.finally |
f8c0 | 20 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 | .the.cost.matrix.c...n_source.=. |
f8e0 | 37 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 | 7.n_target.=.4.reg.=.1.numIterma |
f900 | 78 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 | x.=.100000.lr.=.0.1.batch_size.= |
f920 | 20 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 | .3.log.=.True..a.=.ot.utils.unif |
f940 | 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 |
f960 | 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 |
f980 | 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 |
f9a0 | 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_ |
f9c0 | 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, |
f9e0 | 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)..#################### |
fa00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
fa20 | 23 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 |
fa40 | 6c 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 | ll.the."SGD".dual.method.to.find |
fa60 | 20 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 | .the.transportation.matrix.in.th |
fa80 | 65 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 | e.#.semicontinous.case.#.------- |
faa0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
fac0 | 2d 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 | ------.#.#.Call.ot.solve_dual_en |
fae0 | 74 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 | tropic.and.plot.the.results...sg |
fb00 | 64 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 | d_dual_pi,.log_sgd.=.ot.stochast |
fb20 | 69 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 | ic.solve_dual_entropic(a,.b,.M,. |
fb40 | 72 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 | reg,............................ |
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 62 61 | ..............................ba |
fb80 | 74 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 | tch_size,.numItermax,........... |
fba0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
fbc0 | 20 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 | ...............lr,.log=log).prin |
fbe0 | 74 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 | t(log_sgd['alpha'],.log_sgd['bet |
fc00 | 61 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 | a']).print(sgd_dual_pi)..####### |
fc20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
fc40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
fc60 | 23 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 | ######.#.#.Compare.the.results.w |
fc80 | 69 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 | ith.the.Sinkhorn.algorithm.#.--- |
fca0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
fcc0 | 2d 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 | ----------.#.#.Call.the.Sinkhorn |
fce0 | 20 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 | .algorithm.from.POT..sinkhorn_pi |
fd00 | 20 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 | .=.ot.sinkhorn(a,.b,.M,.reg).pri |
fd20 | 6e 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 | nt(sinkhorn_pi)..############### |
fd40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
fd60 | 23 23 23 23 23 23 23 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 | ###############################. |
fd80 | 23 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 | #.Plot..SGD.results.#.---------- |
fda0 | 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 35 | -------..pl.figure(4,.figsize=(5 |
fdc0 | 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 73 | ,.5)).ot.plot.plot1D_mat(a,.b,.s |
fde0 | 67 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 | gd_dual_pi,.'dual.:.OT.matrix.SG |
fe00 | 44 27 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | D').pl.show()...################ |
fe20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
fe40 | 23 23 23 23 23 23 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 | ##############################.# |
fe60 | 20 50 6c 6f 74 20 53 69 6e 6b 68 6f 72 6e 20 72 65 73 75 6c 74 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d | .Plot.Sinkhorn.results.#.------- |
fe80 | 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 67 | --------------..pl.figure(4,.fig |
fea0 | 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 28 | size=(5,.5)).ot.plot.plot1D_mat( |
fec0 | 61 2c 20 62 2c 20 73 69 6e 6b 68 6f 72 6e 5f 70 69 2c 20 27 4f 54 20 6d 61 74 72 69 78 20 53 69 | a,.b,.sinkhorn_pi,.'OT.matrix.Si |
fee0 | 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 00 00 00 84 68 3a | nkhorn').pl.show().PK.........h: |
ff00 | 4f 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 | O._N.............plot_fgw.py#.-* |
ff20 | 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.-*-.""".======== |
ff40 | 3d 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 | ======================.Plot.Fuse |
ff60 | 64 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 | d-gromov-Wasserstein.=========== |
ff80 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c | ===================..This.exampl |
ffa0 | 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 6f 66 | e.illustrates.the.computation.of |
ffc0 | 20 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 | .FGW.for.1D.measures[18]......[1 |
ffe0 | 38 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 | 8].Vayer.Titouan,.Chapel.Laetiti |
10000 | 61 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 | a,.Flamary.R{\'e}mi,.Tavenard.Ro |
10020 | 6d 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 | main.......and.Courty.Nicolas... |
10040 | 20 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 | .."Optimal.Transport.for.structu |
10060 | 72 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 | red.data.with.application.on.gra |
10080 | 70 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 | phs".....International.Conferenc |
100a0 | 65 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 | e.on.Machine.Learning.(ICML)..20 |
100c0 | 31 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 | 19..."""..#.Author:.Titouan.Vaye |
100e0 | 72 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 | r.<titouan.vayer@irisa.fr>.#.#.L |
10100 | 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6d 61 74 70 | icense:.MIT.License..import.matp |
10120 | 6c 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 | lotlib.pyplot.as.pl.import.numpy |
10140 | 20 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 | .as.np.import.ot.from.ot.gromov. |
10160 | 69 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 | import.gromov_wasserstein,.fused |
10180 | 5f 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 | _gromov_wasserstein..########### |
101a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
101c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
101e0 | 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 0a | ###.#.Generate.data.#.---------. |
10200 | 0a 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 | .#%%.parameters.#.We.create.two. |
10220 | 31 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 | 1D.random.measures.n.=.20..#.num |
10240 | 62 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 | ber.of.points.in.the.first.distr |
10260 | 69 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 | ibution.n2.=.30..#.number.of.poi |
10280 | 6e 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 | nts.in.the.second.distribution.s |
102a0 | 69 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 | ig.=.1..#.std.of.first.distribut |
102c0 | 69 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 | ion.sig2.=.0.1..#.std.of.second. |
102e0 | 64 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 | distribution..np.random.seed(0). |
10300 | 0a 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 | .phi.=.np.arange(n)[:,.None].xs. |
10320 | 3d 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 | =.phi.+.sig.*.np.random.randn(n, |
10340 | 20 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 | .1).ys.=.np.vstack((np.ones((n./ |
10360 | 2f 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 | /.2,.1)),.0.*.np.ones((n.//.2,.1 |
10380 | 29 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 | )))).+.sig2.*.np.random.randn(n, |
103a0 | 20 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 | .1)..phi2.=.np.arange(n2)[:,.Non |
103c0 | 65 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 | e].xt.=.phi2.+.sig.*.np.random.r |
103e0 | 61 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 | andn(n2,.1).yt.=.np.vstack((np.o |
10400 | 6e 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 | nes((n2.//.2,.1)),.0.*.np.ones(( |
10420 | 6e 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 | n2.//.2,.1)))).+.sig2.*.np.rando |
10440 | 6d 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 | m.randn(n2,.1).yt.=.yt[::-1,.:]. |
10460 | 0a 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 | .p.=.ot.unif(n).q.=.ot.unif(n2). |
10480 | 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 | .############################### |
104a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
104c0 | 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.#.-- |
104e0 | 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 6c 6f 74 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 | -------..#%%.plot.the.distributi |
10500 | 6f 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 | ons..pl.close(10).pl.figure(10,. |
10520 | 28 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 | (7,.7))..pl.subplot(2,.1,.1)..pl |
10540 | 2e 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 | .scatter(ys,.xs,.c=phi,.s=70).pl |
10560 | 2e 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 | .ylabel('Feature.value.a',.fonts |
10580 | 69 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 | ize=20).pl.title('$\mu=\sum_i.\d |
105a0 | 65 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 | elta_{x_i,a_i}$',.fontsize=25,.u |
105c0 | 73 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 | setex=True,.y=1).pl.xticks(()).p |
105e0 | 6c 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 | l.yticks(()).pl.subplot(2,.1,.2) |
10600 | 0a 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 | .pl.scatter(yt,.xt,.c=phi2,.s=70 |
10620 | 29 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 | ).pl.xlabel('coordinates.x/y',.f |
10640 | 6f 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 | ontsize=25).pl.ylabel('Feature.v |
10660 | 61 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 | alue.b',.fontsize=20).pl.title(' |
10680 | 24 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 | $\\nu=\sum_j.\delta_{y_j,b_j}$', |
106a0 | 20 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 | .fontsize=25,.usetex=True,.y=1). |
106c0 | 70 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 | pl.yticks(()).pl.tight_layout(). |
106e0 | 70 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 | pl.show()..##################### |
10700 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
10720 | 23 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 | #########################.#.Crea |
10740 | 74 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 | te.structure.matrices.and.across |
10760 | 2d 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 | -feature.distance.matrix.#.----- |
10780 | 2d 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 | ----..#%%.Structure.matrices.and |
107a0 | 20 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 | .across-features.distance.matrix |
107c0 | 0a 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 | .C1.=.ot.dist(xs).C2.=.ot.dist(x |
107e0 | 74 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 | t).M.=.ot.dist(ys,.yt).w1.=.ot.u |
10800 | 6e 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 | nif(C1.shape[0]).w2.=.ot.unif(C2 |
10820 | 2e 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 | .shape[0]).Got.=.ot.emd([],.[],. |
10840 | 4d 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 | M)..############################ |
10860 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
10880 | 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 6d 61 74 72 69 63 | ##################.#.Plot.matric |
108a0 | 65 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 | es.#.---------..#%%.cmap.=.'Reds |
108c0 | 27 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 | '.pl.close(10).pl.figure(10,.(5, |
108e0 | 20 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 | .5)).fs.=.15.l_x.=.[0,.5,.10,.15 |
10900 | 5d 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 | ].l_y.=.[0,.5,.10,.15,.20,.25].g |
10920 | 73 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 | s.=.pl.GridSpec(5,.5)..ax1.=.pl. |
10940 | 73 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 | subplot(gs[3:,.:2])..pl.imshow(C |
10960 | 31 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 | 1,.cmap=cmap,.interpolation='nea |
10980 | 72 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 | rest').pl.title("$C_1$",.fontsiz |
109a0 | 65 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 | e=fs).pl.xlabel("$k$",.fontsize= |
109c0 | 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 66 73 | fs).pl.ylabel("$i$",.fontsize=fs |
109e0 | 29 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 | ).pl.xticks(l_x).pl.yticks(l_x). |
10a00 | 0a 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 | .ax2.=.pl.subplot(gs[:3,.2:])..p |
10a20 | 6c 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 | l.imshow(C2,.cmap=cmap,.interpol |
10a40 | 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 22 24 43 5f 32 24 | ation='nearest').pl.title("$C_2$ |
10a60 | 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 6c 24 22 2c | ",.fontsize=fs).pl.ylabel("$l$", |
10a80 | 20 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 | .fontsize=fs).#pl.ylabel("$l$",f |
10aa0 | 6f 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 | ontsize=fs).pl.xticks(()).pl.yti |
10ac0 | 63 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 | cks(l_y).ax2.set_aspect('auto'). |
10ae0 | 0a 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 | .ax3.=.pl.subplot(gs[3:,.2:],.sh |
10b00 | 61 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 | arex=ax2,.sharey=ax1).pl.imshow( |
10b20 | 4d 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 | M,.cmap=cmap,.interpolation='nea |
10b40 | 72 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 | rest').pl.yticks(l_x).pl.xticks( |
10b60 | 6c 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 | l_y).pl.ylabel("$i$",.fontsize=f |
10b80 | 73 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 | s).pl.title("$M_{AB}$",.fontsize |
10ba0 | 3d 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 | =fs).pl.xlabel("$j$",.fontsize=f |
10bc0 | 73 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 | s).pl.tight_layout().ax3.set_asp |
10be0 | 65 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 | ect('auto').pl.show()..######### |
10c00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
10c20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
10c40 | 23 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 | #####.#.Compute.FGW/GW.#.------- |
10c60 | 2d 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 | --..#%%.Computing.FGW.and.GW.alp |
10c80 | 68 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 | ha.=.1e-3..ot.tic().Gwg,.logw.=. |
10ca0 | 66 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 | fused_gromov_wasserstein(M,.C1,. |
10cc0 | 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 73 27 | C2,.p,.q,.loss_fun='square_loss' |
10ce0 | 2c 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 | ,.alpha=alpha,.verbose=True,.log |
10d00 | 3d 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 | =True).ot.toc()..#%reload_ext.WG |
10d20 | 57 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 | W.Gg,.log.=.gromov_wasserstein(C |
10d40 | 31 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 | 1,.C2,.p,.q,.loss_fun='square_lo |
10d60 | 73 73 27 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 2c 20 6c 6f 67 3d 54 72 75 65 29 0a 0a 23 23 | ss',.verbose=True,.log=True)..## |
10d80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
10da0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
10dc0 | 23 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 | ############.#.Visualize.transpo |
10de0 | 72 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 | rt.matrices.#.---------..#%%.vis |
10e00 | 75 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 | u.OT.matrix.cmap.=.'Blues'.fs.=. |
10e20 | 31 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 | 15.pl.figure(2,.(13,.5)).pl.clf( |
10e40 | 29 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 | ).pl.subplot(1,.3,.1).pl.imshow( |
10e60 | 47 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 | Got,.cmap=cmap,.interpolation='n |
10e80 | 65 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 | earest').#pl.xlabel("$y$",fontsi |
10ea0 | 7a 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 | ze=fs).pl.ylabel("$i$",.fontsize |
10ec0 | 3d 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 | =fs).pl.xticks(())..pl.title('Wa |
10ee0 | 73 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 | sserstein.($M$.only)')..pl.subpl |
10f00 | 6f 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 | ot(1,.3,.2).pl.imshow(Gg,.cmap=c |
10f20 | 6d 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 | map,.interpolation='nearest').pl |
10f40 | 2e 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 | .title('Gromov.($C_1,C_2$.only)' |
10f60 | 29 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 | ).pl.xticks(()).pl.subplot(1,.3, |
10f80 | 20 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 | .3).pl.imshow(Gwg,.cmap=cmap,.in |
10fa0 | 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 | terpolation='nearest').pl.title( |
10fc0 | 27 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 | 'FGW..($M+C_1,C_2$)')..pl.xlabel |
10fe0 | 28 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 | ("$j$",.fontsize=fs).pl.ylabel(" |
11000 | 24 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 | $i$",.fontsize=fs)..pl.tight_lay |
11020 | 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 7c 68 3a 4f 6f 6c | out().pl.show().PK........|h:Ool |
11040 | 58 5b 88 13 00 00 88 13 00 00 13 00 00 00 70 6c 6f 74 5f 4f 54 5f 4c 31 5f 76 73 5f 4c 32 2e 70 | X[............plot_OT_L1_vs_L2.p |
11060 | 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d | y#.-*-.coding:.utf-8.-*-.""".=== |
11080 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
110a0 | 3d 3d 3d 3d 3d 3d 3d 0a 32 44 20 4f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 20 66 6f 72 | =======.2D.Optimal.transport.for |
110c0 | 20 64 69 66 66 65 72 65 6e 74 20 6d 65 74 72 69 63 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | .different.metrics.============= |
110e0 | 3d 3d 3d 3d 3d 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 | =============================..2 |
11100 | 44 20 4f 54 20 6f 6e 20 65 6d 70 69 72 69 63 61 6c 20 64 69 73 74 72 69 62 75 74 69 6f 20 20 77 | D.OT.on.empirical.distributio..w |
11120 | 69 74 68 20 64 69 66 66 65 72 65 6e 74 20 67 6f 75 6e 64 20 6d 65 74 72 69 63 2e 0a 0a 53 74 6f | ith.different.gound.metric...Sto |
11140 | 6c 65 20 74 68 65 20 66 69 67 75 72 65 20 69 64 65 61 20 66 72 6f 6d 20 46 69 67 2e 20 31 20 61 | le.the.figure.idea.from.Fig..1.a |
11160 | 6e 64 20 32 20 69 6e 0a 68 74 74 70 73 3a 2f 2f 61 72 78 69 76 2e 6f 72 67 2f 70 64 66 2f 31 37 | nd.2.in.https://arxiv.org/pdf/17 |
11180 | 30 36 2e 30 37 36 35 30 2e 70 64 66 0a 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a 20 52 65 | 06.07650.pdf..."""..#.Author:.Re |
111a0 | 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 |
111c0 | 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 |
111e0 | 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 |
11200 | 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 69 6d 70 6f 72 74 20 6f | b.pylab.as.pl.import.ot.import.o |
11220 | 74 2e 70 6c 6f 74 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | t.plot..######################## |
11240 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
11260 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 44 61 74 61 73 65 74 | ######################.#.Dataset |
11280 | 20 31 20 3a 20 75 6e 69 66 6f 72 6d 20 73 61 6d 70 6c 69 6e 67 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d | .1.:.uniform.sampling.#.-------- |
112a0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 6e 20 3d 20 32 30 20 20 23 20 | --------------------..n.=.20..#. |
112c0 | 6e 62 20 73 61 6d 70 6c 65 73 0a 78 73 20 3d 20 6e 70 2e 7a 65 72 6f 73 28 28 6e 2c 20 32 29 29 | nb.samples.xs.=.np.zeros((n,.2)) |
112e0 | 0a 78 73 5b 3a 2c 20 30 5d 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 29 20 2b 20 31 0a 78 73 5b | .xs[:,.0].=.np.arange(n).+.1.xs[ |
11300 | 3a 2c 20 31 5d 20 3d 20 28 6e 70 2e 61 72 61 6e 67 65 28 6e 29 20 2b 20 31 29 20 2a 20 2d 30 2e | :,.1].=.(np.arange(n).+.1).*.-0. |
11320 | 30 30 31 20 20 23 20 74 6f 20 6d 61 6b 65 20 69 74 20 73 74 72 69 63 74 6c 79 20 63 6f 6e 76 65 | 001..#.to.make.it.strictly.conve |
11340 | 78 2e 2e 2e 0a 0a 78 74 20 3d 20 6e 70 2e 7a 65 72 6f 73 28 28 6e 2c 20 32 29 29 0a 78 74 5b 3a | x.....xt.=.np.zeros((n,.2)).xt[: |
11360 | 2c 20 31 5d 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 29 20 2b 20 31 0a 0a 61 2c 20 62 20 3d 20 | ,.1].=.np.arange(n).+.1..a,.b.=. |
11380 | 6f 74 2e 75 6e 69 66 28 6e 29 2c 20 6f 74 2e 75 6e 69 66 28 6e 29 20 20 23 20 75 6e 69 66 6f 72 | ot.unif(n),.ot.unif(n)..#.unifor |
113a0 | 6d 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6f 6e 20 73 61 6d 70 6c 65 73 0a 0a 23 20 6c 6f 73 | m.distribution.on.samples..#.los |
113c0 | 73 20 6d 61 74 72 69 78 0a 4d 31 20 3d 20 6f 74 2e 64 69 73 74 28 78 73 2c 20 78 74 2c 20 6d 65 | s.matrix.M1.=.ot.dist(xs,.xt,.me |
113e0 | 74 72 69 63 3d 27 65 75 63 6c 69 64 65 61 6e 27 29 0a 4d 31 20 2f 3d 20 4d 31 2e 6d 61 78 28 29 | tric='euclidean').M1./=.M1.max() |
11400 | 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 32 20 3d 20 6f 74 2e 64 69 73 74 28 78 73 2c | ..#.loss.matrix.M2.=.ot.dist(xs, |
11420 | 20 78 74 2c 20 6d 65 74 72 69 63 3d 27 73 71 65 75 63 6c 69 64 65 61 6e 27 29 0a 4d 32 20 2f 3d | .xt,.metric='sqeuclidean').M2./= |
11440 | 20 4d 32 2e 6d 61 78 28 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 70 20 3d 20 6e 70 | .M2.max()..#.loss.matrix.Mp.=.np |
11460 | 2e 73 71 72 74 28 6f 74 2e 64 69 73 74 28 78 73 2c 20 78 74 2c 20 6d 65 74 72 69 63 3d 27 65 75 | .sqrt(ot.dist(xs,.xt,.metric='eu |
11480 | 63 6c 69 64 65 61 6e 27 29 29 0a 4d 70 20 2f 3d 20 4d 70 2e 6d 61 78 28 29 0a 0a 23 20 44 61 74 | clidean')).Mp./=.Mp.max()..#.Dat |
114a0 | 61 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 37 2c 20 33 29 29 0a 70 | a.pl.figure(1,.figsize=(7,.3)).p |
114c0 | 6c 2e 63 6c 66 28 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 | l.clf().pl.plot(xs[:,.0],.xs[:,. |
114e0 | 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 27 | 1],.'+b',.label='Source.samples' |
11500 | 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 78 | ).pl.plot(xt[:,.0],.xt[:,.1],.'x |
11520 | 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 61 | r',.label='Target.samples').pl.a |
11540 | 78 69 73 28 27 65 71 75 61 6c 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 20 61 6e | xis('equal').pl.title('Source.an |
11560 | 64 20 74 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 0a 23 20 43 6f 73 | d.target.distributions')...#.Cos |
11580 | 74 20 6d 61 74 72 69 63 65 73 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 3d | t.matrices.pl.figure(2,.figsize= |
115a0 | 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 70 6c 2e | (7,.3))..pl.subplot(1,.3,.1).pl. |
115c0 | 69 6d 73 68 6f 77 28 4d 31 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 | imshow(M1,.interpolation='neares |
115e0 | 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 45 75 63 6c 69 64 65 61 6e 20 63 6f 73 74 27 29 0a 0a | t').pl.title('Euclidean.cost').. |
11600 | 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 4d 32 | pl.subplot(1,.3,.2).pl.imshow(M2 |
11620 | 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 74 69 | ,.interpolation='nearest').pl.ti |
11640 | 74 6c 65 28 27 53 71 75 61 72 65 64 20 45 75 63 6c 69 64 65 61 6e 20 63 6f 73 74 27 29 0a 0a 70 | tle('Squared.Euclidean.cost')..p |
11660 | 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 4d 70 2c | l.subplot(1,.3,.3).pl.imshow(Mp, |
11680 | 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 |
116a0 | 6c 65 28 27 53 71 72 74 20 45 75 63 6c 69 64 65 61 6e 20 63 6f 73 74 27 29 0a 70 6c 2e 74 69 67 | le('Sqrt.Euclidean.cost').pl.tig |
116c0 | 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ht_layout()..################### |
116e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
11700 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 44 61 | ###########################.#.Da |
11720 | 74 61 73 65 74 20 31 20 3a 20 50 6c 6f 74 20 4f 54 20 4d 61 74 72 69 63 65 73 0a 23 20 2d 2d 2d | taset.1.:.Plot.OT.Matrices.#.--- |
11740 | 2d 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 | -------------------------...#%%. |
11760 | 45 4d 44 0a 47 31 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 31 29 0a 47 32 20 3d 20 6f | EMD.G1.=.ot.emd(a,.b,.M1).G2.=.o |
11780 | 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 32 29 0a 47 70 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 | t.emd(a,.b,.M2).Gp.=.ot.emd(a,.b |
117a0 | 2c 20 4d 70 29 0a 0a 23 20 4f 54 20 6d 61 74 72 69 63 65 73 0a 70 6c 2e 66 69 67 75 72 65 28 33 | ,.Mp)..#.OT.matrices.pl.figure(3 |
117c0 | 2c 20 66 69 67 73 69 7a 65 3d 28 37 2c 20 33 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c | ,.figsize=(7,.3))..pl.subplot(1, |
117e0 | 20 33 2c 20 31 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 | .3,.1).ot.plot.plot2D_samples_ma |
11800 | 74 28 78 73 2c 20 78 74 2c 20 47 31 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e | t(xs,.xt,.G1,.c=[.5,..5,.1]).pl. |
11820 | 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c | plot(xs[:,.0],.xs[:,.1],.'+b',.l |
11840 | 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 78 | abel='Source.samples').pl.plot(x |
11860 | 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 27 | t[:,.0],.xt[:,.1],.'xr',.label=' |
11880 | 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 27 | Target.samples').pl.axis('equal' |
118a0 | 29 0a 23 20 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f | ).#.pl.legend(loc=0).pl.title('O |
118c0 | 54 20 45 75 63 6c 69 64 65 61 6e 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 | T.Euclidean')..pl.subplot(1,.3,. |
118e0 | 32 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 78 73 | 2).ot.plot.plot2D_samples_mat(xs |
11900 | 2c 20 78 74 2c 20 47 32 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 70 6c 6f 74 | ,.xt,.G2,.c=[.5,..5,.1]).pl.plot |
11920 | 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c | (xs[:,.0],.xs[:,.1],.'+b',.label |
11940 | 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c | ='Source.samples').pl.plot(xt[:, |
11960 | 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 | .0],.xt[:,.1],.'xr',.label='Targ |
11980 | 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 61 78 69 73 28 27 65 71 75 61 6c 27 29 0a 23 20 | et.samples').pl.axis('equal').#. |
119a0 | 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 73 71 | pl.legend(loc=0).pl.title('OT.sq |
119c0 | 75 61 72 65 64 20 45 75 63 6c 69 64 65 61 6e 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c | uared.Euclidean')..pl.subplot(1, |
119e0 | 20 33 2c 20 33 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 | .3,.3).ot.plot.plot2D_samples_ma |
11a00 | 74 28 78 73 2c 20 78 74 2c 20 47 70 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e | t(xs,.xt,.Gp,.c=[.5,..5,.1]).pl. |
11a20 | 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c | plot(xs[:,.0],.xs[:,.1],.'+b',.l |
11a40 | 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 78 | abel='Source.samples').pl.plot(x |
11a60 | 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 27 | t[:,.0],.xt[:,.1],.'xr',.label=' |
11a80 | 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 27 | Target.samples').pl.axis('equal' |
11aa0 | 29 0a 23 20 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f | ).#.pl.legend(loc=0).pl.title('O |
11ac0 | 54 20 73 71 72 74 20 45 75 63 6c 69 64 65 61 6e 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f | T.sqrt.Euclidean').pl.tight_layo |
11ae0 | 75 74 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ut()..pl.show()...############## |
11b00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
11b20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
11b40 | 0a 23 20 44 61 74 61 73 65 74 20 32 20 3a 20 50 61 72 74 69 61 6c 20 63 69 72 63 6c 65 0a 23 20 | .#.Dataset.2.:.Partial.circle.#. |
11b60 | 2d 2d 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 | --------------------------..n.=. |
11b80 | 35 30 20 20 23 20 6e 62 20 73 61 6d 70 6c 65 73 0a 78 74 6f 74 20 3d 20 6e 70 2e 7a 65 72 6f 73 | 50..#.nb.samples.xtot.=.np.zeros |
11ba0 | 28 28 6e 20 2b 20 31 2c 20 32 29 29 0a 78 74 6f 74 5b 3a 2c 20 30 5d 20 3d 20 6e 70 2e 63 6f 73 | ((n.+.1,.2)).xtot[:,.0].=.np.cos |
11bc0 | 28 0a 20 20 20 20 28 6e 70 2e 61 72 61 6e 67 65 28 6e 20 2b 20 31 29 20 2b 20 31 2e 30 29 20 2a | (.....(np.arange(n.+.1).+.1.0).* |
11be0 | 20 30 2e 39 20 2f 20 28 6e 20 2b 20 32 29 20 2a 20 32 20 2a 20 6e 70 2e 70 69 29 0a 78 74 6f 74 | .0.9./.(n.+.2).*.2.*.np.pi).xtot |
11c00 | 5b 3a 2c 20 31 5d 20 3d 20 6e 70 2e 73 69 6e 28 0a 20 20 20 20 28 6e 70 2e 61 72 61 6e 67 65 28 | [:,.1].=.np.sin(.....(np.arange( |
11c20 | 6e 20 2b 20 31 29 20 2b 20 31 2e 30 29 20 2a 20 30 2e 39 20 2f 20 28 6e 20 2b 20 32 29 20 2a 20 | n.+.1).+.1.0).*.0.9./.(n.+.2).*. |
11c40 | 32 20 2a 20 6e 70 2e 70 69 29 0a 0a 78 73 20 3d 20 78 74 6f 74 5b 3a 6e 2c 20 3a 5d 0a 78 74 20 | 2.*.np.pi)..xs.=.xtot[:n,.:].xt. |
11c60 | 3d 20 78 74 6f 74 5b 31 3a 2c 20 3a 5d 0a 0a 61 2c 20 62 20 3d 20 6f 74 2e 75 6e 69 66 28 6e 29 | =.xtot[1:,.:]..a,.b.=.ot.unif(n) |
11c80 | 2c 20 6f 74 2e 75 6e 69 66 28 6e 29 20 20 23 20 75 6e 69 66 6f 72 6d 20 64 69 73 74 72 69 62 75 | ,.ot.unif(n)..#.uniform.distribu |
11ca0 | 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 4d | tion.on.samples..#.loss.matrix.M |
11cc0 | 31 20 3d 20 6f 74 2e 64 69 73 74 28 78 73 2c 20 78 74 2c 20 6d 65 74 72 69 63 3d 27 65 75 63 6c | 1.=.ot.dist(xs,.xt,.metric='eucl |
11ce0 | 69 64 65 61 6e 27 29 0a 4d 31 20 2f 3d 20 4d 31 2e 6d 61 78 28 29 0a 0a 23 20 6c 6f 73 73 20 6d | idean').M1./=.M1.max()..#.loss.m |
11d00 | 61 74 72 69 78 0a 4d 32 20 3d 20 6f 74 2e 64 69 73 74 28 78 73 2c 20 78 74 2c 20 6d 65 74 72 69 | atrix.M2.=.ot.dist(xs,.xt,.metri |
11d20 | 63 3d 27 73 71 65 75 63 6c 69 64 65 61 6e 27 29 0a 4d 32 20 2f 3d 20 4d 32 2e 6d 61 78 28 29 0a | c='sqeuclidean').M2./=.M2.max(). |
11d40 | 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 70 20 3d 20 6e 70 2e 73 71 72 74 28 6f 74 2e 64 | .#.loss.matrix.Mp.=.np.sqrt(ot.d |
11d60 | 69 73 74 28 78 73 2c 20 78 74 2c 20 6d 65 74 72 69 63 3d 27 65 75 63 6c 69 64 65 61 6e 27 29 29 | ist(xs,.xt,.metric='euclidean')) |
11d80 | 0a 4d 70 20 2f 3d 20 4d 70 2e 6d 61 78 28 29 0a 0a 0a 23 20 44 61 74 61 0a 70 6c 2e 66 69 67 75 | .Mp./=.Mp.max()...#.Data.pl.figu |
11da0 | 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 37 2c 20 33 29 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 | re(4,.figsize=(7,.3)).pl.clf().p |
11dc0 | 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c | l.plot(xs[:,.0],.xs[:,.1],.'+b', |
11de0 | 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 | .label='Source.samples').pl.plot |
11e00 | 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c | (xt[:,.0],.xt[:,.1],.'xr',.label |
11e20 | 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 61 78 69 73 28 27 65 71 75 61 | ='Target.samples').pl.axis('equa |
11e40 | 6c 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 20 61 6e 64 20 74 72 61 67 65 74 20 | l').pl.title('Source.and.traget. |
11e60 | 64 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 0a 23 20 43 6f 73 74 20 6d 61 74 72 69 63 65 | distributions')...#.Cost.matrice |
11e80 | 73 0a 70 6c 2e 66 69 67 75 72 65 28 35 2c 20 66 69 67 73 69 7a 65 3d 28 37 2c 20 33 29 29 0a 0a | s.pl.figure(5,.figsize=(7,.3)).. |
11ea0 | 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 4d 31 | pl.subplot(1,.3,.1).pl.imshow(M1 |
11ec0 | 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 74 69 | ,.interpolation='nearest').pl.ti |
11ee0 | 74 6c 65 28 27 45 75 63 6c 69 64 65 61 6e 20 63 6f 73 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f | tle('Euclidean.cost')..pl.subplo |
11f00 | 74 28 31 2c 20 33 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 4d 32 2c 20 69 6e 74 65 72 70 6f | t(1,.3,.2).pl.imshow(M2,.interpo |
11f20 | 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 53 71 75 61 | lation='nearest').pl.title('Squa |
11f40 | 72 65 64 20 45 75 63 6c 69 64 65 61 6e 20 63 6f 73 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 | red.Euclidean.cost')..pl.subplot |
11f60 | 28 31 2c 20 33 2c 20 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 4d 70 2c 20 69 6e 74 65 72 70 6f 6c | (1,.3,.3).pl.imshow(Mp,.interpol |
11f80 | 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 72 74 20 | ation='nearest').pl.title('Sqrt. |
11fa0 | 45 75 63 6c 69 64 65 61 6e 20 63 6f 73 74 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 | Euclidean.cost').pl.tight_layout |
11fc0 | 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 | ()..############################ |
11fe0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
12000 | 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 32 20 3a | ##################.#.Dataset.2.: |
12020 | 20 50 6c 6f 74 20 20 4f 54 20 4d 61 74 72 69 63 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | .Plot..OT.Matrices.#.----------- |
12040 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 25 25 20 45 4d 44 0a 47 31 20 | ------------------...#%%.EMD.G1. |
12060 | 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 31 29 0a 47 32 20 3d 20 6f 74 2e 65 6d 64 28 61 | =.ot.emd(a,.b,.M1).G2.=.ot.emd(a |
12080 | 2c 20 62 2c 20 4d 32 29 0a 47 70 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 70 29 0a 0a | ,.b,.M2).Gp.=.ot.emd(a,.b,.Mp).. |
120a0 | 23 20 4f 54 20 6d 61 74 72 69 63 65 73 0a 70 6c 2e 66 69 67 75 72 65 28 36 2c 20 66 69 67 73 69 | #.OT.matrices.pl.figure(6,.figsi |
120c0 | 7a 65 3d 28 37 2c 20 33 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 31 29 0a | ze=(7,.3))..pl.subplot(1,.3,.1). |
120e0 | 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 78 73 2c 20 78 | ot.plot.plot2D_samples_mat(xs,.x |
12100 | 74 2c 20 47 31 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 | t,.G1,.c=[.5,..5,.1]).pl.plot(xs |
12120 | 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 | [:,.0],.xs[:,.1],.'+b',.label='S |
12140 | 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d | ource.samples').pl.plot(xt[:,.0] |
12160 | 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 | ,.xt[:,.1],.'xr',.label='Target. |
12180 | 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 61 78 69 73 28 27 65 71 75 61 6c 27 29 0a 23 20 70 6c 2e | samples').pl.axis('equal').#.pl. |
121a0 | 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 45 75 63 6c 69 | legend(loc=0).pl.title('OT.Eucli |
121c0 | 64 65 61 6e 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 32 29 0a 6f 74 2e 70 | dean')..pl.subplot(1,.3,.2).ot.p |
121e0 | 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 78 73 2c 20 78 74 2c 20 47 | lot.plot2D_samples_mat(xs,.xt,.G |
12200 | 32 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 | 2,.c=[.5,..5,.1]).pl.plot(xs[:,. |
12220 | 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 | 0],.xs[:,.1],.'+b',.label='Sourc |
12240 | 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 | e.samples').pl.plot(xt[:,.0],.xt |
12260 | 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 | [:,.1],.'xr',.label='Target.samp |
12280 | 6c 65 73 27 29 0a 70 6c 2e 61 78 69 73 28 27 65 71 75 61 6c 27 29 0a 23 20 70 6c 2e 6c 65 67 65 | les').pl.axis('equal').#.pl.lege |
122a0 | 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 73 71 75 61 72 65 64 20 45 | nd(loc=0).pl.title('OT.squared.E |
122c0 | 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 33 29 0a | uclidean')..pl.subplot(1,.3,.3). |
122e0 | 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 78 73 2c 20 78 | ot.plot.plot2D_samples_mat(xs,.x |
12300 | 74 2c 20 47 70 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 | t,.Gp,.c=[.5,..5,.1]).pl.plot(xs |
12320 | 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 | [:,.0],.xs[:,.1],.'+b',.label='S |
12340 | 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d | ource.samples').pl.plot(xt[:,.0] |
12360 | 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 | ,.xt[:,.1],.'xr',.label='Target. |
12380 | 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 61 78 69 73 28 27 65 71 75 61 6c 27 29 0a 23 20 70 6c 2e | samples').pl.axis('equal').#.pl. |
123a0 | 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 72 74 20 | legend(loc=0).pl.title('OT.sqrt. |
123c0 | 45 75 63 6c 69 64 65 61 6e 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 | Euclidean').pl.tight_layout()..p |
123e0 | 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 a4 72 94 50 e9 d6 9c 70 1d 07 00 00 1d | l.show().PK.........r.P...p..... |
12400 | 07 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 | .......plot_screenkhorn_1D.py#.- |
12420 | 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.-*-.""".======= |
12440 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 31 44 20 53 63 72 65 | ========================.1D.Scre |
12460 | 65 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 | ened.optimal.transport.========= |
12480 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 | ======================..This.exa |
124a0 | 6d 70 6c 65 20 69 6c 6c 75 73 74 72 61 74 65 73 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e | mple.illustrates.the.computation |
124c0 | 20 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 | .of.Screenkhorn:.Screening.Sinkh |
124e0 | 6f 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 | orn.Algorithm.for.Optimal.transp |
12500 | 6f 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 | ort.."""..#.Author:.Mokhtar.Z..A |
12520 | 6c 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 | laya.<mokhtarzahdi.alaya@gmail.c |
12540 | 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 6d | om>.#.#.License:.MIT.License..im |
12560 | 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c | port.numpy.as.np.import.matplotl |
12580 | 69 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 | ib.pylab.as.pl.import.ot.plot.fr |
125a0 | 6f 6d 20 6f 74 2e 64 61 74 61 73 65 74 73 20 69 6d 70 6f 72 74 20 6d 61 6b 65 5f 31 44 5f 67 61 | om.ot.datasets.import.make_1D_ga |
125c0 | 75 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 | uss.as.gauss.from.ot.bregman.imp |
125e0 | 6f 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 | ort.screenkhorn..############### |
12600 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
12620 | 23 23 23 23 23 23 23 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 | ###############################. |
12640 | 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.#.-------------. |
12660 | 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 |
12680 | 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 |
126a0 | 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 |
126c0 | 69 61 6e 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 61 20 3d 20 67 61 75 73 73 28 6e 2c 20 6d | ian.distributions.a.=.gauss(n,.m |
126e0 | 3d 32 30 2c 20 73 3d 35 29 20 20 23 20 6d 3d 20 6d 65 61 6e 2c 20 73 3d 20 73 74 64 0a 62 20 3d | =20,.s=5)..#.m=.mean,.s=.std.b.= |
12700 | 20 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 | .gauss(n,.m=60,.s=10)..#.loss.ma |
12720 | 74 72 69 78 0a 4d 20 3d 20 6f 74 2e 64 69 73 74 28 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 | trix.M.=.ot.dist(x.reshape((n,.1 |
12740 | 29 29 2c 20 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 | )),.x.reshape((n,.1))).M./=.M.ma |
12760 | 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 23 23 23 23 23 23 23 | x()..########################### |
12780 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
127a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 64 69 73 74 72 | ###################.#.Plot.distr |
127c0 | 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 23 20 2d 2d 2d 2d 2d | ibutions.and.loss.matrix.#.----- |
127e0 | 2d 2d 2d 2d 2d 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 | -----------------------------..# |
12800 | 25 25 20 70 6c 6f 74 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 70 6c 2e 66 69 | %%.plot.the.distributions..pl.fi |
12820 | 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 29 29 0a 70 6c 2e 70 6c 6f | gure(1,.figsize=(6.4,.3)).pl.plo |
12840 | 74 28 78 2c 20 61 2c 20 27 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 64 69 73 74 72 | t(x,.a,.'b',.label='Source.distr |
12860 | 69 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 | ibution').pl.plot(x,.b,.'r',.lab |
12880 | 65 6c 3d 27 54 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 27 29 0a 70 6c 2e 6c 65 67 | el='Target.distribution').pl.leg |
128a0 | 65 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 | end()..#.plot.distributions.and. |
128c0 | 6c 6f 73 73 20 6d 61 74 72 69 78 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a | loss.matrix..pl.figure(2,.figsiz |
128e0 | 65 3d 28 35 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 | e=(5,.5)).ot.plot.plot1D_mat(a,. |
12900 | 62 2c 20 4d 2c 20 27 43 6f 73 74 20 6d 61 74 72 69 78 20 4d 27 29 0a 0a 23 23 23 23 23 23 23 23 | b,.M,.'Cost.matrix.M')..######## |
12920 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
12940 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
12960 | 23 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 | ######.#.Solve.Screenkhorn.#.--- |
12980 | 2d 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 | --------------------..#.Screenkh |
129a0 | 6f 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 | orn.lambd.=.2e-03..#.entropy.par |
129c0 | 61 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 | ameter.ns_budget.=.30..#.budget. |
129e0 | 6e 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 | number.of.points.to.be.keeped.in |
12a00 | 20 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 | .the.source.distribution.nt_budg |
12a20 | 65 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 | et.=.30..#.budget.number.of.poin |
12a40 | 74 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 | ts.to.be.keeped.in.the.target.di |
12a60 | 73 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 | stribution..G_screen.=.screenkho |
12a80 | 72 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 | rn(a,.b,.M,.lambd,.ns_budget,.nt |
12aa0 | 5f 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 | _budget,.uniform=False,.restrict |
12ac0 | 65 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 | ed=True,.verbose=True).pl.figure |
12ae0 | 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 | (4,.figsize=(5,.5)).ot.plot.plot |
12b00 | 31 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 | 1D_mat(a,.b,.G_screen,.'OT.matri |
12b20 | 78 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 | x.Screenkhorn').pl.show().PK.... |
12b40 | 00 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 | ....|h:Oz..+e...e.......plot_com |
12b60 | 70 75 74 65 5f 65 6d 64 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d | pute_emd.py#.-*-.coding:.utf-8.- |
12b80 | 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 50 6c 6f 74 20 6d 75 | *-.""".=================.Plot.mu |
12ba0 | 6c 74 69 70 6c 65 20 45 4d 44 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 53 68 | ltiple.EMD.=================..Sh |
12bc0 | 6f 77 73 20 68 6f 77 20 74 6f 20 63 6f 6d 70 75 74 65 20 6d 75 6c 74 69 70 6c 65 20 45 4d 44 20 | ows.how.to.compute.multiple.EMD. |
12be0 | 61 6e 64 20 53 69 6e 6b 68 6f 72 6e 20 77 69 74 68 20 74 77 6f 20 64 69 66 66 65 72 6e 74 0a 67 | and.Sinkhorn.with.two.differnt.g |
12c00 | 72 6f 75 6e 64 20 6d 65 74 72 69 63 73 20 61 6e 64 20 70 6c 6f 74 20 74 68 65 69 72 20 76 61 6c | round.metrics.and.plot.their.val |
12c20 | 75 65 73 20 66 6f 72 20 64 69 66 66 65 65 6e 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 2e 0a | ues.for.diffeent.distributions.. |
12c40 | 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 72 | .."""..#.Author:.Remi.Flamary.<r |
12c60 | 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 | emi.flamary@unice.fr>.#.#.Licens |
12c80 | 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 | e:.MIT.License..import.numpy.as. |
12ca0 | 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c | np.import.matplotlib.pylab.as.pl |
12cc0 | 0a 69 6d 70 6f 72 74 20 6f 74 0a 66 72 6f 6d 20 6f 74 2e 64 61 74 61 73 65 74 73 20 69 6d 70 6f | .import.ot.from.ot.datasets.impo |
12ce0 | 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 0a 23 23 23 23 | rt.make_1D_gauss.as.gauss...#### |
12d00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
12d20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
12d40 | 23 23 23 23 23 23 23 23 23 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d | ##########.#.Generate.data.#.--- |
12d60 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 6e 20 3d 20 | ----------..#%%.parameters..n.=. |
12d80 | 31 30 30 20 20 23 20 6e 62 20 62 69 6e 73 0a 6e 5f 74 61 72 67 65 74 20 3d 20 35 30 20 20 23 20 | 100..#.nb.bins.n_target.=.50..#. |
12da0 | 6e 62 20 74 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 0a 23 20 62 69 6e 20 | nb.target.distributions...#.bin. |
12dc0 | 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 74 79 70 65 | positions.x.=.np.arange(n,.dtype |
12de0 | 3d 6e 70 2e 66 6c 6f 61 74 36 34 29 0a 0a 6c 73 74 5f 6d 20 3d 20 6e 70 2e 6c 69 6e 73 70 61 63 | =np.float64)..lst_m.=.np.linspac |
12e00 | 65 28 32 30 2c 20 39 30 2c 20 6e 5f 74 61 72 67 65 74 29 0a 0a 23 20 47 61 75 73 73 69 61 6e 20 | e(20,.90,.n_target)..#.Gaussian. |
12e20 | 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 61 20 3d 20 67 61 75 73 73 28 6e 2c 20 6d 3d 32 30 2c | distributions.a.=.gauss(n,.m=20, |
12e40 | 20 73 3d 35 29 20 20 23 20 6d 3d 20 6d 65 61 6e 2c 20 73 3d 20 73 74 64 0a 0a 42 20 3d 20 6e 70 | .s=5)..#.m=.mean,.s=.std..B.=.np |
12e60 | 2e 7a 65 72 6f 73 28 28 6e 2c 20 6e 5f 74 61 72 67 65 74 29 29 0a 0a 66 6f 72 20 69 2c 20 6d 20 | .zeros((n,.n_target))..for.i,.m. |
12e80 | 69 6e 20 65 6e 75 6d 65 72 61 74 65 28 6c 73 74 5f 6d 29 3a 0a 20 20 20 20 42 5b 3a 2c 20 69 5d | in.enumerate(lst_m):.....B[:,.i] |
12ea0 | 20 3d 20 67 61 75 73 73 28 6e 2c 20 6d 3d 6d 2c 20 73 3d 35 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 | .=.gauss(n,.m=m,.s=5)..#.loss.ma |
12ec0 | 74 72 69 78 20 61 6e 64 20 6e 6f 72 6d 61 6c 69 7a 61 74 69 6f 6e 0a 4d 20 3d 20 6f 74 2e 64 69 | trix.and.normalization.M.=.ot.di |
12ee0 | 73 74 28 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 2c 20 78 2e 72 65 73 68 61 70 65 28 | st(x.reshape((n,.1)),.x.reshape( |
12f00 | 28 6e 2c 20 31 29 29 2c 20 27 65 75 63 6c 69 64 65 61 6e 27 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 | (n,.1)),.'euclidean').M./=.M.max |
12f20 | 28 29 0a 4d 32 20 3d 20 6f 74 2e 64 69 73 74 28 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 | ().M2.=.ot.dist(x.reshape((n,.1) |
12f40 | 29 2c 20 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 2c 20 27 73 71 65 75 63 6c 69 64 65 | ),.x.reshape((n,.1)),.'sqeuclide |
12f60 | 61 6e 27 29 0a 4d 32 20 2f 3d 20 4d 32 2e 6d 61 78 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 | an').M2./=.M2.max()..########### |
12f80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
12fa0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
12fc0 | 23 23 23 0a 23 20 50 6c 6f 74 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 | ###.#.Plot.data.#.---------..#%% |
12fe0 | 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 75 | .plot.the.distributions..pl.figu |
13000 | 72 65 28 31 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 31 2c 20 31 29 0a 70 6c 2e 70 6c 6f | re(1).pl.subplot(2,.1,.1).pl.plo |
13020 | 74 28 78 2c 20 61 2c 20 27 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 64 69 73 74 72 | t(x,.a,.'b',.label='Source.distr |
13040 | 69 62 75 74 69 6f 6e 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 20 64 69 73 74 72 | ibution').pl.title('Source.distr |
13060 | 69 62 75 74 69 6f 6e 27 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 31 2c 20 32 29 0a 70 6c | ibution').pl.subplot(2,.1,.2).pl |
13080 | 2e 70 6c 6f 74 28 78 2c 20 42 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 64 69 73 74 72 69 | .plot(x,.B,.label='Target.distri |
130a0 | 62 75 74 69 6f 6e 73 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 61 72 67 65 74 20 64 69 73 74 72 | butions').pl.title('Target.distr |
130c0 | 69 62 75 74 69 6f 6e 73 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 0a 23 | ibutions').pl.tight_layout()...# |
130e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
13100 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
13120 | 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 43 6f 6d 70 75 74 65 20 45 4d 44 20 66 6f 72 20 | #############.#.Compute.EMD.for. |
13140 | 74 68 65 20 64 69 66 66 65 72 65 6e 74 20 6c 6f 73 73 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d | the.different.losses.#.--------- |
13160 | 2d 2d 2d 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 | ---------------------------..#%% |
13180 | 20 43 6f 6d 70 75 74 65 20 61 6e 64 20 70 6c 6f 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 | .Compute.and.plot.distributions. |
131a0 | 61 6e 64 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 0a 64 5f 65 6d 64 20 3d 20 6f 74 2e 65 6d 64 32 | and.loss.matrix..d_emd.=.ot.emd2 |
131c0 | 28 61 2c 20 42 2c 20 4d 29 20 20 23 20 64 69 72 65 63 74 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 | (a,.B,.M)..#.direct.computation. |
131e0 | 6f 66 20 45 4d 44 0a 64 5f 65 6d 64 32 20 3d 20 6f 74 2e 65 6d 64 32 28 61 2c 20 42 2c 20 4d 32 | of.EMD.d_emd2.=.ot.emd2(a,.B,.M2 |
13200 | 29 20 20 23 20 64 69 72 65 63 74 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66 20 45 4d 44 20 77 | )..#.direct.computation.of.EMD.w |
13220 | 69 74 68 20 6c 6f 73 73 20 4d 32 0a 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 29 0a 70 6c 2e 70 6c | ith.loss.M2...pl.figure(2).pl.pl |
13240 | 6f 74 28 64 5f 65 6d 64 2c 20 6c 61 62 65 6c 3d 27 45 75 63 6c 69 64 65 61 6e 20 45 4d 44 27 29 | ot(d_emd,.label='Euclidean.EMD') |
13260 | 0a 70 6c 2e 70 6c 6f 74 28 64 5f 65 6d 64 32 2c 20 6c 61 62 65 6c 3d 27 53 71 75 61 72 65 64 20 | .pl.plot(d_emd2,.label='Squared. |
13280 | 45 75 63 6c 69 64 65 61 6e 20 45 4d 44 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 45 4d 44 20 64 69 | Euclidean.EMD').pl.title('EMD.di |
132a0 | 73 74 61 6e 63 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 29 0a 0a 23 23 23 23 23 23 23 23 23 | stances').pl.legend()..######### |
132c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
132e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
13300 | 23 23 23 23 23 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 | #####.#.Compute.Sinkhorn.for.the |
13320 | 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 2d 2d | .different.losses.#.------------ |
13340 | 2d 2d 2d 2d 2d 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 | -----------------------------..# |
13360 | 25 25 0a 72 65 67 20 3d 20 31 65 2d 32 0a 64 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 2e 73 69 | %%.reg.=.1e-2.d_sinkhorn.=.ot.si |
13380 | 6e 6b 68 6f 72 6e 32 28 61 2c 20 42 2c 20 4d 2c 20 72 65 67 29 0a 64 5f 73 69 6e 6b 68 6f 72 6e | nkhorn2(a,.B,.M,.reg).d_sinkhorn |
133a0 | 32 20 3d 20 6f 74 2e 73 69 6e 6b 68 6f 72 6e 32 28 61 2c 20 42 2c 20 4d 32 2c 20 72 65 67 29 0a | 2.=.ot.sinkhorn2(a,.B,.M2,.reg). |
133c0 | 0a 70 6c 2e 66 69 67 75 72 65 28 32 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 2e 70 6c 6f 74 28 64 | .pl.figure(2).pl.clf().pl.plot(d |
133e0 | 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 70 6c 2e | _emd,.label='Euclidean.EMD').pl. |
13400 | 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 75 63 6c | plot(d_emd2,.label='Squared.Eucl |
13420 | 69 64 65 61 6e 20 45 4d 44 27 29 0a 70 6c 2e 70 6c 6f 74 28 64 5f 73 69 6e 6b 68 6f 72 6e 2c 20 | idean.EMD').pl.plot(d_sinkhorn,. |
13440 | 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 45 75 63 6c 69 64 65 61 6e 20 53 69 6e 6b 68 6f 72 6e 27 29 | '+',.label='Euclidean.Sinkhorn') |
13460 | 0a 70 6c 2e 70 6c 6f 74 28 64 5f 73 69 6e 6b 68 6f 72 6e 32 2c 20 27 2b 27 2c 20 6c 61 62 65 6c | .pl.plot(d_sinkhorn2,.'+',.label |
13480 | 3d 27 53 71 75 61 72 65 64 20 45 75 63 6c 69 64 65 61 6e 20 53 69 6e 6b 68 6f 72 6e 27 29 0a 70 | ='Squared.Euclidean.Sinkhorn').p |
134a0 | 6c 2e 74 69 74 6c 65 28 27 45 4d 44 20 64 69 73 74 61 6e 63 65 73 27 29 0a 70 6c 2e 6c 65 67 65 | l.title('EMD.distances').pl.lege |
134c0 | 6e 64 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 cf 72 94 50 09 53 | nd()..pl.show().PK.........r.P.S |
134e0 | 8e 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 | ..............plot_otda_jcpot.py |
13500 | 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.-*-.""".==== |
13520 | 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 6d 75 6c 74 | ====================.OT.for.mult |
13540 | 69 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 | i-source.target.shift.========== |
13560 | 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 74 | ==============..This.example.int |
13580 | 72 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 | roduces.a.target.shift.problem.w |
135a0 | 69 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 | ith.two.2D.source.and.1.target.d |
135c0 | 6f 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 | omain..."""..#.Authors:.Remi.Fla |
135e0 | 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 20 20 | mary.<remi.flamary@unice.fr>.#.. |
13600 | 20 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 | ........Ievgen.Redko.<ievgen.red |
13620 | 6b 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 | ko@univ-st-etienne.fr>.#.#.Licen |
13640 | 73 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 | se:.MIT.License..import.pylab.as |
13660 | 20 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 | .pl.import.numpy.as.np.import.ot |
13680 | 0a 66 72 6f 6d 20 6f 74 2e 64 61 74 61 73 65 74 73 20 69 6d 70 6f 72 74 20 6d 61 6b 65 5f 64 61 | .from.ot.datasets.import.make_da |
136a0 | 74 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 | ta_classif..#################### |
136c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
136e0 | 23 23 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 | ##########################.#.Gen |
13700 | 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 6e 20 3d 20 35 | erate.data.#.-------------.n.=.5 |
13720 | 30 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 | 0.sigma.=.0.3.np.random.seed(198 |
13740 | 35 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 | 5)..p1.=..2.dec1.=.[0,.2]..p2.=. |
13760 | 2e 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 | .9.dec2.=.[0,.-2]..pt.=..4.dect. |
13780 | 3d 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 | =.[4,.0]..xs1,.ys1.=.make_data_c |
137a0 | 6c 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 | lassif('2gauss_prop',.n,.nz=sigm |
137c0 | 61 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 | a,.p=p1,.bias=dec1).xs2,.ys2.=.m |
137e0 | 61 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 | ake_data_classif('2gauss_prop',. |
13800 | 6e 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 | n.+.1,.nz=sigma,.p=p2,.bias=dec2 |
13820 | 29 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 | ).xt,.yt.=.make_data_classif('2g |
13840 | 61 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 | auss_prop',.n,.nz=sigma,.p=pt,.b |
13860 | 69 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 | ias=dect)..all_Xr.=.[xs1,.xs2].a |
13880 | 6c 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 | ll_Yr.=.[ys1,.ys2].#.%%..da.=.1. |
138a0 | 35 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 | 5...def.plot_ax(dec,.name):..... |
138c0 | 70 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 | pl.plot([dec[0],.dec[0]],.[dec[1 |
138e0 | 5d 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 | ].-.da,.dec[1].+.da],.'k',.alpha |
13900 | 3d 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 | =0.5).....pl.plot([dec[0].-.da,. |
13920 | 64 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 | dec[0].+.da],.[dec[1],.dec[1]],. |
13940 | 27 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 | 'k',.alpha=0.5).....pl.text(dec[ |
13960 | 30 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 | 0].-..5,.dec[1].+.2,.name)...### |
13980 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
139a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
139c0 | 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 67 20 31 20 3a 20 70 6c 6f 74 73 20 73 6f 75 72 | ###########.#.Fig.1.:.plots.sour |
139e0 | 63 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 | ce.and.target.samples.#.-------- |
13a00 | 2d 2d 2d 2d 2d 2d 2d 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 | -------------------------------. |
13a20 | 0a 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 | .pl.figure(1).pl.clf().plot_ax(d |
13a40 | 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 2c 20 27 | ec1,.'Source.1').plot_ax(dec2,.' |
13a60 | 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 67 65 74 | Source.2').plot_ax(dect,.'Target |
13a80 | 27 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 | ').pl.scatter(xs1[:,.0],.xs1[:,. |
13aa0 | 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 63 6d 61 | 1],.c=ys1,.s=35,.marker='x',.cma |
13ac0 | 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 |
13ae0 | 65 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 | el='Source.1.({:1.2f},.{:1.2f})' |
13b00 | 2e 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 | .format(1.-.p1,.p1)).pl.scatter( |
13b20 | 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 |
13b40 | 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 |
13b60 | 3d 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 | =9,............label='Source.2.( |
13b80 | 7b 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 | {:1.2f},.{:1.2f})'.format(1.-.p2 |
13ba0 | 2c 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 | ,.p2)).pl.scatter(xt[:,.0],.xt[: |
13bc0 | 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 6d | ,.1],.c=yt,.s=35,.marker='o',.cm |
13be0 | 61 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 | ap='Set1',.vmax=9,............la |
13c00 | 62 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 | bel='Target.({:1.2f},.{:1.2f})'. |
13c20 | 66 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 | format(1.-.pt,.pt)).pl.title('Da |
13c40 | 74 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 | ta')..pl.legend().pl.axis('equal |
13c60 | 27 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 | ').pl.axis('off')..############# |
13c80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
13ca0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
13cc0 | 23 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 | #.#.Instantiate.Sinkhorn.transpo |
13ce0 | 72 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 | rt.algorithm.and.fit.them.for.al |
13d00 | 6c 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 | l.source.domains.#.------------- |
13d20 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
13d40 | 2d 2d 2d 2d 2d 2d 2d 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 | -------------------------------. |
13d60 | 6f 74 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b 68 6f 72 6e 54 72 61 6e | ot_sinkhorn.=.ot.da.SinkhornTran |
13d80 | 73 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 | sport(reg_e=1e-1,.metric='sqeucl |
13da0 | 69 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 | idean')...def.print_G(G,.xs,.ys, |
13dc0 | 20 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 | .xt):.....for.i.in.range(G.shape |
13de0 | 5b 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 | [0]):.........for.j.in.range(G.s |
13e00 | 68 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 | hape[1]):.............if.G[i,.j] |
13e20 | 20 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 | .>.5e-4:.................if.ys[i |
13e40 | 5d 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 | ]:.....................c.=.'b'.. |
13e60 | 20 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 | ...............else:............ |
13e80 | 20 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 | .........c.=.'r'................ |
13ea0 | 20 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 | .pl.plot([xs[i,.0],.xt[j,.0]],.[ |
13ec0 | 78 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 | xs[i,.1],.xt[j,.1]],.c,.alpha=.2 |
13ee0 | 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 | )...############################ |
13f00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
13f20 | 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 |
13f40 | 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 73 70 6f 72 | t.optimal.couplings.and.transpor |
13f60 | 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 2d 2d 2d 2d | ted.samples.#.------------------ |
13f80 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
13fa0 | 2d 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 | ----.pl.figure(2).pl.clf().plot_ |
13fc0 | 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 63 | ax(dec1,.'Source.1').plot_ax(dec |
13fe0 | 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 61 | 2,.'Source.2').plot_ax(dect,.'Ta |
14000 | 72 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 | rget').print_G(ot_sinkhorn.fit(X |
14020 | 73 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 | s=xs1,.Xt=xt).coupling_,.xs1,.ys |
14040 | 31 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 | 1,.xt).print_G(ot_sinkhorn.fit(X |
14060 | 73 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 | s=xs2,.Xt=xt).coupling_,.xs2,.ys |
14080 | 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 78 73 31 | 2,.xt).pl.scatter(xs1[:,.0],.xs1 |
140a0 | 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 78 27 2c | [:,.1],.c=ys1,.s=35,.marker='x', |
140c0 | 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 74 65 72 | .cmap='Set1',.vmax=9).pl.scatter |
140e0 | 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 20 73 3d | (xs2[:,.0],.xs2[:,.1],.c=ys2,.s= |
14100 | 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 76 6d 61 | 35,.marker='+',.cmap='Set1',.vma |
14120 | 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 3a 2c 20 | x=9).pl.scatter(xt[:,.0],.xt[:,. |
14140 | 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 70 | 1],.c=yt,.s=35,.marker='o',.cmap |
14160 | 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 20 5b 5d | ='Set1',.vmax=9)..pl.plot([],.[] |
14180 | 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 66 72 6f | ,.'r',.alpha=.2,.label='Mass.fro |
141a0 | 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 62 27 2c | m.Class.1').pl.plot([],.[],.'b', |
141c0 | 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 6c 61 73 | .alpha=.2,.label='Mass.from.Clas |
141e0 | 73 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 | s.2')..pl.title('Independent.OT' |
14200 | 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 29 0a | )..pl.legend().pl.axis('equal'). |
14220 | 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 23 23 | pl.axis('off')..################ |
14240 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
14260 | 23 23 23 23 23 23 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 | ##############################.# |
14280 | 20 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 | .Instantiate.JCPOT.adaptation.al |
142a0 | 67 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 | gorithm.and.fit.it.#.----------- |
142c0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
142e0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
14300 | 2d 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 | -.otda.=.ot.da.JCPOTTransport(re |
14320 | 67 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 | g_e=1,.max_iter=1000,.metric='sq |
14340 | 65 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 | euclidean',.tol=1e-9,.verbose=Tr |
14360 | 75 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 | ue,.log=True).otda.fit(all_Xr,.a |
14380 | 6c 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 | ll_Yr,.xt)..ws1.=.otda.proportio |
143a0 | 6e 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 | ns_.dot(otda.log_['D2'][0]).ws2. |
143c0 | 3d 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 | =.otda.proportions_.dot(otda.log |
143e0 | 5f 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 | _['D2'][1])..pl.figure(3).pl.clf |
14400 | 28 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 | ().plot_ax(dec1,.'Source.1').plo |
14420 | 74 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 | t_ax(dec2,.'Source.2').plot_ax(d |
14440 | 65 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 | ect,.'Target').print_G(ot.bregma |
14460 | 6e 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 | n.sinkhorn(ws1,.[],.otda.log_['M |
14480 | 27 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 | '][0],.reg=1e-1),.xs1,.ys1,.xt). |
144a0 | 70 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 | print_G(ot.bregman.sinkhorn(ws2, |
144c0 | 20 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 | .[],.otda.log_['M'][1],.reg=1e-1 |
144e0 | 29 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 | ),.xs2,.ys2,.xt).pl.scatter(xs1[ |
14500 | 3a 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 | :,.0],.xs1[:,.1],.c=ys1,.s=35,.m |
14520 | 61 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 | arker='x',.cmap='Set1',.vmax=9). |
14540 | 70 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 | pl.scatter(xs2[:,.0],.xs2[:,.1], |
14560 | 20 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 | .c=ys2,.s=35,.marker='+',.cmap=' |
14580 | 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 78 74 5b 3a 2c 20 | Set1',.vmax=9).pl.scatter(xt[:,. |
145a0 | 30 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 | 0],.xt[:,.1],.c=yt,.s=35,.marker |
145c0 | 3d 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 | ='o',.cmap='Set1',.vmax=9)..pl.p |
145e0 | 6c 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 | lot([],.[],.'r',.alpha=.2,.label |
14600 | 3d 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 | ='Mass.from.Class.1').pl.plot([] |
14620 | 2c 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 | ,.[],.'b',.alpha=.2,.label='Mass |
14640 | 20 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 | .from.Class.2')..pl.title('OT.wi |
14660 | 74 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 | th.prop.estimation.({:1.3f},{:1. |
14680 | 33 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 | 3f})'.format(otda.proportions_[0 |
146a0 | 5d 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 | ],.otda.proportions_[1]))..pl.le |
146c0 | 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 73 28 | gend().pl.axis('equal').pl.axis( |
146e0 | 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 23 23 23 23 23 23 23 | 'off')..######################## |
14700 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
14720 | 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 52 75 6e 20 6f 72 61 | ######################.#.Run.ora |
14740 | 63 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 | cle.transport.algorithm.with.kno |
14760 | 77 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 | wn.proportions.#.--------------- |
14780 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
147a0 | 2d 2d 2d 2d 2d 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 | -----------------------------.h_ |
147c0 | 72 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 | res.=.np.array([1.-.pt,.pt])..ws |
147e0 | 31 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 | 1.=.h_res.dot(otda.log_['D2'][0] |
14800 | 29 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 | ).ws2.=.h_res.dot(otda.log_['D2' |
14820 | 5d 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 | ][1])..pl.figure(4).pl.clf().plo |
14840 | 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 5f 61 78 28 64 | t_ax(dec1,.'Source.1').plot_ax(d |
14860 | 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 63 74 2c 20 27 | ec2,.'Source.2').plot_ax(dect,.' |
14880 | 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 2e 73 69 6e 6b | Target').print_G(ot.bregman.sink |
148a0 | 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 5d 5b 30 5d 2c | horn(ws1,.[],.otda.log_['M'][0], |
148c0 | 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 72 69 6e 74 5f | .reg=1e-1),.xs1,.ys1,.xt).print_ |
148e0 | 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 5b 5d 2c 20 6f | G(ot.bregman.sinkhorn(ws2,.[],.o |
14900 | 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 2c 20 78 73 32 | tda.log_['M'][1],.reg=1e-1),.xs2 |
14920 | 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 2c 20 30 5d 2c | ,.ys2,.xt).pl.scatter(xs1[:,.0], |
14940 | 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 72 6b 65 72 3d | .xs1[:,.1],.c=ys1,.s=35,.marker= |
14960 | 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 6c 2e 73 63 61 | 'x',.cmap='Set1',.vmax=9).pl.sca |
14980 | 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 63 3d 79 73 32 | tter(xs2[:,.0],.xs2[:,.1],.c=ys2 |
149a0 | 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 65 74 31 27 2c | ,.s=35,.marker='+',.cmap='Set1', |
149c0 | 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 5d 2c 20 78 74 | .vmax=9).pl.scatter(xt[:,.0],.xt |
149e0 | 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 27 6f 27 2c 20 | [:,.1],.c=yt,.s=35,.marker='o',. |
14a00 | 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 6f 74 28 5b 5d | cmap='Set1',.vmax=9)..pl.plot([] |
14a20 | 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 27 4d 61 73 73 | ,.[],.'r',.alpha=.2,.label='Mass |
14a40 | 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 20 5b 5d 2c 20 | .from.Class.1').pl.plot([],.[],. |
14a60 | 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 66 72 6f 6d 20 | 'b',.alpha=.2,.label='Mass.from. |
14a80 | 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 68 20 6b 6e 6f | Class.2')..pl.title('OT.with.kno |
14aa0 | 77 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 | wn.proportion.({:1.1f},{:1.1f})' |
14ac0 | 2e 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 | .format(h_res[0],.h_res[1]))..pl |
14ae0 | 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 6c 2e 61 78 | .legend().pl.axis('equal').pl.ax |
14b00 | 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 83 68 | is('off').pl.show().PK.........h |
14b20 | 3a 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 | :Oq...#...#.......plot_otda_semi |
14b40 | 5f 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 | _supervised.py#.-*-.coding:.utf- |
14b60 | 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | 8.-*-.""".====================== |
14b80 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4f 54 44 41 20 75 6e 73 75 | ======================.OTDA.unsu |
14ba0 | 70 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 | pervised.vs.semi-supervised.sett |
14bc0 | 69 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 | ing.============================ |
14be0 | 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 20 69 | ================..This.example.i |
14c00 | 6e 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 | ntroduces.a.semi.supervised.doma |
14c20 | 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 2e 0a 49 | in.adaptation.in.a.2D.setting..I |
14c40 | 74 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 | t.explicits.the.problem.of.semi. |
14c60 | 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 20 61 6e 64 | supervised.domain.adaptation.and |
14c80 | 20 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 | .introduces.some.optimal.transpo |
14ca0 | 72 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 | rt.approaches.to.solve.it...Quan |
14cc0 | 74 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 | tities.such.as.optimal.couplings |
14ce0 | 2c 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 | ,.greater.coupling.coefficients. |
14d00 | 61 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 | and.transported.samples.are.repr |
14d20 | 65 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 | esented.in.order.to.give.a.visua |
14d40 | 6c 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 | l.understanding.of.what.the.tran |
14d60 | 73 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 | sport.methods.are.doing.."""..#. |
14d80 | 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 6d | Authors:.Remi.Flamary.<remi.flam |
14da0 | 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 6c | ary@unice.fr>.#..........Stanisl |
14dc0 | 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 63 | as.Chambon.<stan.chambon@gmail.c |
14de0 | 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 6d | om>.#.#.License:.MIT.License..im |
14e00 | 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 |
14e20 | 72 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 | rt.ot...######################## |
14e40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
14e60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 47 65 6e 65 72 61 74 | ######################.#.Generat |
14e80 | 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 5f 73 61 6d 70 6c 65 | e.data.#.-------------..n_sample |
14ea0 | 73 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 | s_source.=.150.n_samples_target. |
14ec0 | 3d 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 | =.150..Xs,.ys.=.ot.datasets.make |
14ee0 | 5f 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 | _data_classif('3gauss',.n_sample |
14f00 | 73 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 | s_source).Xt,.yt.=.ot.datasets.m |
14f20 | 61 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 | ake_data_classif('3gauss2',.n_sa |
14f40 | 6d 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 | mples_target)...################ |
14f60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
14f80 | 23 23 23 23 23 23 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 | ##############################.# |
14fa0 | 20 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 | .Transport.source.samples.onto.t |
14fc0 | 61 72 67 65 74 20 73 61 6d 70 6c 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | arget.samples.#.---------------- |
14fe0 | 2d 2d 2d 2d 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 | ----------------------------...# |
15000 | 20 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 | .unsupervised.domain.adaptation. |
15020 | 6f 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 | ot_sinkhorn_un.=.ot.da.SinkhornT |
15040 | 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 |
15060 | 5f 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 | _un.fit(Xs=Xs,.Xt=Xt).transp_Xs_ |
15080 | 73 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 | sinkhorn_un.=.ot_sinkhorn_un.tra |
150a0 | 6e 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 | nsform(Xs=Xs)..#.semi-supervised |
150c0 | 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f 73 | .domain.adaptation.ot_sinkhorn_s |
150e0 | 65 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 | emi.=.ot.da.SinkhornTransport(re |
15100 | 67 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 | g_e=1e-1).ot_sinkhorn_semi.fit(X |
15120 | 73 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 | s=Xs,.Xt=Xt,.ys=ys,.yt=yt).trans |
15140 | 70 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 | p_Xs_sinkhorn_semi.=.ot_sinkhorn |
15160 | 5f 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 | _semi.transform(Xs=Xs)..#.semi.s |
15180 | 75 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 | upervised.DA.uses.available.laba |
151a0 | 6c 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 | led.target.samples.to.modify.the |
151c0 | 20 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 | .cost.#.matrix.involved.in.the.O |
151e0 | 54 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 | T.problem..The.cost.of.transport |
15200 | 69 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 | ing.a.source.sample.#.of.class.A |
15220 | 20 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 | .onto.a.target.sample.of.class.B |
15240 | 20 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 | .!=.A.is.set.to.infinite,.or.a.# |
15260 | 20 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 | .very.large.value..#.note.that.i |
15280 | 6e 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 | n.the.present.case.we.consider.t |
152a0 | 68 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 | hat.all.the.target.samples.are.# |
152c0 | 20 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 | .labeled..For.daily.applications |
152e0 | 2c 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 | ,.some.target.sample.might.not.h |
15300 | 61 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 | ave.labels,.#.in.this.case.the.e |
15320 | 6c 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 | lement.of.yt.corresponding.to.th |
15340 | 65 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 | ese.samples.should.be.#.filled.w |
15360 | 69 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 | ith.-1...#.Warning:.we.recall.th |
15380 | 61 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 | at.-1.cannot.be.used.as.a.class. |
153a0 | 6c 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 | label...######################## |
153c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
153e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 67 20 31 20 3a | ######################.#.Fig.1.: |
15400 | 20 70 6c 6f 74 73 20 73 6f 75 72 63 65 20 61 6e 64 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 | .plots.source.and.target.samples |
15420 | 20 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 | .+.matrix.of.pairwise.distance.# |
15440 | 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 | .------------------------------- |
15460 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
15480 | 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 31 30 | ------..pl.figure(1,.figsize=(10 |
154a0 | 2c 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 | ,.10)).pl.subplot(2,.2,.1).pl.sc |
154c0 | 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 20 | atter(Xs[:,.0],.Xs[:,.1],.c=ys,. |
154e0 | 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 65 | marker='+',.label='Source.sample |
15500 | 73 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a | s').pl.xticks([]).pl.yticks([]). |
15520 | 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 63 | pl.legend(loc=0).pl.title('Sourc |
15540 | 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 32 2c 20 32 2c 20 32 | e..samples')..pl.subplot(2,.2,.2 |
15560 | 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], |
15580 | 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 | .c=yt,.marker='o',.label='Target |
155a0 | 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 | .samples').pl.xticks([]).pl.ytic |
155c0 | 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 65 | ks([]).pl.legend(loc=0).pl.title |
155e0 | 28 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 | ('Target.samples')..pl.subplot(2 |
15600 | 2c 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 | ,.2,.3).pl.imshow(ot_sinkhorn_un |
15620 | 2e 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 | .cost_,.interpolation='nearest') |
15640 | 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. |
15660 | 74 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 | title('Cost.matrix.-.unsupervise |
15680 | 64 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 | d.DA')..pl.subplot(2,.2,.4).pl.i |
156a0 | 6d 73 68 6f 77 28 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f 73 65 6d 69 2e 63 6f 73 74 5f 2c 20 69 6e | mshow(ot_sinkhorn_semi.cost_,.in |
156c0 | 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 | terpolation='nearest').pl.xticks |
156e0 | 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 43 6f 73 | ([]).pl.yticks([]).pl.title('Cos |
15700 | 74 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 | t.matrix.-.semisupervised.DA').. |
15720 | 70 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 | pl.tight_layout()..#.the.optimal |
15740 | 20 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 | .coupling.in.the.semi-supervised |
15760 | 20 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 | .DA.case.will.exhibit.".shape.#. |
15780 | 73 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 | similar".to.the.cost.matrix,.(bl |
157a0 | 6f 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 | ock.diagonal.matrix)...######### |
157c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
157e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
15800 | 23 23 23 23 23 0a 23 20 46 69 67 20 32 20 3a 20 70 6c 6f 74 73 20 6f 70 74 69 6d 61 6c 20 63 6f | #####.#.Fig.2.:.plots.optimal.co |
15820 | 75 70 6c 69 6e 67 73 20 66 6f 72 20 74 68 65 20 64 69 66 66 65 72 65 6e 74 20 6d 65 74 68 6f 64 | uplings.for.the.different.method |
15840 | 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.#.---------------------------- |
15860 | 2d 2d 2d 2d 2d 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 | -----------------------------..p |
15880 | 6c 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 | l.figure(2,.figsize=(8,.4))..pl. |
158a0 | 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 73 69 | subplot(1,.2,.1).pl.imshow(ot_si |
158c0 | 6e 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 | nkhorn_un.coupling_,.interpolati |
158e0 | 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 | on='nearest').pl.xticks([]).pl.y |
15900 | 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 70 | ticks([]).pl.title('Optimal.coup |
15920 | 6c 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 | ling\nUnsupervised.DA')..pl.subp |
15940 | 6c 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 | lot(1,.2,.2).pl.imshow(ot_sinkho |
15960 | 72 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 | rn_semi.coupling_,.interpolation |
15980 | 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 | ='nearest').pl.xticks([]).pl.yti |
159a0 | 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 69 | cks([]).pl.title('Optimal.coupli |
159c0 | 6e 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 | ng\nSemi-supervised.DA')..pl.tig |
159e0 | 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ht_layout()...################## |
15a00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
15a20 | 23 23 23 23 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 | ############################.#.F |
15a40 | 69 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 | ig.3.:.plot.transported.samples. |
15a60 | 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 | #.------------------------------ |
15a80 | 2d 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 | --..#.display.transported.sample |
15aa0 | 73 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 | s.pl.figure(4,.figsize=(8,.4)).p |
15ac0 | 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 74 74 65 72 28 58 74 | l.subplot(1,.2,.1).pl.scatter(Xt |
15ae0 | 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=' |
15b00 | 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d | o',............label='Target.sam |
15b20 | 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 30 2e 35 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 | ples',.alpha=0.5).pl.scatter(tra |
15b40 | 6e 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 | nsp_Xs_sinkhorn_un[:,.0],.transp |
15b60 | 5f 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 | _Xs_sinkhorn_un[:,.1],.c=ys,.... |
15b80 | 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 54 72 61 6e 73 | ........marker='+',.label='Trans |
15ba0 | 70 20 73 61 6d 70 6c 65 73 27 2c 20 73 3d 33 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 72 61 6e | p.samples',.s=30).pl.title('Tran |
15bc0 | 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 5c 6e 45 6d 64 54 72 61 6e 73 70 6f 72 74 27 29 0a | sported.samples\nEmdTransport'). |
15be0 | 70 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 | pl.legend(loc=0).pl.xticks([]).p |
15c00 | 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 32 | l.yticks([])..pl.subplot(1,.2,.2 |
15c20 | 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], |
15c40 | 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 |
15c60 | 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 35 29 | bel='Target.samples',.alpha=0.5) |
15c80 | 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 5f 73 | .pl.scatter(transp_Xs_sinkhorn_s |
15ca0 | 65 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 | emi[:,.0],.transp_Xs_sinkhorn_se |
15cc0 | 6d 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 | mi[:,.1],.c=ys,............marke |
15ce0 | 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 20 73 | r='+',.label='Transp.samples',.s |
15d00 | 3d 33 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c | =30).pl.title('Transported.sampl |
15d20 | 65 73 5c 6e 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 6c 2e 78 74 69 63 6b | es\nSinkhornTransport').pl.xtick |
15d40 | 73 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 | s([]).pl.yticks([])..pl.tight_la |
15d60 | 79 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 | yout().pl.show().PK.........h:O. |
15d80 | ad d9 82 f4 0f 00 00 f4 0f 00 00 14 00 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 6d 61 70 70 69 6e 67 | ...............plot_otda_mapping |
15da0 | 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.-*-.""".= |
15dc0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
15de0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4f 54 20 6d 61 70 70 69 6e 67 20 65 73 74 69 6d 61 74 69 6f 6e | ==========.OT.mapping.estimation |
15e00 | 20 66 6f 72 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d | .for.domain.adaptation.========= |
15e20 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
15e40 | 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 70 72 65 73 65 6e 74 73 20 68 6f 77 20 74 6f | ==..This.example.presents.how.to |
15e60 | 20 75 73 65 20 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 20 74 6f 20 65 73 74 69 6d 61 74 | .use.MappingTransport.to.estimat |
15e80 | 65 20 61 74 20 74 68 65 20 73 61 6d 65 0a 74 69 6d 65 20 62 6f 74 68 20 74 68 65 20 63 6f 75 70 | e.at.the.same.time.both.the.coup |
15ea0 | 6c 69 6e 67 20 74 72 61 6e 73 70 6f 72 74 20 61 6e 64 20 61 70 70 72 6f 78 69 6d 61 74 65 20 74 | ling.transport.and.approximate.t |
15ec0 | 68 65 20 74 72 61 6e 73 70 6f 72 74 20 6d 61 70 20 77 69 74 68 20 65 69 74 68 65 72 0a 61 20 6c | he.transport.map.with.either.a.l |
15ee0 | 69 6e 65 61 72 20 6f 72 20 61 20 6b 65 72 6e 65 6c 69 7a 65 64 20 6d 61 70 70 69 6e 67 20 61 73 | inear.or.a.kernelized.mapping.as |
15f00 | 20 69 6e 74 72 6f 64 75 63 65 64 20 69 6e 20 5b 38 5d 2e 0a 0a 5b 38 5d 20 4d 2e 20 50 65 72 72 | .introduced.in.[8]...[8].M..Perr |
15f20 | 6f 74 2c 20 4e 2e 20 43 6f 75 72 74 79 2c 20 52 2e 20 46 6c 61 6d 61 72 79 2c 20 41 2e 20 48 61 | ot,.N..Courty,.R..Flamary,.A..Ha |
15f40 | 62 72 61 72 64 2c 0a 20 20 20 20 22 4d 61 70 70 69 6e 67 20 65 73 74 69 6d 61 74 69 6f 6e 20 66 | brard,....."Mapping.estimation.f |
15f60 | 6f 72 20 64 69 73 63 72 65 74 65 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 22 2c 0a | or.discrete.optimal.transport",. |
15f80 | 20 20 20 20 4e 65 75 72 61 6c 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 50 72 6f 63 65 73 73 69 6e | ....Neural.Information.Processin |
15fa0 | 67 20 53 79 73 74 65 6d 73 20 28 4e 49 50 53 29 2c 20 32 30 31 36 2e 0a 22 22 22 0a 0a 23 20 41 | g.Systems.(NIPS),.2016.."""..#.A |
15fc0 | 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 |
15fe0 | 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 |
16000 | 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 |
16020 | 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 |
16040 | 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 |
16060 | 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 0a 0a 23 23 23 23 23 23 | b.pylab.as.pl.import.ot...###### |
16080 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
160a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
160c0 | 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 2d | ########.#.Generate.data.#.----- |
160e0 | 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 6e 5f 73 6f 75 72 63 65 5f 73 61 6d 70 6c 65 73 20 3d 20 31 30 30 | --------..n_source_samples.=.100 |
16100 | 0a 6e 5f 74 61 72 67 65 74 5f 73 61 6d 70 6c 65 73 20 3d 20 31 30 30 0a 74 68 65 74 61 20 3d 20 | .n_target_samples.=.100.theta.=. |
16120 | 32 20 2a 20 6e 70 2e 70 69 20 2f 20 32 30 0a 6e 6f 69 73 65 5f 6c 65 76 65 6c 20 3d 20 30 2e 31 | 2.*.np.pi./.20.noise_level.=.0.1 |
16140 | 0a 0a 58 73 2c 20 79 73 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 61 | ..Xs,.ys.=.ot.datasets.make_data |
16160 | 5f 63 6c 61 73 73 69 66 28 0a 20 20 20 20 27 67 61 75 73 73 72 6f 74 27 2c 20 6e 5f 73 6f 75 72 | _classif(.....'gaussrot',.n_sour |
16180 | 63 65 5f 73 61 6d 70 6c 65 73 2c 20 6e 7a 3d 6e 6f 69 73 65 5f 6c 65 76 65 6c 29 0a 58 73 5f 6e | ce_samples,.nz=noise_level).Xs_n |
161a0 | 65 77 2c 20 5f 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 61 5f 63 6c | ew,._.=.ot.datasets.make_data_cl |
161c0 | 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 65 5f | assif(.....'gaussrot',.n_source_ |
161e0 | 73 61 6d 70 6c 65 73 2c 20 6e 7a 3d 6e 6f 69 73 65 5f 6c 65 76 65 6c 29 0a 58 74 2c 20 79 74 20 | samples,.nz=noise_level).Xt,.yt. |
16200 | 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 | =.ot.datasets.make_data_classif( |
16220 | 0a 20 20 20 20 27 67 61 75 73 73 72 6f 74 27 2c 20 6e 5f 74 61 72 67 65 74 5f 73 61 6d 70 6c 65 | .....'gaussrot',.n_target_sample |
16240 | 73 2c 20 74 68 65 74 61 3d 74 68 65 74 61 2c 20 6e 7a 3d 6e 6f 69 73 65 5f 6c 65 76 65 6c 29 0a | s,.theta=theta,.nz=noise_level). |
16260 | 0a 23 20 6f 6e 65 20 6f 66 20 74 68 65 20 74 61 72 67 65 74 20 6d 6f 64 65 20 63 68 61 6e 67 65 | .#.one.of.the.target.mode.change |
16280 | 73 20 69 74 73 20 76 61 72 69 61 6e 63 65 20 28 6e 6f 20 6c 69 6e 65 61 72 20 6d 61 70 70 69 6e | s.its.variance.(no.linear.mappin |
162a0 | 67 29 0a 58 74 5b 79 74 20 3d 3d 20 32 5d 20 2a 3d 20 33 0a 58 74 20 3d 20 58 74 20 2b 20 34 0a | g).Xt[yt.==.2].*=.3.Xt.=.Xt.+.4. |
162c0 | 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 | .############################### |
162e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
16300 | 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.#.-- |
16320 | 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 28 31 30 2c 20 35 29 29 0a 70 | -------..pl.figure(1,.(10,.5)).p |
16340 | 6c 2e 63 6c 66 28 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 58 73 5b | l.clf().pl.scatter(Xs[:,.0],.Xs[ |
16360 | 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 | :,.1],.c=ys,.marker='+',.label=' |
16380 | 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a | Source.samples').pl.scatter(Xt[: |
163a0 | 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' |
163c0 | 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 | ,.label='Target.samples').pl.leg |
163e0 | 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 20 61 6e 64 20 | end(loc=0).pl.title('Source.and. |
16400 | 74 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 0a 23 23 23 23 23 23 23 | target.distributions')...####### |
16420 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
16440 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
16460 | 23 23 23 23 23 23 23 0a 23 20 49 6e 73 74 61 6e 74 69 61 74 65 20 74 68 65 20 64 69 66 66 65 72 | #######.#.Instantiate.the.differ |
16480 | 65 6e 74 20 74 72 61 6e 73 70 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d 73 20 61 6e 64 20 66 69 74 | ent.transport.algorithms.and.fit |
164a0 | 20 74 68 65 6d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | .them.#.------------------------ |
164c0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
164e0 | 2d 2d 2d 0a 0a 23 20 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 20 77 69 74 68 20 6c 69 6e | ---..#.MappingTransport.with.lin |
16500 | 65 61 72 20 6b 65 72 6e 65 6c 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 20 3d 20 6f | ear.kernel.ot_mapping_linear.=.o |
16520 | 74 2e 64 61 2e 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 28 0a 20 20 20 20 6b 65 72 6e 65 | t.da.MappingTransport(.....kerne |
16540 | 6c 3d 22 6c 69 6e 65 61 72 22 2c 20 6d 75 3d 31 65 30 2c 20 65 74 61 3d 31 65 2d 38 2c 20 62 69 | l="linear",.mu=1e0,.eta=1e-8,.bi |
16560 | 61 73 3d 54 72 75 65 2c 0a 20 20 20 20 6d 61 78 5f 69 74 65 72 3d 32 30 2c 20 76 65 72 62 6f 73 | as=True,.....max_iter=20,.verbos |
16580 | 65 3d 54 72 75 65 29 0a 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 2e 66 69 74 28 58 | e=True)..ot_mapping_linear.fit(X |
165a0 | 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 66 6f 72 20 6f 72 69 67 69 6e 61 6c 20 73 6f 75 | s=Xs,.Xt=Xt)..#.for.original.sou |
165c0 | 72 63 65 20 73 61 6d 70 6c 65 73 2c 20 74 72 61 6e 73 66 6f 72 6d 20 61 70 70 6c 69 65 73 20 62 | rce.samples,.transform.applies.b |
165e0 | 61 72 79 63 65 6e 74 72 69 63 20 6d 61 70 70 69 6e 67 0a 74 72 61 6e 73 70 5f 58 73 5f 6c 69 6e | arycentric.mapping.transp_Xs_lin |
16600 | 65 61 72 20 3d 20 6f 74 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 2e 74 72 61 6e 73 66 6f 72 | ear.=.ot_mapping_linear.transfor |
16620 | 6d 28 58 73 3d 58 73 29 0a 0a 23 20 66 6f 72 20 6f 75 74 20 6f 66 20 73 6f 75 72 63 65 20 73 61 | m(Xs=Xs)..#.for.out.of.source.sa |
16640 | 6d 70 6c 65 73 2c 20 74 72 61 6e 73 66 6f 72 6d 20 61 70 70 6c 69 65 73 20 74 68 65 20 6c 69 6e | mples,.transform.applies.the.lin |
16660 | 65 61 72 20 6d 61 70 70 69 6e 67 0a 74 72 61 6e 73 70 5f 58 73 5f 6c 69 6e 65 61 72 5f 6e 65 77 | ear.mapping.transp_Xs_linear_new |
16680 | 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 28 58 | .=.ot_mapping_linear.transform(X |
166a0 | 73 3d 58 73 5f 6e 65 77 29 0a 0a 0a 23 20 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 20 77 | s=Xs_new)...#.MappingTransport.w |
166c0 | 69 74 68 20 67 61 75 73 73 69 61 6e 20 6b 65 72 6e 65 6c 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 67 | ith.gaussian.kernel.ot_mapping_g |
166e0 | 61 75 73 73 69 61 6e 20 3d 20 6f 74 2e 64 61 2e 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 | aussian.=.ot.da.MappingTransport |
16700 | 28 0a 20 20 20 20 6b 65 72 6e 65 6c 3d 22 67 61 75 73 73 69 61 6e 22 2c 20 65 74 61 3d 31 65 2d | (.....kernel="gaussian",.eta=1e- |
16720 | 35 2c 20 6d 75 3d 31 65 2d 31 2c 20 62 69 61 73 3d 54 72 75 65 2c 20 73 69 67 6d 61 3d 31 2c 0a | 5,.mu=1e-1,.bias=True,.sigma=1,. |
16740 | 20 20 20 20 6d 61 78 5f 69 74 65 72 3d 31 30 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 6f | ....max_iter=10,.verbose=True).o |
16760 | 74 5f 6d 61 70 70 69 6e 67 5f 67 61 75 73 73 69 61 6e 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 | t_mapping_gaussian.fit(Xs=Xs,.Xt |
16780 | 3d 58 74 29 0a 0a 23 20 66 6f 72 20 6f 72 69 67 69 6e 61 6c 20 73 6f 75 72 63 65 20 73 61 6d 70 | =Xt)..#.for.original.source.samp |
167a0 | 6c 65 73 2c 20 74 72 61 6e 73 66 6f 72 6d 20 61 70 70 6c 69 65 73 20 62 61 72 79 63 65 6e 74 72 | les,.transform.applies.barycentr |
167c0 | 69 63 20 6d 61 70 70 69 6e 67 0a 74 72 61 6e 73 70 5f 58 73 5f 67 61 75 73 73 69 61 6e 20 3d 20 | ic.mapping.transp_Xs_gaussian.=. |
167e0 | 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 58 73 | ot_mapping_gaussian.transform(Xs |
16800 | 3d 58 73 29 0a 0a 23 20 66 6f 72 20 6f 75 74 20 6f 66 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 | =Xs)..#.for.out.of.source.sample |
16820 | 73 2c 20 74 72 61 6e 73 66 6f 72 6d 20 61 70 70 6c 69 65 73 20 74 68 65 20 67 61 75 73 73 69 61 | s,.transform.applies.the.gaussia |
16840 | 6e 20 6d 61 70 70 69 6e 67 0a 74 72 61 6e 73 70 5f 58 73 5f 67 61 75 73 73 69 61 6e 5f 6e 65 77 | n.mapping.transp_Xs_gaussian_new |
16860 | 20 3d 20 6f 74 5f 6d 61 70 70 69 6e 67 5f 67 61 75 73 73 69 61 6e 2e 74 72 61 6e 73 66 6f 72 6d | .=.ot_mapping_gaussian.transform |
16880 | 28 58 73 3d 58 73 5f 6e 65 77 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | (Xs=Xs_new)...################## |
168a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
168c0 | 23 23 23 23 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 |
168e0 | 6c 6f 74 20 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 0a 23 20 2d 2d 2d 2d 2d 2d | lot.transported.samples.#.------ |
16900 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 29 | ------------------..pl.figure(2) |
16920 | 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 31 29 0a 70 6c | .pl.clf().pl.subplot(2,.2,.1).pl |
16940 | 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 | .scatter(Xt[:,.0],.Xt[:,.1],.c=y |
16960 | 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d | t,.marker='o',............label= |
16980 | 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 2e 32 29 0a 70 6c 2e 73 | 'Target.samples',.alpha=.2).pl.s |
169a0 | 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 6c 69 6e 65 61 72 5b 3a 2c 20 30 5d 2c 20 74 | catter(transp_Xs_linear[:,.0],.t |
169c0 | 72 61 6e 73 70 5f 58 73 5f 6c 69 6e 65 61 72 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 | ransp_Xs_linear[:,.1],.c=ys,.mar |
169e0 | 6b 65 72 3d 27 2b 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 4d 61 70 70 65 | ker='+',............label='Mappe |
16a00 | 64 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 74 69 74 6c 65 28 22 42 61 72 | d.source.samples').pl.title("Bar |
16a20 | 79 2e 20 6d 61 70 70 69 6e 67 20 28 6c 69 6e 65 61 72 29 22 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 | y..mapping.(linear)").pl.legend( |
16a40 | 6c 6f 63 3d 30 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 32 29 0a 70 6c 2e 73 | loc=0)..pl.subplot(2,.2,.2).pl.s |
16a60 | 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c | catter(Xt[:,.0],.Xt[:,.1],.c=yt, |
16a80 | 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 | .marker='o',............label='T |
16aa0 | 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 2e 32 29 0a 70 6c 2e 73 63 61 | arget.samples',.alpha=.2).pl.sca |
16ac0 | 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 6c 69 6e 65 61 72 5f 6e 65 77 5b 3a 2c 20 30 5d 2c | tter(transp_Xs_linear_new[:,.0], |
16ae0 | 20 74 72 61 6e 73 70 5f 58 73 5f 6c 69 6e 65 61 72 5f 6e 65 77 5b 3a 2c 20 31 5d 2c 0a 20 20 20 | .transp_Xs_linear_new[:,.1],.... |
16b00 | 20 20 20 20 20 20 20 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d | ........c=ys,.marker='+',.label= |
16b20 | 27 4c 65 61 72 6e 65 64 20 6d 61 70 70 69 6e 67 27 29 0a 70 6c 2e 74 69 74 6c 65 28 22 45 73 74 | 'Learned.mapping').pl.title("Est |
16b40 | 69 6d 2e 20 6d 61 70 70 69 6e 67 20 28 6c 69 6e 65 61 72 29 22 29 0a 0a 70 6c 2e 73 75 62 70 6c | im..mapping.(linear)")..pl.subpl |
16b60 | 6f 74 28 32 2c 20 32 2c 20 33 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c | ot(2,.2,.3).pl.scatter(Xt[:,.0], |
16b80 | 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 | .Xt[:,.1],.c=yt,.marker='o',.... |
16ba0 | 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 | ........label='Target.samples',. |
16bc0 | 61 6c 70 68 61 3d 2e 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 67 | alpha=.2).pl.scatter(transp_Xs_g |
16be0 | 61 75 73 73 69 61 6e 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 67 61 75 73 73 69 61 | aussian[:,.0],.transp_Xs_gaussia |
16c00 | 6e 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 | n[:,.1],.c=ys,............marker |
16c20 | 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 62 61 72 79 63 65 6e 74 72 69 63 20 6d 61 70 70 69 6e 67 | ='+',.label='barycentric.mapping |
16c40 | 27 29 0a 70 6c 2e 74 69 74 6c 65 28 22 42 61 72 79 2e 20 6d 61 70 70 69 6e 67 20 28 6b 65 72 6e | ').pl.title("Bary..mapping.(kern |
16c60 | 65 6c 29 22 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 34 29 0a 70 6c 2e 73 63 | el)")..pl.subplot(2,.2,.4).pl.sc |
16c80 | 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,. |
16ca0 | 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 |
16cc0 | 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 |
16ce0 | 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 67 61 75 73 73 69 61 6e 5f 6e 65 77 5b 3a 2c 20 30 5d | ter(transp_Xs_gaussian_new[:,.0] |
16d00 | 2c 20 74 72 61 6e 73 70 5f 58 73 5f 67 61 75 73 73 69 61 6e 5f 6e 65 77 5b 3a 2c 20 31 5d 2c 20 | ,.transp_Xs_gaussian_new[:,.1],. |
16d20 | 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 |
16d40 | 65 6c 3d 27 4c 65 61 72 6e 65 64 20 6d 61 70 70 69 6e 67 27 29 0a 70 6c 2e 74 69 74 6c 65 28 22 | el='Learned.mapping').pl.title(" |
16d60 | 45 73 74 69 6d 2e 20 6d 61 70 70 69 6e 67 20 28 6b 65 72 6e 65 6c 29 22 29 0a 70 6c 2e 74 69 67 | Estim..mapping.(kernel)").pl.tig |
16d80 | 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 00 00 | ht_layout()..pl.show().PK....... |
16da0 | 00 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 | ..h:O9.|`............plot_otda_d |
16dc0 | 32 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a | 2.py#.-*-.coding:.utf-8.-*-.""". |
16de0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
16e00 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4f 54 20 66 6f 72 20 64 6f 6d 61 69 | ===================.OT.for.domai |
16e20 | 6e 20 61 64 61 70 74 61 74 69 6f 6e 20 6f 6e 20 65 6d 70 69 72 69 63 61 6c 20 64 69 73 74 72 69 | n.adaptation.on.empirical.distri |
16e40 | 62 75 74 69 6f 6e 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | butions.======================== |
16e60 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 | ===========================..Thi |
16e80 | 73 20 65 78 61 6d 70 6c 65 20 69 6e 74 72 6f 64 75 63 65 73 20 61 20 64 6f 6d 61 69 6e 20 61 64 | s.example.introduces.a.domain.ad |
16ea0 | 61 70 74 61 74 69 6f 6e 20 69 6e 20 61 20 32 44 20 73 65 74 74 69 6e 67 2e 20 49 74 20 65 78 70 | aptation.in.a.2D.setting..It.exp |
16ec0 | 6c 69 63 69 74 73 0a 74 68 65 20 70 72 6f 62 6c 65 6d 20 6f 66 20 64 6f 6d 61 69 6e 20 61 64 61 | licits.the.problem.of.domain.ada |
16ee0 | 70 74 61 74 69 6f 6e 20 61 6e 64 20 69 6e 74 72 6f 64 75 63 65 73 20 73 6f 6d 65 20 6f 70 74 69 | ptation.and.introduces.some.opti |
16f00 | 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 0a 61 70 70 72 6f 61 63 68 65 73 20 74 6f 20 73 6f 6c 76 | mal.transport.approaches.to.solv |
16f20 | 65 20 69 74 2e 0a 0a 51 75 61 6e 74 69 74 69 65 73 20 73 75 63 68 20 61 73 20 6f 70 74 69 6d 61 | e.it...Quantities.such.as.optima |
16f40 | 6c 20 63 6f 75 70 6c 69 6e 67 73 2c 20 67 72 65 61 74 65 72 20 63 6f 75 70 6c 69 6e 67 20 63 6f | l.couplings,.greater.coupling.co |
16f60 | 65 66 66 69 63 69 65 6e 74 73 20 61 6e 64 0a 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c | efficients.and.transported.sampl |
16f80 | 65 73 20 61 72 65 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 67 | es.are.represented.in.order.to.g |
16fa0 | 69 76 65 20 61 20 76 69 73 75 61 6c 20 75 6e 64 65 72 73 74 61 6e 64 69 6e 67 0a 6f 66 20 77 68 | ive.a.visual.understanding.of.wh |
16fc0 | 61 74 20 74 68 65 20 74 72 61 6e 73 70 6f 72 74 20 6d 65 74 68 6f 64 73 20 61 72 65 20 64 6f 69 | at.the.transport.methods.are.doi |
16fe0 | 6e 67 2e 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 73 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 | ng.."""..#.Authors:.Remi.Flamary |
17000 | 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 20 20 20 20 20 20 | .<remi.flamary@unice.fr>.#...... |
17020 | 20 20 20 20 53 74 61 6e 69 73 6c 61 73 20 43 68 61 6d 62 6f 6e 20 3c 73 74 61 6e 2e 63 68 61 6d | ....Stanislas.Chambon.<stan.cham |
17040 | 62 6f 6e 40 67 6d 61 69 6c 2e 63 6f 6d 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 | bon@gmail.com>.#.#.License:.MIT. |
17060 | 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 | License..import.matplotlib.pylab |
17080 | 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 69 6d 70 6f 72 74 20 6f 74 2e 70 6c 6f 74 0a | .as.pl.import.ot.import.ot.plot. |
170a0 | 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 | .############################### |
170c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
170e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 67 65 6e 65 72 61 74 65 20 64 61 74 61 0a | ###############.#.generate.data. |
17100 | 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 6e 5f 73 61 6d 70 6c 65 73 5f 73 6f 75 72 63 | #.-------------..n_samples_sourc |
17120 | 65 20 3d 20 31 35 30 0a 6e 5f 73 61 6d 70 6c 65 73 5f 74 61 72 67 65 74 20 3d 20 31 35 30 0a 0a | e.=.150.n_samples_target.=.150.. |
17140 | 58 73 2c 20 79 73 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 61 5f 63 | Xs,.ys.=.ot.datasets.make_data_c |
17160 | 6c 61 73 73 69 66 28 27 33 67 61 75 73 73 27 2c 20 6e 5f 73 61 6d 70 6c 65 73 5f 73 6f 75 72 63 | lassif('3gauss',.n_samples_sourc |
17180 | 65 29 0a 58 74 2c 20 79 74 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 | e).Xt,.yt.=.ot.datasets.make_dat |
171a0 | 61 5f 63 6c 61 73 73 69 66 28 27 33 67 61 75 73 73 32 27 2c 20 6e 5f 73 61 6d 70 6c 65 73 5f 74 | a_classif('3gauss2',.n_samples_t |
171c0 | 61 72 67 65 74 29 0a 0a 23 20 43 6f 73 74 20 6d 61 74 72 69 78 0a 4d 20 3d 20 6f 74 2e 64 69 73 | arget)..#.Cost.matrix.M.=.ot.dis |
171e0 | 74 28 58 73 2c 20 58 74 2c 20 6d 65 74 72 69 63 3d 27 73 71 65 75 63 6c 69 64 65 61 6e 27 29 0a | t(Xs,.Xt,.metric='sqeuclidean'). |
17200 | 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 | ..############################## |
17220 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
17240 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 49 6e 73 74 61 6e 74 69 61 74 65 20 74 | ################.#.Instantiate.t |
17260 | 68 65 20 64 69 66 66 65 72 65 6e 74 20 74 72 61 6e 73 70 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d | he.different.transport.algorithm |
17280 | 73 20 61 6e 64 20 66 69 74 20 74 68 65 6d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | s.and.fit.them.#.--------------- |
172a0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
172c0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 20 45 4d 44 20 54 72 61 6e 73 70 6f 72 74 0a 6f 74 | ------------..#.EMD.Transport.ot |
172e0 | 5f 65 6d 64 20 3d 20 6f 74 2e 64 61 2e 45 4d 44 54 72 61 6e 73 70 6f 72 74 28 29 0a 6f 74 5f 65 | _emd.=.ot.da.EMDTransport().ot_e |
17300 | 6d 64 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 53 69 6e 6b 68 6f 72 6e | md.fit(Xs=Xs,.Xt=Xt)..#.Sinkhorn |
17320 | 20 54 72 61 6e 73 70 6f 72 74 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 2e 64 61 2e 53 | .Transport.ot_sinkhorn.=.ot.da.S |
17340 | 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_ |
17360 | 73 69 6e 6b 68 6f 72 6e 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 53 69 | sinkhorn.fit(Xs=Xs,.Xt=Xt)..#.Si |
17380 | 6e 6b 68 6f 72 6e 20 54 72 61 6e 73 70 6f 72 74 20 77 69 74 68 20 47 72 6f 75 70 20 6c 61 73 73 | nkhorn.Transport.with.Group.lass |
173a0 | 6f 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 6f 74 5f 6c 70 6c 31 20 3d 20 6f 74 2e 64 61 | o.regularization.ot_lpl1.=.ot.da |
173c0 | 2e 53 69 6e 6b 68 6f 72 6e 4c 70 6c 31 54 72 61 6e 73 70 6f 72 74 28 72 65 67 5f 65 3d 31 65 2d | .SinkhornLpl1Transport(reg_e=1e- |
173e0 | 31 2c 20 72 65 67 5f 63 6c 3d 31 65 30 29 0a 6f 74 5f 6c 70 6c 31 2e 66 69 74 28 58 73 3d 58 73 | 1,.reg_cl=1e0).ot_lpl1.fit(Xs=Xs |
17400 | 2c 20 79 73 3d 79 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 74 72 61 6e 73 70 6f 72 74 20 73 6f 75 | ,.ys=ys,.Xt=Xt)..#.transport.sou |
17420 | 72 63 65 20 73 61 6d 70 6c 65 73 20 6f 6e 74 6f 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 0a | rce.samples.onto.target.samples. |
17440 | 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 20 3d 20 6f 74 5f 65 6d 64 2e 74 72 61 6e 73 66 6f 72 6d | transp_Xs_emd.=.ot_emd.transform |
17460 | 28 58 73 3d 58 73 29 0a 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 5f | (Xs=Xs).transp_Xs_sinkhorn.=.ot_ |
17480 | 73 69 6e 6b 68 6f 72 6e 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 74 72 61 6e 73 70 | sinkhorn.transform(Xs=Xs).transp |
174a0 | 5f 58 73 5f 6c 70 6c 31 20 3d 20 6f 74 5f 6c 70 6c 31 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d | _Xs_lpl1.=.ot_lpl1.transform(Xs= |
174c0 | 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)...########################## |
174e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
17500 | 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 |
17520 | 6c 6f 74 73 20 73 6f 75 72 63 65 20 61 6e 64 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 20 2b | lots.source.and.target.samples.+ |
17540 | 20 6d 61 74 72 69 78 20 6f 66 20 70 61 69 72 77 69 73 65 20 64 69 73 74 61 6e 63 65 0a 23 20 2d | .matrix.of.pairwise.distance.#.- |
17560 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
17580 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
175a0 | 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 31 30 2c 20 | ----..pl.figure(1,.figsize=(10,. |
175c0 | 31 30 29 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 63 61 74 | 10)).pl.subplot(2,.2,.1).pl.scat |
175e0 | 74 65 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 58 73 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 | ter(Xs[:,.0],.Xs[:,.1],.c=ys,.ma |
17600 | 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 | rker='+',.label='Source.samples' |
17620 | 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c | ).pl.xticks([]).pl.yticks([]).pl |
17640 | 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 20 | .legend(loc=0).pl.title('Source. |
17660 | 20 73 61 6d 70 6c 65 73 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 32 29 0a | .samples')..pl.subplot(2,.2,.2). |
17680 | 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 | pl.scatter(Xt[:,.0],.Xt[:,.1],.c |
176a0 | 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 | =yt,.marker='o',.label='Target.s |
176c0 | 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 |
176e0 | 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(' |
17700 | 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 | Target.samples')..pl.subplot(2,. |
17720 | 32 2c 20 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 4d 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e | 2,.3).pl.imshow(M,.interpolation |
17740 | 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 | ='nearest').pl.xticks([]).pl.yti |
17760 | 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4d 61 74 72 69 78 20 6f 66 20 70 61 69 72 | cks([]).pl.title('Matrix.of.pair |
17780 | 77 69 73 65 20 64 69 73 74 61 6e 63 65 73 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 | wise.distances').pl.tight_layout |
177a0 | 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ()...########################### |
177c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
177e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 67 20 32 20 3a 20 70 6c | ###################.#.Fig.2.:.pl |
17800 | 6f 74 73 20 6f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 73 20 66 6f 72 20 74 68 65 20 64 69 | ots.optimal.couplings.for.the.di |
17820 | 66 66 65 72 65 6e 74 20 6d 65 74 68 6f 64 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | fferent.methods.#.-------------- |
17840 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
17860 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 | -----------.pl.figure(2,.figsize |
17880 | 3d 28 31 30 2c 20 36 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 31 29 0a 70 | =(10,.6))..pl.subplot(2,.3,.1).p |
178a0 | 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 65 6d 64 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 69 6e 74 65 72 | l.imshow(ot_emd.coupling_,.inter |
178c0 | 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d | polation='nearest').pl.xticks([] |
178e0 | 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 70 74 69 6d 61 | ).pl.yticks([]).pl.title('Optima |
17900 | 6c 20 63 6f 75 70 6c 69 6e 67 5c 6e 45 4d 44 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 | l.coupling\nEMDTransport')..pl.s |
17920 | 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 73 69 6e | ubplot(2,.3,.2).pl.imshow(ot_sin |
17940 | 6b 68 6f 72 6e 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 | khorn.coupling_,.interpolation=' |
17960 | 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b | nearest').pl.xticks([]).pl.ytick |
17980 | 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 | s([]).pl.title('Optimal.coupling |
179a0 | 5c 6e 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f | \nSinkhornTransport')..pl.subplo |
179c0 | 74 28 32 2c 20 33 2c 20 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 6c 70 6c 31 2e 63 6f 75 | t(2,.3,.3).pl.imshow(ot_lpl1.cou |
179e0 | 70 6c 69 6e 67 5f 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 | pling_,.interpolation='nearest') |
17a00 | 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. |
17a20 | 74 69 74 6c 65 28 27 4f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 5c 6e 53 69 6e 6b 68 6f 72 | title('Optimal.coupling\nSinkhor |
17a40 | 6e 4c 70 6c 31 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 | nLpl1Transport')..pl.subplot(2,. |
17a60 | 33 2c 20 34 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 | 3,.4).ot.plot.plot2D_samples_mat |
17a80 | 28 58 73 2c 20 58 74 2c 20 6f 74 5f 65 6d 64 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 63 3d 5b 2e 35 | (Xs,.Xt,.ot_emd.coupling_,.c=[.5 |
17aa0 | 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 |
17ac0 | 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 |
17ae0 | 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 |
17b00 | 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=' |
17b20 | 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 |
17b40 | 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 |
17b60 | 28 27 4d 61 69 6e 20 63 6f 75 70 6c 69 6e 67 20 63 6f 65 66 66 69 63 69 65 6e 74 73 5c 6e 45 4d | ('Main.coupling.coefficients\nEM |
17b80 | 44 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 35 | DTransport')..pl.subplot(2,.3,.5 |
17ba0 | 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 58 73 2c | ).ot.plot.plot2D_samples_mat(Xs, |
17bc0 | 20 58 74 2c 20 6f 74 5f 73 69 6e 6b 68 6f 72 6e 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 63 3d 5b 2e | .Xt,.ot_sinkhorn.coupling_,.c=[. |
17be0 | 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 | 5,..5,.1]).pl.scatter(Xs[:,.0],. |
17c00 | 58 73 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 | Xs[:,.1],.c=ys,.marker='+',.labe |
17c20 | 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 | l='Source.samples').pl.scatter(X |
17c40 | 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d | t[:,.0],.Xt[:,.1],.c=yt,.marker= |
17c60 | 27 6f 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e | 'o',.label='Target.samples').pl. |
17c80 | 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c | xticks([]).pl.yticks([]).pl.titl |
17ca0 | 65 28 27 4d 61 69 6e 20 63 6f 75 70 6c 69 6e 67 20 63 6f 65 66 66 69 63 69 65 6e 74 73 5c 6e 53 | e('Main.coupling.coefficients\nS |
17cc0 | 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 | inkhornTransport')..pl.subplot(2 |
17ce0 | 2c 20 33 2c 20 36 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d | ,.3,.6).ot.plot.plot2D_samples_m |
17d00 | 61 74 28 58 73 2c 20 58 74 2c 20 6f 74 5f 6c 70 6c 31 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 63 3d | at(Xs,.Xt,.ot_lpl1.coupling_,.c= |
17d20 | 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 73 5b 3a 2c 20 30 5d | [.5,..5,.1]).pl.scatter(Xs[:,.0] |
17d40 | 2c 20 58 73 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 | ,.Xs[:,.1],.c=ys,.marker='+',.la |
17d60 | 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 73 63 61 74 74 65 72 | bel='Source.samples').pl.scatter |
17d80 | 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 | (Xt[:,.0],.Xt[:,.1],.c=yt,.marke |
17da0 | 72 3d 27 6f 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 | r='o',.label='Target.samples').p |
17dc0 | 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 |
17de0 | 74 6c 65 28 27 4d 61 69 6e 20 63 6f 75 70 6c 69 6e 67 20 63 6f 65 66 66 69 63 69 65 6e 74 73 5c | tle('Main.coupling.coefficients\ |
17e00 | 6e 53 69 6e 6b 68 6f 72 6e 4c 70 6c 31 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 6c 2e 74 69 67 68 | nSinkhornLpl1Transport').pl.tigh |
17e20 | 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()...################### |
17e40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
17e60 | 23 23 23 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 |
17e80 | 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.# |
17ea0 | 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 | .------------------------------- |
17ec0 | 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 |
17ee0 | 0a 70 6c 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 31 30 2c 20 34 29 29 0a 70 | .pl.figure(4,.figsize=(10,.4)).p |
17f00 | 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 | l.subplot(1,.3,.1).pl.scatter(Xt |
17f20 | 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=' |
17f40 | 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d | o',............label='Target.sam |
17f60 | 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 30 2e 35 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 | ples',.alpha=0.5).pl.scatter(tra |
17f80 | 6e 73 70 5f 58 73 5f 65 6d 64 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 5b | nsp_Xs_emd[:,.0],.transp_Xs_emd[ |
17fa0 | 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 | :,.1],.c=ys,............marker=' |
17fc0 | 2b 27 2c 20 6c 61 62 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 20 73 3d 33 30 | +',.label='Transp.samples',.s=30 |
17fe0 | 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 5c | ).pl.title('Transported.samples\ |
18000 | 6e 45 6d 64 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 | nEmdTransport').pl.legend(loc=0) |
18020 | 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 0a 70 6c | .pl.xticks([]).pl.yticks([])..pl |
18040 | 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b | .subplot(1,.3,.2).pl.scatter(Xt[ |
18060 | 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 |
18080 | 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 |
180a0 | 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 |
180c0 | 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f | sp_Xs_sinkhorn[:,.0],.transp_Xs_ |
180e0 | 73 69 6e 6b 68 6f 72 6e 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 | sinkhorn[:,.1],.c=ys,........... |
18100 | 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d 70 6c | .marker='+',.label='Transp.sampl |
18120 | 65 73 27 2c 20 73 3d 33 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 72 61 6e 73 70 6f 72 74 65 64 | es',.s=30).pl.title('Transported |
18140 | 20 73 61 6d 70 6c 65 73 5c 6e 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 6c | .samples\nSinkhornTransport').pl |
18160 | 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 0a 70 6c 2e 73 75 | .xticks([]).pl.yticks([])..pl.su |
18180 | 62 70 6c 6f 74 28 31 2c 20 33 2c 20 33 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 | bplot(1,.3,.3).pl.scatter(Xt[:,. |
181a0 | 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a | 0],.Xt[:,.1],.c=yt,.marker='o',. |
181c0 | 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 | ...........label='Target.samples |
181e0 | 27 2c 20 61 6c 70 68 61 3d 30 2e 35 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f | ',.alpha=0.5).pl.scatter(transp_ |
18200 | 58 73 5f 6c 70 6c 31 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 6c 70 6c 31 5b 3a 2c | Xs_lpl1[:,.0],.transp_Xs_lpl1[:, |
18220 | 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b 27 | .1],.c=ys,............marker='+' |
18240 | 2c 20 6c 61 62 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 20 73 3d 33 30 29 0a | ,.label='Transp.samples',.s=30). |
18260 | 70 6c 2e 74 69 74 6c 65 28 27 54 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 5c 6e 53 | pl.title('Transported.samples\nS |
18280 | 69 6e 6b 68 6f 72 6e 4c 70 6c 31 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 | inkhornLpl1Transport').pl.xticks |
182a0 | 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 |
182c0 | 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 70 75 94 50 a3 22 | out().pl.show().PK........pu.P." |
182e0 | 30 45 30 10 00 00 30 10 00 00 22 00 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 6d 61 70 70 69 6e 67 5f | 0E0...0..."...plot_otda_mapping_ |
18300 | 63 6f 6c 6f 72 73 5f 69 6d 61 67 65 73 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 | colors_images.py#.-*-.coding:.ut |
18320 | 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.-*-.""".==================== |
18340 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
18360 | 3d 0a 4f 54 20 66 6f 72 20 69 6d 61 67 65 20 63 6f 6c 6f 72 20 61 64 61 70 74 61 74 69 6f 6e 20 | =.OT.for.image.color.adaptation. |
18380 | 77 69 74 68 20 6d 61 70 70 69 6e 67 20 65 73 74 69 6d 61 74 69 6f 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d | with.mapping.estimation.======== |
183a0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
183c0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 4f 54 20 66 6f 72 20 64 6f 6d 61 69 6e 20 61 64 61 | =============..OT.for.domain.ada |
183e0 | 70 74 61 74 69 6f 6e 20 77 69 74 68 20 69 6d 61 67 65 20 63 6f 6c 6f 72 20 61 64 61 70 74 61 74 | ptation.with.image.color.adaptat |
18400 | 69 6f 6e 20 5b 36 5d 20 77 69 74 68 20 6d 61 70 70 69 6e 67 0a 65 73 74 69 6d 61 74 69 6f 6e 20 | ion.[6].with.mapping.estimation. |
18420 | 5b 38 5d 2e 0a 0a 5b 36 5d 20 46 65 72 72 61 64 61 6e 73 2c 20 53 2e 2c 20 50 61 70 61 64 61 6b | [8]...[6].Ferradans,.S.,.Papadak |
18440 | 69 73 2c 20 4e 2e 2c 20 50 65 79 72 65 2c 20 47 2e 2c 20 26 20 41 75 6a 6f 6c 2c 20 4a 2e 20 46 | is,.N.,.Peyre,.G.,.&.Aujol,.J..F |
18460 | 2e 20 28 32 30 31 34 29 2e 20 52 65 67 75 6c 61 72 69 7a 65 64 0a 20 20 20 20 64 69 73 63 72 65 | ..(2014)..Regularized.....discre |
18480 | 74 65 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 2e 20 53 49 41 4d 20 4a 6f 75 72 6e | te.optimal.transport..SIAM.Journ |
184a0 | 61 6c 20 6f 6e 20 49 6d 61 67 69 6e 67 20 53 63 69 65 6e 63 65 73 2c 20 37 28 33 29 2c 0a 20 20 | al.on.Imaging.Sciences,.7(3),... |
184c0 | 20 20 31 38 35 33 2d 31 38 38 32 2e 0a 5b 38 5d 20 4d 2e 20 50 65 72 72 6f 74 2c 20 4e 2e 20 43 | ..1853-1882..[8].M..Perrot,.N..C |
184e0 | 6f 75 72 74 79 2c 20 52 2e 20 46 6c 61 6d 61 72 79 2c 20 41 2e 20 48 61 62 72 61 72 64 2c 20 22 | ourty,.R..Flamary,.A..Habrard,." |
18500 | 4d 61 70 70 69 6e 67 20 65 73 74 69 6d 61 74 69 6f 6e 20 66 6f 72 0a 20 20 20 20 64 69 73 63 72 | Mapping.estimation.for.....discr |
18520 | 65 74 65 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 22 2c 20 4e 65 75 72 61 6c 20 49 | ete.optimal.transport",.Neural.I |
18540 | 6e 66 6f 72 6d 61 74 69 6f 6e 20 50 72 6f 63 65 73 73 69 6e 67 20 53 79 73 74 65 6d 73 20 28 4e | nformation.Processing.Systems.(N |
18560 | 49 50 53 29 2c 0a 20 20 20 20 32 30 31 36 2e 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 73 3a | IPS),.....2016..."""..#.Authors: |
18580 | 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 | .Remi.Flamary.<remi.flamary@unic |
185a0 | 65 2e 66 72 3e 0a 23 20 20 20 20 20 20 20 20 20 20 53 74 61 6e 69 73 6c 61 73 20 43 68 61 6d 62 | e.fr>.#..........Stanislas.Chamb |
185c0 | 6f 6e 20 3c 73 74 61 6e 2e 63 68 61 6d 62 6f 6e 40 67 6d 61 69 6c 2e 63 6f 6d 3e 0a 23 0a 23 20 | on.<stan.chambon@gmail.com>.#.#. |
185e0 | 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d | License:.MIT.License..import.num |
18600 | 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 | py.as.np.import.matplotlib.pylab |
18620 | 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 0a 72 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e | .as.pl.import.ot..r.=.np.random. |
18640 | 52 61 6e 64 6f 6d 53 74 61 74 65 28 34 32 29 0a 0a 0a 64 65 66 20 69 6d 32 6d 61 74 28 49 29 3a | RandomState(42)...def.im2mat(I): |
18660 | 0a 20 20 20 20 22 22 22 43 6f 6e 76 65 72 74 73 20 61 6e 64 20 69 6d 61 67 65 20 74 6f 20 6d 61 | ....."""Converts.and.image.to.ma |
18680 | 74 72 69 78 20 28 6f 6e 65 20 70 69 78 65 6c 20 70 65 72 20 6c 69 6e 65 29 22 22 22 0a 20 20 20 | trix.(one.pixel.per.line)""".... |
186a0 | 20 72 65 74 75 72 6e 20 49 2e 72 65 73 68 61 70 65 28 28 49 2e 73 68 61 70 65 5b 30 5d 20 2a 20 | .return.I.reshape((I.shape[0].*. |
186c0 | 49 2e 73 68 61 70 65 5b 31 5d 2c 20 49 2e 73 68 61 70 65 5b 32 5d 29 29 0a 0a 0a 64 65 66 20 6d | I.shape[1],.I.shape[2]))...def.m |
186e0 | 61 74 32 69 6d 28 58 2c 20 73 68 61 70 65 29 3a 0a 20 20 20 20 22 22 22 43 6f 6e 76 65 72 74 73 | at2im(X,.shape):....."""Converts |
18700 | 20 62 61 63 6b 20 61 20 6d 61 74 72 69 78 20 74 6f 20 61 6e 20 69 6d 61 67 65 22 22 22 0a 20 20 | .back.a.matrix.to.an.image"""... |
18720 | 20 20 72 65 74 75 72 6e 20 58 2e 72 65 73 68 61 70 65 28 73 68 61 70 65 29 0a 0a 0a 64 65 66 20 | ..return.X.reshape(shape)...def. |
18740 | 6d 69 6e 6d 61 78 28 49 29 3a 0a 20 20 20 20 72 65 74 75 72 6e 20 6e 70 2e 63 6c 69 70 28 49 2c | minmax(I):.....return.np.clip(I, |
18760 | 20 30 2c 20 31 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | .0,.1)...####################### |
18780 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
187a0 | 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 |
187c0 | 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 20 4c 6f 61 64 69 | te.data.#.-------------..#.Loadi |
187e0 | 6e 67 20 69 6d 61 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 | ng.images.I1.=.pl.imread('../dat |
18800 | 61 2f 6f 63 65 61 6e 5f 64 61 79 2e 6a 70 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 | a/ocean_day.jpg').astype(np.floa |
18820 | 74 36 34 29 20 2f 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 | t64)./.256.I2.=.pl.imread('../da |
18840 | 74 61 2f 6f 63 65 61 6e 5f 73 75 6e 73 65 74 2e 6a 70 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e | ta/ocean_sunset.jpg').astype(np. |
18860 | 66 6c 6f 61 74 36 34 29 20 2f 20 32 35 36 0a 0a 0a 58 31 20 3d 20 69 6d 32 6d 61 74 28 49 31 29 | float64)./.256...X1.=.im2mat(I1) |
18880 | 0a 58 32 20 3d 20 69 6d 32 6d 61 74 28 49 32 29 0a 0a 23 20 74 72 61 69 6e 69 6e 67 20 73 61 6d | .X2.=.im2mat(I2)..#.training.sam |
188a0 | 70 6c 65 73 0a 6e 62 20 3d 20 31 30 30 30 0a 69 64 78 31 20 3d 20 72 2e 72 61 6e 64 69 6e 74 28 | ples.nb.=.1000.idx1.=.r.randint( |
188c0 | 58 31 2e 73 68 61 70 65 5b 30 5d 2c 20 73 69 7a 65 3d 28 6e 62 2c 29 29 0a 69 64 78 32 20 3d 20 | X1.shape[0],.size=(nb,)).idx2.=. |
188e0 | 72 2e 72 61 6e 64 69 6e 74 28 58 32 2e 73 68 61 70 65 5b 30 5d 2c 20 73 69 7a 65 3d 28 6e 62 2c | r.randint(X2.shape[0],.size=(nb, |
18900 | 29 29 0a 0a 58 73 20 3d 20 58 31 5b 69 64 78 31 2c 20 3a 5d 0a 58 74 20 3d 20 58 32 5b 69 64 78 | ))..Xs.=.X1[idx1,.:].Xt.=.X2[idx |
18920 | 32 2c 20 3a 5d 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | 2,.:]...######################## |
18940 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
18960 | 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 6f 6d 61 69 6e 20 | ######################.#.Domain. |
18980 | 61 64 61 70 74 61 74 69 6f 6e 20 66 6f 72 20 70 69 78 65 6c 20 64 69 73 74 72 69 62 75 74 69 6f | adaptation.for.pixel.distributio |
189a0 | 6e 20 74 72 61 6e 73 66 65 72 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | n.transfer.#.------------------- |
189c0 | 2d 2d 2d 2d 2d 2d 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 | ------------------------------.. |
189e0 | 23 20 45 4d 44 54 72 61 6e 73 70 6f 72 74 0a 6f 74 5f 65 6d 64 20 3d 20 6f 74 2e 64 61 2e 45 4d | #.EMDTransport.ot_emd.=.ot.da.EM |
18a00 | 44 54 72 61 6e 73 70 6f 72 74 28 29 0a 6f 74 5f 65 6d 64 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 | DTransport().ot_emd.fit(Xs=Xs,.X |
18a20 | 74 3d 58 74 29 0a 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 20 3d 20 6f 74 5f 65 6d 64 2e 74 72 61 | t=Xt).transp_Xs_emd.=.ot_emd.tra |
18a40 | 6e 73 66 6f 72 6d 28 58 73 3d 58 31 29 0a 49 6d 61 67 65 5f 65 6d 64 20 3d 20 6d 69 6e 6d 61 78 | nsform(Xs=X1).Image_emd.=.minmax |
18a60 | 28 6d 61 74 32 69 6d 28 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 2c 20 49 31 2e 73 68 61 70 65 29 | (mat2im(transp_Xs_emd,.I1.shape) |
18a80 | 29 0a 0a 23 20 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 0a 6f 74 5f 73 69 6e 6b 68 6f | )..#.SinkhornTransport.ot_sinkho |
18aa0 | 72 6e 20 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 28 72 65 67 | rn.=.ot.da.SinkhornTransport(reg |
18ac0 | 5f 65 3d 31 65 2d 31 29 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 2e 66 69 74 28 58 73 3d 58 73 2c 20 | _e=1e-1).ot_sinkhorn.fit(Xs=Xs,. |
18ae0 | 58 74 3d 58 74 29 0a 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 5f 73 | Xt=Xt).transp_Xs_sinkhorn.=.ot_s |
18b00 | 69 6e 6b 68 6f 72 6e 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 31 29 0a 49 6d 61 67 65 5f 73 | inkhorn.transform(Xs=X1).Image_s |
18b20 | 69 6e 6b 68 6f 72 6e 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 74 72 61 6e 73 70 5f 58 | inkhorn.=.minmax(mat2im(transp_X |
18b40 | 73 5f 73 69 6e 6b 68 6f 72 6e 2c 20 49 31 2e 73 68 61 70 65 29 29 0a 0a 6f 74 5f 6d 61 70 70 69 | s_sinkhorn,.I1.shape))..ot_mappi |
18b60 | 6e 67 5f 6c 69 6e 65 61 72 20 3d 20 6f 74 2e 64 61 2e 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f | ng_linear.=.ot.da.MappingTranspo |
18b80 | 72 74 28 0a 20 20 20 20 6d 75 3d 31 65 30 2c 20 65 74 61 3d 31 65 2d 38 2c 20 62 69 61 73 3d 54 | rt(.....mu=1e0,.eta=1e-8,.bias=T |
18ba0 | 72 75 65 2c 20 6d 61 78 5f 69 74 65 72 3d 32 30 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a | rue,.max_iter=20,.verbose=True). |
18bc0 | 6f 74 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d | ot_mapping_linear.fit(Xs=Xs,.Xt= |
18be0 | 58 74 29 0a 0a 58 31 74 6c 20 3d 20 6f 74 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 2e 74 72 | Xt)..X1tl.=.ot_mapping_linear.tr |
18c00 | 61 6e 73 66 6f 72 6d 28 58 73 3d 58 31 29 0a 49 6d 61 67 65 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e | ansform(Xs=X1).Image_mapping_lin |
18c20 | 65 61 72 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 58 31 74 6c 2c 20 49 31 2e 73 68 61 | ear.=.minmax(mat2im(X1tl,.I1.sha |
18c40 | 70 65 29 29 0a 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 67 61 75 73 73 69 61 6e 20 3d 20 6f 74 2e 64 | pe))..ot_mapping_gaussian.=.ot.d |
18c60 | 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 65 30 2c 20 | a.MappingTransport(.....mu=1e0,. |
18c80 | 65 74 61 3d 31 65 2d 32 2c 20 73 69 67 6d 61 3d 31 2c 20 62 69 61 73 3d 46 61 6c 73 65 2c 20 6d | eta=1e-2,.sigma=1,.bias=False,.m |
18ca0 | 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 5f 6d 61 70 | ax_iter=10,.verbose=True).ot_map |
18cc0 | 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 58 74 29 0a | ping_gaussian.fit(Xs=Xs,.Xt=Xt). |
18ce0 | 0a 58 31 74 6e 20 3d 20 6f 74 5f 6d 61 70 70 69 6e 67 5f 67 61 75 73 73 69 61 6e 2e 74 72 61 6e | .X1tn.=.ot_mapping_gaussian.tran |
18d00 | 73 66 6f 72 6d 28 58 73 3d 58 31 29 20 20 23 20 75 73 65 20 74 68 65 20 65 73 74 69 6d 61 74 65 | sform(Xs=X1)..#.use.the.estimate |
18d20 | 64 20 6d 61 70 70 69 6e 67 0a 49 6d 61 67 65 5f 6d 61 70 70 69 6e 67 5f 67 61 75 73 73 69 61 6e | d.mapping.Image_mapping_gaussian |
18d40 | 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 58 31 74 6e 2c 20 49 31 2e 73 68 61 70 65 29 | .=.minmax(mat2im(X1tn,.I1.shape) |
18d60 | 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 | )...############################ |
18d80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
18da0 | 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 6f 72 69 67 69 6e | ##################.#.Plot.origin |
18dc0 | 61 6c 20 69 6d 61 67 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | al.images.#.-------------------- |
18de0 | 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 29 29 | ..pl.figure(1,.figsize=(6.4,.3)) |
18e00 | 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 | .pl.subplot(1,.2,.1).pl.imshow(I |
18e20 | 31 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 | 1).pl.axis('off').pl.title('Imag |
18e40 | 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 0a 70 6c 2e 69 6d | e.1')..pl.subplot(1,.2,.2).pl.im |
18e60 | 73 68 6f 77 28 49 32 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 | show(I2).pl.axis('off').pl.title |
18e80 | 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 75 74 28 29 0a 0a 0a | ('Image.2').pl.tight_layout()... |
18ea0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
18ec0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
18ee0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 70 69 78 65 6c 20 76 61 6c 75 | ##############.#.Plot.pixel.valu |
18f00 | 65 73 20 64 69 73 74 72 69 62 75 74 69 6f 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | es.distribution.#.-------------- |
18f20 | 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 |
18f40 | 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 35 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 | igsize=(6.4,.5))..pl.subplot(1,. |
18f60 | 32 2c 20 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 58 73 5b 3a 2c | 2,.1).pl.scatter(Xs[:,.0],.Xs[:, |
18f80 | 20 32 5d 2c 20 63 3d 58 73 29 0a 70 6c 2e 61 78 69 73 28 5b 30 2c 20 31 2c 20 30 2c 20 31 5d 29 | .2],.c=Xs).pl.axis([0,.1,.0,.1]) |
18fa0 | 0a 70 6c 2e 78 6c 61 62 65 6c 28 27 52 65 64 27 29 0a 70 6c 2e 79 6c 61 62 65 6c 28 27 42 6c 75 | .pl.xlabel('Red').pl.ylabel('Blu |
18fc0 | 65 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 31 27 29 0a 0a 70 6c 2e 73 75 62 70 | e').pl.title('Image.1')..pl.subp |
18fe0 | 6c 6f 74 28 31 2c 20 32 2c 20 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d | lot(1,.2,.2).pl.scatter(Xt[:,.0] |
19000 | 2c 20 58 74 5b 3a 2c 20 32 5d 2c 20 63 3d 58 74 29 0a 70 6c 2e 61 78 69 73 28 5b 30 2c 20 31 2c | ,.Xt[:,.2],.c=Xt).pl.axis([0,.1, |
19020 | 20 30 2c 20 31 5d 29 0a 70 6c 2e 78 6c 61 62 65 6c 28 27 52 65 64 27 29 0a 70 6c 2e 79 6c 61 62 | .0,.1]).pl.xlabel('Red').pl.ylab |
19040 | 65 6c 28 27 42 6c 75 65 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 32 27 29 0a 70 | el('Blue').pl.title('Image.2').p |
19060 | 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 23 | l.tight_layout()...############# |
19080 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
190a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
190c0 | 23 0a 23 20 50 6c 6f 74 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 69 6d 61 67 65 73 0a 23 20 2d 2d | #.#.Plot.transformed.images.#.-- |
190e0 | 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 65 | ---------------------..pl.figure |
19100 | 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 31 30 2c 20 35 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 | (2,.figsize=(10,.5))..pl.subplot |
19120 | 28 32 2c 20 33 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 29 0a 70 6c 2e 61 78 69 73 28 | (2,.3,.1).pl.imshow(I1).pl.axis( |
19140 | 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 2e 20 31 27 29 0a 0a 70 6c 2e 73 75 62 | 'off').pl.title('Im..1')..pl.sub |
19160 | 70 6c 6f 74 28 32 2c 20 33 2c 20 34 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 29 0a 70 6c 2e 61 | plot(2,.3,.4).pl.imshow(I2).pl.a |
19180 | 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 2e 20 32 27 29 0a 0a 70 6c | xis('off').pl.title('Im..2')..pl |
191a0 | 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 6d 61 67 | .subplot(2,.3,.2).pl.imshow(Imag |
191c0 | 65 5f 65 6d 64 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 | e_emd).pl.axis('off').pl.title(' |
191e0 | 45 6d 64 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c | EmdTransport')..pl.subplot(2,.3, |
19200 | 20 35 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 6d 61 67 65 5f 73 69 6e 6b 68 6f 72 6e 29 0a 70 6c | .5).pl.imshow(Image_sinkhorn).pl |
19220 | 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 69 6e 6b 68 6f 72 6e 54 | .axis('off').pl.title('SinkhornT |
19240 | 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 33 29 0a | ransport')..pl.subplot(2,.3,.3). |
19260 | 70 6c 2e 69 6d 73 68 6f 77 28 49 6d 61 67 65 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 29 0a | pl.imshow(Image_mapping_linear). |
19280 | 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 |
192a0 | 54 72 61 6e 73 70 6f 72 74 20 28 6c 69 6e 65 61 72 29 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 | Transport.(linear)')..pl.subplot |
192c0 | 28 32 2c 20 33 2c 20 36 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 6d 61 67 65 5f 6d 61 70 70 69 6e | (2,.3,.6).pl.imshow(Image_mappin |
192e0 | 67 5f 67 61 75 73 73 69 61 6e 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 | g_gaussian).pl.axis('off').pl.ti |
19300 | 74 6c 65 28 27 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 20 28 67 61 75 73 73 69 61 6e 29 | tle('MappingTransport.(gaussian) |
19320 | 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a | ').pl.tight_layout()..pl.show(). |
19340 | 50 4b 03 04 14 00 00 00 00 00 03 78 94 50 20 e7 75 c2 7c 1c 00 00 7c 1c 00 00 19 00 00 00 70 6c | PK.........x.P..u.|...|.......pl |
19360 | 6f 74 5f 67 72 6f 6d 6f 76 5f 62 61 72 79 63 65 6e 74 65 72 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 | ot_gromov_barycenter.py#.-*-.cod |
19380 | 69 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 | ing:.utf-8.-*-.."""..=========== |
193a0 | 3d 3d 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 | ==========================..Grom |
193c0 | 6f 76 2d 57 61 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 | ov-Wasserstein.Barycenter.exampl |
193e0 | 65 0d 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | e..============================= |
19400 | 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 73 20 64 65 73 69 | ========....This.example.is.desi |
19420 | 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 65 20 47 72 6f 6d | gned.to.show.how.to.use.the.Grom |
19440 | 6f 76 2d 57 61 73 73 65 72 73 74 65 69 6e 20 64 69 73 74 61 6e 63 65 0d 0a 63 6f 6d 70 75 74 61 | ov-Wasserstein.distance..computa |
19460 | 74 69 6f 6e 20 69 6e 20 50 4f 54 2e 0d 0a 22 22 22 0d 0a 0d 0a 23 20 41 75 74 68 6f 72 3a 20 45 | tion.in.POT..."""....#.Author:.E |
19480 | 72 77 61 6e 20 56 61 75 74 69 65 72 20 3c 65 72 77 61 6e 2e 76 61 75 74 69 65 72 40 67 6d 61 69 | rwan.Vautier.<erwan.vautier@gmai |
194a0 | 6c 2e 63 6f 6d 3e 0d 0a 23 20 20 20 20 20 20 20 20 20 4e 69 63 6f 6c 61 73 20 43 6f 75 72 74 79 | l.com>..#.........Nicolas.Courty |
194c0 | 20 3c 6e 63 6f 75 72 74 79 40 69 72 69 73 61 2e 66 72 3e 0d 0a 23 0d 0a 23 20 4c 69 63 65 6e 73 | .<ncourty@irisa.fr>..#..#.Licens |
194e0 | 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0d 0a 0d 0a 0d 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 | e:.MIT.License......import.numpy |
19500 | 20 61 73 20 6e 70 0d 0a 69 6d 70 6f 72 74 20 73 63 69 70 79 20 61 73 20 73 70 0d 0a 0d 0a 69 6d | .as.np..import.scipy.as.sp....im |
19520 | 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 0d 0a 66 72 6f | port.matplotlib.pylab.as.pl..fro |
19540 | 6d 20 73 6b 6c 65 61 72 6e 20 69 6d 70 6f 72 74 20 6d 61 6e 69 66 6f 6c 64 0d 0a 66 72 6f 6d 20 | m.sklearn.import.manifold..from. |
19560 | 73 6b 6c 65 61 72 6e 2e 64 65 63 6f 6d 70 6f 73 69 74 69 6f 6e 20 69 6d 70 6f 72 74 20 50 43 41 | sklearn.decomposition.import.PCA |
19580 | 0d 0a 0d 0a 69 6d 70 6f 72 74 20 6f 74 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ....import.ot....############### |
195a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
195c0 | 23 23 23 23 23 23 23 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 | ###############################. |
195e0 | 0a 23 20 53 6d 61 63 6f 66 20 4d 44 53 0d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 0d 0a | .#.Smacof.MDS..#.----------..#.. |
19600 | 23 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 74 6f 20 66 69 6e 64 20 61 | #.This.function.allows.to.find.a |
19620 | 6e 20 65 6d 62 65 64 64 69 6e 67 20 6f 66 20 70 6f 69 6e 74 73 20 67 69 76 65 6e 20 61 20 64 69 | n.embedding.of.points.given.a.di |
19640 | 73 73 69 6d 69 6c 61 72 69 74 79 20 6d 61 74 72 69 78 0d 0a 23 20 74 68 61 74 20 77 69 6c 6c 20 | ssimilarity.matrix..#.that.will. |
19660 | 62 65 20 67 69 76 65 6e 20 62 79 20 74 68 65 20 6f 75 74 70 75 74 20 6f 66 20 74 68 65 20 61 6c | be.given.by.the.output.of.the.al |
19680 | 67 6f 72 69 74 68 6d 0d 0a 0d 0a 0d 0a 64 65 66 20 73 6d 61 63 6f 66 5f 6d 64 73 28 43 2c 20 64 | gorithm......def.smacof_mds(C,.d |
196a0 | 69 6d 2c 20 6d 61 78 5f 69 74 65 72 3d 33 30 30 30 2c 20 65 70 73 3d 31 65 2d 39 29 3a 0d 0a 20 | im,.max_iter=3000,.eps=1e-9):... |
196c0 | 20 20 20 22 22 22 0d 0a 20 20 20 20 52 65 74 75 72 6e 73 20 61 6e 20 69 6e 74 65 72 70 6f 6c 61 | ..."""......Returns.an.interpola |
196e0 | 74 65 64 20 70 6f 69 6e 74 20 63 6c 6f 75 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 64 69 | ted.point.cloud.following.the.di |
19700 | 73 73 69 6d 69 6c 61 72 69 74 79 20 6d 61 74 72 69 78 20 43 0d 0a 20 20 20 20 75 73 69 6e 67 20 | ssimilarity.matrix.C......using. |
19720 | 53 4d 41 43 4f 46 20 6d 75 6c 74 69 64 69 6d 65 6e 73 69 6f 6e 61 6c 20 73 63 61 6c 69 6e 67 20 | SMACOF.multidimensional.scaling. |
19740 | 28 4d 44 53 29 20 69 6e 20 73 70 65 63 69 66 69 63 20 64 69 6d 65 6e 73 69 6f 6e 6e 65 64 0d 0a | (MDS).in.specific.dimensionned.. |
19760 | 20 20 20 20 74 61 72 67 65 74 20 73 70 61 63 65 0d 0a 0d 0a 20 20 20 20 50 61 72 61 6d 65 74 65 | ....target.space........Paramete |
19780 | 72 73 0d 0a 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 20 20 20 20 43 20 3a 20 6e 64 61 72 | rs......----------......C.:.ndar |
197a0 | 72 61 79 2c 20 73 68 61 70 65 20 28 6e 73 2c 20 6e 73 29 0d 0a 20 20 20 20 20 20 20 20 64 69 73 | ray,.shape.(ns,.ns)..........dis |
197c0 | 73 69 6d 69 6c 61 72 69 74 79 20 6d 61 74 72 69 78 0d 0a 20 20 20 20 64 69 6d 20 3a 20 69 6e 74 | similarity.matrix......dim.:.int |
197e0 | 0d 0a 20 20 20 20 20 20 20 20 20 20 64 69 6d 65 6e 73 69 6f 6e 20 6f 66 20 74 68 65 20 74 61 72 | ............dimension.of.the.tar |
19800 | 67 65 74 65 64 20 73 70 61 63 65 0d 0a 20 20 20 20 6d 61 78 5f 69 74 65 72 20 3a 20 20 69 6e 74 | geted.space......max_iter.:..int |
19820 | 0d 0a 20 20 20 20 20 20 20 20 4d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 | ..........Maximum.number.of.iter |
19840 | 61 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 53 4d 41 43 4f 46 20 61 6c 67 6f 72 69 74 68 6d 20 66 | ations.of.the.SMACOF.algorithm.f |
19860 | 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 75 6e 0d 0a 20 20 20 20 65 70 73 20 3a 20 66 6c 6f 61 74 | or.a.single.run......eps.:.float |
19880 | 0d 0a 20 20 20 20 20 20 20 20 72 65 6c 61 74 69 76 65 20 74 6f 6c 65 72 61 6e 63 65 20 77 2e 72 | ..........relative.tolerance.w.r |
198a0 | 2e 74 20 73 74 72 65 73 73 20 74 6f 20 64 65 63 6c 61 72 65 20 63 6f 6e 76 65 72 67 65 0d 0a 0d | .t.stress.to.declare.converge... |
198c0 | 0a 20 20 20 20 52 65 74 75 72 6e 73 0d 0a 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 0d 0a 20 20 20 20 6e | .....Returns......-------......n |
198e0 | 70 6f 73 20 3a 20 6e 64 61 72 72 61 79 2c 20 73 68 61 70 65 20 28 52 2c 20 64 69 6d 29 0d 0a 20 | pos.:.ndarray,.shape.(R,.dim)... |
19900 | 20 20 20 20 20 20 20 20 20 20 45 6d 62 65 64 64 65 64 20 63 6f 6f 72 64 69 6e 61 74 65 73 20 6f | ..........Embedded.coordinates.o |
19920 | 66 20 74 68 65 20 69 6e 74 65 72 70 6f 6c 61 74 65 64 20 70 6f 69 6e 74 20 63 6c 6f 75 64 20 28 | f.the.interpolated.point.cloud.( |
19940 | 64 65 66 69 6e 65 64 20 77 69 74 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 6f 6e 65 20 69 73 6f | defined.with.............one.iso |
19960 | 6d 65 74 72 79 29 0d 0a 20 20 20 20 22 22 22 0d 0a 0d 0a 20 20 20 20 72 6e 67 20 3d 20 6e 70 2e | metry)......"""........rng.=.np. |
19980 | 72 61 6e 64 6f 6d 2e 52 61 6e 64 6f 6d 53 74 61 74 65 28 73 65 65 64 3d 33 29 0d 0a 0d 0a 20 20 | random.RandomState(seed=3)...... |
199a0 | 20 20 6d 64 73 20 3d 20 6d 61 6e 69 66 6f 6c 64 2e 4d 44 53 28 0d 0a 20 20 20 20 20 20 20 20 64 | ..mds.=.manifold.MDS(..........d |
199c0 | 69 6d 2c 0d 0a 20 20 20 20 20 20 20 20 6d 61 78 5f 69 74 65 72 3d 6d 61 78 5f 69 74 65 72 2c 0d | im,..........max_iter=max_iter,. |
199e0 | 0a 20 20 20 20 20 20 20 20 65 70 73 3d 31 65 2d 39 2c 0d 0a 20 20 20 20 20 20 20 20 64 69 73 73 | .........eps=1e-9,..........diss |
19a00 | 69 6d 69 6c 61 72 69 74 79 3d 27 70 72 65 63 6f 6d 70 75 74 65 64 27 2c 0d 0a 20 20 20 20 20 20 | imilarity='precomputed',........ |
19a20 | 20 20 6e 5f 69 6e 69 74 3d 31 29 0d 0a 20 20 20 20 70 6f 73 20 3d 20 6d 64 73 2e 66 69 74 28 43 | ..n_init=1)......pos.=.mds.fit(C |
19a40 | 29 2e 65 6d 62 65 64 64 69 6e 67 5f 0d 0a 0d 0a 20 20 20 20 6e 6d 64 73 20 3d 20 6d 61 6e 69 66 | ).embedding_........nmds.=.manif |
19a60 | 6f 6c 64 2e 4d 44 53 28 0d 0a 20 20 20 20 20 20 20 20 32 2c 0d 0a 20 20 20 20 20 20 20 20 6d 61 | old.MDS(..........2,..........ma |
19a80 | 78 5f 69 74 65 72 3d 6d 61 78 5f 69 74 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 65 70 73 3d 31 65 | x_iter=max_iter,..........eps=1e |
19aa0 | 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 22 70 72 65 63 | -9,..........dissimilarity="prec |
19ac0 | 6f 6d 70 75 74 65 64 22 2c 0d 0a 20 20 20 20 20 20 20 20 72 61 6e 64 6f 6d 5f 73 74 61 74 65 3d | omputed",..........random_state= |
19ae0 | 72 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 6e 5f 69 6e 69 74 3d 31 29 0d 0a 20 20 20 20 6e 70 6f | rng,..........n_init=1)......npo |
19b00 | 73 20 3d 20 6e 6d 64 73 2e 66 69 74 5f 74 72 61 6e 73 66 6f 72 6d 28 43 2c 20 69 6e 69 74 3d 70 | s.=.nmds.fit_transform(C,.init=p |
19b20 | 6f 73 29 0d 0a 0d 0a 20 20 20 20 72 65 74 75 72 6e 20 6e 70 6f 73 0d 0a 0d 0a 0d 0a 23 23 23 23 | os)........return.npos......#### |
19b40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
19b60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
19b80 | 23 23 23 23 23 23 23 23 23 23 0d 0a 23 20 44 61 74 61 20 70 72 65 70 61 72 61 74 69 6f 6e 0d 0a | ##########..#.Data.preparation.. |
19ba0 | 23 20 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 66 6f 75 | #.----------------..#..#.The.fou |
19bc0 | 72 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 61 72 65 20 63 6f 6e 73 74 72 75 63 74 65 64 20 | r.distributions.are.constructed. |
19be0 | 66 72 6f 6d 20 34 20 73 69 6d 70 6c 65 20 69 6d 61 67 65 73 0d 0a 0d 0a 0d 0a 64 65 66 20 69 6d | from.4.simple.images......def.im |
19c00 | 32 6d 61 74 28 49 29 3a 0d 0a 20 20 20 20 22 22 22 43 6f 6e 76 65 72 74 73 20 61 6e 64 20 69 6d | 2mat(I):......"""Converts.and.im |
19c20 | 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 |
19c40 | 65 29 22 22 22 0d 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 | e)"""......return.I.reshape((I.s |
19c60 | 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] |
19c80 | 29 29 0d 0a 0d 0a 0d 0a 73 71 75 61 72 65 20 3d 20 70 6c 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 | ))......square.=.pl.imread('../d |
19ca0 | 61 74 61 2f 73 71 75 61 72 65 2e 70 6e 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 | ata/square.png').astype(np.float |
19cc0 | 36 34 29 5b 3a 2c 20 3a 2c 20 32 5d 20 2f 20 32 35 36 0d 0a 63 72 6f 73 73 20 3d 20 70 6c 2e 69 | 64)[:,.:,.2]./.256..cross.=.pl.i |
19ce0 | 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 63 72 6f 73 73 2e 70 6e 67 27 29 2e 61 73 74 79 70 | mread('../data/cross.png').astyp |
19d00 | 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 5b 3a 2c 20 3a 2c 20 32 5d 20 2f 20 32 35 36 0d 0a 74 72 | e(np.float64)[:,.:,.2]./.256..tr |
19d20 | 69 61 6e 67 6c 65 20 3d 20 70 6c 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 74 72 69 61 | iangle.=.pl.imread('../data/tria |
19d40 | 6e 67 6c 65 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 | ngle.png').astype(np.float64)[:, |
19d60 | 20 3a 2c 20 32 5d 20 2f 20 32 35 36 0d 0a 73 74 61 72 20 3d 20 70 6c 2e 69 6d 72 65 61 64 28 27 | .:,.2]./.256..star.=.pl.imread(' |
19d80 | 2e 2e 2f 64 61 74 61 2f 73 74 61 72 2e 70 6e 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c 6f | ../data/star.png').astype(np.flo |
19da0 | 61 74 36 34 29 5b 3a 2c 20 3a 2c 20 32 5d 20 2f 20 32 35 36 0d 0a 0d 0a 73 68 61 70 65 73 20 3d | at64)[:,.:,.2]./.256....shapes.= |
19dc0 | 20 5b 73 71 75 61 72 65 2c 20 63 72 6f 73 73 2c 20 74 72 69 61 6e 67 6c 65 2c 20 73 74 61 72 5d | .[square,.cross,.triangle,.star] |
19de0 | 0d 0a 0d 0a 53 20 3d 20 34 0d 0a 78 73 20 3d 20 5b 5b 5d 20 66 6f 72 20 69 20 69 6e 20 72 61 6e | ....S.=.4..xs.=.[[].for.i.in.ran |
19e00 | 67 65 28 53 29 5d 0d 0a 0d 0a 0d 0a 66 6f 72 20 6e 62 20 69 6e 20 72 61 6e 67 65 28 34 29 3a 0d | ge(S)]......for.nb.in.range(4):. |
19e20 | 0a 20 20 20 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 38 29 3a 0d 0a 20 20 20 20 20 20 20 | .....for.i.in.range(8):......... |
19e40 | 20 66 6f 72 20 6a 20 69 6e 20 72 61 6e 67 65 28 38 29 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 | .for.j.in.range(8):............. |
19e60 | 20 69 66 20 73 68 61 70 65 73 5b 6e 62 5d 5b 69 2c 20 6a 5d 20 3c 20 30 2e 39 35 3a 0d 0a 20 20 | .if.shapes[nb][i,.j].<.0.95:.... |
19e80 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78 73 5b 6e 62 5d 2e 61 70 70 65 6e 64 28 5b 6a 2c 20 | ..............xs[nb].append([j,. |
19ea0 | 38 20 2d 20 69 5d 29 0d 0a 0d 0a 78 73 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 6e 70 2e 61 72 72 | 8.-.i])....xs.=.np.array([np.arr |
19ec0 | 61 79 28 78 73 5b 30 5d 29 2c 20 6e 70 2e 61 72 72 61 79 28 78 73 5b 31 5d 29 2c 0d 0a 20 20 20 | ay(xs[0]),.np.array(xs[1]),..... |
19ee0 | 20 20 20 20 20 20 20 20 20 20 20 20 6e 70 2e 61 72 72 61 79 28 78 73 5b 32 5d 29 2c 20 6e 70 2e | ............np.array(xs[2]),.np. |
19f00 | 61 72 72 61 79 28 78 73 5b 33 5d 29 5d 29 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | array(xs[3])])....############## |
19f20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
19f40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
19f60 | 0d 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 0d 0a 23 20 2d 2d | ..#.Barycenter.computation..#.-- |
19f80 | 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 6e 73 20 3d 20 5b | --------------------......ns.=.[ |
19fa0 | 6c 65 6e 28 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 0a 6e | len(xs[s]).for.s.in.range(S)]..n |
19fc0 | 5f 73 61 6d 70 6c 65 73 20 3d 20 33 30 0d 0a 0d 0a 22 22 22 43 6f 6d 70 75 74 65 20 61 6c 6c 20 | _samples.=.30...."""Compute.all. |
19fe0 | 64 69 73 74 61 6e 63 65 73 20 6d 61 74 72 69 63 65 73 20 66 6f 72 20 74 68 65 20 66 6f 75 72 20 | distances.matrices.for.the.four. |
1a000 | 73 68 61 70 65 73 22 22 22 0d 0a 43 73 20 3d 20 5b 73 70 2e 73 70 61 74 69 61 6c 2e 64 69 73 74 | shapes"""..Cs.=.[sp.spatial.dist |
1a020 | 61 6e 63 65 2e 63 64 69 73 74 28 78 73 5b 73 5d 2c 20 78 73 5b 73 5d 29 20 66 6f 72 20 73 20 69 | ance.cdist(xs[s],.xs[s]).for.s.i |
1a040 | 6e 20 72 61 6e 67 65 28 53 29 5d 0d 0a 43 73 20 3d 20 5b 63 73 20 2f 20 63 73 2e 6d 61 78 28 29 | n.range(S)]..Cs.=.[cs./.cs.max() |
1a060 | 20 66 6f 72 20 63 73 20 69 6e 20 43 73 5d 0d 0a 0d 0a 70 73 20 3d 20 5b 6f 74 2e 75 6e 69 66 28 | .for.cs.in.Cs]....ps.=.[ot.unif( |
1a080 | 6e 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 0a 70 20 3d 20 6f | ns[s]).for.s.in.range(S)]..p.=.o |
1a0a0 | 74 2e 75 6e 69 66 28 6e 5f 73 61 6d 70 6c 65 73 29 0d 0a 0d 0a 0d 0a 6c 61 6d 62 64 61 73 74 20 | t.unif(n_samples)......lambdast. |
1a0c0 | 3d 20 5b 5b 66 6c 6f 61 74 28 69 29 20 2f 20 33 2c 20 66 6c 6f 61 74 28 33 20 2d 20 69 29 20 2f | =.[[float(i)./.3,.float(3.-.i)./ |
1a0e0 | 20 33 5d 20 66 6f 72 20 69 20 69 6e 20 5b 31 2c 20 32 5d 5d 0d 0a 0d 0a 43 74 30 31 20 3d 20 5b | .3].for.i.in.[1,.2]]....Ct01.=.[ |
1a100 | 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 20 69 6e 20 72 | 0.for.i.in.range(2)]..for.i.in.r |
1a120 | 61 6e 67 65 28 32 29 3a 0d 0a 20 20 20 20 43 74 30 31 5b 69 5d 20 3d 20 6f 74 2e 67 72 6f 6d 6f | ange(2):......Ct01[i].=.ot.gromo |
1a140 | 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 6c 65 73 2c 20 | v.gromov_barycenters(n_samples,. |
1a160 | 5b 43 73 5b 30 5d 2c 20 43 73 5b 31 5d 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | [Cs[0],.Cs[1]],................. |
1a180 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 70 73 5b | ............................[ps[ |
1a1a0 | 30 5d 2c 20 70 73 5b 31 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | 0],.ps[1]....................... |
1a1c0 | 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 2c 20 6c 61 6d | .......................],.p,.lam |
1a1e0 | 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 20 35 65 2d 34 | bdast[i],.'square_loss',..#.5e-4 |
1a200 | 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 20 20 | ,............................... |
1a220 | 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 20 74 6f 6c 3d | ..............max_iter=100,.tol= |
1a240 | 31 65 2d 33 29 0d 0a 0d 0a 43 74 30 32 20 3d 20 5b 30 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 | 1e-3)....Ct02.=.[0.for.i.in.rang |
1a260 | 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 20 20 43 | e(2)]..for.i.in.range(2):......C |
1a280 | 74 30 32 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 79 63 65 | t02[i].=.ot.gromov.gromov_baryce |
1a2a0 | 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 32 5d 5d 2c | nters(n_samples,.[Cs[0],.Cs[2]], |
1a2c0 | 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
1a2e0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 70 73 5b 30 5d 2c 20 70 73 5b 32 5d 0d 0a 20 20 20 20 | .............[ps[0],.ps[2]...... |
1a300 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
1a320 | 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 71 75 61 | ........],.p,.lambdast[i],.'squa |
1a340 | 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 20 20 20 | re_loss',..#.5e-4,.............. |
1a360 | 20 20 20 20 20 20 20 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 | ...............................m |
1a380 | 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 31 33 20 3d | ax_iter=100,.tol=1e-3)....Ct13.= |
1a3a0 | 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 20 69 6e | .[0.for.i.in.range(2)]..for.i.in |
1a3c0 | 20 72 61 6e 67 65 28 32 29 3a 0d 0a 20 20 20 20 43 74 31 33 5b 69 5d 20 3d 20 6f 74 2e 67 72 6f | .range(2):......Ct13[i].=.ot.gro |
1a3e0 | 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 6c 65 73 | mov.gromov_barycenters(n_samples |
1a400 | 2c 20 5b 43 73 5b 31 5d 2c 20 43 73 5b 33 5d 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | ,.[Cs[1],.Cs[3]],............... |
1a420 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 70 | ..............................[p |
1a440 | 73 5b 31 5d 2c 20 70 73 5b 33 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | s[1],.ps[3]..................... |
1a460 | 20 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 2c 20 6c | .........................],.p,.l |
1a480 | 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 20 35 65 | ambdast[i],.'square_loss',..#.5e |
1a4a0 | 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 20 20 20 | -4,............................. |
1a4c0 | 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 20 74 6f | ................max_iter=100,.to |
1a4e0 | 6c 3d 31 65 2d 33 29 0d 0a 0d 0a 43 74 32 33 20 3d 20 5b 30 20 66 6f 72 20 69 20 69 6e 20 72 61 | l=1e-3)....Ct23.=.[0.for.i.in.ra |
1a500 | 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 20 | nge(2)]..for.i.in.range(2):..... |
1a520 | 20 43 74 32 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 61 72 79 | .Ct23[i].=.ot.gromov.gromov_bary |
1a540 | 63 65 6e 74 65 72 73 28 6e 5f 73 61 6d 70 6c 65 73 2c 20 5b 43 73 5b 32 5d 2c 20 43 73 5b 33 5d | centers(n_samples,.[Cs[2],.Cs[3] |
1a560 | 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 20 | ],.............................. |
1a580 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 70 73 5b 32 5d 2c 20 70 73 5b 33 5d 0d 0a 20 20 | ...............[ps[2],.ps[3].... |
1a5a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
1a5c0 | 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 71 | ..........],.p,.lambdast[i],.'sq |
1a5e0 | 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 20 | uare_loss',..#.5e-4,............ |
1a600 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
1a620 | 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 0d 0a 23 23 | .max_iter=100,.tol=1e-3)......## |
1a640 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
1a660 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
1a680 | 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 23 20 56 69 73 75 61 6c 69 7a 61 74 69 6f 6e 0d 0a 23 | ############..#.Visualization..# |
1a6a0 | 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 0d 0a 23 20 54 68 65 20 50 43 41 20 68 65 6c | .-------------..#..#.The.PCA.hel |
1a6c0 | 70 73 20 69 6e 20 67 65 74 74 69 6e 67 20 63 6f 6e 73 69 73 74 65 6e 63 79 20 62 65 74 77 65 65 | ps.in.getting.consistency.betwee |
1a6e0 | 6e 20 74 68 65 20 72 6f 74 61 74 69 6f 6e 73 0d 0a 0d 0a 0d 0a 63 6c 66 20 3d 20 50 43 41 28 6e | n.the.rotations......clf.=.PCA(n |
1a700 | 5f 63 6f 6d 70 6f 6e 65 6e 74 73 3d 32 29 0d 0a 6e 70 6f 73 20 3d 20 5b 30 2c 20 30 2c 20 30 2c | _components=2)..npos.=.[0,.0,.0, |
1a720 | 20 30 5d 0d 0a 6e 70 6f 73 20 3d 20 5b 73 6d 61 63 6f 66 5f 6d 64 73 28 43 73 5b 73 5d 2c 20 32 | .0]..npos.=.[smacof_mds(Cs[s],.2 |
1a740 | 29 20 66 6f 72 20 73 20 69 6e 20 72 61 6e 67 65 28 53 29 5d 0d 0a 0d 0a 6e 70 6f 73 74 30 31 20 | ).for.s.in.range(S)]....npost01. |
1a760 | 3d 20 5b 30 2c 20 30 5d 0d 0a 6e 70 6f 73 74 30 31 20 3d 20 5b 73 6d 61 63 6f 66 5f 6d 64 73 28 | =.[0,.0]..npost01.=.[smacof_mds( |
1a780 | 43 74 30 31 5b 73 5d 2c 20 32 29 20 66 6f 72 20 73 20 69 6e 20 72 61 6e 67 65 28 32 29 5d 0d 0a | Ct01[s],.2).for.s.in.range(2)].. |
1a7a0 | 6e 70 6f 73 74 30 31 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 | npost01.=.[clf.fit_transform(npo |
1a7c0 | 73 74 30 31 5b 73 5d 29 20 66 6f 72 20 73 20 69 6e 20 72 61 6e 67 65 28 32 29 5d 0d 0a 0d 0a 6e | st01[s]).for.s.in.range(2)]....n |
1a7e0 | 70 6f 73 74 30 32 20 3d 20 5b 30 2c 20 30 5d 0d 0a 6e 70 6f 73 74 30 32 20 3d 20 5b 73 6d 61 63 | post02.=.[0,.0]..npost02.=.[smac |
1a800 | 6f 66 5f 6d 64 73 28 43 74 30 32 5b 73 5d 2c 20 32 29 20 66 6f 72 20 73 20 69 6e 20 72 61 6e 67 | of_mds(Ct02[s],.2).for.s.in.rang |
1a820 | 65 28 32 29 5d 0d 0a 6e 70 6f 73 74 30 32 20 3d 20 5b 63 6c 66 2e 66 69 74 5f 74 72 61 6e 73 66 | e(2)]..npost02.=.[clf.fit_transf |
1a840 | 6f 72 6d 28 6e 70 6f 73 74 30 32 5b 73 5d 29 20 66 6f 72 20 73 20 69 6e 20 72 61 6e 67 65 28 32 | orm(npost02[s]).for.s.in.range(2 |
1a860 | 29 5d 0d 0a 0d 0a 6e 70 6f 73 74 31 33 20 3d 20 5b 30 2c 20 30 5d 0d 0a 6e 70 6f 73 74 31 33 20 | )]....npost13.=.[0,.0]..npost13. |
1a880 | 3d 20 5b 73 6d 61 63 6f 66 5f 6d 64 73 28 43 74 31 33 5b 73 5d 2c 20 32 29 20 66 6f 72 20 73 20 | =.[smacof_mds(Ct13[s],.2).for.s. |
1a8a0 | 69 6e 20 72 61 6e 67 65 28 32 29 5d 0d 0a 6e 70 6f 73 74 31 33 20 3d 20 5b 63 6c 66 2e 66 69 74 | in.range(2)]..npost13.=.[clf.fit |
1a8c0 | 5f 74 72 61 6e 73 66 6f 72 6d 28 6e 70 6f 73 74 31 33 5b 73 5d 29 20 66 6f 72 20 73 20 69 6e 20 | _transform(npost13[s]).for.s.in. |
1a8e0 | 72 61 6e 67 65 28 32 29 5d 0d 0a 0d 0a 6e 70 6f 73 74 32 33 20 3d 20 5b 30 2c 20 30 5d 0d 0a 6e | range(2)]....npost23.=.[0,.0]..n |
1a900 | 70 6f 73 74 32 33 20 3d 20 5b 73 6d 61 63 6f 66 5f 6d 64 73 28 43 74 32 33 5b 73 5d 2c 20 32 29 | post23.=.[smacof_mds(Ct23[s],.2) |
1a920 | 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 32 33 20 3d 20 5b | .for.s.in.range(2)]..npost23.=.[ |
1a940 | 63 6c 66 2e 66 69 74 5f 74 72 61 6e 73 66 6f 72 6d 28 6e 70 6f 73 74 32 33 5b 73 5d 29 20 66 6f | clf.fit_transform(npost23[s]).fo |
1a960 | 72 20 73 20 69 6e 20 72 61 6e 67 65 28 32 29 5d 0d 0a 0d 0a 0d 0a 66 69 67 20 3d 20 70 6c 2e 66 | r.s.in.range(2)]......fig.=.pl.f |
1a980 | 69 67 75 72 65 28 66 69 67 73 69 7a 65 3d 28 31 30 2c 20 31 30 29 29 0d 0a 0d 0a 61 78 31 20 3d | igure(figsize=(10,.10))....ax1.= |
1a9a0 | 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 30 29 29 | .pl.subplot2grid((4,.4),.(0,.0)) |
1a9c0 | 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, |
1a9e0 | 20 31 29 29 0d 0a 61 78 31 2e 73 63 61 74 74 65 72 28 6e 70 6f 73 5b 30 5d 5b 3a 2c 20 30 5d 2c | .1))..ax1.scatter(npos[0][:,.0], |
1aa00 | 20 6e 70 6f 73 5b 30 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 72 27 29 0d 0a 0d 0a 61 78 | .npos[0][:,.1],.color='r')....ax |
1aa20 | 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 29 2c 20 28 30 2c 20 | 2.=.pl.subplot2grid((4,.4),.(0,. |
1aa40 | 31 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 69 6d 28 28 | 1))..pl.xlim((-1,.1))..pl.ylim(( |
1aa60 | 2d 31 2c 20 31 29 29 0d 0a 61 78 32 2e 73 63 61 74 74 65 72 28 6e 70 6f 73 74 30 31 5b 31 5d 5b | -1,.1))..ax2.scatter(npost01[1][ |
1aa80 | 3a 2c 20 30 5d 2c 20 6e 70 6f 73 74 30 31 5b 31 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 | :,.0],.npost01[1][:,.1],.color=' |
1aaa0 | 62 27 29 0d 0a 0d 0a 61 78 33 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 32 67 72 69 64 28 28 34 2c | b')....ax3.=.pl.subplot2grid((4, |
1aac0 | 20 34 29 2c 20 28 30 2c 20 32 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a | .4),.(0,.2))..pl.xlim((-1,.1)).. |
1aae0 | 70 6c 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 33 2e 73 63 61 74 74 65 72 28 6e 70 | pl.ylim((-1,.1))..ax3.scatter(np |
1ab00 | 6f 73 74 30 31 5b 30 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 74 30 31 5b 30 5d 5b 3a 2c 20 31 5d | ost01[0][:,.0],.npost01[0][:,.1] |
1ab20 | 2c 20 63 6f 6c 6f 72 3d 27 62 27 29 0d 0a 0d 0a 61 78 34 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 | ,.color='b')....ax4.=.pl.subplot |
1ab40 | 32 67 72 69 64 28 28 34 2c 20 34 29 2c 20 28 30 2c 20 33 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 | 2grid((4,.4),.(0,.3))..pl.xlim(( |
1ab60 | 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 34 2e 73 | -1,.1))..pl.ylim((-1,.1))..ax4.s |
1ab80 | 63 61 74 74 65 72 28 6e 70 6f 73 5b 31 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 5b 31 5d 5b 3a 2c | catter(npos[1][:,.0],.npos[1][:, |
1aba0 | 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 72 27 29 0d 0a 0d 0a 61 78 35 20 3d 20 70 6c 2e 73 75 62 70 | .1],.color='r')....ax5.=.pl.subp |
1abc0 | 6c 6f 74 32 67 72 69 64 28 28 34 2c 20 34 29 2c 20 28 31 2c 20 30 29 29 0d 0a 70 6c 2e 78 6c 69 | lot2grid((4,.4),.(1,.0))..pl.xli |
1abe0 | 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 70 6c 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 | m((-1,.1))..pl.ylim((-1,.1))..ax |
1ac00 | 35 2e 73 63 61 74 74 65 72 28 6e 70 6f 73 74 30 32 5b 31 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 | 5.scatter(npost02[1][:,.0],.npos |
1ac20 | 74 30 32 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 36 20 | t02[1][:,.1],.color='b')....ax6. |
1ac40 | 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 32 67 72 69 64 28 28 34 2c 20 34 29 2c 20 28 31 2c 20 33 29 | =.pl.subplot2grid((4,.4),.(1,.3) |
1ac60 | 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 70 6c 2e 79 6c 69 6d 28 28 2d 31 | )..pl.xlim((-1,.1))..pl.ylim((-1 |
1ac80 | 2c 20 31 29 29 0d 0a 61 78 36 2e 73 63 61 74 74 65 72 28 6e 70 6f 73 74 31 33 5b 31 5d 5b 3a 2c | ,.1))..ax6.scatter(npost13[1][:, |
1aca0 | 20 30 5d 2c 20 6e 70 6f 73 74 31 33 5b 31 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 62 27 | .0],.npost13[1][:,.1],.color='b' |
1acc0 | 29 0d 0a 0d 0a 61 78 37 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 32 67 72 69 64 28 28 34 2c 20 34 | )....ax7.=.pl.subplot2grid((4,.4 |
1ace0 | 29 2c 20 28 32 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 70 6c | ),.(2,.0))..pl.xlim((-1,.1))..pl |
1ad00 | 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 37 2e 73 63 61 74 74 65 72 28 6e 70 6f 73 | .ylim((-1,.1))..ax7.scatter(npos |
1ad20 | 74 30 32 5b 30 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 74 30 32 5b 30 5d 5b 3a 2c 20 31 5d 2c 20 | t02[0][:,.0],.npost02[0][:,.1],. |
1ad40 | 63 6f 6c 6f 72 3d 27 62 27 29 0d 0a 0d 0a 61 78 38 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 32 67 | color='b')....ax8.=.pl.subplot2g |
1ad60 | 72 69 64 28 28 34 2c 20 34 29 2c 20 28 32 2c 20 33 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 2d 31 | rid((4,.4),.(2,.3))..pl.xlim((-1 |
1ad80 | 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 38 2e 73 63 61 | ,.1))..pl.ylim((-1,.1))..ax8.sca |
1ada0 | 74 74 65 72 28 6e 70 6f 73 74 31 33 5b 30 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 74 31 33 5b 30 | tter(npost13[0][:,.0],.npost13[0 |
1adc0 | 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 39 20 3d 20 70 6c 2e | ][:,.1],.color='b')....ax9.=.pl. |
1ade0 | 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 30 29 29 0d 0a 70 6c | subplot2grid((4,.4),.(3,.0))..pl |
1ae00 | 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 29 29 | .xlim((-1,.1))..pl.ylim((-1,.1)) |
1ae20 | 0d 0a 61 78 39 2e 73 63 61 74 74 65 72 28 6e 70 6f 73 5b 32 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f | ..ax9.scatter(npos[2][:,.0],.npo |
1ae40 | 73 5b 32 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 72 27 29 0d 0a 0d 0a 61 78 31 30 20 3d | s[2][:,.1],.color='r')....ax10.= |
1ae60 | 20 70 6c 2e 73 75 62 70 6c 6f 74 32 67 72 69 64 28 28 34 2c 20 34 29 2c 20 28 33 2c 20 31 29 29 | .pl.subplot2grid((4,.4),.(3,.1)) |
1ae80 | 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, |
1aea0 | 20 31 29 29 0d 0a 61 78 31 30 2e 73 63 61 74 74 65 72 28 6e 70 6f 73 74 32 33 5b 31 5d 5b 3a 2c | .1))..ax10.scatter(npost23[1][:, |
1aec0 | 20 30 5d 2c 20 6e 70 6f 73 74 32 33 5b 31 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 62 27 | .0],.npost23[1][:,.1],.color='b' |
1aee0 | 29 0d 0a 0d 0a 61 78 31 31 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 32 67 72 69 64 28 28 34 2c 20 | )....ax11.=.pl.subplot2grid((4,. |
1af00 | 34 29 2c 20 28 33 2c 20 32 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 70 | 4),.(3,.2))..pl.xlim((-1,.1))..p |
1af20 | 6c 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 31 31 2e 73 63 61 74 74 65 72 28 6e 70 | l.ylim((-1,.1))..ax11.scatter(np |
1af40 | 6f 73 74 32 33 5b 30 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 74 32 33 5b 30 5d 5b 3a 2c 20 31 5d | ost23[0][:,.0],.npost23[0][:,.1] |
1af60 | 2c 20 63 6f 6c 6f 72 3d 27 62 27 29 0d 0a 0d 0a 61 78 31 32 20 3d 20 70 6c 2e 73 75 62 70 6c 6f | ,.color='b')....ax12.=.pl.subplo |
1af80 | 74 32 67 72 69 64 28 28 34 2c 20 34 29 2c 20 28 33 2c 20 33 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 | t2grid((4,.4),.(3,.3))..pl.xlim( |
1afa0 | 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 31 32 | (-1,.1))..pl.ylim((-1,.1))..ax12 |
1afc0 | 2e 73 63 61 74 74 65 72 28 6e 70 6f 73 5b 33 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 5b 33 5d 5b | .scatter(npos[3][:,.0],.npos[3][ |
1afe0 | 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 72 27 29 0d 0a 50 4b 01 02 14 03 14 00 00 00 00 00 7c | :,.1],.color='r')..PK..........| |
1b000 | 68 3a 4f a4 4f 47 3f 0c 0c 00 00 0c 0c 00 00 0b 00 00 00 00 00 00 00 00 00 00 00 b4 81 00 00 00 | h:O.OG?......................... |
1b020 | 00 70 6c 6f 74 5f 57 44 41 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 7c 68 3a 4f c6 3b 52 da | .plot_WDA.pyPK..........|h:O.;R. |
1b040 | f3 0a 00 00 f3 0a 00 00 0e 00 00 00 00 00 00 00 00 00 00 00 b4 81 35 0c 00 00 70 6c 6f 74 5f 67 | ......................5...plot_g |
1b060 | 72 6f 6d 6f 76 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 84 68 3a 4f ea 88 04 1c d5 18 00 00 | romov.pyPK...........h:O........ |
1b080 | d5 18 00 00 16 00 00 00 00 00 00 00 00 00 00 00 b4 81 54 17 00 00 70 6c 6f 74 5f 62 61 72 79 63 | ..................T...plot_baryc |
1b0a0 | 65 6e 74 65 72 5f 66 67 77 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 7c 68 3a 4f f2 7c 7e 9e | enter_fgw.pyPK..........|h:O.|~. |
1b0c0 | 5c 0e 00 00 5c 0e 00 00 15 00 00 00 00 00 00 00 00 00 00 00 b4 81 5d 30 00 00 70 6c 6f 74 5f 62 | \...\.................]0..plot_b |
1b0e0 | 61 72 79 63 65 6e 74 65 72 5f 31 44 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 7c 68 3a 4f a7 | arycenter_1D.pyPK..........|h:O. |
1b100 | 6b f0 c3 bf 0b 00 00 bf 0b 00 00 15 00 00 00 00 00 00 00 00 00 00 00 b4 81 ec 3e 00 00 70 6c 6f | k.........................>..plo |
1b120 | 74 5f 4f 54 5f 32 44 5f 73 61 6d 70 6c 65 73 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 84 68 | t_OT_2D_samples.pyPK...........h |
1b140 | 3a 4f 0a ba a4 e6 91 06 00 00 91 06 00 00 0e 00 00 00 00 00 00 00 00 00 00 00 b4 81 de 4a 00 00 | :O...........................J.. |
1b160 | 70 6c 6f 74 5f 55 4f 54 5f 31 44 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 03 78 94 50 e2 7d | plot_UOT_1D.pyPK...........x.P.} |
1b180 | 4e c5 18 0f 00 00 18 0f 00 00 19 00 00 00 00 00 00 00 00 00 00 00 b4 81 9b 51 00 00 70 6c 6f 74 | N........................Q..plot |
1b1a0 | 5f 55 4f 54 5f 62 61 72 79 63 65 6e 74 65 72 5f 31 44 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 | _UOT_barycenter_1D.pyPK......... |
1b1c0 | 00 d2 72 94 50 43 c3 5c 58 99 17 00 00 99 17 00 00 21 00 00 00 00 00 00 00 00 00 00 00 b4 81 ea | ..r.PC.\X........!.............. |
1b1e0 | 60 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 74 72 6f 70 69 | `..plot_barycenter_lp_vs_entropi |
1b200 | 63 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 a5 72 94 50 b2 21 63 15 fc 07 00 00 fc 07 00 00 | c.pyPK...........r.P.!c......... |
1b220 | 1f 00 00 00 00 00 00 00 00 00 00 00 b4 81 c2 78 00 00 70 6c 6f 74 5f 66 72 65 65 5f 73 75 70 70 | ...............x..plot_free_supp |
1b240 | 6f 72 74 5f 62 61 72 79 63 65 6e 74 65 72 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 7c 68 3a | ort_barycenter.pyPK..........|h: |
1b260 | 4f b8 cd f6 1b 7e 0b 00 00 7e 0b 00 00 13 00 00 00 00 00 00 00 00 00 00 00 b4 81 fb 80 00 00 70 | O....~...~.....................p |
1b280 | 6c 6f 74 5f 6f 70 74 69 6d 5f 4f 54 72 65 67 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 83 68 | lot_optim_OTreg.pyPK...........h |
1b2a0 | 3a 4f 0e e0 72 82 97 0b 00 00 97 0b 00 00 1b 00 00 00 00 00 00 00 00 00 00 00 b4 81 aa 8c 00 00 | :O..r........................... |
1b2c0 | 70 6c 6f 74 5f 6f 74 64 61 5f 6c 69 6e 65 61 72 5f 6d 61 70 70 69 6e 67 2e 70 79 50 4b 01 02 14 | plot_otda_linear_mapping.pyPK... |
1b2e0 | 03 14 00 00 00 00 00 22 75 94 50 e7 4f 7f d3 f3 0d 00 00 f3 0d 00 00 19 00 00 00 00 00 00 00 00 | ......."u.P.O................... |
1b300 | 00 00 00 a4 81 7a 98 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 63 6f 6c 6f 72 5f 69 6d 61 67 65 73 2e | .....z...plot_otda_color_images. |
1b320 | 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 83 68 3a 4f d1 a8 d7 2e a9 09 00 00 a9 09 00 00 20 00 | pyPK...........h:O.............. |
1b340 | 00 00 00 00 00 00 00 00 00 00 b4 81 a4 a6 00 00 70 6c 6f 74 5f 63 6f 6e 76 6f 6c 75 74 69 6f 6e | ................plot_convolution |
1b360 | 61 6c 5f 62 61 72 79 63 65 6e 74 65 72 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 83 68 3a 4f | al_barycenter.pyPK...........h:O |
1b380 | ff 09 e8 78 dd 08 00 00 dd 08 00 00 14 00 00 00 00 00 00 00 00 00 00 00 b4 81 8b b0 00 00 70 6c | ...x..........................pl |
1b3a0 | 6f 74 5f 4f 54 5f 31 44 5f 73 6d 6f 6f 74 68 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 c2 72 | ot_OT_1D_smooth.pyPK...........r |
1b3c0 | 94 50 72 6d af 7b ed 10 00 00 ed 10 00 00 14 00 00 00 00 00 00 00 00 00 00 00 b4 81 9a b9 00 00 | .Prm.{.......................... |
1b3e0 | 70 6c 6f 74 5f 6f 74 64 61 5f 63 6c 61 73 73 65 73 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 | plot_otda_classes.pyPK.......... |
1b400 | 49 78 94 50 0c 2b 5b b3 1e 15 00 00 1e 15 00 00 1f 00 00 00 00 00 00 00 00 00 00 00 b4 81 b9 ca | Ix.P.+[......................... |
1b420 | 00 00 70 6c 6f 74 5f 70 61 72 74 69 61 6c 5f 77 61 73 73 5f 61 6e 64 5f 67 72 6f 6d 6f 76 2e 70 | ..plot_partial_wass_and_gromov.p |
1b440 | 79 50 4b 01 02 14 03 14 00 00 00 00 00 7c 68 3a 4f 0b 5c 2a af a2 06 00 00 a2 06 00 00 0d 00 00 | yPK..........|h:O.\*............ |
1b460 | 00 00 00 00 00 00 00 00 00 b4 81 14 e0 00 00 70 6c 6f 74 5f 4f 54 5f 31 44 2e 70 79 50 4b 01 02 | ...............plot_OT_1D.pyPK.. |
1b480 | 14 03 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 00 00 00 00 | .........h:Om.S................. |
1b4a0 | 00 00 00 00 a4 81 e1 e6 00 00 70 6c 6f 74 5f 73 74 6f 63 68 61 73 74 69 63 2e 70 79 50 4b 01 02 | ..........plot_stochastic.pyPK.. |
1b4c0 | 14 03 14 00 00 00 00 00 84 68 3a 4f e5 5f 4e 9c 14 11 00 00 14 11 00 00 0b 00 00 00 00 00 00 00 | .........h:O._N................. |
1b4e0 | 00 00 00 00 b4 81 f3 fe 00 00 70 6c 6f 74 5f 66 67 77 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 | ..........plot_fgw.pyPK......... |
1b500 | 00 7c 68 3a 4f 6f 6c 58 5b 88 13 00 00 88 13 00 00 13 00 00 00 00 00 00 00 00 00 00 00 b4 81 30 | .|h:OolX[......................0 |
1b520 | 10 01 00 70 6c 6f 74 5f 4f 54 5f 4c 31 5f 76 73 5f 4c 32 2e 70 79 50 4b 01 02 14 03 14 00 00 00 | ...plot_OT_L1_vs_L2.pyPK........ |
1b540 | 00 00 a4 72 94 50 e9 d6 9c 70 1d 07 00 00 1d 07 00 00 16 00 00 00 00 00 00 00 00 00 00 00 b4 81 | ...r.P...p...................... |
1b560 | e9 23 01 00 70 6c 6f 74 5f 73 63 72 65 65 6e 6b 68 6f 72 6e 5f 31 44 2e 70 79 50 4b 01 02 14 03 | .#..plot_screenkhorn_1D.pyPK.... |
1b580 | 14 00 00 00 00 00 7c 68 3a 4f 7a 2e b5 2b 65 09 00 00 65 09 00 00 13 00 00 00 00 00 00 00 00 00 | ......|h:Oz..+e...e............. |
1b5a0 | 00 00 b4 81 3a 2b 01 00 70 6c 6f 74 5f 63 6f 6d 70 75 74 65 5f 65 6d 64 2e 70 79 50 4b 01 02 14 | ....:+..plot_compute_emd.pyPK... |
1b5c0 | 03 14 00 00 00 00 00 cf 72 94 50 09 53 8e 8d 14 16 00 00 14 16 00 00 12 00 00 00 00 00 00 00 00 | ........r.P.S................... |
1b5e0 | 00 00 00 b4 81 d0 34 01 00 70 6c 6f 74 5f 6f 74 64 61 5f 6a 63 70 6f 74 2e 70 79 50 4b 01 02 14 | ......4..plot_otda_jcpot.pyPK... |
1b600 | 03 14 00 00 00 00 00 83 68 3a 4f 71 12 0d cb 23 12 00 00 23 12 00 00 1c 00 00 00 00 00 00 00 00 | ........h:Oq...#...#............ |
1b620 | 00 00 00 b4 81 14 4b 01 00 70 6c 6f 74 5f 6f 74 64 61 5f 73 65 6d 69 5f 73 75 70 65 72 76 69 73 | ......K..plot_otda_semi_supervis |
1b640 | 65 64 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 83 68 3a 4f cd ad d9 82 f4 0f 00 00 f4 0f 00 | ed.pyPK...........h:O........... |
1b660 | 00 14 00 00 00 00 00 00 00 00 00 00 00 b4 81 71 5d 01 00 70 6c 6f 74 5f 6f 74 64 61 5f 6d 61 70 | ...............q]..plot_otda_map |
1b680 | 70 69 6e 67 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 83 68 3a 4f 39 06 7c 60 0c 15 00 00 0c | ping.pyPK...........h:O9.|`..... |
1b6a0 | 15 00 00 0f 00 00 00 00 00 00 00 00 00 00 00 b4 81 97 6d 01 00 70 6c 6f 74 5f 6f 74 64 61 5f 64 | ..................m..plot_otda_d |
1b6c0 | 32 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 70 75 94 50 a3 22 30 45 30 10 00 00 30 10 00 00 | 2.pyPK..........pu.P."0E0...0... |
1b6e0 | 22 00 00 00 00 00 00 00 00 00 00 00 a4 81 d0 82 01 00 70 6c 6f 74 5f 6f 74 64 61 5f 6d 61 70 70 | ".................plot_otda_mapp |
1b700 | 69 6e 67 5f 63 6f 6c 6f 72 73 5f 69 6d 61 67 65 73 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 | ing_colors_images.pyPK.......... |
1b720 | 03 78 94 50 20 e7 75 c2 7c 1c 00 00 7c 1c 00 00 19 00 00 00 00 00 00 00 00 00 00 00 b4 81 40 93 | .x.P..u.|...|.................@. |
1b740 | 01 00 70 6c 6f 74 5f 67 72 6f 6d 6f 76 5f 62 61 72 79 63 65 6e 74 65 72 2e 70 79 50 4b 05 06 00 | ..plot_gromov_barycenter.pyPK... |
1b760 | 00 00 00 1c 00 1c 00 68 07 00 00 f3 af 01 00 00 00 | .......h......... |