ofs | hex dump | ascii |
---|
0000 | 50 4b 03 04 14 00 00 00 00 00 da 74 d9 4e 0a ba a4 e6 91 06 00 00 91 06 00 00 0e 00 00 00 70 6c | PK.........t.N................pl |
0020 | 6f 74 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 | ot_UOT_1D.py#.-*-.coding:.utf-8. |
0040 | 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 | -*-.""".======================== |
0060 | 3d 3d 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 | =======.1D.Unbalanced.optimal.tr |
0080 | 61 6e 73 70 6f 72 74 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ansport.======================== |
00a0 | 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 65 | =======..This.example.illustrate |
00c0 | 73 20 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 | s.the.computation.of.Unbalanced. |
00e0 | 4f 70 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 | Optimal.transport.using.a.Kullba |
0100 | 63 6b 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 | ck-Leibler.relaxation.."""..#.Au |
0120 | 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 2e 6a 61 6e 61 | thor:.Hicham.Janati.<hicham.jana |
0140 | 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 49 54 20 4c 69 | ti@inria.fr>.#.#.License:.MIT.Li |
0160 | 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 | cense..import.numpy.as.np.import |
0180 | 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f | .matplotlib.pylab.as.pl.import.o |
01a0 | 74 0a 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 | t.import.ot.plot.from.ot.dataset |
01c0 | 73 20 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 | s.import.make_1D_gauss.as.gauss. |
01e0 | 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 | .############################### |
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 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a | ###############.#.Generate.data. |
0240 | 23 20 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 | #.-------------...#%%.parameters |
0260 | 0a 0a 6e 20 3d 20 31 30 30 20 20 23 20 6e 62 20 62 69 6e 73 0a 0a 23 20 62 69 6e 20 70 6f 73 69 | ..n.=.100..#.nb.bins..#.bin.posi |
0280 | 74 69 6f 6e 73 0a 78 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 2c 20 64 74 79 70 65 3d 6e 70 2e | tions.x.=.np.arange(n,.dtype=np. |
02a0 | 66 6c 6f 61 74 36 34 29 0a 0a 23 20 47 61 75 73 73 69 61 6e 20 64 69 73 74 72 69 62 75 74 69 6f | float64)..#.Gaussian.distributio |
02c0 | 6e 73 0a 61 20 3d 20 67 61 75 73 73 28 6e 2c 20 6d 3d 32 30 2c 20 73 3d 35 29 20 20 23 20 6d 3d | ns.a.=.gauss(n,.m=20,.s=5)..#.m= |
02e0 | 20 6d 65 61 6e 2c 20 73 3d 20 73 74 64 0a 62 20 3d 20 67 61 75 73 73 28 6e 2c 20 6d 3d 36 30 2c | .mean,.s=.std.b.=.gauss(n,.m=60, |
0300 | 20 73 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 | .s=10)..#.make.distributions.unb |
0320 | 61 6c 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 | alanced.b.*=.5...#.loss.matrix.M |
0340 | 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. |
0360 | 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()... |
0380 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
03a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
03c0 | 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 |
03e0 | 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.#.---------- |
0400 | 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 |
0420 | 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( |
0440 | 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,. |
0460 | 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 |
0480 | 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 |
04a0 | 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() |
04c0 | 0a 0a 23 20 70 6c 6f 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 61 6e 64 20 6c 6f 73 73 20 | ..#.plot.distributions.and.loss. |
04e0 | 6d 61 74 72 69 78 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c | matrix..pl.figure(2,.figsize=(5, |
0500 | 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 4d 2c | .5)).ot.plot.plot1D_mat(a,.b,.M, |
0520 | 20 27 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 | .'Cost.matrix.M')...############ |
0540 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
0560 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
0580 | 23 23 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 | ##.#.Solve.Unbalanced.Sinkhorn.# |
05a0 | 20 2d 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 | .--------------...#.Sinkhorn..ep |
05c0 | 73 69 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 | silon.=.0.1..#.entropy.parameter |
05e0 | 0a 61 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 | .alpha.=.1...#.Unbalanced.KL.rel |
0600 | 61 78 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 | axation.parameter.Gs.=.ot.unbala |
0620 | 6e 63 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 | nced.sinkhorn_unbalanced(a,.b,.M |
0640 | 2c 20 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 | ,.epsilon,.alpha,.verbose=True). |
0660 | 0a 70 6c 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 29 0a 6f 74 | .pl.figure(4,.figsize=(5,.5)).ot |
0680 | 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 47 73 2c 20 27 55 4f 54 20 | .plot.plot1D_mat(a,.b,.Gs,.'UOT. |
06a0 | 6d 61 74 72 69 78 20 53 69 6e 6b 68 6f 72 6e 27 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 | matrix.Sinkhorn')..pl.show().PK. |
06c0 | 04 14 00 00 00 00 00 da 74 d9 4e c6 3b 52 da f3 0a 00 00 f3 0a 00 00 0e 00 00 00 70 6c 6f 74 5f | ........t.N.;R.............plot_ |
06e0 | 67 72 6f 6d 6f 76 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d | gromov.py#.-*-.coding:.utf-8.-*- |
0700 | 0d 0a 22 22 22 0d 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | .."""..========================= |
0720 | 3d 0d 0a 47 72 6f 6d 6f 76 2d 57 61 73 73 65 72 73 74 65 69 6e 20 65 78 61 6d 70 6c 65 0d 0a 3d | =..Gromov-Wasserstein.example..= |
0740 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 0d 0a 54 68 69 | =========================....Thi |
0760 | 73 20 65 78 61 6d 70 6c 65 20 69 73 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73 68 6f 77 20 68 6f | s.example.is.designed.to.show.ho |
0780 | 77 20 74 6f 20 75 73 65 20 74 68 65 20 47 72 6f 6d 6f 76 2d 57 61 73 73 65 72 74 73 65 69 6e 20 | w.to.use.the.Gromov-Wassertsein. |
07a0 | 64 69 73 74 61 6e 63 65 0d 0a 63 6f 6d 70 75 74 61 74 69 6f 6e 20 69 6e 20 50 4f 54 2e 0d 0a 22 | distance..computation.in.POT..." |
07c0 | 22 22 0d 0a 0d 0a 23 20 41 75 74 68 6f 72 3a 20 45 72 77 61 6e 20 56 61 75 74 69 65 72 20 3c 65 | ""....#.Author:.Erwan.Vautier.<e |
07e0 | 72 77 61 6e 2e 76 61 75 74 69 65 72 40 67 6d 61 69 6c 2e 63 6f 6d 3e 0d 0a 23 20 20 20 20 20 20 | rwan.vautier@gmail.com>..#...... |
0800 | 20 20 20 4e 69 63 6f 6c 61 73 20 43 6f 75 72 74 79 20 3c 6e 63 6f 75 72 74 79 40 69 72 69 73 61 | ...Nicolas.Courty.<ncourty@irisa |
0820 | 2e 66 72 3e 0d 0a 23 0d 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0d | .fr>..#..#.License:.MIT.License. |
0840 | 0a 0d 0a 69 6d 70 6f 72 74 20 73 63 69 70 79 20 61 73 20 73 70 0d 0a 69 6d 70 6f 72 74 20 6e 75 | ...import.scipy.as.sp..import.nu |
0860 | 6d 70 79 20 61 73 20 6e 70 0d 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c | mpy.as.np..import.matplotlib.pyl |
0880 | 61 62 20 61 73 20 70 6c 0d 0a 66 72 6f 6d 20 6d 70 6c 5f 74 6f 6f 6c 6b 69 74 73 2e 6d 70 6c 6f | ab.as.pl..from.mpl_toolkits.mplo |
08a0 | 74 33 64 20 69 6d 70 6f 72 74 20 41 78 65 73 33 44 20 20 23 20 6e 6f 71 61 0d 0a 69 6d 70 6f 72 | t3d.import.Axes3D..#.noqa..impor |
08c0 | 74 20 6f 74 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | t.ot....######################## |
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 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 23 0d 0a 23 20 53 61 6d 70 | #####################..#..#.Samp |
0920 | 6c 65 20 74 77 6f 20 47 61 75 73 73 69 61 6e 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 28 32 | le.two.Gaussian.distributions.(2 |
0940 | 44 20 61 6e 64 20 33 44 29 0d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | D.and.3D)..#.------------------- |
0960 | 2d 2d 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 | --------------------------..#..# |
0980 | 20 54 68 65 20 47 72 6f 6d 6f 76 2d 57 61 73 73 65 72 73 74 65 69 6e 20 64 69 73 74 61 6e 63 65 | .The.Gromov-Wasserstein.distance |
09a0 | 20 61 6c 6c 6f 77 73 20 74 6f 20 63 6f 6d 70 75 74 65 20 64 69 73 74 61 6e 63 65 73 20 77 69 74 | .allows.to.compute.distances.wit |
09c0 | 68 20 73 61 6d 70 6c 65 73 20 74 68 61 74 0d 0a 23 20 64 6f 20 6e 6f 74 20 62 65 6c 6f 6e 67 20 | h.samples.that..#.do.not.belong. |
09e0 | 74 6f 20 74 68 65 20 73 61 6d 65 20 6d 65 74 72 69 63 20 73 70 61 63 65 2e 20 46 6f 72 20 64 65 | to.the.same.metric.space..For.de |
0a00 | 6d 6f 6e 73 74 72 61 74 69 6f 6e 20 70 75 72 70 6f 73 65 2c 20 77 65 20 73 61 6d 70 6c 65 0d 0a | monstration.purpose,.we.sample.. |
0a20 | 23 20 74 77 6f 20 47 61 75 73 73 69 61 6e 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 69 6e 20 | #.two.Gaussian.distributions.in. |
0a40 | 32 2d 20 61 6e 64 20 33 2d 64 69 6d 65 6e 73 69 6f 6e 61 6c 20 73 70 61 63 65 73 2e 0d 0a 0d 0a | 2-.and.3-dimensional.spaces..... |
0a60 | 0d 0a 6e 5f 73 61 6d 70 6c 65 73 20 3d 20 33 30 20 20 23 20 6e 62 20 73 61 6d 70 6c 65 73 0d 0a | ..n_samples.=.30..#.nb.samples.. |
0a80 | 0d 0a 6d 75 5f 73 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 30 2c 20 30 5d 29 0d 0a 63 6f 76 5f 73 | ..mu_s.=.np.array([0,.0])..cov_s |
0aa0 | 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 5b 31 2c 20 30 5d 2c 20 5b 30 2c 20 31 5d 5d 29 0d 0a 0d | .=.np.array([[1,.0],.[0,.1]])... |
0ac0 | 0a 6d 75 5f 74 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 34 2c 20 34 2c 20 34 5d 29 0d 0a 63 6f 76 | .mu_t.=.np.array([4,.4,.4])..cov |
0ae0 | 5f 74 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 5b 31 2c 20 30 2c 20 30 5d 2c 20 5b 30 2c 20 31 2c | _t.=.np.array([[1,.0,.0],.[0,.1, |
0b00 | 20 30 5d 2c 20 5b 30 2c 20 30 2c 20 31 5d 5d 29 0d 0a 0d 0a 0d 0a 78 73 20 3d 20 6f 74 2e 64 61 | .0],.[0,.0,.1]])......xs.=.ot.da |
0b20 | 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 73 | tasets.make_2D_samples_gauss(n_s |
0b40 | 61 6d 70 6c 65 73 2c 20 6d 75 5f 73 2c 20 63 6f 76 5f 73 29 0d 0a 50 20 3d 20 73 70 2e 6c 69 6e | amples,.mu_s,.cov_s)..P.=.sp.lin |
0b60 | 61 6c 67 2e 73 71 72 74 6d 28 63 6f 76 5f 74 29 0d 0a 78 74 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d | alg.sqrtm(cov_t)..xt.=.np.random |
0b80 | 2e 72 61 6e 64 6e 28 6e 5f 73 61 6d 70 6c 65 73 2c 20 33 29 2e 64 6f 74 28 50 29 20 2b 20 6d 75 | .randn(n_samples,.3).dot(P).+.mu |
0ba0 | 5f 74 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | _t....########################## |
0bc0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
0be0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 23 0d 0a 23 20 50 6c 6f 74 74 69 | ###################..#..#.Plotti |
0c00 | 6e 67 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d | ng.the.distributions..#.-------- |
0c20 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 0d 0a 66 69 67 20 3d 20 70 6c | ------------------......fig.=.pl |
0c40 | 2e 66 69 67 75 72 65 28 29 0d 0a 61 78 31 20 3d 20 66 69 67 2e 61 64 64 5f 73 75 62 70 6c 6f 74 | .figure()..ax1.=.fig.add_subplot |
0c60 | 28 31 32 31 29 0d 0a 61 78 31 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 | (121)..ax1.plot(xs[:,.0],.xs[:,. |
0c80 | 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' |
0ca0 | 29 0d 0a 61 78 32 20 3d 20 66 69 67 2e 61 64 64 5f 73 75 62 70 6c 6f 74 28 31 32 32 2c 20 70 72 | )..ax2.=.fig.add_subplot(122,.pr |
0cc0 | 6f 6a 65 63 74 69 6f 6e 3d 27 33 64 27 29 0d 0a 61 78 32 2e 73 63 61 74 74 65 72 28 78 74 5b 3a | ojection='3d')..ax2.scatter(xt[: |
0ce0 | 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 78 74 5b 3a 2c 20 32 5d 2c 20 63 6f 6c 6f 72 3d | ,.0],.xt[:,.1],.xt[:,.2],.color= |
0d00 | 27 72 27 29 0d 0a 70 6c 2e 73 68 6f 77 28 29 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 | 'r')..pl.show()....############# |
0d20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
0d40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
0d60 | 0d 0a 23 0d 0a 23 20 43 6f 6d 70 75 74 65 20 64 69 73 74 61 6e 63 65 20 6b 65 72 6e 65 6c 73 2c | ..#..#.Compute.distance.kernels, |
0d80 | 20 6e 6f 72 6d 61 6c 69 7a 65 20 74 68 65 6d 20 61 6e 64 20 74 68 65 6e 20 64 69 73 70 6c 61 79 | .normalize.them.and.then.display |
0da0 | 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 2d | ..#.---------------------------- |
0dc0 | 2d 2d 2d 2d 2d 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 | -----------------------------... |
0de0 | 0a 0d 0a 43 31 20 3d 20 73 70 2e 73 70 61 74 69 61 6c 2e 64 69 73 74 61 6e 63 65 2e 63 64 69 73 | ...C1.=.sp.spatial.distance.cdis |
0e00 | 74 28 78 73 2c 20 78 73 29 0d 0a 43 32 20 3d 20 73 70 2e 73 70 61 74 69 61 6c 2e 64 69 73 74 61 | t(xs,.xs)..C2.=.sp.spatial.dista |
0e20 | 6e 63 65 2e 63 64 69 73 74 28 78 74 2c 20 78 74 29 0d 0a 0d 0a 43 31 20 2f 3d 20 43 31 2e 6d 61 | nce.cdist(xt,.xt)....C1./=.C1.ma |
0e40 | 78 28 29 0d 0a 43 32 20 2f 3d 20 43 32 2e 6d 61 78 28 29 0d 0a 0d 0a 70 6c 2e 66 69 67 75 72 65 | x()..C2./=.C2.max()....pl.figure |
0e60 | 28 29 0d 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 32 31 29 0d 0a 70 6c 2e 69 6d 73 68 6f 77 28 43 | ()..pl.subplot(121)..pl.imshow(C |
0e80 | 31 29 0d 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 32 32 29 0d 0a 70 6c 2e 69 6d 73 68 6f 77 28 43 | 1)..pl.subplot(122)..pl.imshow(C |
0ea0 | 32 29 0d 0a 70 6c 2e 73 68 6f 77 28 29 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | 2)..pl.show()....############### |
0ec0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
0ee0 | 23 23 23 23 23 23 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 | ##############################.. |
0f00 | 23 0d 0a 23 20 43 6f 6d 70 75 74 65 20 47 72 6f 6d 6f 76 2d 57 61 73 73 65 72 73 74 65 69 6e 20 | #..#.Compute.Gromov-Wasserstein. |
0f20 | 70 6c 61 6e 73 20 61 6e 64 20 64 69 73 74 61 6e 63 65 0d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | plans.and.distance..#.---------- |
0f40 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
0f60 | 2d 2d 2d 0d 0a 0d 0a 70 20 3d 20 6f 74 2e 75 6e 69 66 28 6e 5f 73 61 6d 70 6c 65 73 29 0d 0a 71 | ---....p.=.ot.unif(n_samples)..q |
0f80 | 20 3d 20 6f 74 2e 75 6e 69 66 28 6e 5f 73 61 6d 70 6c 65 73 29 0d 0a 0d 0a 67 77 30 2c 20 6c 6f | .=.ot.unif(n_samples)....gw0,.lo |
0fa0 | 67 30 20 3d 20 6f 74 2e 67 72 6f 6d 6f 76 2e 67 72 6f 6d 6f 76 5f 77 61 73 73 65 72 73 74 65 69 | g0.=.ot.gromov.gromov_wasserstei |
0fc0 | 6e 28 0d 0a 20 20 20 20 43 31 2c 20 43 32 2c 20 70 2c 20 71 2c 20 27 73 71 75 61 72 65 5f 6c 6f | n(......C1,.C2,.p,.q,.'square_lo |
0fe0 | 73 73 27 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 2c 20 6c 6f 67 3d 54 72 75 65 29 0d 0a 0d 0a | ss',.verbose=True,.log=True).... |
1000 | 67 77 2c 20 6c 6f 67 20 3d 20 6f 74 2e 67 72 6f 6d 6f 76 2e 65 6e 74 72 6f 70 69 63 5f 67 72 6f | gw,.log.=.ot.gromov.entropic_gro |
1020 | 6d 6f 76 5f 77 61 73 73 65 72 73 74 65 69 6e 28 0d 0a 20 20 20 20 43 31 2c 20 43 32 2c 20 70 2c | mov_wasserstein(......C1,.C2,.p, |
1040 | 20 71 2c 20 27 73 71 75 61 72 65 5f 6c 6f 73 73 27 2c 20 65 70 73 69 6c 6f 6e 3d 35 65 2d 34 2c | .q,.'square_loss',.epsilon=5e-4, |
1060 | 20 6c 6f 67 3d 54 72 75 65 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0d 0a 0d 0a 0d 0a 70 72 | .log=True,.verbose=True)......pr |
1080 | 69 6e 74 28 27 47 72 6f 6d 6f 76 2d 57 61 73 73 65 72 73 74 65 69 6e 20 64 69 73 74 61 6e 63 65 | int('Gromov-Wasserstein.distance |
10a0 | 73 3a 20 27 20 2b 20 73 74 72 28 6c 6f 67 30 5b 27 67 77 5f 64 69 73 74 27 5d 29 29 0d 0a 70 72 | s:.'.+.str(log0['gw_dist']))..pr |
10c0 | 69 6e 74 28 27 45 6e 74 72 6f 70 69 63 20 47 72 6f 6d 6f 76 2d 57 61 73 73 65 72 73 74 65 69 6e | int('Entropic.Gromov-Wasserstein |
10e0 | 20 64 69 73 74 61 6e 63 65 73 3a 20 27 20 2b 20 73 74 72 28 6c 6f 67 5b 27 67 77 5f 64 69 73 74 | .distances:.'.+.str(log['gw_dist |
1100 | 27 5d 29 29 0d 0a 0d 0a 0d 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 28 31 30 2c 20 35 29 29 0d | ']))......pl.figure(1,.(10,.5)). |
1120 | 0a 0d 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0d 0a 70 6c 2e 69 6d 73 68 6f | ...pl.subplot(1,.2,.1)..pl.imsho |
1140 | 77 28 67 77 30 2c 20 63 6d 61 70 3d 27 6a 65 74 27 29 0d 0a 70 6c 2e 74 69 74 6c 65 28 27 47 72 | w(gw0,.cmap='jet')..pl.title('Gr |
1160 | 6f 6d 6f 76 20 57 61 73 73 65 72 73 74 65 69 6e 27 29 0d 0a 0d 0a 70 6c 2e 73 75 62 70 6c 6f 74 | omov.Wasserstein')....pl.subplot |
1180 | 28 31 2c 20 32 2c 20 32 29 0d 0a 70 6c 2e 69 6d 73 68 6f 77 28 67 77 2c 20 63 6d 61 70 3d 27 6a | (1,.2,.2)..pl.imshow(gw,.cmap='j |
11a0 | 65 74 27 29 0d 0a 70 6c 2e 74 69 74 6c 65 28 27 45 6e 74 72 6f 70 69 63 20 47 72 6f 6d 6f 76 20 | et')..pl.title('Entropic.Gromov. |
11c0 | 57 61 73 73 65 72 73 74 65 69 6e 27 29 0d 0a 0d 0a 70 6c 2e 73 68 6f 77 28 29 0d 0a 50 4b 03 04 | Wasserstein')....pl.show()..PK.. |
11e0 | 14 00 00 00 00 00 da 74 d9 4e a4 4f 47 3f 0c 0c 00 00 0c 0c 00 00 0b 00 00 00 70 6c 6f 74 5f 57 | .......t.N.OG?............plot_W |
1200 | 44 41 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 | DA.py#.-*-.coding:.utf-8.-*-.""" |
1220 | 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | .=============================== |
1240 | 3d 3d 0a 57 61 73 73 65 72 73 74 65 69 6e 20 44 69 73 63 72 69 6d 69 6e 61 6e 74 20 41 6e 61 6c | ==.Wasserstein.Discriminant.Anal |
1260 | 79 73 69 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ysis.=========================== |
1280 | 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 65 20 | ======..This.example.illustrate. |
12a0 | 74 68 65 20 75 73 65 20 6f 66 20 57 44 41 20 61 73 20 70 72 6f 70 6f 73 65 64 20 69 6e 20 5b 31 | the.use.of.WDA.as.proposed.in.[1 |
12c0 | 31 5d 2e 0a 0a 0a 5b 31 31 5d 20 46 6c 61 6d 61 72 79 2c 20 52 2e 2c 20 43 75 74 75 72 69 2c 20 | 1]....[11].Flamary,.R.,.Cuturi,. |
12e0 | 4d 2e 2c 20 43 6f 75 72 74 79 2c 20 4e 2e 2c 20 26 20 52 61 6b 6f 74 6f 6d 61 6d 6f 6e 6a 79 2c | M.,.Courty,.N.,.&.Rakotomamonjy, |
1300 | 20 41 2e 20 28 32 30 31 36 29 2e 0a 57 61 73 73 65 72 73 74 65 69 6e 20 44 69 73 63 72 69 6d 69 | .A..(2016)..Wasserstein.Discrimi |
1320 | 6e 61 6e 74 20 41 6e 61 6c 79 73 69 73 2e 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a 20 52 | nant.Analysis..."""..#.Author:.R |
1340 | 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e | emi.Flamary.<remi.flamary@unice. |
1360 | 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d | fr>.#.#.License:.MIT.License..im |
1380 | 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 |
13a0 | 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 0a 66 72 6f 6d 20 6f 74 2e 64 72 20 69 6d 70 6f 72 | ib.pylab.as.pl..from.ot.dr.impor |
13c0 | 74 20 77 64 61 2c 20 66 64 61 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | t.wda,.fda...################### |
13e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
1400 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 47 65 | ###########################.#.Ge |
1420 | 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.#.-------------..#%% |
1440 | 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 6e 20 3d 20 31 30 30 30 20 20 23 20 6e 62 20 73 61 6d 70 | .parameters..n.=.1000..#.nb.samp |
1460 | 6c 65 73 20 69 6e 20 73 6f 75 72 63 65 20 61 6e 64 20 74 61 72 67 65 74 20 64 61 74 61 73 65 74 | les.in.source.and.target.dataset |
1480 | 73 0a 6e 7a 20 3d 20 30 2e 32 0a 0a 23 20 67 65 6e 65 72 61 74 65 20 63 69 72 63 6c 65 20 64 61 | s.nz.=.0.2..#.generate.circle.da |
14a0 | 74 61 73 65 74 0a 74 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 28 6e 29 20 2a 20 32 20 | taset.t.=.np.random.rand(n).*.2. |
14c0 | 2a 20 6e 70 2e 70 69 0a 79 73 20 3d 20 6e 70 2e 66 6c 6f 6f 72 28 28 6e 70 2e 61 72 61 6e 67 65 | *.np.pi.ys.=.np.floor((np.arange |
14e0 | 28 6e 29 20 2a 20 31 2e 30 20 2f 20 6e 20 2a 20 33 29 29 20 2b 20 31 0a 78 73 20 3d 20 6e 70 2e | (n).*.1.0./.n.*.3)).+.1.xs.=.np. |
1500 | 63 6f 6e 63 61 74 65 6e 61 74 65 28 0a 20 20 20 20 28 6e 70 2e 63 6f 73 28 74 29 2e 72 65 73 68 | concatenate(.....(np.cos(t).resh |
1520 | 61 70 65 28 28 2d 31 2c 20 31 29 29 2c 20 6e 70 2e 73 69 6e 28 74 29 2e 72 65 73 68 61 70 65 28 | ape((-1,.1)),.np.sin(t).reshape( |
1540 | 28 2d 31 2c 20 31 29 29 29 2c 20 31 29 0a 78 73 20 3d 20 78 73 20 2a 20 79 73 2e 72 65 73 68 61 | (-1,.1))),.1).xs.=.xs.*.ys.resha |
1560 | 70 65 28 2d 31 2c 20 31 29 20 2b 20 6e 7a 20 2a 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 6e | pe(-1,.1).+.nz.*.np.random.randn |
1580 | 28 6e 2c 20 32 29 0a 0a 74 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 28 6e 29 20 2a 20 | (n,.2)..t.=.np.random.rand(n).*. |
15a0 | 32 20 2a 20 6e 70 2e 70 69 0a 79 74 20 3d 20 6e 70 2e 66 6c 6f 6f 72 28 28 6e 70 2e 61 72 61 6e | 2.*.np.pi.yt.=.np.floor((np.aran |
15c0 | 67 65 28 6e 29 20 2a 20 31 2e 30 20 2f 20 6e 20 2a 20 33 29 29 20 2b 20 31 0a 78 74 20 3d 20 6e | ge(n).*.1.0./.n.*.3)).+.1.xt.=.n |
15e0 | 70 2e 63 6f 6e 63 61 74 65 6e 61 74 65 28 0a 20 20 20 20 28 6e 70 2e 63 6f 73 28 74 29 2e 72 65 | p.concatenate(.....(np.cos(t).re |
1600 | 73 68 61 70 65 28 28 2d 31 2c 20 31 29 29 2c 20 6e 70 2e 73 69 6e 28 74 29 2e 72 65 73 68 61 70 | shape((-1,.1)),.np.sin(t).reshap |
1620 | 65 28 28 2d 31 2c 20 31 29 29 29 2c 20 31 29 0a 78 74 20 3d 20 78 74 20 2a 20 79 74 2e 72 65 73 | e((-1,.1))),.1).xt.=.xt.*.yt.res |
1640 | 68 61 70 65 28 2d 31 2c 20 31 29 20 2b 20 6e 7a 20 2a 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e | hape(-1,.1).+.nz.*.np.random.ran |
1660 | 64 6e 28 6e 2c 20 32 29 0a 0a 6e 62 6e 6f 69 73 65 20 3d 20 38 0a 0a 78 73 20 3d 20 6e 70 2e 68 | dn(n,.2)..nbnoise.=.8..xs.=.np.h |
1680 | 73 74 61 63 6b 28 28 78 73 2c 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 6e 28 6e 2c 20 6e 62 | stack((xs,.np.random.randn(n,.nb |
16a0 | 6e 6f 69 73 65 29 29 29 0a 78 74 20 3d 20 6e 70 2e 68 73 74 61 63 6b 28 28 78 74 2c 20 6e 70 2e | noise))).xt.=.np.hstack((xt,.np. |
16c0 | 72 61 6e 64 6f 6d 2e 72 61 6e 64 6e 28 6e 2c 20 6e 62 6e 6f 69 73 65 29 29 29 0a 0a 23 23 23 23 | random.randn(n,.nbnoise)))..#### |
16e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
1700 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
1720 | 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d | ##########.#.Plot.data.#.------- |
1740 | 2d 2d 0a 0a 23 25 25 20 70 6c 6f 74 20 73 61 6d 70 6c 65 73 0a 70 6c 2e 66 69 67 75 72 65 28 31 | --..#%%.plot.samples.pl.figure(1 |
1760 | 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 2e 35 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f | ,.figsize=(6.4,.3.5))..pl.subplo |
1780 | 74 28 31 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 74 5b 3a 2c 20 30 5d 2c 20 | t(1,.2,.1).pl.scatter(xt[:,.0],. |
17a0 | 78 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 | xt[:,.1],.c=ys,.marker='+',.labe |
17c0 | 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f | l='Source.samples').pl.legend(lo |
17e0 | 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 44 69 73 63 72 69 6d 69 6e 61 6e 74 20 64 69 6d 65 | c=0).pl.title('Discriminant.dime |
1800 | 6e 73 69 6f 6e 73 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 32 29 0a 70 6c | nsions')..pl.subplot(1,.2,.2).pl |
1820 | 2e 73 63 61 74 74 65 72 28 78 74 5b 3a 2c 20 32 5d 2c 20 78 74 5b 3a 2c 20 33 5d 2c 20 63 3d 79 | .scatter(xt[:,.2],.xt[:,.3],.c=y |
1840 | 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d | s,.marker='+',.label='Source.sam |
1860 | 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 | ples').pl.legend(loc=0).pl.title |
1880 | 28 27 4f 74 68 65 72 20 64 69 6d 65 6e 73 69 6f 6e 73 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 | ('Other.dimensions').pl.tight_la |
18a0 | 79 6f 75 74 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | yout()..######################## |
18c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
18e0 | 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 65 | ######################.#.Compute |
1900 | 20 46 69 73 68 65 72 20 44 69 73 63 72 69 6d 69 6e 61 6e 74 20 41 6e 61 6c 79 73 69 73 0a 23 20 | .Fisher.Discriminant.Analysis.#. |
1920 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
1940 | 2d 2d 2d 2d 0a 0a 23 25 25 20 43 6f 6d 70 75 74 65 20 46 44 41 0a 70 20 3d 20 32 0a 0a 50 66 64 | ----..#%%.Compute.FDA.p.=.2..Pfd |
1960 | 61 2c 20 70 72 6f 6a 66 64 61 20 3d 20 66 64 61 28 78 73 2c 20 79 73 2c 20 70 29 0a 0a 23 23 23 | a,.projfda.=.fda(xs,.ys,.p)..### |
1980 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
19a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
19c0 | 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 43 6f 6d 70 75 74 65 20 57 61 73 73 65 72 73 74 65 69 | ###########.#.Compute.Wasserstei |
19e0 | 6e 20 44 69 73 63 72 69 6d 69 6e 61 6e 74 20 41 6e 61 6c 79 73 69 73 0a 23 20 2d 2d 2d 2d 2d 2d | n.Discriminant.Analysis.#.------ |
1a00 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
1a20 | 2d 2d 2d 0a 0a 23 25 25 20 43 6f 6d 70 75 74 65 20 57 44 41 0a 70 20 3d 20 32 0a 72 65 67 20 3d | ---..#%%.Compute.WDA.p.=.2.reg.= |
1a40 | 20 31 65 30 0a 6b 20 3d 20 31 30 0a 6d 61 78 69 74 65 72 20 3d 20 31 30 30 0a 0a 50 77 64 61 2c | .1e0.k.=.10.maxiter.=.100..Pwda, |
1a60 | 20 70 72 6f 6a 77 64 61 20 3d 20 77 64 61 28 78 73 2c 20 79 73 2c 20 70 2c 20 72 65 67 2c 20 6b | .projwda.=.wda(xs,.ys,.p,.reg,.k |
1a80 | 2c 20 6d 61 78 69 74 65 72 3d 6d 61 78 69 74 65 72 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 | ,.maxiter=maxiter)...########### |
1aa0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
1ac0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
1ae0 | 23 23 23 0a 23 20 50 6c 6f 74 20 32 44 20 70 72 6f 6a 65 63 74 69 6f 6e 73 0a 23 20 2d 2d 2d 2d | ###.#.Plot.2D.projections.#.---- |
1b00 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 6c 6f 74 20 73 61 6d 70 6c 65 | ---------------..#%%.plot.sample |
1b20 | 73 0a 0a 78 73 70 20 3d 20 70 72 6f 6a 66 64 61 28 78 73 29 0a 78 74 70 20 3d 20 70 72 6f 6a 66 | s..xsp.=.projfda(xs).xtp.=.projf |
1b40 | 64 61 28 78 74 29 0a 0a 78 73 70 77 20 3d 20 70 72 6f 6a 77 64 61 28 78 73 29 0a 78 74 70 77 20 | da(xt)..xspw.=.projwda(xs).xtpw. |
1b60 | 3d 20 70 72 6f 6a 77 64 61 28 78 74 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 29 0a 0a 70 6c 2e | =.projwda(xt)..pl.figure(2)..pl. |
1b80 | 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 73 70 5b | subplot(2,.2,.1).pl.scatter(xsp[ |
1ba0 | 3a 2c 20 30 5d 2c 20 78 73 70 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 | :,.0],.xsp[:,.1],.c=ys,.marker=' |
1bc0 | 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 |
1be0 | 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 |
1c00 | 74 65 64 20 74 72 61 69 6e 69 6e 67 20 73 61 6d 70 6c 65 73 20 46 44 41 27 29 0a 0a 70 6c 2e 73 | ted.training.samples.FDA')..pl.s |
1c20 | 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 74 70 5b 3a | ubplot(2,.2,.2).pl.scatter(xtp[: |
1c40 | 2c 20 30 5d 2c 20 78 74 70 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b | ,.0],.xtp[:,.1],.c=ys,.marker='+ |
1c60 | 27 2c 20 6c 61 62 65 6c 3d 27 50 72 6f 6a 65 63 74 65 64 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c | ',.label='Projected.samples').pl |
1c80 | 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 50 72 6f 6a 65 63 74 | .legend(loc=0).pl.title('Project |
1ca0 | 65 64 20 74 65 73 74 20 73 61 6d 70 6c 65 73 20 46 44 41 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f | ed.test.samples.FDA')..pl.subplo |
1cc0 | 74 28 32 2c 20 32 2c 20 33 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 73 70 77 5b 3a 2c 20 30 5d | t(2,.2,.3).pl.scatter(xspw[:,.0] |
1ce0 | 2c 20 78 73 70 77 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 | ,.xspw[:,.1],.c=ys,.marker='+',. |
1d00 | 6c 61 62 65 6c 3d 27 50 72 6f 6a 65 63 74 65 64 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 | label='Projected.samples').pl.le |
1d20 | 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 50 72 6f 6a 65 63 74 65 64 20 | gend(loc=0).pl.title('Projected. |
1d40 | 74 72 61 69 6e 69 6e 67 20 73 61 6d 70 6c 65 73 20 57 44 41 27 29 0a 0a 70 6c 2e 73 75 62 70 6c | training.samples.WDA')..pl.subpl |
1d60 | 6f 74 28 32 2c 20 32 2c 20 34 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 74 70 77 5b 3a 2c 20 30 | ot(2,.2,.4).pl.scatter(xtpw[:,.0 |
1d80 | 5d 2c 20 78 74 70 77 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c | ],.xtpw[:,.1],.c=ys,.marker='+', |
1da0 | 20 6c 61 62 65 6c 3d 27 50 72 6f 6a 65 63 74 65 64 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c | .label='Projected.samples').pl.l |
1dc0 | 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 50 72 6f 6a 65 63 74 65 64 | egend(loc=0).pl.title('Projected |
1de0 | 20 74 65 73 74 20 73 61 6d 70 6c 65 73 20 57 44 41 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 | .test.samples.WDA').pl.tight_lay |
1e00 | 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 dc 74 d9 4e e5 | out()..pl.show().PK.........t.N. |
1e20 | d4 47 7d 9d 1c 00 00 9d 1c 00 00 19 00 00 00 70 6c 6f 74 5f 67 72 6f 6d 6f 76 5f 62 61 72 79 63 | .G}............plot_gromov_baryc |
1e40 | 65 6e 74 65 72 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0d | enter.py#.-*-.coding:.utf-8.-*-. |
1e60 | 0a 22 22 22 0d 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ."""..========================== |
1e80 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 47 72 6f 6d 6f 76 2d 57 61 73 73 65 72 73 74 65 69 6e 20 | ===========..Gromov-Wasserstein. |
1ea0 | 42 61 72 79 63 65 6e 74 65 72 20 65 78 61 6d 70 6c 65 0d 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | Barycenter.example..============ |
1ec0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 0d 0a 54 68 69 | =========================....Thi |
1ee0 | 73 20 65 78 61 6d 70 6c 65 20 69 73 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73 68 6f 77 20 68 6f | s.example.is.designed.to.show.ho |
1f00 | 77 20 74 6f 20 75 73 65 20 74 68 65 20 47 72 6f 6d 6f 76 2d 57 61 73 73 65 72 73 74 65 69 6e 20 | w.to.use.the.Gromov-Wasserstein. |
1f20 | 64 69 73 74 61 6e 63 65 0d 0a 63 6f 6d 70 75 74 61 74 69 6f 6e 20 69 6e 20 50 4f 54 2e 0d 0a 22 | distance..computation.in.POT..." |
1f40 | 22 22 0d 0a 0d 0a 23 20 41 75 74 68 6f 72 3a 20 45 72 77 61 6e 20 56 61 75 74 69 65 72 20 3c 65 | ""....#.Author:.Erwan.Vautier.<e |
1f60 | 72 77 61 6e 2e 76 61 75 74 69 65 72 40 67 6d 61 69 6c 2e 63 6f 6d 3e 0d 0a 23 20 20 20 20 20 20 | rwan.vautier@gmail.com>..#...... |
1f80 | 20 20 20 4e 69 63 6f 6c 61 73 20 43 6f 75 72 74 79 20 3c 6e 63 6f 75 72 74 79 40 69 72 69 73 61 | ...Nicolas.Courty.<ncourty@irisa |
1fa0 | 2e 66 72 3e 0d 0a 23 0d 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0d | .fr>..#..#.License:.MIT.License. |
1fc0 | 0a 0d 0a 0d 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0d 0a 69 6d 70 6f 72 74 20 | .....import.numpy.as.np..import. |
1fe0 | 73 63 69 70 79 20 61 73 20 73 70 0d 0a 0d 0a 69 6d 70 6f 72 74 20 73 63 69 70 79 2e 6e 64 69 6d | scipy.as.sp....import.scipy.ndim |
2000 | 61 67 65 20 61 73 20 73 70 69 0d 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 | age.as.spi..import.matplotlib.py |
2020 | 6c 61 62 20 61 73 20 70 6c 0d 0a 66 72 6f 6d 20 73 6b 6c 65 61 72 6e 20 69 6d 70 6f 72 74 20 6d | lab.as.pl..from.sklearn.import.m |
2040 | 61 6e 69 66 6f 6c 64 0d 0a 66 72 6f 6d 20 73 6b 6c 65 61 72 6e 2e 64 65 63 6f 6d 70 6f 73 69 74 | anifold..from.sklearn.decomposit |
2060 | 69 6f 6e 20 69 6d 70 6f 72 74 20 50 43 41 0d 0a 0d 0a 69 6d 70 6f 72 74 20 6f 74 0d 0a 0d 0a 23 | ion.import.PCA....import.ot....# |
2080 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
20a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
20c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 23 20 53 6d 61 63 6f 66 20 4d 44 53 0d 0a 23 20 2d | #############..#.Smacof.MDS..#.- |
20e0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 0d 0a 23 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 61 6c | ---------..#..#.This.function.al |
2100 | 6c 6f 77 73 20 74 6f 20 66 69 6e 64 20 61 6e 20 65 6d 62 65 64 64 69 6e 67 20 6f 66 20 70 6f 69 | lows.to.find.an.embedding.of.poi |
2120 | 6e 74 73 20 67 69 76 65 6e 20 61 20 64 69 73 73 69 6d 69 6c 61 72 69 74 79 20 6d 61 74 72 69 78 | nts.given.a.dissimilarity.matrix |
2140 | 0d 0a 23 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 67 69 76 65 6e 20 62 79 20 74 68 65 20 6f 75 | ..#.that.will.be.given.by.the.ou |
2160 | 74 70 75 74 20 6f 66 20 74 68 65 20 61 6c 67 6f 72 69 74 68 6d 0d 0a 0d 0a 0d 0a 64 65 66 20 73 | tput.of.the.algorithm......def.s |
2180 | 6d 61 63 6f 66 5f 6d 64 73 28 43 2c 20 64 69 6d 2c 20 6d 61 78 5f 69 74 65 72 3d 33 30 30 30 2c | macof_mds(C,.dim,.max_iter=3000, |
21a0 | 20 65 70 73 3d 31 65 2d 39 29 3a 0d 0a 20 20 20 20 22 22 22 0d 0a 20 20 20 20 52 65 74 75 72 6e | .eps=1e-9):......"""......Return |
21c0 | 73 20 61 6e 20 69 6e 74 65 72 70 6f 6c 61 74 65 64 20 70 6f 69 6e 74 20 63 6c 6f 75 64 20 66 6f | s.an.interpolated.point.cloud.fo |
21e0 | 6c 6c 6f 77 69 6e 67 20 74 68 65 20 64 69 73 73 69 6d 69 6c 61 72 69 74 79 20 6d 61 74 72 69 78 | llowing.the.dissimilarity.matrix |
2200 | 20 43 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 4d 41 43 4f 46 20 6d 75 6c 74 69 64 69 6d 65 6e 73 | .C......using.SMACOF.multidimens |
2220 | 69 6f 6e 61 6c 20 73 63 61 6c 69 6e 67 20 28 4d 44 53 29 20 69 6e 20 73 70 65 63 69 66 69 63 20 | ional.scaling.(MDS).in.specific. |
2240 | 64 69 6d 65 6e 73 69 6f 6e 6e 65 64 0d 0a 20 20 20 20 74 61 72 67 65 74 20 73 70 61 63 65 0d 0a | dimensionned......target.space.. |
2260 | 0d 0a 20 20 20 20 50 61 72 61 6d 65 74 65 72 73 0d 0a 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | ......Parameters......---------- |
2280 | 0d 0a 20 20 20 20 43 20 3a 20 6e 64 61 72 72 61 79 2c 20 73 68 61 70 65 20 28 6e 73 2c 20 6e 73 | ......C.:.ndarray,.shape.(ns,.ns |
22a0 | 29 0d 0a 20 20 20 20 20 20 20 20 64 69 73 73 69 6d 69 6c 61 72 69 74 79 20 6d 61 74 72 69 78 0d | )..........dissimilarity.matrix. |
22c0 | 0a 20 20 20 20 64 69 6d 20 3a 20 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 64 69 6d 65 6e 73 | .....dim.:.int............dimens |
22e0 | 69 6f 6e 20 6f 66 20 74 68 65 20 74 61 72 67 65 74 65 64 20 73 70 61 63 65 0d 0a 20 20 20 20 6d | ion.of.the.targeted.space......m |
2300 | 61 78 5f 69 74 65 72 20 3a 20 20 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 4d 61 78 69 6d 75 6d 20 | ax_iter.:..int..........Maximum. |
2320 | 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 53 4d 41 43 | number.of.iterations.of.the.SMAC |
2340 | 4f 46 20 61 6c 67 6f 72 69 74 68 6d 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 75 6e 0d 0a 20 | OF.algorithm.for.a.single.run... |
2360 | 20 20 20 65 70 73 20 3a 20 66 6c 6f 61 74 0d 0a 20 20 20 20 20 20 20 20 72 65 6c 61 74 69 76 65 | ...eps.:.float..........relative |
2380 | 20 74 6f 6c 65 72 61 6e 63 65 20 77 2e 72 2e 74 20 73 74 72 65 73 73 20 74 6f 20 64 65 63 6c 61 | .tolerance.w.r.t.stress.to.decla |
23a0 | 72 65 20 63 6f 6e 76 65 72 67 65 0d 0a 0d 0a 20 20 20 20 52 65 74 75 72 6e 73 0d 0a 20 20 20 20 | re.converge........Returns...... |
23c0 | 2d 2d 2d 2d 2d 2d 2d 0d 0a 20 20 20 20 6e 70 6f 73 20 3a 20 6e 64 61 72 72 61 79 2c 20 73 68 61 | -------......npos.:.ndarray,.sha |
23e0 | 70 65 20 28 52 2c 20 64 69 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 45 6d 62 65 64 64 65 64 | pe.(R,.dim).............Embedded |
2400 | 20 63 6f 6f 72 64 69 6e 61 74 65 73 20 6f 66 20 74 68 65 20 69 6e 74 65 72 70 6f 6c 61 74 65 64 | .coordinates.of.the.interpolated |
2420 | 20 70 6f 69 6e 74 20 63 6c 6f 75 64 20 28 64 65 66 69 6e 65 64 20 77 69 74 68 0d 0a 20 20 20 20 | .point.cloud.(defined.with...... |
2440 | 20 20 20 20 20 20 20 6f 6e 65 20 69 73 6f 6d 65 74 72 79 29 0d 0a 20 20 20 20 22 22 22 0d 0a 0d | .......one.isometry)......"""... |
2460 | 0a 20 20 20 20 72 6e 67 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 52 61 6e 64 6f 6d 53 74 61 74 65 | .....rng.=.np.random.RandomState |
2480 | 28 73 65 65 64 3d 33 29 0d 0a 0d 0a 20 20 20 20 6d 64 73 20 3d 20 6d 61 6e 69 66 6f 6c 64 2e 4d | (seed=3)........mds.=.manifold.M |
24a0 | 44 53 28 0d 0a 20 20 20 20 20 20 20 20 64 69 6d 2c 0d 0a 20 20 20 20 20 20 20 20 6d 61 78 5f 69 | DS(..........dim,..........max_i |
24c0 | 74 65 72 3d 6d 61 78 5f 69 74 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 65 70 73 3d 31 65 2d 39 2c | ter=max_iter,..........eps=1e-9, |
24e0 | 0d 0a 20 20 20 20 20 20 20 20 64 69 73 73 69 6d 69 6c 61 72 69 74 79 3d 27 70 72 65 63 6f 6d 70 | ..........dissimilarity='precomp |
2500 | 75 74 65 64 27 2c 0d 0a 20 20 20 20 20 20 20 20 6e 5f 69 6e 69 74 3d 31 29 0d 0a 20 20 20 20 70 | uted',..........n_init=1)......p |
2520 | 6f 73 20 3d 20 6d 64 73 2e 66 69 74 28 43 29 2e 65 6d 62 65 64 64 69 6e 67 5f 0d 0a 0d 0a 20 20 | os.=.mds.fit(C).embedding_...... |
2540 | 20 20 6e 6d 64 73 20 3d 20 6d 61 6e 69 66 6f 6c 64 2e 4d 44 53 28 0d 0a 20 20 20 20 20 20 20 20 | ..nmds.=.manifold.MDS(.......... |
2560 | 32 2c 0d 0a 20 20 20 20 20 20 20 20 6d 61 78 5f 69 74 65 72 3d 6d 61 78 5f 69 74 65 72 2c 0d 0a | 2,..........max_iter=max_iter,.. |
2580 | 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 69 | ........eps=1e-9,..........dissi |
25a0 | 6d 69 6c 61 72 69 74 79 3d 22 70 72 65 63 6f 6d 70 75 74 65 64 22 2c 0d 0a 20 20 20 20 20 20 20 | milarity="precomputed",......... |
25c0 | 20 72 61 6e 64 6f 6d 5f 73 74 61 74 65 3d 72 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 6e 5f 69 6e | .random_state=rng,..........n_in |
25e0 | 69 74 3d 31 29 0d 0a 20 20 20 20 6e 70 6f 73 20 3d 20 6e 6d 64 73 2e 66 69 74 5f 74 72 61 6e 73 | it=1)......npos.=.nmds.fit_trans |
2600 | 66 6f 72 6d 28 43 2c 20 69 6e 69 74 3d 70 6f 73 29 0d 0a 0d 0a 20 20 20 20 72 65 74 75 72 6e 20 | form(C,.init=pos)........return. |
2620 | 6e 70 6f 73 0d 0a 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | npos......###################### |
2640 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
2660 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 23 20 44 61 74 61 | ########################..#.Data |
2680 | 20 70 72 65 70 61 72 61 74 69 6f 6e 0d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | .preparation..#.---------------- |
26a0 | 0d 0a 23 0d 0a 23 20 54 68 65 20 66 6f 75 72 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 61 72 | ..#..#.The.four.distributions.ar |
26c0 | 65 20 63 6f 6e 73 74 72 75 63 74 65 64 20 66 72 6f 6d 20 34 20 73 69 6d 70 6c 65 20 69 6d 61 67 | e.constructed.from.4.simple.imag |
26e0 | 65 73 0d 0a 0d 0a 0d 0a 64 65 66 20 69 6d 32 6d 61 74 28 49 29 3a 0d 0a 20 20 20 20 22 22 22 43 | es......def.im2mat(I):......"""C |
2700 | 6f 6e 76 65 72 74 73 20 61 6e 64 20 69 6d 61 67 65 20 74 6f 20 6d 61 74 72 69 78 20 28 6f 6e 65 | onverts.and.image.to.matrix.(one |
2720 | 20 70 69 78 65 6c 20 70 65 72 20 6c 69 6e 65 29 22 22 22 0d 0a 20 20 20 20 72 65 74 75 72 6e 20 | .pixel.per.line)"""......return. |
2740 | 49 2e 72 65 73 68 61 70 65 28 28 49 2e 73 68 61 70 65 5b 30 5d 20 2a 20 49 2e 73 68 61 70 65 5b | I.reshape((I.shape[0].*.I.shape[ |
2760 | 31 5d 2c 20 49 2e 73 68 61 70 65 5b 32 5d 29 29 0d 0a 0d 0a 0d 0a 73 71 75 61 72 65 20 3d 20 73 | 1],.I.shape[2]))......square.=.s |
2780 | 70 69 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 73 71 75 61 72 65 2e 70 6e 67 27 29 2e | pi.imread('../data/square.png'). |
27a0 | 61 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 5b 3a 2c 20 3a 2c 20 32 5d 20 2f 20 32 35 | astype(np.float64)[:,.:,.2]./.25 |
27c0 | 36 0d 0a 63 72 6f 73 73 20 3d 20 73 70 69 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 63 | 6..cross.=.spi.imread('../data/c |
27e0 | 72 6f 73 73 2e 70 6e 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 5b 3a 2c | ross.png').astype(np.float64)[:, |
2800 | 20 3a 2c 20 32 5d 20 2f 20 32 35 36 0d 0a 74 72 69 61 6e 67 6c 65 20 3d 20 73 70 69 2e 69 6d 72 | .:,.2]./.256..triangle.=.spi.imr |
2820 | 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 74 72 69 61 6e 67 6c 65 2e 70 6e 67 27 29 2e 61 73 74 79 | ead('../data/triangle.png').asty |
2840 | 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 5b 3a 2c 20 3a 2c 20 32 5d 20 2f 20 32 35 36 0d 0a 73 | pe(np.float64)[:,.:,.2]./.256..s |
2860 | 74 61 72 20 3d 20 73 70 69 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 73 74 61 72 2e 70 | tar.=.spi.imread('../data/star.p |
2880 | 6e 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 5b 3a 2c 20 3a 2c 20 32 5d | ng').astype(np.float64)[:,.:,.2] |
28a0 | 20 2f 20 32 35 36 0d 0a 0d 0a 73 68 61 70 65 73 20 3d 20 5b 73 71 75 61 72 65 2c 20 63 72 6f 73 | ./.256....shapes.=.[square,.cros |
28c0 | 73 2c 20 74 72 69 61 6e 67 6c 65 2c 20 73 74 61 72 5d 0d 0a 0d 0a 53 20 3d 20 34 0d 0a 78 73 20 | s,.triangle,.star]....S.=.4..xs. |
28e0 | 3d 20 5b 5b 5d 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 53 29 5d 0d 0a 0d 0a 0d 0a 66 6f | =.[[].for.i.in.range(S)]......fo |
2900 | 72 20 6e 62 20 69 6e 20 72 61 6e 67 65 28 34 29 3a 0d 0a 20 20 20 20 66 6f 72 20 69 20 69 6e 20 | r.nb.in.range(4):......for.i.in. |
2920 | 72 61 6e 67 65 28 38 29 3a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 20 6a 20 69 6e 20 72 61 6e 67 | range(8):..........for.j.in.rang |
2940 | 65 28 38 29 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 73 68 61 70 65 73 5b 6e 62 5d | e(8):..............if.shapes[nb] |
2960 | 5b 69 2c 20 6a 5d 20 3c 20 30 2e 39 35 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | [i,.j].<.0.95:.................. |
2980 | 78 73 5b 6e 62 5d 2e 61 70 70 65 6e 64 28 5b 6a 2c 20 38 20 2d 20 69 5d 29 0d 0a 0d 0a 78 73 20 | xs[nb].append([j,.8.-.i])....xs. |
29a0 | 3d 20 6e 70 2e 61 72 72 61 79 28 5b 6e 70 2e 61 72 72 61 79 28 78 73 5b 30 5d 29 2c 20 6e 70 2e | =.np.array([np.array(xs[0]),.np. |
29c0 | 61 72 72 61 79 28 78 73 5b 31 5d 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 70 | array(xs[1]),.................np |
29e0 | 2e 61 72 72 61 79 28 78 73 5b 32 5d 29 2c 20 6e 70 2e 61 72 72 61 79 28 78 73 5b 33 5d 29 5d 29 | .array(xs[2]),.np.array(xs[3])]) |
2a00 | 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 | ....############################ |
2a20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
2a40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 23 20 42 61 72 79 63 65 6e 74 65 72 | ##################..#.Barycenter |
2a60 | 20 63 6f 6d 70 75 74 61 74 69 6f 6e 0d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | .computation..#.---------------- |
2a80 | 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 0d 0a 6e 73 20 3d 20 5b 6c 65 6e 28 78 73 5b 73 5d 29 20 66 6f 72 | ------......ns.=.[len(xs[s]).for |
2aa0 | 20 73 20 69 6e 20 72 61 6e 67 65 28 53 29 5d 0d 0a 6e 5f 73 61 6d 70 6c 65 73 20 3d 20 33 30 0d | .s.in.range(S)]..n_samples.=.30. |
2ac0 | 0a 0d 0a 22 22 22 43 6f 6d 70 75 74 65 20 61 6c 6c 20 64 69 73 74 61 6e 63 65 73 20 6d 61 74 72 | ..."""Compute.all.distances.matr |
2ae0 | 69 63 65 73 20 66 6f 72 20 74 68 65 20 66 6f 75 72 20 73 68 61 70 65 73 22 22 22 0d 0a 43 73 20 | ices.for.the.four.shapes"""..Cs. |
2b00 | 3d 20 5b 73 70 2e 73 70 61 74 69 61 6c 2e 64 69 73 74 61 6e 63 65 2e 63 64 69 73 74 28 78 73 5b | =.[sp.spatial.distance.cdist(xs[ |
2b20 | 73 5d 2c 20 78 73 5b 73 5d 29 20 66 6f 72 20 73 20 69 6e 20 72 61 6e 67 65 28 53 29 5d 0d 0a 43 | s],.xs[s]).for.s.in.range(S)]..C |
2b40 | 73 20 3d 20 5b 63 73 20 2f 20 63 73 2e 6d 61 78 28 29 20 66 6f 72 20 63 73 20 69 6e 20 43 73 5d | s.=.[cs./.cs.max().for.cs.in.Cs] |
2b60 | 0d 0a 0d 0a 70 73 20 3d 20 5b 6f 74 2e 75 6e 69 66 28 6e 73 5b 73 5d 29 20 66 6f 72 20 73 20 69 | ....ps.=.[ot.unif(ns[s]).for.s.i |
2b80 | 6e 20 72 61 6e 67 65 28 53 29 5d 0d 0a 70 20 3d 20 6f 74 2e 75 6e 69 66 28 6e 5f 73 61 6d 70 6c | n.range(S)]..p.=.ot.unif(n_sampl |
2ba0 | 65 73 29 0d 0a 0d 0a 0d 0a 6c 61 6d 62 64 61 73 74 20 3d 20 5b 5b 66 6c 6f 61 74 28 69 29 20 2f | es)......lambdast.=.[[float(i)./ |
2bc0 | 20 33 2c 20 66 6c 6f 61 74 28 33 20 2d 20 69 29 20 2f 20 33 5d 20 66 6f 72 20 69 20 69 6e 20 5b | .3,.float(3.-.i)./.3].for.i.in.[ |
2be0 | 31 2c 20 32 5d 5d 0d 0a 0d 0a 43 74 30 31 20 3d 20 5b 30 20 66 6f 72 20 69 20 69 6e 20 72 61 6e | 1,.2]]....Ct01.=.[0.for.i.in.ran |
2c00 | 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 20 | ge(2)]..for.i.in.range(2):...... |
2c20 | 43 74 30 31 5b 69 5d 20 3d 20 6f 74 2e 67 72 6f 6d 6f 76 2e 67 72 6f 6d 6f 76 5f 62 61 72 79 63 | Ct01[i].=.ot.gromov.gromov_baryc |
2c40 | 65 6e 74 65 72 73 28 6e 5f 73 61 6d 70 6c 65 73 2c 20 5b 43 73 5b 30 5d 2c 20 43 73 5b 31 5d 5d | enters(n_samples,.[Cs[0],.Cs[1]] |
2c60 | 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 | ,............................... |
2c80 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 70 73 5b 30 5d 2c 20 70 73 5b 31 5d 0d 0a 20 20 20 | ..............[ps[0],.ps[1]..... |
2ca0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
2cc0 | 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 75 | .........],.p,.lambdast[i],.'squ |
2ce0 | 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 20 | are_loss',..#.5e-4,............. |
2d00 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
2d20 | 6d 61 78 5f 69 74 65 72 3d 31 30 30 2c 20 74 6f 6c 3d 31 65 2d 33 29 0d 0a 0d 0a 43 74 30 32 20 | max_iter=100,.tol=1e-3)....Ct02. |
2d40 | 3d 20 5b 30 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 32 29 5d 0d 0a 66 6f 72 20 69 20 69 | =.[0.for.i.in.range(2)]..for.i.i |
2d60 | 6e 20 72 61 6e 67 65 28 32 29 3a 0d 0a 20 20 20 20 43 74 30 32 5b 69 5d 20 3d 20 6f 74 2e 67 72 | n.range(2):......Ct02[i].=.ot.gr |
2d80 | 6f 6d 6f 76 2e 67 72 6f 6d 6f 76 5f 62 61 72 79 63 65 6e 74 65 72 73 28 6e 5f 73 61 6d 70 6c 65 | omov.gromov_barycenters(n_sample |
2da0 | 73 2c 20 5b 43 73 5b 30 5d 2c 20 43 73 5b 32 5d 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 | s,.[Cs[0],.Cs[2]],.............. |
2dc0 | 20 20 20 20 20 20 20 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 | ...............................[ |
2de0 | 70 73 5b 30 5d 2c 20 70 73 5b 32 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ps[0],.ps[2].................... |
2e00 | 20 20 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 | ..........................],.p,. |
2e20 | 6c 61 6d 62 64 61 73 74 5b 69 5d 2c 20 27 73 71 75 61 72 65 5f 6c 6f 73 73 27 2c 20 20 23 20 35 | lambdast[i],.'square_loss',..#.5 |
2e40 | 65 2d 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | e-4,............................ |
2e60 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 78 5f 69 74 65 72 3d 31 30 30 2c 20 74 | .................max_iter=100,.t |
2e80 | 6f 6c 3d 31 65 2d 33 29 0d 0a 0d 0a 43 74 31 33 20 3d 20 5b 30 20 66 6f 72 20 69 20 69 6e 20 72 | ol=1e-3)....Ct13.=.[0.for.i.in.r |
2ea0 | 61 6e 67 65 28 32 29 5d 0d 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 32 29 3a 0d 0a 20 20 | ange(2)]..for.i.in.range(2):.... |
2ec0 | 20 20 43 74 31 33 5b 69 5d 20 3d 20 6f 74 2e 67 72 6f 6d 6f 76 2e 67 72 6f 6d 6f 76 5f 62 61 72 | ..Ct13[i].=.ot.gromov.gromov_bar |
2ee0 | 79 63 65 6e 74 65 72 73 28 6e 5f 73 61 6d 70 6c 65 73 2c 20 5b 43 73 5b 31 5d 2c 20 43 73 5b 33 | ycenters(n_samples,.[Cs[1],.Cs[3 |
2f00 | 5d 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ]],............................. |
2f20 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 70 73 5b 31 5d 2c 20 70 73 5b 33 5d 0d 0a 20 | ................[ps[1],.ps[3]... |
2f40 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
2f60 | 20 20 20 20 20 20 20 20 20 20 20 5d 2c 20 70 2c 20 6c 61 6d 62 64 61 73 74 5b 69 5d 2c 20 27 73 | ...........],.p,.lambdast[i],.'s |
2f80 | 71 75 61 72 65 5f 6c 6f 73 73 27 2c 20 20 23 20 35 65 2d 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 | quare_loss',..#.5e-4,........... |
2fa0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
2fc0 | 20 20 6d 61 78 5f 69 74 65 72 3d 31 30 30 2c 20 74 6f 6c 3d 31 65 2d 33 29 0d 0a 0d 0a 43 74 32 | ..max_iter=100,.tol=1e-3)....Ct2 |
2fe0 | 33 20 3d 20 5b 30 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 32 29 5d 0d 0a 66 6f 72 20 69 | 3.=.[0.for.i.in.range(2)]..for.i |
3000 | 20 69 6e 20 72 61 6e 67 65 28 32 29 3a 0d 0a 20 20 20 20 43 74 32 33 5b 69 5d 20 3d 20 6f 74 2e | .in.range(2):......Ct23[i].=.ot. |
3020 | 67 72 6f 6d 6f 76 2e 67 72 6f 6d 6f 76 5f 62 61 72 79 63 65 6e 74 65 72 73 28 6e 5f 73 61 6d 70 | gromov.gromov_barycenters(n_samp |
3040 | 6c 65 73 2c 20 5b 43 73 5b 32 5d 2c 20 43 73 5b 33 5d 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 | les,.[Cs[2],.Cs[3]],............ |
3060 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
3080 | 20 5b 70 73 5b 32 5d 2c 20 70 73 5b 33 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .[ps[2],.ps[3].................. |
30a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5d 2c 20 70 | ............................],.p |
30c0 | 2c 20 6c 61 6d 62 64 61 73 74 5b 69 5d 2c 20 27 73 71 75 61 72 65 5f 6c 6f 73 73 27 2c 20 20 23 | ,.lambdast[i],.'square_loss',..# |
30e0 | 20 35 65 2d 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .5e-4,.......................... |
3100 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 78 5f 69 74 65 72 3d 31 30 30 2c | ...................max_iter=100, |
3120 | 20 74 6f 6c 3d 31 65 2d 33 29 0d 0a 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | .tol=1e-3)......################ |
3140 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
3160 | 23 23 23 23 23 23 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 | ##############################.. |
3180 | 23 20 56 69 73 75 61 6c 69 7a 61 74 69 6f 6e 0d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | #.Visualization..#.------------- |
31a0 | 0d 0a 23 0d 0a 23 20 54 68 65 20 50 43 41 20 68 65 6c 70 73 20 69 6e 20 67 65 74 74 69 6e 67 20 | ..#..#.The.PCA.helps.in.getting. |
31c0 | 63 6f 6e 73 69 73 74 65 6e 63 79 20 62 65 74 77 65 65 6e 20 74 68 65 20 72 6f 74 61 74 69 6f 6e | consistency.between.the.rotation |
31e0 | 73 0d 0a 0d 0a 0d 0a 63 6c 66 20 3d 20 50 43 41 28 6e 5f 63 6f 6d 70 6f 6e 65 6e 74 73 3d 32 29 | s......clf.=.PCA(n_components=2) |
3200 | 0d 0a 6e 70 6f 73 20 3d 20 5b 30 2c 20 30 2c 20 30 2c 20 30 5d 0d 0a 6e 70 6f 73 20 3d 20 5b 73 | ..npos.=.[0,.0,.0,.0]..npos.=.[s |
3220 | 6d 61 63 6f 66 5f 6d 64 73 28 43 73 5b 73 5d 2c 20 32 29 20 66 6f 72 20 73 20 69 6e 20 72 61 6e | macof_mds(Cs[s],.2).for.s.in.ran |
3240 | 67 65 28 53 29 5d 0d 0a 0d 0a 6e 70 6f 73 74 30 31 20 3d 20 5b 30 2c 20 30 5d 0d 0a 6e 70 6f 73 | ge(S)]....npost01.=.[0,.0]..npos |
3260 | 74 30 31 20 3d 20 5b 73 6d 61 63 6f 66 5f 6d 64 73 28 43 74 30 31 5b 73 5d 2c 20 32 29 20 66 6f | t01.=.[smacof_mds(Ct01[s],.2).fo |
3280 | 72 20 73 20 69 6e 20 72 61 6e 67 65 28 32 29 5d 0d 0a 6e 70 6f 73 74 30 31 20 3d 20 5b 63 6c 66 | r.s.in.range(2)]..npost01.=.[clf |
32a0 | 2e 66 69 74 5f 74 72 61 6e 73 66 6f 72 6d 28 6e 70 6f 73 74 30 31 5b 73 5d 29 20 66 6f 72 20 73 | .fit_transform(npost01[s]).for.s |
32c0 | 20 69 6e 20 72 61 6e 67 65 28 32 29 5d 0d 0a 0d 0a 6e 70 6f 73 74 30 32 20 3d 20 5b 30 2c 20 30 | .in.range(2)]....npost02.=.[0,.0 |
32e0 | 5d 0d 0a 6e 70 6f 73 74 30 32 20 3d 20 5b 73 6d 61 63 6f 66 5f 6d 64 73 28 43 74 30 32 5b 73 5d | ]..npost02.=.[smacof_mds(Ct02[s] |
3300 | 2c 20 32 29 20 66 6f 72 20 73 20 69 6e 20 72 61 6e 67 65 28 32 29 5d 0d 0a 6e 70 6f 73 74 30 32 | ,.2).for.s.in.range(2)]..npost02 |
3320 | 20 3d 20 5b 63 6c 66 2e 66 69 74 5f 74 72 61 6e 73 66 6f 72 6d 28 6e 70 6f 73 74 30 32 5b 73 5d | .=.[clf.fit_transform(npost02[s] |
3340 | 29 20 66 6f 72 20 73 20 69 6e 20 72 61 6e 67 65 28 32 29 5d 0d 0a 0d 0a 6e 70 6f 73 74 31 33 20 | ).for.s.in.range(2)]....npost13. |
3360 | 3d 20 5b 30 2c 20 30 5d 0d 0a 6e 70 6f 73 74 31 33 20 3d 20 5b 73 6d 61 63 6f 66 5f 6d 64 73 28 | =.[0,.0]..npost13.=.[smacof_mds( |
3380 | 43 74 31 33 5b 73 5d 2c 20 32 29 20 66 6f 72 20 73 20 69 6e 20 72 61 6e 67 65 28 32 29 5d 0d 0a | Ct13[s],.2).for.s.in.range(2)].. |
33a0 | 6e 70 6f 73 74 31 33 20 3d 20 5b 63 6c 66 2e 66 69 74 5f 74 72 61 6e 73 66 6f 72 6d 28 6e 70 6f | npost13.=.[clf.fit_transform(npo |
33c0 | 73 74 31 33 5b 73 5d 29 20 66 6f 72 20 73 20 69 6e 20 72 61 6e 67 65 28 32 29 5d 0d 0a 0d 0a 6e | st13[s]).for.s.in.range(2)]....n |
33e0 | 70 6f 73 74 32 33 20 3d 20 5b 30 2c 20 30 5d 0d 0a 6e 70 6f 73 74 32 33 20 3d 20 5b 73 6d 61 63 | post23.=.[0,.0]..npost23.=.[smac |
3400 | 6f 66 5f 6d 64 73 28 43 74 32 33 5b 73 5d 2c 20 32 29 20 66 6f 72 20 73 20 69 6e 20 72 61 6e 67 | of_mds(Ct23[s],.2).for.s.in.rang |
3420 | 65 28 32 29 5d 0d 0a 6e 70 6f 73 74 32 33 20 3d 20 5b 63 6c 66 2e 66 69 74 5f 74 72 61 6e 73 66 | e(2)]..npost23.=.[clf.fit_transf |
3440 | 6f 72 6d 28 6e 70 6f 73 74 32 33 5b 73 5d 29 20 66 6f 72 20 73 20 69 6e 20 72 61 6e 67 65 28 32 | orm(npost23[s]).for.s.in.range(2 |
3460 | 29 5d 0d 0a 0d 0a 0d 0a 66 69 67 20 3d 20 70 6c 2e 66 69 67 75 72 65 28 66 69 67 73 69 7a 65 3d | )]......fig.=.pl.figure(figsize= |
3480 | 28 31 30 2c 20 31 30 29 29 0d 0a 0d 0a 61 78 31 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 32 67 72 | (10,.10))....ax1.=.pl.subplot2gr |
34a0 | 69 64 28 28 34 2c 20 34 29 2c 20 28 30 2c 20 30 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 2d 31 2c | id((4,.4),.(0,.0))..pl.xlim((-1, |
34c0 | 20 31 29 29 0d 0a 70 6c 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 31 2e 73 63 61 74 | .1))..pl.ylim((-1,.1))..ax1.scat |
34e0 | 74 65 72 28 6e 70 6f 73 5b 30 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 5b 30 5d 5b 3a 2c 20 31 5d | ter(npos[0][:,.0],.npos[0][:,.1] |
3500 | 2c 20 63 6f 6c 6f 72 3d 27 72 27 29 0d 0a 0d 0a 61 78 32 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 | ,.color='r')....ax2.=.pl.subplot |
3520 | 32 67 72 69 64 28 28 34 2c 20 34 29 2c 20 28 30 2c 20 31 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 | 2grid((4,.4),.(0,.1))..pl.xlim(( |
3540 | 2d 31 2c 20 31 29 29 0d 0a 70 6c 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 32 2e 73 | -1,.1))..pl.ylim((-1,.1))..ax2.s |
3560 | 63 61 74 74 65 72 28 6e 70 6f 73 74 30 31 5b 31 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 74 30 31 | catter(npost01[1][:,.0],.npost01 |
3580 | 5b 31 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 62 27 29 0d 0a 0d 0a 61 78 33 20 3d 20 70 | [1][:,.1],.color='b')....ax3.=.p |
35a0 | 6c 2e 73 75 62 70 6c 6f 74 32 67 72 69 64 28 28 34 2c 20 34 29 2c 20 28 30 2c 20 32 29 29 0d 0a | l.subplot2grid((4,.4),.(0,.2)).. |
35c0 | 70 6c 2e 78 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 70 6c 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 | pl.xlim((-1,.1))..pl.ylim((-1,.1 |
35e0 | 29 29 0d 0a 61 78 33 2e 73 63 61 74 74 65 72 28 6e 70 6f 73 74 30 31 5b 30 5d 5b 3a 2c 20 30 5d | ))..ax3.scatter(npost01[0][:,.0] |
3600 | 2c 20 6e 70 6f 73 74 30 31 5b 30 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 62 27 29 0d 0a | ,.npost01[0][:,.1],.color='b').. |
3620 | 0d 0a 61 78 34 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 32 67 72 69 64 28 28 34 2c 20 34 29 2c 20 | ..ax4.=.pl.subplot2grid((4,.4),. |
3640 | 28 30 2c 20 33 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 70 6c 2e 79 6c | (0,.3))..pl.xlim((-1,.1))..pl.yl |
3660 | 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 34 2e 73 63 61 74 74 65 72 28 6e 70 6f 73 5b 31 5d | im((-1,.1))..ax4.scatter(npos[1] |
3680 | 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 5b 31 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 72 27 | [:,.0],.npos[1][:,.1],.color='r' |
36a0 | 29 0d 0a 0d 0a 61 78 35 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 32 67 72 69 64 28 28 34 2c 20 34 | )....ax5.=.pl.subplot2grid((4,.4 |
36c0 | 29 2c 20 28 31 2c 20 30 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 70 6c | ),.(1,.0))..pl.xlim((-1,.1))..pl |
36e0 | 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 35 2e 73 63 61 74 74 65 72 28 6e 70 6f 73 | .ylim((-1,.1))..ax5.scatter(npos |
3700 | 74 30 32 5b 31 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 74 30 32 5b 31 5d 5b 3a 2c 20 31 5d 2c 20 | t02[1][:,.0],.npost02[1][:,.1],. |
3720 | 63 6f 6c 6f 72 3d 27 62 27 29 0d 0a 0d 0a 61 78 36 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 32 67 | color='b')....ax6.=.pl.subplot2g |
3740 | 72 69 64 28 28 34 2c 20 34 29 2c 20 28 31 2c 20 33 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 2d 31 | rid((4,.4),.(1,.3))..pl.xlim((-1 |
3760 | 2c 20 31 29 29 0d 0a 70 6c 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 36 2e 73 63 61 | ,.1))..pl.ylim((-1,.1))..ax6.sca |
3780 | 74 74 65 72 28 6e 70 6f 73 74 31 33 5b 31 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 74 31 33 5b 31 | tter(npost13[1][:,.0],.npost13[1 |
37a0 | 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 62 27 29 0d 0a 0d 0a 61 78 37 20 3d 20 70 6c 2e | ][:,.1],.color='b')....ax7.=.pl. |
37c0 | 73 75 62 70 6c 6f 74 32 67 72 69 64 28 28 34 2c 20 34 29 2c 20 28 32 2c 20 30 29 29 0d 0a 70 6c | subplot2grid((4,.4),.(2,.0))..pl |
37e0 | 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)) |
3800 | 0d 0a 61 78 37 2e 73 63 61 74 74 65 72 28 6e 70 6f 73 74 30 32 5b 30 5d 5b 3a 2c 20 30 5d 2c 20 | ..ax7.scatter(npost02[0][:,.0],. |
3820 | 6e 70 6f 73 74 30 32 5b 30 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 62 27 29 0d 0a 0d 0a | npost02[0][:,.1],.color='b').... |
3840 | 61 78 38 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 32 67 72 69 64 28 28 34 2c 20 34 29 2c 20 28 32 | ax8.=.pl.subplot2grid((4,.4),.(2 |
3860 | 2c 20 33 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 70 6c 2e 79 6c 69 6d | ,.3))..pl.xlim((-1,.1))..pl.ylim |
3880 | 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 38 2e 73 63 61 74 74 65 72 28 6e 70 6f 73 74 31 33 5b 30 | ((-1,.1))..ax8.scatter(npost13[0 |
38a0 | 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 74 31 33 5b 30 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 | ][:,.0],.npost13[0][:,.1],.color |
38c0 | 3d 27 62 27 29 0d 0a 0d 0a 61 78 39 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 32 67 72 69 64 28 28 | ='b')....ax9.=.pl.subplot2grid(( |
38e0 | 34 2c 20 34 29 2c 20 28 33 2c 20 30 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 2d 31 2c 20 31 29 29 | 4,.4),.(3,.0))..pl.xlim((-1,.1)) |
3900 | 0d 0a 70 6c 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 39 2e 73 63 61 74 74 65 72 28 | ..pl.ylim((-1,.1))..ax9.scatter( |
3920 | 6e 70 6f 73 5b 32 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 5b 32 5d 5b 3a 2c 20 31 5d 2c 20 63 6f | npos[2][:,.0],.npos[2][:,.1],.co |
3940 | 6c 6f 72 3d 27 72 27 29 0d 0a 0d 0a 61 78 31 30 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 32 67 72 | lor='r')....ax10.=.pl.subplot2gr |
3960 | 69 64 28 28 34 2c 20 34 29 2c 20 28 33 2c 20 31 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 2d 31 2c | id((4,.4),.(3,.1))..pl.xlim((-1, |
3980 | 20 31 29 29 0d 0a 70 6c 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 31 30 2e 73 63 61 | .1))..pl.ylim((-1,.1))..ax10.sca |
39a0 | 74 74 65 72 28 6e 70 6f 73 74 32 33 5b 31 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 74 32 33 5b 31 | tter(npost23[1][:,.0],.npost23[1 |
39c0 | 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 62 27 29 0d 0a 0d 0a 61 78 31 31 20 3d 20 70 6c | ][:,.1],.color='b')....ax11.=.pl |
39e0 | 2e 73 75 62 70 6c 6f 74 32 67 72 69 64 28 28 34 2c 20 34 29 2c 20 28 33 2c 20 32 29 29 0d 0a 70 | .subplot2grid((4,.4),.(3,.2))..p |
3a00 | 6c 2e 78 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 70 6c 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 29 | l.xlim((-1,.1))..pl.ylim((-1,.1) |
3a20 | 29 0d 0a 61 78 31 31 2e 73 63 61 74 74 65 72 28 6e 70 6f 73 74 32 33 5b 30 5d 5b 3a 2c 20 30 5d | )..ax11.scatter(npost23[0][:,.0] |
3a40 | 2c 20 6e 70 6f 73 74 32 33 5b 30 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 62 27 29 0d 0a | ,.npost23[0][:,.1],.color='b').. |
3a60 | 0d 0a 61 78 31 32 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 32 67 72 69 64 28 28 34 2c 20 34 29 2c | ..ax12.=.pl.subplot2grid((4,.4), |
3a80 | 20 28 33 2c 20 33 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 70 6c 2e 79 | .(3,.3))..pl.xlim((-1,.1))..pl.y |
3aa0 | 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 31 32 2e 73 63 61 74 74 65 72 28 6e 70 6f 73 5b | lim((-1,.1))..ax12.scatter(npos[ |
3ac0 | 33 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 5b 33 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 | 3][:,.0],.npos[3][:,.1],.color=' |
3ae0 | 72 27 29 0d 0a 50 4b 03 04 14 00 00 00 00 00 da 74 d9 4e b8 cd f6 1b 7e 0b 00 00 7e 0b 00 00 13 | r')..PK.........t.N....~...~.... |
3b00 | 00 00 00 70 6c 6f 74 5f 6f 70 74 69 6d 5f 4f 54 72 65 67 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 | ...plot_optim_OTreg.py#.-*-.codi |
3b20 | 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ng:.utf-8.-*-.""".============== |
3b40 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 65 67 75 6c 61 72 69 7a 65 64 | ====================.Regularized |
3b60 | 20 4f 54 20 77 69 74 68 20 67 65 6e 65 72 69 63 20 73 6f 6c 76 65 72 0a 3d 3d 3d 3d 3d 3d 3d 3d | .OT.with.generic.solver.======== |
3b80 | 3d 3d 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 | ==========================..Illu |
3ba0 | 73 74 72 61 74 65 73 20 74 68 65 20 75 73 65 20 6f 66 20 74 68 65 20 67 65 6e 65 72 69 63 20 73 | strates.the.use.of.the.generic.s |
3bc0 | 6f 6c 76 65 72 20 66 6f 72 20 72 65 67 75 6c 61 72 69 7a 65 64 20 4f 54 20 77 69 74 68 0a 75 73 | olver.for.regularized.OT.with.us |
3be0 | 65 72 2d 64 65 73 69 67 6e 65 64 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 20 74 65 72 6d 2e | er-designed.regularization.term. |
3c00 | 20 49 74 20 75 73 65 73 20 43 6f 6e 64 69 74 69 6f 6e 61 6c 20 67 72 61 64 69 65 6e 74 20 61 73 | .It.uses.Conditional.gradient.as |
3c20 | 20 69 6e 20 5b 36 5d 20 61 6e 64 0a 67 65 6e 65 72 61 6c 69 7a 65 64 20 43 6f 6e 64 69 74 69 6f | .in.[6].and.generalized.Conditio |
3c40 | 6e 61 6c 20 47 72 61 64 69 65 6e 74 20 61 73 20 70 72 6f 70 6f 73 65 64 20 69 6e 20 5b 35 5d 5b | nal.Gradient.as.proposed.in.[5][ |
3c60 | 37 5d 2e 0a 0a 0a 5b 35 5d 20 4e 2e 20 43 6f 75 72 74 79 3b 20 52 2e 20 46 6c 61 6d 61 72 79 3b | 7]....[5].N..Courty;.R..Flamary; |
3c80 | 20 44 2e 20 54 75 69 61 3b 20 41 2e 20 52 61 6b 6f 74 6f 6d 61 6d 6f 6e 6a 79 2c 20 4f 70 74 69 | .D..Tuia;.A..Rakotomamonjy,.Opti |
3ca0 | 6d 61 6c 20 54 72 61 6e 73 70 6f 72 74 20 66 6f 72 0a 44 6f 6d 61 69 6e 20 41 64 61 70 74 61 74 | mal.Transport.for.Domain.Adaptat |
3cc0 | 69 6f 6e 2c 20 69 6e 20 49 45 45 45 20 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 6f 6e 20 50 61 74 | ion,.in.IEEE.Transactions.on.Pat |
3ce0 | 74 65 72 6e 20 41 6e 61 6c 79 73 69 73 20 61 6e 64 20 4d 61 63 68 69 6e 65 0a 49 6e 74 65 6c 6c | tern.Analysis.and.Machine.Intell |
3d00 | 69 67 65 6e 63 65 20 2c 20 76 6f 6c 2e 50 50 2c 20 6e 6f 2e 39 39 2c 20 70 70 2e 31 2d 31 2e 0a | igence.,.vol.PP,.no.99,.pp.1-1.. |
3d20 | 0a 5b 36 5d 20 46 65 72 72 61 64 61 6e 73 2c 20 53 2e 2c 20 50 61 70 61 64 61 6b 69 73 2c 20 4e | .[6].Ferradans,.S.,.Papadakis,.N |
3d40 | 2e 2c 20 50 65 79 72 c3 a9 2c 20 47 2e 2c 20 26 20 41 75 6a 6f 6c 2c 20 4a 2e 20 46 2e 20 28 32 | .,.Peyr..,.G.,.&.Aujol,.J..F..(2 |
3d60 | 30 31 34 29 2e 0a 52 65 67 75 6c 61 72 69 7a 65 64 20 64 69 73 63 72 65 74 65 20 6f 70 74 69 6d | 014)..Regularized.discrete.optim |
3d80 | 61 6c 20 74 72 61 6e 73 70 6f 72 74 2e 20 53 49 41 4d 20 4a 6f 75 72 6e 61 6c 20 6f 6e 20 49 6d | al.transport..SIAM.Journal.on.Im |
3da0 | 61 67 69 6e 67 20 53 63 69 65 6e 63 65 73 2c 0a 37 28 33 29 2c 20 31 38 35 33 2d 31 38 38 32 2e | aging.Sciences,.7(3),.1853-1882. |
3dc0 | 0a 0a 5b 37 5d 20 52 61 6b 6f 74 6f 6d 61 6d 6f 6e 6a 79 2c 20 41 2e 2c 20 46 6c 61 6d 61 72 79 | ..[7].Rakotomamonjy,.A.,.Flamary |
3de0 | 2c 20 52 2e 2c 20 26 20 43 6f 75 72 74 79 2c 20 4e 2e 20 28 32 30 31 35 29 2e 20 47 65 6e 65 72 | ,.R.,.&.Courty,.N..(2015)..Gener |
3e00 | 61 6c 69 7a 65 64 0a 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 67 72 61 64 69 65 6e 74 3a 20 61 6e 61 | alized.conditional.gradient:.ana |
3e20 | 6c 79 73 69 73 20 6f 66 20 63 6f 6e 76 65 72 67 65 6e 63 65 20 61 6e 64 20 61 70 70 6c 69 63 61 | lysis.of.convergence.and.applica |
3e40 | 74 69 6f 6e 73 2e 0a 61 72 58 69 76 20 70 72 65 70 72 69 6e 74 20 61 72 58 69 76 3a 31 35 31 30 | tions..arXiv.preprint.arXiv:1510 |
3e60 | 2e 30 36 35 36 37 2e 0a 0a 0a 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 | .06567....."""..import.numpy.as. |
3e80 | 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 |
3ea0 | 0a 69 6d 70 6f 72 74 20 6f 74 0a 69 6d 70 6f 72 74 20 6f 74 2e 70 6c 6f 74 0a 0a 23 23 23 23 23 | .import.ot.import.ot.plot..##### |
3ec0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
3ee0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
3f00 | 23 23 23 23 23 23 23 23 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d | #########.#.Generate.data.#.---- |
3f20 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 6e 20 3d 20 31 | ---------..#%%.parameters..n.=.1 |
3f40 | 30 30 20 20 23 20 6e 62 20 62 69 6e 73 0a 0a 23 20 62 69 6e 20 70 6f 73 69 74 69 6f 6e 73 0a 78 | 00..#.nb.bins..#.bin.positions.x |
3f60 | 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 2c 20 64 74 79 70 65 3d 6e 70 2e 66 6c 6f 61 74 36 34 | .=.np.arange(n,.dtype=np.float64 |
3f80 | 29 0a 0a 23 20 47 61 75 73 73 69 61 6e 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 61 20 3d 20 | )..#.Gaussian.distributions.a.=. |
3fa0 | 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 |
3fc0 | 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 6f | 0,.s=5)..#.m=.mean,.s=.std.b.=.o |
3fe0 | 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 30 | t.datasets.make_1D_gauss(n,.m=60 |
4000 | 2c 20 73 3d 31 30 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 20 3d 20 6f 74 2e 64 69 | ,.s=10)..#.loss.matrix.M.=.ot.di |
4020 | 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( |
4040 | 28 6e 2c 20 31 29 29 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 29 0a 0a 23 23 23 23 23 23 23 23 23 | (n,.1))).M./=.M.max()..######### |
4060 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
4080 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
40a0 | 23 23 23 23 23 0a 23 20 53 6f 6c 76 65 20 45 4d 44 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 | #####.#.Solve.EMD.#.---------..# |
40c0 | 25 25 20 45 4d 44 0a 0a 47 30 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 29 0a 0a 70 6c | %%.EMD..G0.=.ot.emd(a,.b,.M)..pl |
40e0 | 2e 66 69 67 75 72 65 28 33 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 29 0a 6f 74 2e 70 6c | .figure(3,.figsize=(5,.5)).ot.pl |
4100 | 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 47 30 2c 20 27 4f 54 20 6d 61 74 72 | ot.plot1D_mat(a,.b,.G0,.'OT.matr |
4120 | 69 78 20 47 30 27 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ix.G0')..####################### |
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 0a 23 20 53 6f 6c 76 65 20 | #######################.#.Solve. |
4180 | 45 4d 44 20 77 69 74 68 20 46 72 6f 62 65 6e 69 75 73 20 6e 6f 72 6d 20 72 65 67 75 6c 61 72 69 | EMD.with.Frobenius.norm.regulari |
41a0 | 7a 61 74 69 6f 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | zation.#.----------------------- |
41c0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 45 78 61 6d 70 | ---------------------..#%%.Examp |
41e0 | 6c 65 20 77 69 74 68 20 46 72 6f 62 65 6e 69 75 73 20 6e 6f 72 6d 20 72 65 67 75 6c 61 72 69 7a | le.with.Frobenius.norm.regulariz |
4200 | 61 74 69 6f 6e 0a 0a 0a 64 65 66 20 66 28 47 29 3a 0a 20 20 20 20 72 65 74 75 72 6e 20 30 2e 35 | ation...def.f(G):.....return.0.5 |
4220 | 20 2a 20 6e 70 2e 73 75 6d 28 47 2a 2a 32 29 0a 0a 0a 64 65 66 20 64 66 28 47 29 3a 0a 20 20 20 | .*.np.sum(G**2)...def.df(G):.... |
4240 | 20 72 65 74 75 72 6e 20 47 0a 0a 0a 72 65 67 20 3d 20 31 65 2d 31 0a 0a 47 6c 32 20 3d 20 6f 74 | .return.G...reg.=.1e-1..Gl2.=.ot |
4260 | 2e 6f 70 74 69 6d 2e 63 67 28 61 2c 20 62 2c 20 4d 2c 20 72 65 67 2c 20 66 2c 20 64 66 2c 20 76 | .optim.cg(a,.b,.M,.reg,.f,.df,.v |
4280 | 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 33 29 0a 6f 74 2e 70 6c | erbose=True)..pl.figure(3).ot.pl |
42a0 | 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 47 6c 32 2c 20 27 4f 54 20 6d 61 74 | ot.plot1D_mat(a,.b,.Gl2,.'OT.mat |
42c0 | 72 69 78 20 46 72 6f 62 2e 20 72 65 67 27 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | rix.Frob..reg')..############### |
42e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
4300 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a | ###############################. |
4320 | 23 20 53 6f 6c 76 65 20 45 4d 44 20 77 69 74 68 20 65 6e 74 72 6f 70 69 63 20 72 65 67 75 6c 61 | #.Solve.EMD.with.entropic.regula |
4340 | 72 69 7a 61 74 69 6f 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | rization.#.--------------------- |
4360 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 45 78 61 6d 70 6c 65 20 77 | -----------------..#%%.Example.w |
4380 | 69 74 68 20 65 6e 74 72 6f 70 69 63 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 0a 0a 64 65 | ith.entropic.regularization...de |
43a0 | 66 20 66 28 47 29 3a 0a 20 20 20 20 72 65 74 75 72 6e 20 6e 70 2e 73 75 6d 28 47 20 2a 20 6e 70 | f.f(G):.....return.np.sum(G.*.np |
43c0 | 2e 6c 6f 67 28 47 29 29 0a 0a 0a 64 65 66 20 64 66 28 47 29 3a 0a 20 20 20 20 72 65 74 75 72 6e | .log(G))...def.df(G):.....return |
43e0 | 20 6e 70 2e 6c 6f 67 28 47 29 20 2b 20 31 2e 0a 0a 0a 72 65 67 20 3d 20 31 65 2d 33 0a 0a 47 65 | .np.log(G).+.1....reg.=.1e-3..Ge |
4400 | 20 3d 20 6f 74 2e 6f 70 74 69 6d 2e 63 67 28 61 2c 20 62 2c 20 4d 2c 20 72 65 67 2c 20 66 2c 20 | .=.ot.optim.cg(a,.b,.M,.reg,.f,. |
4420 | 64 66 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 34 2c 20 | df,.verbose=True)..pl.figure(4,. |
4440 | 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 |
4460 | 61 74 28 61 2c 20 62 2c 20 47 65 2c 20 27 4f 54 20 6d 61 74 72 69 78 20 45 6e 74 72 6f 70 2e 20 | at(a,.b,.Ge,.'OT.matrix.Entrop.. |
4480 | 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')..######################### |
44a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
44c0 | 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 |
44e0 | 44 20 77 69 74 68 20 46 72 6f 62 65 6e 69 75 73 20 6e 6f 72 6d 20 2b 20 65 6e 74 72 6f 70 69 63 | D.with.Frobenius.norm.+.entropic |
4500 | 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | .regularization.#.-------------- |
4520 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
4540 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 45 78 61 6d 70 6c 65 20 77 69 74 68 20 46 72 6f 62 | ---------..#%%.Example.with.Frob |
4560 | 65 6e 69 75 73 20 6e 6f 72 6d 20 2b 20 65 6e 74 72 6f 70 69 63 20 72 65 67 75 6c 61 72 69 7a 61 | enius.norm.+.entropic.regulariza |
4580 | 74 69 6f 6e 20 77 69 74 68 20 67 63 67 0a 0a 0a 64 65 66 20 66 28 47 29 3a 0a 20 20 20 20 72 65 | tion.with.gcg...def.f(G):.....re |
45a0 | 74 75 72 6e 20 30 2e 35 20 2a 20 6e 70 2e 73 75 6d 28 47 2a 2a 32 29 0a 0a 0a 64 65 66 20 64 66 | turn.0.5.*.np.sum(G**2)...def.df |
45c0 | 28 47 29 3a 0a 20 20 20 20 72 65 74 75 72 6e 20 47 0a 0a 0a 72 65 67 31 20 3d 20 31 65 2d 33 0a | (G):.....return.G...reg1.=.1e-3. |
45e0 | 72 65 67 32 20 3d 20 31 65 2d 31 0a 0a 47 65 6c 32 20 3d 20 6f 74 2e 6f 70 74 69 6d 2e 67 63 67 | reg2.=.1e-1..Gel2.=.ot.optim.gcg |
4600 | 28 61 2c 20 62 2c 20 4d 2c 20 72 65 67 31 2c 20 72 65 67 32 2c 20 66 2c 20 64 66 2c 20 76 65 72 | (a,.b,.M,.reg1,.reg2,.f,.df,.ver |
4620 | 62 6f 73 65 3d 54 72 75 65 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 35 2c 20 66 69 67 73 69 7a 65 | bose=True)..pl.figure(5,.figsize |
4640 | 3d 28 35 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 | =(5,.5)).ot.plot.plot1D_mat(a,.b |
4660 | 2c 20 47 65 6c 32 2c 20 27 4f 54 20 65 6e 74 72 6f 70 69 63 20 2b 20 6d 61 74 72 69 78 20 46 72 | ,.Gel2,.'OT.entropic.+.matrix.Fr |
4680 | 6f 62 2e 20 72 65 67 27 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 db 74 | ob..reg').pl.show().PK.........t |
46a0 | d9 4e 39 06 7c 60 0c 15 00 00 0c 15 00 00 0f 00 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 64 32 2e 70 | .N9.|`............plot_otda_d2.p |
46c0 | 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.-*-.""".=== |
46e0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
4700 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4f 54 20 66 6f 72 20 64 6f 6d 61 69 6e 20 61 | ================.OT.for.domain.a |
4720 | 64 61 70 74 61 74 69 6f 6e 20 6f 6e 20 65 6d 70 69 72 69 63 61 6c 20 64 69 73 74 72 69 62 75 74 | daptation.on.empirical.distribut |
4740 | 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.=========================== |
4760 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 | ========================..This.e |
4780 | 78 61 6d 70 6c 65 20 69 6e 74 72 6f 64 75 63 65 73 20 61 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 | xample.introduces.a.domain.adapt |
47a0 | 61 74 69 6f 6e 20 69 6e 20 61 20 32 44 20 73 65 74 74 69 6e 67 2e 20 49 74 20 65 78 70 6c 69 63 | ation.in.a.2D.setting..It.explic |
47c0 | 69 74 73 0a 74 68 65 20 70 72 6f 62 6c 65 6d 20 6f 66 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 | its.the.problem.of.domain.adapta |
47e0 | 74 69 6f 6e 20 61 6e 64 20 69 6e 74 72 6f 64 75 63 65 73 20 73 6f 6d 65 20 6f 70 74 69 6d 61 6c | tion.and.introduces.some.optimal |
4800 | 20 74 72 61 6e 73 70 6f 72 74 0a 61 70 70 72 6f 61 63 68 65 73 20 74 6f 20 73 6f 6c 76 65 20 69 | .transport.approaches.to.solve.i |
4820 | 74 2e 0a 0a 51 75 61 6e 74 69 74 69 65 73 20 73 75 63 68 20 61 73 20 6f 70 74 69 6d 61 6c 20 63 | t...Quantities.such.as.optimal.c |
4840 | 6f 75 70 6c 69 6e 67 73 2c 20 67 72 65 61 74 65 72 20 63 6f 75 70 6c 69 6e 67 20 63 6f 65 66 66 | ouplings,.greater.coupling.coeff |
4860 | 69 63 69 65 6e 74 73 20 61 6e 64 0a 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 20 | icients.and.transported.samples. |
4880 | 61 72 65 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 67 69 76 65 | are.represented.in.order.to.give |
48a0 | 20 61 20 76 69 73 75 61 6c 20 75 6e 64 65 72 73 74 61 6e 64 69 6e 67 0a 6f 66 20 77 68 61 74 20 | .a.visual.understanding.of.what. |
48c0 | 74 68 65 20 74 72 61 6e 73 70 6f 72 74 20 6d 65 74 68 6f 64 73 20 61 72 65 20 64 6f 69 6e 67 2e | the.transport.methods.are.doing. |
48e0 | 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 73 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 | ."""..#.Authors:.Remi.Flamary.<r |
4900 | 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 20 20 20 20 20 20 20 20 20 | emi.flamary@unice.fr>.#......... |
4920 | 20 53 74 61 6e 69 73 6c 61 73 20 43 68 61 6d 62 6f 6e 20 3c 73 74 61 6e 2e 63 68 61 6d 62 6f 6e | .Stanislas.Chambon.<stan.chambon |
4940 | 40 67 6d 61 69 6c 2e 63 6f 6d 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 | @gmail.com>.#.#.License:.MIT.Lic |
4960 | 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 | ense..import.matplotlib.pylab.as |
4980 | 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 69 6d 70 6f 72 74 20 6f 74 2e 70 6c 6f 74 0a 0a 23 23 | .pl.import.ot.import.ot.plot..## |
49a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
49c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
49e0 | 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 67 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d | ############.#.generate.data.#.- |
4a00 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 6e 5f 73 61 6d 70 6c 65 73 5f 73 6f 75 72 63 65 20 3d | ------------..n_samples_source.= |
4a20 | 20 31 35 30 0a 6e 5f 73 61 6d 70 6c 65 73 5f 74 61 72 67 65 74 20 3d 20 31 35 30 0a 0a 58 73 2c | .150.n_samples_target.=.150..Xs, |
4a40 | 20 79 73 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 61 5f 63 6c 61 73 | .ys.=.ot.datasets.make_data_clas |
4a60 | 73 69 66 28 27 33 67 61 75 73 73 27 2c 20 6e 5f 73 61 6d 70 6c 65 73 5f 73 6f 75 72 63 65 29 0a | sif('3gauss',.n_samples_source). |
4a80 | 58 74 2c 20 79 74 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 61 5f 63 | Xt,.yt.=.ot.datasets.make_data_c |
4aa0 | 6c 61 73 73 69 66 28 27 33 67 61 75 73 73 32 27 2c 20 6e 5f 73 61 6d 70 6c 65 73 5f 74 61 72 67 | lassif('3gauss2',.n_samples_targ |
4ac0 | 65 74 29 0a 0a 23 20 43 6f 73 74 20 6d 61 74 72 69 78 0a 4d 20 3d 20 6f 74 2e 64 69 73 74 28 58 | et)..#.Cost.matrix.M.=.ot.dist(X |
4ae0 | 73 2c 20 58 74 2c 20 6d 65 74 72 69 63 3d 27 73 71 65 75 63 6c 69 64 65 61 6e 27 29 0a 0a 0a 23 | s,.Xt,.metric='sqeuclidean')...# |
4b00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
4b20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
4b40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 49 6e 73 74 61 6e 74 69 61 74 65 20 74 68 65 20 | #############.#.Instantiate.the. |
4b60 | 64 69 66 66 65 72 65 6e 74 20 74 72 61 6e 73 70 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d 73 20 61 | different.transport.algorithms.a |
4b80 | 6e 64 20 66 69 74 20 74 68 65 6d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | nd.fit.them.#.------------------ |
4ba0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
4bc0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 20 45 4d 44 20 54 72 61 6e 73 70 6f 72 74 0a 6f 74 5f 65 6d | ---------..#.EMD.Transport.ot_em |
4be0 | 64 20 3d 20 6f 74 2e 64 61 2e 45 4d 44 54 72 61 6e 73 70 6f 72 74 28 29 0a 6f 74 5f 65 6d 64 2e | d.=.ot.da.EMDTransport().ot_emd. |
4c00 | 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 53 69 6e 6b 68 6f 72 6e 20 54 72 | fit(Xs=Xs,.Xt=Xt)..#.Sinkhorn.Tr |
4c20 | 61 6e 73 70 6f 72 74 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b | ansport.ot_sinkhorn.=.ot.da.Sink |
4c40 | 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 28 72 65 67 5f 65 3d 31 65 2d 31 29 0a 6f 74 5f 73 69 6e | hornTransport(reg_e=1e-1).ot_sin |
4c60 | 6b 68 6f 72 6e 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 53 69 6e 6b 68 | khorn.fit(Xs=Xs,.Xt=Xt)..#.Sinkh |
4c80 | 6f 72 6e 20 54 72 61 6e 73 70 6f 72 74 20 77 69 74 68 20 47 72 6f 75 70 20 6c 61 73 73 6f 20 72 | orn.Transport.with.Group.lasso.r |
4ca0 | 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 6f 74 5f 6c 70 6c 31 20 3d 20 6f 74 2e 64 61 2e 53 69 | egularization.ot_lpl1.=.ot.da.Si |
4cc0 | 6e 6b 68 6f 72 6e 4c 70 6c 31 54 72 61 6e 73 70 6f 72 74 28 72 65 67 5f 65 3d 31 65 2d 31 2c 20 | nkhornLpl1Transport(reg_e=1e-1,. |
4ce0 | 72 65 67 5f 63 6c 3d 31 65 30 29 0a 6f 74 5f 6c 70 6c 31 2e 66 69 74 28 58 73 3d 58 73 2c 20 79 | reg_cl=1e0).ot_lpl1.fit(Xs=Xs,.y |
4d00 | 73 3d 79 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 74 72 61 6e 73 70 6f 72 74 20 73 6f 75 72 63 65 | s=ys,.Xt=Xt)..#.transport.source |
4d20 | 20 73 61 6d 70 6c 65 73 20 6f 6e 74 6f 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 0a 74 72 61 | .samples.onto.target.samples.tra |
4d40 | 6e 73 70 5f 58 73 5f 65 6d 64 20 3d 20 6f 74 5f 65 6d 64 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 | nsp_Xs_emd.=.ot_emd.transform(Xs |
4d60 | 3d 58 73 29 0a 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 5f 73 69 6e | =Xs).transp_Xs_sinkhorn.=.ot_sin |
4d80 | 6b 68 6f 72 6e 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 74 72 61 6e 73 70 5f 58 73 | khorn.transform(Xs=Xs).transp_Xs |
4da0 | 5f 6c 70 6c 31 20 3d 20 6f 74 5f 6c 70 6c 31 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 | _lpl1.=.ot_lpl1.transform(Xs=Xs) |
4dc0 | 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ...############################# |
4de0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
4e00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 67 20 31 20 3a 20 70 6c 6f 74 | #################.#.Fig.1.:.plot |
4e20 | 73 20 73 6f 75 72 63 65 20 61 6e 64 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 20 2b 20 6d 61 | s.source.and.target.samples.+.ma |
4e40 | 74 72 69 78 20 6f 66 20 70 61 69 72 77 69 73 65 20 64 69 73 74 61 6e 63 65 0a 23 20 2d 2d 2d 2d | trix.of.pairwise.distance.#.---- |
4e60 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
4e80 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
4ea0 | 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 31 30 2c 20 31 30 29 | -..pl.figure(1,.figsize=(10,.10) |
4ec0 | 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 | ).pl.subplot(2,.2,.1).pl.scatter |
4ee0 | 28 58 73 5b 3a 2c 20 30 5d 2c 20 58 73 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 | (Xs[:,.0],.Xs[:,.1],.c=ys,.marke |
4f00 | 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 | r='+',.label='Source.samples').p |
4f20 | 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 6c 65 | l.xticks([]).pl.yticks([]).pl.le |
4f40 | 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 20 20 73 61 | gend(loc=0).pl.title('Source..sa |
4f60 | 6d 70 6c 65 73 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 32 29 0a 70 6c 2e | mples')..pl.subplot(2,.2,.2).pl. |
4f80 | 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 | scatter(Xt[:,.0],.Xt[:,.1],.c=yt |
4fa0 | 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 | ,.marker='o',.label='Target.samp |
4fc0 | 6c 65 73 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d | les').pl.xticks([]).pl.yticks([] |
4fe0 | 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 61 72 | ).pl.legend(loc=0).pl.title('Tar |
5000 | 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 | get.samples')..pl.subplot(2,.2,. |
5020 | 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 4d 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e | 3).pl.imshow(M,.interpolation='n |
5040 | 65 61 72 65 73 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 | earest').pl.xticks([]).pl.yticks |
5060 | 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4d 61 74 72 69 78 20 6f 66 20 70 61 69 72 77 69 73 | ([]).pl.title('Matrix.of.pairwis |
5080 | 65 20 64 69 73 74 61 6e 63 65 73 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a | e.distances').pl.tight_layout(). |
50a0 | 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 | ..############################## |
50c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
50e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 67 20 32 20 3a 20 70 6c 6f 74 73 | ################.#.Fig.2.:.plots |
5100 | 20 6f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 73 20 66 6f 72 20 74 68 65 20 64 69 66 66 65 | .optimal.couplings.for.the.diffe |
5120 | 72 65 6e 74 20 6d 65 74 68 6f 64 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | rent.methods.#.----------------- |
5140 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
5160 | 2d 2d 2d 2d 2d 2d 2d 2d 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 31 | --------.pl.figure(2,.figsize=(1 |
5180 | 30 2c 20 36 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 31 29 0a 70 6c 2e 69 | 0,.6))..pl.subplot(2,.3,.1).pl.i |
51a0 | 6d 73 68 6f 77 28 6f 74 5f 65 6d 64 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 69 6e 74 65 72 70 6f 6c | mshow(ot_emd.coupling_,.interpol |
51c0 | 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 | ation='nearest').pl.xticks([]).p |
51e0 | 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 20 63 | l.yticks([]).pl.title('Optimal.c |
5200 | 6f 75 70 6c 69 6e 67 5c 6e 45 4d 44 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 | oupling\nEMDTransport')..pl.subp |
5220 | 6c 6f 74 28 32 2c 20 33 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 73 69 6e 6b 68 6f | lot(2,.3,.2).pl.imshow(ot_sinkho |
5240 | 72 6e 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 | rn.coupling_,.interpolation='nea |
5260 | 72 65 73 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b | rest').pl.xticks([]).pl.yticks([ |
5280 | 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 5c 6e 53 | ]).pl.title('Optimal.coupling\nS |
52a0 | 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 |
52c0 | 2c 20 33 2c 20 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 6c 70 6c 31 2e 63 6f 75 70 6c 69 | ,.3,.3).pl.imshow(ot_lpl1.coupli |
52e0 | 6e 67 5f 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c | ng_,.interpolation='nearest').pl |
5300 | 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 | .xticks([]).pl.yticks([]).pl.tit |
5320 | 6c 65 28 27 4f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 5c 6e 53 69 6e 6b 68 6f 72 6e 4c 70 | le('Optimal.coupling\nSinkhornLp |
5340 | 6c 31 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 | l1Transport')..pl.subplot(2,.3,. |
5360 | 34 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 58 73 | 4).ot.plot.plot2D_samples_mat(Xs |
5380 | 2c 20 58 74 2c 20 6f 74 5f 65 6d 64 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 63 3d 5b 2e 35 2c 20 2e | ,.Xt,.ot_emd.coupling_,.c=[.5,.. |
53a0 | 35 2c 20 31 5d 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 58 73 5b 3a | 5,.1]).pl.scatter(Xs[:,.0],.Xs[: |
53c0 | 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 53 | ,.1],.c=ys,.marker='+',.label='S |
53e0 | 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c | ource.samples').pl.scatter(Xt[:, |
5400 | 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c | .0],.Xt[:,.1],.c=yt,.marker='o', |
5420 | 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 78 74 69 63 | .label='Target.samples').pl.xtic |
5440 | 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 4d | ks([]).pl.yticks([]).pl.title('M |
5460 | 61 69 6e 20 63 6f 75 70 6c 69 6e 67 20 63 6f 65 66 66 69 63 69 65 6e 74 73 5c 6e 45 4d 44 54 72 | ain.coupling.coefficients\nEMDTr |
5480 | 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 35 29 0a 6f | ansport')..pl.subplot(2,.3,.5).o |
54a0 | 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 58 73 2c 20 58 74 | t.plot.plot2D_samples_mat(Xs,.Xt |
54c0 | 2c 20 6f 74 5f 73 69 6e 6b 68 6f 72 6e 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 63 3d 5b 2e 35 2c 20 | ,.ot_sinkhorn.coupling_,.c=[.5,. |
54e0 | 2e 35 2c 20 31 5d 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 58 73 5b | .5,.1]).pl.scatter(Xs[:,.0],.Xs[ |
5500 | 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=' |
5520 | 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[: |
5540 | 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' |
5560 | 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 78 74 69 | ,.label='Target.samples').pl.xti |
5580 | 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 | cks([]).pl.yticks([]).pl.title(' |
55a0 | 4d 61 69 6e 20 63 6f 75 70 6c 69 6e 67 20 63 6f 65 66 66 69 63 69 65 6e 74 73 5c 6e 53 69 6e 6b | Main.coupling.coefficients\nSink |
55c0 | 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 | hornTransport')..pl.subplot(2,.3 |
55e0 | 2c 20 36 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 | ,.6).ot.plot.plot2D_samples_mat( |
5600 | 58 73 2c 20 58 74 2c 20 6f 74 5f 6c 70 6c 31 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 63 3d 5b 2e 35 | Xs,.Xt,.ot_lpl1.coupling_,.c=[.5 |
5620 | 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 |
5640 | 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 |
5660 | 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 |
5680 | 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=' |
56a0 | 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 |
56c0 | 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 |
56e0 | 28 27 4d 61 69 6e 20 63 6f 75 70 6c 69 6e 67 20 63 6f 65 66 66 69 63 69 65 6e 74 73 5c 6e 53 69 | ('Main.coupling.coefficients\nSi |
5700 | 6e 6b 68 6f 72 6e 4c 70 6c 31 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c | nkhornLpl1Transport').pl.tight_l |
5720 | 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 23 | ayout()...###################### |
5740 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
5760 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 67 20 33 | ########################.#.Fig.3 |
5780 | 20 3a 20 70 6c 6f 74 20 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 0a 23 20 2d 2d | .:.plot.transported.samples.#.-- |
57a0 | 2d 2d 2d 2d 2d 2d 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 | ------------------------------.. |
57c0 | 23 20 64 69 73 70 6c 61 79 20 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 0a 70 6c | #.display.transported.samples.pl |
57e0 | 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 31 30 2c 20 34 29 29 0a 70 6c 2e 73 | .figure(4,.figsize=(10,.4)).pl.s |
5800 | 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c | ubplot(1,.3,.1).pl.scatter(Xt[:, |
5820 | 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c | .0],.Xt[:,.1],.c=yt,.marker='o', |
5840 | 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 | ............label='Target.sample |
5860 | 73 27 2c 20 61 6c 70 68 61 3d 30 2e 35 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 | s',.alpha=0.5).pl.scatter(transp |
5880 | 5f 58 73 5f 65 6d 64 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 5b 3a 2c 20 | _Xs_emd[:,.0],.transp_Xs_emd[:,. |
58a0 | 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b 27 2c | 1],.c=ys,............marker='+', |
58c0 | 20 6c 61 62 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 20 73 3d 33 30 29 0a 70 | .label='Transp.samples',.s=30).p |
58e0 | 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 45 6d | l.title('Transported.samples\nEm |
5900 | 64 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c | dTransport').pl.legend(loc=0).pl |
5920 | 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 |
5940 | 62 70 6c 6f 74 28 31 2c 20 33 2c 20 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 | bplot(1,.3,.2).pl.scatter(Xt[:,. |
5960 | 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',. |
5980 | 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 |
59a0 | 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_ |
59c0 | 58 73 5f 73 69 6e 6b 68 6f 72 6e 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e | Xs_sinkhorn[:,.0],.transp_Xs_sin |
59e0 | 6b 68 6f 72 6e 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 | khorn[:,.1],.c=ys,............ma |
5a00 | 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 27 | rker='+',.label='Transp.samples' |
5a20 | 2c 20 73 3d 33 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 72 61 6e 73 70 6f 72 74 65 64 20 73 61 | ,.s=30).pl.title('Transported.sa |
5a40 | 6d 70 6c 65 73 5c 6e 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 6c 2e 78 74 | mples\nSinkhornTransport').pl.xt |
5a60 | 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 0a 70 6c 2e 73 75 62 70 6c | icks([]).pl.yticks([])..pl.subpl |
5a80 | 6f 74 28 31 2c 20 33 2c 20 33 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c | ot(1,.3,.3).pl.scatter(Xt[:,.0], |
5aa0 | 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',.... |
5ac0 | 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',. |
5ae0 | 61 6c 70 68 61 3d 30 2e 35 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f | alpha=0.5).pl.scatter(transp_Xs_ |
5b00 | 6c 70 6c 31 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 6c 70 6c 31 5b 3a 2c 20 31 5d | lpl1[:,.0],.transp_Xs_lpl1[:,.1] |
5b20 | 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c | ,.c=ys,............marker='+',.l |
5b40 | 61 62 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 20 73 3d 33 30 29 0a 70 6c 2e | abel='Transp.samples',.s=30).pl. |
5b60 | 74 69 74 6c 65 28 27 54 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 5c 6e 53 69 6e 6b | title('Transported.samples\nSink |
5b80 | 68 6f 72 6e 4c 70 6c 31 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d | hornLpl1Transport').pl.xticks([] |
5ba0 | 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 | ).pl.yticks([])..pl.tight_layout |
5bc0 | 28 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 db 74 d9 4e 71 12 0d cb 23 | ().pl.show().PK.........t.Nq...# |
5be0 | 12 00 00 23 12 00 00 1c 00 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 73 65 6d 69 5f 73 75 70 65 72 76 | ...#.......plot_otda_semi_superv |
5c00 | 69 73 65 64 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 | ised.py#.-*-.coding:.utf-8.-*-." |
5c20 | 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 | "".============================= |
5c40 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4f 54 44 41 20 75 6e 73 75 70 65 72 76 69 73 65 | ===============.OTDA.unsupervise |
5c60 | 64 20 76 73 20 73 65 6d 69 2d 73 75 70 65 72 76 69 73 65 64 20 73 65 74 74 69 6e 67 0a 3d 3d 3d | d.vs.semi-supervised.setting.=== |
5c80 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
5ca0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 6e 74 72 6f 64 75 63 | =========..This.example.introduc |
5cc0 | 65 73 20 61 20 73 65 6d 69 20 73 75 70 65 72 76 69 73 65 64 20 64 6f 6d 61 69 6e 20 61 64 61 70 | es.a.semi.supervised.domain.adap |
5ce0 | 74 61 74 69 6f 6e 20 69 6e 20 61 20 32 44 20 73 65 74 74 69 6e 67 2e 0a 49 74 20 65 78 70 6c 69 | tation.in.a.2D.setting..It.expli |
5d00 | 63 69 74 73 20 74 68 65 20 70 72 6f 62 6c 65 6d 20 6f 66 20 73 65 6d 69 20 73 75 70 65 72 76 69 | cits.the.problem.of.semi.supervi |
5d20 | 73 65 64 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 20 61 6e 64 20 69 6e 74 72 6f 64 | sed.domain.adaptation.and.introd |
5d40 | 75 63 65 73 0a 73 6f 6d 65 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 20 61 70 70 72 | uces.some.optimal.transport.appr |
5d60 | 6f 61 63 68 65 73 20 74 6f 20 73 6f 6c 76 65 20 69 74 2e 0a 0a 51 75 61 6e 74 69 74 69 65 73 20 | oaches.to.solve.it...Quantities. |
5d80 | 73 75 63 68 20 61 73 20 6f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 73 2c 20 67 72 65 61 74 | such.as.optimal.couplings,.great |
5da0 | 65 72 20 63 6f 75 70 6c 69 6e 67 20 63 6f 65 66 66 69 63 69 65 6e 74 73 20 61 6e 64 0a 74 72 61 | er.coupling.coefficients.and.tra |
5dc0 | 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 20 61 72 65 20 72 65 70 72 65 73 65 6e 74 65 64 | nsported.samples.are.represented |
5de0 | 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 67 69 76 65 20 61 20 76 69 73 75 61 6c 20 75 6e 64 65 72 | .in.order.to.give.a.visual.under |
5e00 | 73 74 61 6e 64 69 6e 67 0a 6f 66 20 77 68 61 74 20 74 68 65 20 74 72 61 6e 73 70 6f 72 74 20 6d | standing.of.what.the.transport.m |
5e20 | 65 74 68 6f 64 73 20 61 72 65 20 64 6f 69 6e 67 2e 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 73 | ethods.are.doing.."""..#.Authors |
5e40 | 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 69 | :.Remi.Flamary.<remi.flamary@uni |
5e60 | 63 65 2e 66 72 3e 0a 23 20 20 20 20 20 20 20 20 20 20 53 74 61 6e 69 73 6c 61 73 20 43 68 61 6d | ce.fr>.#..........Stanislas.Cham |
5e80 | 62 6f 6e 20 3c 73 74 61 6e 2e 63 68 61 6d 62 6f 6e 40 67 6d 61 69 6c 2e 63 6f 6d 3e 0a 23 0a 23 | bon.<stan.chambon@gmail.com>.#.# |
5ea0 | 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6d 61 | .License:.MIT.License..import.ma |
5ec0 | 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 0a | tplotlib.pylab.as.pl.import.ot.. |
5ee0 | 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 | .############################### |
5f00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
5f20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a | ###############.#.Generate.data. |
5f40 | 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 |
5f60 | 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.. |
5f80 | 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 |
5fa0 | 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 |
5fc0 | 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 |
5fe0 | 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 |
6000 | 61 72 67 65 74 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | arget)...####################### |
6020 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
6040 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 54 72 61 6e 73 70 | #######################.#.Transp |
6060 | 6f 72 74 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 20 6f 6e 74 6f 20 74 61 72 67 65 74 20 73 | ort.source.samples.onto.target.s |
6080 | 61 6d 70 6c 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | amples.#.----------------------- |
60a0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 20 75 6e 73 75 70 65 | ---------------------...#.unsupe |
60c0 | 72 76 69 73 65 64 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 0a 6f 74 5f 73 69 6e 6b | rvised.domain.adaptation.ot_sink |
60e0 | 68 6f 72 6e 5f 75 6e 20 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 | horn_un.=.ot.da.SinkhornTranspor |
6100 | 74 28 72 65 67 5f 65 3d 31 65 2d 31 29 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f 75 6e 2e 66 69 74 | t(reg_e=1e-1).ot_sinkhorn_un.fit |
6120 | 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 | (Xs=Xs,.Xt=Xt).transp_Xs_sinkhor |
6140 | 6e 5f 75 6e 20 3d 20 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f 75 6e 2e 74 72 61 6e 73 66 6f 72 6d 28 | n_un.=.ot_sinkhorn_un.transform( |
6160 | 58 73 3d 58 73 29 0a 0a 23 20 73 65 6d 69 2d 73 75 70 65 72 76 69 73 65 64 20 64 6f 6d 61 69 6e | Xs=Xs)..#.semi-supervised.domain |
6180 | 20 61 64 61 70 74 61 74 69 6f 6e 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f 73 65 6d 69 20 3d 20 6f | .adaptation.ot_sinkhorn_semi.=.o |
61a0 | 74 2e 64 61 2e 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 28 72 65 67 5f 65 3d 31 65 2d | t.da.SinkhornTransport(reg_e=1e- |
61c0 | 31 29 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f 73 65 6d 69 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 | 1).ot_sinkhorn_semi.fit(Xs=Xs,.X |
61e0 | 74 3d 58 74 2c 20 79 73 3d 79 73 2c 20 79 74 3d 79 74 29 0a 74 72 61 6e 73 70 5f 58 73 5f 73 69 | t=Xt,.ys=ys,.yt=yt).transp_Xs_si |
6200 | 6e 6b 68 6f 72 6e 5f 73 65 6d 69 20 3d 20 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f 73 65 6d 69 2e 74 | nkhorn_semi.=.ot_sinkhorn_semi.t |
6220 | 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 0a 23 20 73 65 6d 69 20 73 75 70 65 72 76 69 73 | ransform(Xs=Xs)..#.semi.supervis |
6240 | 65 64 20 44 41 20 75 73 65 73 20 61 76 61 69 6c 61 62 6c 65 20 6c 61 62 61 6c 65 64 20 74 61 72 | ed.DA.uses.available.labaled.tar |
6260 | 67 65 74 20 73 61 6d 70 6c 65 73 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 20 63 6f 73 74 0a 23 | get.samples.to.modify.the.cost.# |
6280 | 20 6d 61 74 72 69 78 20 69 6e 76 6f 6c 76 65 64 20 69 6e 20 74 68 65 20 4f 54 20 70 72 6f 62 6c | .matrix.involved.in.the.OT.probl |
62a0 | 65 6d 2e 20 54 68 65 20 63 6f 73 74 20 6f 66 20 74 72 61 6e 73 70 6f 72 74 69 6e 67 20 61 20 73 | em..The.cost.of.transporting.a.s |
62c0 | 6f 75 72 63 65 20 73 61 6d 70 6c 65 0a 23 20 6f 66 20 63 6c 61 73 73 20 41 20 6f 6e 74 6f 20 61 | ource.sample.#.of.class.A.onto.a |
62e0 | 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 20 6f 66 20 63 6c 61 73 73 20 42 20 21 3d 20 41 20 69 | .target.sample.of.class.B.!=.A.i |
6300 | 73 20 73 65 74 20 74 6f 20 69 6e 66 69 6e 69 74 65 2c 20 6f 72 20 61 0a 23 20 76 65 72 79 20 6c | s.set.to.infinite,.or.a.#.very.l |
6320 | 61 72 67 65 20 76 61 6c 75 65 0a 0a 23 20 6e 6f 74 65 20 74 68 61 74 20 69 6e 20 74 68 65 20 70 | arge.value..#.note.that.in.the.p |
6340 | 72 65 73 65 6e 74 20 63 61 73 65 20 77 65 20 63 6f 6e 73 69 64 65 72 20 74 68 61 74 20 61 6c 6c | resent.case.we.consider.that.all |
6360 | 20 74 68 65 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 20 61 72 65 0a 23 20 6c 61 62 65 6c 65 | .the.target.samples.are.#.labele |
6380 | 64 2e 20 46 6f 72 20 64 61 69 6c 79 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 20 | d..For.daily.applications,.some. |
63a0 | 74 61 72 67 65 74 20 73 61 6d 70 6c 65 20 6d 69 67 68 74 20 6e 6f 74 20 68 61 76 65 20 6c 61 62 | target.sample.might.not.have.lab |
63c0 | 65 6c 73 2c 0a 23 20 69 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20 65 6c 65 6d 65 6e 74 20 | els,.#.in.this.case.the.element. |
63e0 | 6f 66 20 79 74 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65 73 65 20 73 61 6d | of.yt.corresponding.to.these.sam |
6400 | 70 6c 65 73 20 73 68 6f 75 6c 64 20 62 65 0a 23 20 66 69 6c 6c 65 64 20 77 69 74 68 20 2d 31 2e | ples.should.be.#.filled.with.-1. |
6420 | 0a 0a 23 20 57 61 72 6e 69 6e 67 3a 20 77 65 20 72 65 63 61 6c 6c 20 74 68 61 74 20 2d 31 20 63 | ..#.Warning:.we.recall.that.-1.c |
6440 | 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 61 73 20 61 20 63 6c 61 73 73 20 6c 61 62 65 6c 0a 0a | annot.be.used.as.a.class.label.. |
6460 | 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 | .############################### |
6480 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
64a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 67 20 31 20 3a 20 70 6c 6f 74 73 20 | ###############.#.Fig.1.:.plots. |
64c0 | 73 6f 75 72 63 65 20 61 6e 64 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 20 2b 20 6d 61 74 72 | source.and.target.samples.+.matr |
64e0 | 69 78 20 6f 66 20 70 61 69 72 77 69 73 65 20 64 69 73 74 61 6e 63 65 0a 23 20 2d 2d 2d 2d 2d 2d | ix.of.pairwise.distance.#.------ |
6500 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
6520 | 2d 2d 2d 2d 2d 2d 2d 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 | -------------------------------. |
6540 | 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 31 30 2c 20 31 30 29 29 0a | .pl.figure(1,.figsize=(10,.10)). |
6560 | 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 | pl.subplot(2,.2,.1).pl.scatter(X |
6580 | 73 5b 3a 2c 20 30 5d 2c 20 58 73 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d | s[:,.0],.Xs[:,.1],.c=ys,.marker= |
65a0 | 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e | '+',.label='Source.samples').pl. |
65c0 | 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 6c 65 67 65 | xticks([]).pl.yticks([]).pl.lege |
65e0 | 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 20 20 73 61 6d 70 | nd(loc=0).pl.title('Source..samp |
6600 | 6c 65 73 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 32 29 0a 70 6c 2e 73 63 | les')..pl.subplot(2,.2,.2).pl.sc |
6620 | 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,. |
6640 | 6d 61 72 6b 65 72 3d 27 6f 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 | marker='o',.label='Target.sample |
6660 | 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([]). |
6680 | 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 61 72 67 65 | pl.legend(loc=0).pl.title('Targe |
66a0 | 74 20 73 61 6d 70 6c 65 73 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 33 29 | t.samples')..pl.subplot(2,.2,.3) |
66c0 | 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f 75 6e 2e 63 6f 73 74 5f 2c | .pl.imshow(ot_sinkhorn_un.cost_, |
66e0 | 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 78 74 69 | .interpolation='nearest').pl.xti |
6700 | 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 | cks([]).pl.yticks([]).pl.title(' |
6720 | 43 6f 73 74 20 6d 61 74 72 69 78 20 2d 20 75 6e 73 75 70 65 72 76 69 73 65 64 20 44 41 27 29 0a | Cost.matrix.-.unsupervised.DA'). |
6740 | 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 68 6f 77 28 6f | .pl.subplot(2,.2,.4).pl.imshow(o |
6760 | 74 5f 73 69 6e 6b 68 6f 72 6e 5f 73 65 6d 69 2e 63 6f 73 74 5f 2c 20 69 6e 74 65 72 70 6f 6c 61 | t_sinkhorn_semi.cost_,.interpola |
6780 | 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c | tion='nearest').pl.xticks([]).pl |
67a0 | 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 43 6f 73 74 20 6d 61 74 72 69 | .yticks([]).pl.title('Cost.matri |
67c0 | 78 20 2d 20 73 65 6d 69 73 75 70 65 72 76 69 73 65 64 20 44 41 27 29 0a 0a 70 6c 2e 74 69 67 68 | x.-.semisupervised.DA')..pl.tigh |
67e0 | 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 23 20 74 68 65 20 6f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 | t_layout()..#.the.optimal.coupli |
6800 | 6e 67 20 69 6e 20 74 68 65 20 73 65 6d 69 2d 73 75 70 65 72 76 69 73 65 64 20 44 41 20 63 61 73 | ng.in.the.semi-supervised.DA.cas |
6820 | 65 20 77 69 6c 6c 20 65 78 68 69 62 69 74 20 22 20 73 68 61 70 65 0a 23 20 73 69 6d 69 6c 61 72 | e.will.exhibit.".shape.#.similar |
6840 | 22 20 74 6f 20 74 68 65 20 63 6f 73 74 20 6d 61 74 72 69 78 2c 20 28 62 6c 6f 63 6b 20 64 69 61 | ".to.the.cost.matrix,.(block.dia |
6860 | 67 6f 6e 61 6c 20 6d 61 74 72 69 78 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | gonal.matrix)...################ |
6880 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
68a0 | 23 23 23 23 23 23 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 | ##############################.# |
68c0 | 20 46 69 67 20 32 20 3a 20 70 6c 6f 74 73 20 6f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 73 | .Fig.2.:.plots.optimal.couplings |
68e0 | 20 66 6f 72 20 74 68 65 20 64 69 66 66 65 72 65 6e 74 20 6d 65 74 68 6f 64 73 0a 23 20 2d 2d 2d | .for.the.different.methods.#.--- |
6900 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
6920 | 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 |
6940 | 65 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 38 2c 20 34 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 | e(2,.figsize=(8,.4))..pl.subplot |
6960 | 28 31 2c 20 32 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f | (1,.2,.1).pl.imshow(ot_sinkhorn_ |
6980 | 75 6e 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 | un.coupling_,.interpolation='nea |
69a0 | 72 65 73 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b | rest').pl.xticks([]).pl.yticks([ |
69c0 | 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 5c 6e 55 | ]).pl.title('Optimal.coupling\nU |
69e0 | 6e 73 75 70 65 72 76 69 73 65 64 20 44 41 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 | nsupervised.DA')..pl.subplot(1,. |
6a00 | 32 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f 73 65 6d 69 | 2,.2).pl.imshow(ot_sinkhorn_semi |
6a20 | 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 | .coupling_,.interpolation='neare |
6a40 | 73 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 | st').pl.xticks([]).pl.yticks([]) |
6a60 | 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 5c 6e 53 65 6d | .pl.title('Optimal.coupling\nSem |
6a80 | 69 2d 73 75 70 65 72 76 69 73 65 64 20 44 41 27 29 0a 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f | i-supervised.DA')..pl.tight_layo |
6aa0 | 75 74 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ut()...######################### |
6ac0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
6ae0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 67 20 33 20 3a 20 | #####################.#.Fig.3.:. |
6b00 | 70 6c 6f 74 20 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 0a 23 20 2d 2d 2d 2d 2d | plot.transported.samples.#.----- |
6b20 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 20 64 | ---------------------------..#.d |
6b40 | 69 73 70 6c 61 79 20 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 0a 70 6c 2e 66 69 | isplay.transported.samples.pl.fi |
6b60 | 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 38 2c 20 34 29 29 0a 70 6c 2e 73 75 62 70 6c | gure(4,.figsize=(8,.4)).pl.subpl |
6b80 | 6f 74 28 31 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c | ot(1,.2,.1).pl.scatter(Xt[:,.0], |
6ba0 | 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',.... |
6bc0 | 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',. |
6be0 | 61 6c 70 68 61 3d 30 2e 35 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f | alpha=0.5).pl.scatter(transp_Xs_ |
6c00 | 73 69 6e 6b 68 6f 72 6e 5f 75 6e 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e | sinkhorn_un[:,.0],.transp_Xs_sin |
6c20 | 6b 68 6f 72 6e 5f 75 6e 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 | khorn_un[:,.1],.c=ys,........... |
6c40 | 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 |
6c60 | 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 |
6c80 | 20 73 61 6d 70 6c 65 73 5c 6e 45 6d 64 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 6c 2e 6c 65 67 65 | .samples\nEmdTransport').pl.lege |
6ca0 | 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b | nd(loc=0).pl.xticks([]).pl.ytick |
6cc0 | 73 28 5b 5d 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 32 29 0a 70 6c 2e 73 63 | s([])..pl.subplot(1,.2,.2).pl.sc |
6ce0 | 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,. |
6d00 | 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 |
6d20 | 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 30 2e 35 29 0a 70 6c 2e 73 63 61 | rget.samples',.alpha=0.5).pl.sca |
6d40 | 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 5f 73 65 6d 69 5b 3a 2c 20 | tter(transp_Xs_sinkhorn_semi[:,. |
6d60 | 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 5f 73 65 6d 69 5b 3a 2c 20 31 | 0],.transp_Xs_sinkhorn_semi[:,.1 |
6d80 | 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 | ],.c=ys,............marker='+',. |
6da0 | 6c 61 62 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 20 73 3d 33 30 29 0a 70 6c | label='Transp.samples',.s=30).pl |
6dc0 | 2e 74 69 74 6c 65 28 27 54 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 5c 6e 53 69 6e | .title('Transported.samples\nSin |
6de0 | 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 | khornTransport').pl.xticks([]).p |
6e00 | 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a | l.yticks([])..pl.tight_layout(). |
6e20 | 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 da 74 d9 4e 0b 5c 2a af a2 06 00 00 | pl.show().PK.........t.N.\*..... |
6e40 | a2 06 00 00 0d 00 00 00 70 6c 6f 74 5f 4f 54 5f 31 44 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e | ........plot_OT_1D.py#.-*-.codin |
6e60 | 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | g:.utf-8.-*-.""".=============== |
6e80 | 3d 3d 3d 3d 3d 0a 31 44 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 0a 3d 3d 3d 3d 3d | =====.1D.optimal.transport.===== |
6ea0 | 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 6c | ===============..This.example.il |
6ec0 | 6c 75 73 74 72 61 74 65 73 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66 20 45 4d 44 | lustrates.the.computation.of.EMD |
6ee0 | 20 61 6e 64 20 53 69 6e 6b 68 6f 72 6e 20 74 72 61 6e 73 70 6f 72 74 20 70 6c 61 6e 73 0a 61 6e | .and.Sinkhorn.transport.plans.an |
6f00 | 64 20 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 | d.their.visualization..."""..#.A |
6f20 | 75 74 68 6f 72 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 | uthor:.Remi.Flamary.<remi.flamar |
6f40 | 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 | y@unice.fr>.#.#.License:.MIT.Lic |
6f60 | 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 | ense..import.numpy.as.np.import. |
6f80 | 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 |
6fa0 | 0a 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 | .import.ot.plot.from.ot.datasets |
6fc0 | 20 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 | .import.make_1D_gauss.as.gauss.. |
6fe0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7000 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7020 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 | ##############.#.Generate.data.# |
7040 | 20 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 | .-------------...#%%.parameters. |
7060 | 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 |
7080 | 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 |
70a0 | 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 |
70c0 | 73 0a 61 20 3d 20 67 61 75 73 73 28 6e 2c 20 6d 3d 32 30 2c 20 73 3d 35 29 20 20 23 20 6d 3d 20 | s.a.=.gauss(n,.m=20,.s=5)..#.m=. |
70e0 | 6d 65 61 6e 2c 20 73 3d 20 73 74 64 0a 62 20 3d 20 67 61 75 73 73 28 6e 2c 20 6d 3d 36 30 2c 20 | mean,.s=.std.b.=.gauss(n,.m=60,. |
7100 | 73 3d 31 30 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 20 3d 20 6f 74 2e 64 69 73 74 | s=10)..#.loss.matrix.M.=.ot.dist |
7120 | 28 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 2c 20 78 2e 72 65 73 68 61 70 65 28 28 6e | (x.reshape((n,.1)),.x.reshape((n |
7140 | 2c 20 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 | ,.1))).M./=.M.max()...########## |
7160 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7180 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
71a0 | 23 23 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 | ####.#.Plot.distributions.and.lo |
71c0 | 73 73 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 | ss.matrix.#.-------------------- |
71e0 | 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 74 68 65 20 64 69 73 | --------------..#%%.plot.the.dis |
7200 | 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 69 7a 65 | tributions..pl.figure(1,.figsize |
7220 | 3d 28 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 | =(6.4,.3)).pl.plot(x,.a,.'b',.la |
7240 | 62 65 6c 3d 27 53 6f 75 72 63 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 27 29 0a 70 6c 2e 70 6c | bel='Source.distribution').pl.pl |
7260 | 6f 74 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 | ot(x,.b,.'r',.label='Target.dist |
7280 | 72 69 62 75 74 69 6f 6e 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 29 0a 0a 23 25 25 20 70 6c 6f 74 | ribution').pl.legend()..#%%.plot |
72a0 | 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 61 6e 64 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 0a | .distributions.and.loss.matrix.. |
72c0 | 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 29 29 0a 6f 74 2e | pl.figure(2,.figsize=(5,.5)).ot. |
72e0 | 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 43 6f 73 74 20 6d | plot.plot1D_mat(a,.b,.M,.'Cost.m |
7300 | 61 74 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 | atrix.M')..##################### |
7320 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7340 | 23 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 6c 76 | #########################.#.Solv |
7360 | 65 20 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 | e.EMD.#.---------...#%%.EMD..G0. |
7380 | 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 33 2c 20 | =.ot.emd(a,.b,.M)..pl.figure(3,. |
73a0 | 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 |
73c0 | 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 23 | at(a,.b,.G0,.'OT.matrix.G0')..## |
73e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7400 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7420 | 23 23 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 | ############.#.Solve.Sinkhorn.#. |
7440 | 2d 2d 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 | --------------...#%%.Sinkhorn..l |
7460 | 61 6d 62 64 20 3d 20 31 65 2d 33 0a 47 73 20 3d 20 6f 74 2e 73 69 6e 6b 68 6f 72 6e 28 61 2c 20 | ambd.=.1e-3.Gs.=.ot.sinkhorn(a,. |
7480 | 62 2c 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 | b,.M,.lambd,.verbose=True)..pl.f |
74a0 | 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 6c 6f 74 | igure(4,.figsize=(5,.5)).ot.plot |
74c0 | 2e 70 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 | .plot1D_mat(a,.b,.Gs,.'OT.matrix |
74e0 | 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 00 00 00 00 | .Sinkhorn')..pl.show().PK....... |
7500 | 00 db 74 d9 4e 6d 8a 53 18 e2 17 00 00 e2 17 00 00 12 00 00 00 70 6c 6f 74 5f 73 74 6f 63 68 61 | ..t.Nm.S.............plot_stocha |
7520 | 73 74 69 63 2e 70 79 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 | stic.py""".===================== |
7540 | 3d 3d 3d 3d 3d 0a 53 74 6f 63 68 61 73 74 69 63 20 65 78 61 6d 70 6c 65 73 0a 3d 3d 3d 3d 3d 3d | =====.Stochastic.examples.====== |
7560 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 | ====================..This.examp |
7580 | 6c 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 | le.is.designed.to.show.how.to.us |
75a0 | 65 20 74 68 65 20 73 74 6f 63 68 61 74 69 63 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 61 6c 67 | e.the.stochatic.optimization.alg |
75c0 | 6f 72 69 74 68 6d 73 20 66 6f 72 20 64 65 73 63 72 65 74 65 20 61 6e 64 20 73 65 6d 69 63 6f 6e | orithms.for.descrete.and.semicon |
75e0 | 74 69 6e 6f 75 73 20 6d 65 61 73 75 72 65 73 20 66 72 6f 6d 20 74 68 65 20 50 4f 54 20 6c 69 62 | tinous.measures.from.the.POT.lib |
7600 | 72 61 72 79 2e 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a 20 4b 69 6c 69 61 6e 20 46 61 74 | rary..."""..#.Author:.Kilian.Fat |
7620 | 72 61 73 20 3c 6b 69 6c 69 61 6e 2e 66 61 74 72 61 73 40 67 6d 61 69 6c 2e 63 6f 6d 3e 0a 23 0a | ras.<kilian.fatras@gmail.com>.#. |
7640 | 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6d | #.License:.MIT.License..import.m |
7660 | 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 6e 75 6d | atplotlib.pylab.as.pl.import.num |
7680 | 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6f 74 0a 69 6d 70 6f 72 74 20 6f 74 2e 70 6c 6f | py.as.np.import.ot.import.ot.plo |
76a0 | 74 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | t...############################ |
76c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
76e0 | 23 23 23 23 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 | #################.#.COMPUTE.TRAN |
7700 | 53 50 4f 52 54 41 54 49 4f 4e 20 4d 41 54 52 49 58 20 46 4f 52 20 53 45 4d 49 2d 44 55 41 4c 20 | SPORTATION.MATRIX.FOR.SEMI-DUAL. |
7720 | 50 52 4f 42 4c 45 4d 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 | PROBLEM.######################## |
7740 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7760 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 23 23 23 23 23 23 23 23 | #####################.########## |
7780 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
77a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
77c0 | 23 23 23 0a 23 20 44 49 53 43 52 45 54 45 20 43 41 53 45 3a 0a 23 0a 23 20 53 61 6d 70 6c 65 20 | ###.#.DISCRETE.CASE:.#.#.Sample. |
77e0 | 74 77 6f 20 64 69 73 63 72 65 74 65 20 6d 65 61 73 75 72 65 73 20 66 6f 72 20 74 68 65 20 64 69 | two.discrete.measures.for.the.di |
7800 | 73 63 72 65 74 65 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 | screte.case.#.------------------ |
7820 | 2d 2d 2d 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 | ---------------------------.#.#. |
7840 | 44 65 66 69 6e 65 20 32 20 64 69 73 63 72 65 74 65 20 6d 65 61 73 75 72 65 73 20 61 20 61 6e 64 | Define.2.discrete.measures.a.and |
7860 | 20 62 2c 20 74 68 65 20 70 6f 69 6e 74 73 20 77 68 65 72 65 20 61 72 65 20 64 65 66 69 6e 65 64 | .b,.the.points.where.are.defined |
7880 | 20 74 68 65 20 73 6f 75 72 63 65 0a 23 20 61 6e 64 20 74 68 65 20 74 61 72 67 65 74 20 6d 65 61 | .the.source.#.and.the.target.mea |
78a0 | 73 75 72 65 73 20 61 6e 64 20 66 69 6e 61 6c 6c 79 20 74 68 65 20 63 6f 73 74 20 6d 61 74 72 69 | sures.and.finally.the.cost.matri |
78c0 | 78 20 63 2e 0a 0a 6e 5f 73 6f 75 72 63 65 20 3d 20 37 0a 6e 5f 74 61 72 67 65 74 20 3d 20 34 0a | x.c...n_source.=.7.n_target.=.4. |
78e0 | 72 65 67 20 3d 20 31 0a 6e 75 6d 49 74 65 72 6d 61 78 20 3d 20 31 30 30 30 0a 0a 61 20 3d 20 6f | reg.=.1.numItermax.=.1000..a.=.o |
7900 | 74 2e 75 74 69 6c 73 2e 75 6e 69 66 28 6e 5f 73 6f 75 72 63 65 29 0a 62 20 3d 20 6f 74 2e 75 74 | t.utils.unif(n_source).b.=.ot.ut |
7920 | 69 6c 73 2e 75 6e 69 66 28 6e 5f 74 61 72 67 65 74 29 0a 0a 72 6e 67 20 3d 20 6e 70 2e 72 61 6e | ils.unif(n_target)..rng.=.np.ran |
7940 | 64 6f 6d 2e 52 61 6e 64 6f 6d 53 74 61 74 65 28 30 29 0a 58 5f 73 6f 75 72 63 65 20 3d 20 72 6e | dom.RandomState(0).X_source.=.rn |
7960 | 67 2e 72 61 6e 64 6e 28 6e 5f 73 6f 75 72 63 65 2c 20 32 29 0a 59 5f 74 61 72 67 65 74 20 3d 20 | g.randn(n_source,.2).Y_target.=. |
7980 | 72 6e 67 2e 72 61 6e 64 6e 28 6e 5f 74 61 72 67 65 74 2c 20 32 29 0a 4d 20 3d 20 6f 74 2e 64 69 | rng.randn(n_target,.2).M.=.ot.di |
79a0 | 73 74 28 58 5f 73 6f 75 72 63 65 2c 20 59 5f 74 61 72 67 65 74 29 0a 0a 23 23 23 23 23 23 23 23 | st(X_source,.Y_target)..######## |
79c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
79e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7a00 | 23 23 23 23 23 0a 23 0a 23 20 43 61 6c 6c 20 74 68 65 20 22 53 41 47 22 20 6d 65 74 68 6f 64 20 | #####.#.#.Call.the."SAG".method. |
7a20 | 74 6f 20 66 69 6e 64 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 | to.find.the.transportation.matri |
7a40 | 78 20 69 6e 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 | x.in.the.discrete.case.#.------- |
7a60 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
7a80 | 2d 2d 2d 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 53 41 | ------.#.#.Define.the.method."SA |
7aa0 | 47 22 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 | G",.call.ot.solve_semi_dual_entr |
7ac0 | 6f 70 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 | opic.and.plot.the.#.results...me |
7ae0 | 74 68 6f 64 20 3d 20 22 53 41 47 22 0a 73 61 67 5f 70 69 20 3d 20 6f 74 2e 73 74 6f 63 68 61 73 | thod.=."SAG".sag_pi.=.ot.stochas |
7b00 | 74 69 63 2e 73 6f 6c 76 65 5f 73 65 6d 69 5f 64 75 61 6c 5f 65 6e 74 72 6f 70 69 63 28 61 2c 20 | tic.solve_semi_dual_entropic(a,. |
7b20 | 62 2c 20 4d 2c 20 72 65 67 2c 20 6d 65 74 68 6f 64 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | b,.M,.reg,.method,.............. |
7b40 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
7b60 | 20 20 20 6e 75 6d 49 74 65 72 6d 61 78 29 0a 70 72 69 6e 74 28 73 61 67 5f 70 69 29 0a 0a 23 23 | ...numItermax).print(sag_pi)..## |
7b80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7ba0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7bc0 | 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 53 45 4d 49 43 4f 4e 54 49 4e 4f 55 53 20 43 41 53 45 | ###########.#.SEMICONTINOUS.CASE |
7be0 | 3a 0a 23 0a 23 20 53 61 6d 70 6c 65 20 6f 6e 65 20 67 65 6e 65 72 61 6c 20 6d 65 61 73 75 72 65 | :.#.#.Sample.one.general.measure |
7c00 | 20 61 2c 20 6f 6e 65 20 64 69 73 63 72 65 74 65 20 6d 65 61 73 75 72 65 73 20 62 20 66 6f 72 20 | .a,.one.discrete.measures.b.for. |
7c20 | 74 68 65 20 73 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 | the.semicontinous.#.case.#.----- |
7c40 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
7c60 | 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 23 20 44 65 66 69 6e 65 20 6f 6e 65 20 67 65 6e 65 72 61 6c 20 | --------.#.#.Define.one.general. |
7c80 | 6d 65 61 73 75 72 65 20 61 2c 20 6f 6e 65 20 64 69 73 63 72 65 74 65 20 6d 65 61 73 75 72 65 73 | measure.a,.one.discrete.measures |
7ca0 | 20 62 2c 20 74 68 65 20 70 6f 69 6e 74 73 20 77 68 65 72 65 0a 23 20 61 72 65 20 64 65 66 69 6e | .b,.the.points.where.#.are.defin |
7cc0 | 65 64 20 74 68 65 20 73 6f 75 72 63 65 20 61 6e 64 20 74 68 65 20 74 61 72 67 65 74 20 6d 65 61 | ed.the.source.and.the.target.mea |
7ce0 | 73 75 72 65 73 20 61 6e 64 20 66 69 6e 61 6c 6c 79 20 74 68 65 20 63 6f 73 74 20 6d 61 74 72 69 | sures.and.finally.the.cost.matri |
7d00 | 78 20 63 2e 0a 0a 6e 5f 73 6f 75 72 63 65 20 3d 20 37 0a 6e 5f 74 61 72 67 65 74 20 3d 20 34 0a | x.c...n_source.=.7.n_target.=.4. |
7d20 | 72 65 67 20 3d 20 31 0a 6e 75 6d 49 74 65 72 6d 61 78 20 3d 20 31 30 30 30 0a 6c 6f 67 20 3d 20 | reg.=.1.numItermax.=.1000.log.=. |
7d40 | 54 72 75 65 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 | True..a.=.ot.utils.unif(n_source |
7d60 | 29 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 | ).b.=.ot.utils.unif(n_target)..r |
7d80 | 6e 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 | ng.=.np.random.RandomState(0).X_ |
7da0 | 73 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 | source.=.rng.randn(n_source,.2). |
7dc0 | 59 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 | Y_target.=.rng.randn(n_target,.2 |
7de0 | 29 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 | ).M.=.ot.dist(X_source,.Y_target |
7e00 | 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | )..############################# |
7e20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7e40 | 23 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 41 | ################.#.#.Call.the."A |
7e60 | 53 47 44 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 | SGD".method.to.find.the.transpor |
7e80 | 74 61 74 69 6f 6e 20 6d 61 74 72 69 78 20 69 6e 20 74 68 65 20 73 65 6d 69 63 6f 6e 74 69 6e 6f | tation.matrix.in.the.semicontino |
7ea0 | 75 73 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 | us.#.case.#.-------------------- |
7ec0 | 2d 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 44 65 | -------------------------.#.#.De |
7ee0 | 66 69 6e 65 20 74 68 65 20 6d 65 74 68 6f 64 20 22 41 53 47 44 22 2c 20 63 61 6c 6c 20 6f 74 2e | fine.the.method."ASGD",.call.ot. |
7f00 | 73 6f 6c 76 65 5f 73 65 6d 69 5f 64 75 61 6c 5f 65 6e 74 72 6f 70 69 63 20 61 6e 64 20 70 6c 6f | solve_semi_dual_entropic.and.plo |
7f20 | 74 20 74 68 65 0a 23 20 72 65 73 75 6c 74 73 2e 0a 0a 6d 65 74 68 6f 64 20 3d 20 22 41 53 47 44 | t.the.#.results...method.=."ASGD |
7f40 | 22 0a 61 73 67 64 5f 70 69 2c 20 6c 6f 67 5f 61 73 67 64 20 3d 20 6f 74 2e 73 74 6f 63 68 61 73 | ".asgd_pi,.log_asgd.=.ot.stochas |
7f60 | 74 69 63 2e 73 6f 6c 76 65 5f 73 65 6d 69 5f 64 75 61 6c 5f 65 6e 74 72 6f 70 69 63 28 61 2c 20 | tic.solve_semi_dual_entropic(a,. |
7f80 | 62 2c 20 4d 2c 20 72 65 67 2c 20 6d 65 74 68 6f 64 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | b,.M,.reg,.method,.............. |
7fa0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
7fc0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6d 49 74 65 72 6d 61 78 2c 20 6c 6f 67 3d 6c 6f | ..............numItermax,.log=lo |
7fe0 | 67 29 0a 70 72 69 6e 74 28 6c 6f 67 5f 61 73 67 64 5b 27 61 6c 70 68 61 27 5d 2c 20 6c 6f 67 5f | g).print(log_asgd['alpha'],.log_ |
8000 | 61 73 67 64 5b 27 62 65 74 61 27 5d 29 0a 70 72 69 6e 74 28 61 73 67 64 5f 70 69 29 0a 0a 23 23 | asgd['beta']).print(asgd_pi)..## |
8020 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8040 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8060 | 23 23 23 23 23 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 | ###########.#.#.Compare.the.resu |
8080 | 6c 74 73 20 77 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 | lts.with.the.Sinkhorn.algorithm. |
80a0 | 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 | #.------------------------------ |
80c0 | 2d 2d 2d 2d 2d 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 | ---------------.#.#.Call.the.Sin |
80e0 | 6b 68 6f 72 6e 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 | khorn.algorithm.from.POT..sinkho |
8100 | 72 6e 5f 70 69 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 | rn_pi.=.ot.sinkhorn(a,.b,.M,.reg |
8120 | 29 0a 70 72 69 6e 74 28 73 69 6e 6b 68 6f 72 6e 5f 70 69 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 | ).print(sinkhorn_pi)...######### |
8140 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8160 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8180 | 23 23 23 23 23 0a 23 20 50 4c 4f 54 20 54 52 41 4e 53 50 4f 52 54 41 54 49 4f 4e 20 4d 41 54 52 | #####.#.PLOT.TRANSPORTATION.MATR |
81a0 | 49 58 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 | IX.############################# |
81c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
81e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 | #################..############# |
8200 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8220 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8240 | 23 0a 23 20 50 6c 6f 74 20 53 41 47 20 72 65 73 75 6c 74 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d | #.#.Plot.SAG.results.#.--------- |
8260 | 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 |
8280 | 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 |
82a0 | 61 67 5f 70 69 2c 20 27 73 65 6d 69 2d 64 75 61 6c 20 3a 20 4f 54 20 6d 61 74 72 69 78 20 53 41 | ag_pi,.'semi-dual.:.OT.matrix.SA |
82c0 | 47 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 | G').pl.show()...################ |
82e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8300 | 23 23 23 23 23 23 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 | ##############################.# |
8320 | 20 50 6c 6f 74 20 41 53 47 44 20 72 65 73 75 6c 74 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | .Plot.ASGD.results.#.----------- |
8340 | 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c | ------..pl.figure(4,.figsize=(5, |
8360 | 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 61 73 | .5)).ot.plot.plot1D_mat(a,.b,.as |
8380 | 67 64 5f 70 69 2c 20 27 73 65 6d 69 2d 64 75 61 6c 20 3a 20 4f 54 20 6d 61 74 72 69 78 20 41 53 | gd_pi,.'semi-dual.:.OT.matrix.AS |
83a0 | 47 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 | GD').pl.show()...############### |
83c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
83e0 | 23 23 23 23 23 23 23 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 | ###############################. |
8400 | 23 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 | #.Plot.Sinkhorn.results.#.------ |
8420 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 34 2c 20 66 69 | ---------------..pl.figure(4,.fi |
8440 | 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 |
8460 | 28 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 | (a,.b,.sinkhorn_pi,.'OT.matrix.S |
8480 | 69 6e 6b 68 6f 72 6e 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 | inkhorn').pl.show()...########## |
84a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
84c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
84e0 | 23 23 23 0a 23 20 43 4f 4d 50 55 54 45 20 54 52 41 4e 53 50 4f 52 54 41 54 49 4f 4e 20 4d 41 54 | ###.#.COMPUTE.TRANSPORTATION.MAT |
8500 | 52 49 58 20 46 4f 52 20 44 55 41 4c 20 50 52 4f 42 4c 45 4d 0a 23 23 23 23 23 23 23 23 23 23 23 | RIX.FOR.DUAL.PROBLEM.########### |
8520 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8540 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8560 | 23 23 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 | ##.############################# |
8580 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
85a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 53 45 4d 49 43 4f 4e 54 49 4e 4f 55 53 | ################.#.SEMICONTINOUS |
85c0 | 20 43 41 53 45 3a 0a 23 0a 23 20 53 61 6d 70 6c 65 20 6f 6e 65 20 67 65 6e 65 72 61 6c 20 6d 65 | .CASE:.#.#.Sample.one.general.me |
85e0 | 61 73 75 72 65 20 61 2c 20 6f 6e 65 20 64 69 73 63 72 65 74 65 20 6d 65 61 73 75 72 65 73 20 62 | asure.a,.one.discrete.measures.b |
8600 | 20 66 6f 72 20 74 68 65 20 73 65 6d 69 63 6f 6e 74 69 6e 6f 75 73 0a 23 20 63 61 73 65 0a 23 20 | .for.the.semicontinous.#.case.#. |
8620 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
8640 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 23 20 44 65 66 69 6e 65 20 6f 6e 65 20 67 65 6e | -------------.#.#.Define.one.gen |
8660 | 65 72 61 6c 20 6d 65 61 73 75 72 65 20 61 2c 20 6f 6e 65 20 64 69 73 63 72 65 74 65 20 6d 65 61 | eral.measure.a,.one.discrete.mea |
8680 | 73 75 72 65 73 20 62 2c 20 74 68 65 20 70 6f 69 6e 74 73 20 77 68 65 72 65 0a 23 20 61 72 65 20 | sures.b,.the.points.where.#.are. |
86a0 | 64 65 66 69 6e 65 64 20 74 68 65 20 73 6f 75 72 63 65 20 61 6e 64 20 74 68 65 20 74 61 72 67 65 | defined.the.source.and.the.targe |
86c0 | 74 20 6d 65 61 73 75 72 65 73 20 61 6e 64 20 66 69 6e 61 6c 6c 79 20 74 68 65 20 63 6f 73 74 20 | t.measures.and.finally.the.cost. |
86e0 | 6d 61 74 72 69 78 20 63 2e 0a 0a 6e 5f 73 6f 75 72 63 65 20 3d 20 37 0a 6e 5f 74 61 72 67 65 74 | matrix.c...n_source.=.7.n_target |
8700 | 20 3d 20 34 0a 72 65 67 20 3d 20 31 0a 6e 75 6d 49 74 65 72 6d 61 78 20 3d 20 31 30 30 30 30 30 | .=.4.reg.=.1.numItermax.=.100000 |
8720 | 0a 6c 72 20 3d 20 30 2e 31 0a 62 61 74 63 68 5f 73 69 7a 65 20 3d 20 33 0a 6c 6f 67 20 3d 20 54 | .lr.=.0.1.batch_size.=.3.log.=.T |
8740 | 72 75 65 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 | rue..a.=.ot.utils.unif(n_source) |
8760 | 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 |
8780 | 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 |
87a0 | 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 |
87c0 | 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) |
87e0 | 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) |
8800 | 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 | ..############################## |
8820 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8840 | 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 47 | ###############.#.#.Call.the."SG |
8860 | 44 22 20 64 75 61 6c 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 | D".dual.method.to.find.the.trans |
8880 | 70 6f 72 74 61 74 69 6f 6e 20 6d 61 74 72 69 78 20 69 6e 20 74 68 65 0a 23 20 73 65 6d 69 63 6f | portation.matrix.in.the.#.semico |
88a0 | 6e 74 69 6e 6f 75 73 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 | ntinous.case.#.----------------- |
88c0 | 2d 2d 2d 2d 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 | ----------------------------.#.# |
88e0 | 20 43 61 6c 6c 20 6f 74 2e 73 6f 6c 76 65 5f 64 75 61 6c 5f 65 6e 74 72 6f 70 69 63 20 61 6e 64 | .Call.ot.solve_dual_entropic.and |
8900 | 20 70 6c 6f 74 20 74 68 65 20 72 65 73 75 6c 74 73 2e 0a 0a 73 67 64 5f 64 75 61 6c 5f 70 69 2c | .plot.the.results...sgd_dual_pi, |
8920 | 20 6c 6f 67 5f 73 67 64 20 3d 20 6f 74 2e 73 74 6f 63 68 61 73 74 69 63 2e 73 6f 6c 76 65 5f 64 | .log_sgd.=.ot.stochastic.solve_d |
8940 | 75 61 6c 5f 65 6e 74 72 6f 70 69 63 28 61 2c 20 62 2c 20 4d 2c 20 72 65 67 2c 0a 20 20 20 20 20 | ual_entropic(a,.b,.M,.reg,...... |
8960 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
8980 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 61 74 63 68 5f 73 69 7a 65 2c 20 | ....................batch_size,. |
89a0 | 6e 75 6d 49 74 65 72 6d 61 78 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | numItermax,..................... |
89c0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
89e0 | 20 20 20 20 20 6c 72 2c 20 6c 6f 67 3d 6c 6f 67 29 0a 70 72 69 6e 74 28 6c 6f 67 5f 73 67 64 5b | .....lr,.log=log).print(log_sgd[ |
8a00 | 27 61 6c 70 68 61 27 5d 2c 20 6c 6f 67 5f 73 67 64 5b 27 62 65 74 61 27 5d 29 0a 70 72 69 6e 74 | 'alpha'],.log_sgd['beta']).print |
8a20 | 28 73 67 64 5f 64 75 61 6c 5f 70 69 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | (sgd_dual_pi)..################# |
8a40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8a60 | 23 23 23 23 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 | ############################.#.# |
8a80 | 20 43 6f 6d 70 61 72 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 | .Compare.the.results.with.the.Si |
8aa0 | 6e 6b 68 6f 72 6e 20 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 | nkhorn.algorithm.#.------------- |
8ac0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
8ae0 | 0a 23 0a 23 20 43 61 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 | .#.#.Call.the.Sinkhorn.algorithm |
8b00 | 20 66 72 6f 6d 20 50 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 | .from.POT..sinkhorn_pi.=.ot.sink |
8b20 | 68 6f 72 6e 28 61 2c 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 | horn(a,.b,.M,.reg).print(sinkhor |
8b40 | 6e 5f 70 69 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | n_pi)..######################### |
8b60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8b80 | 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 20 53 47 | #####################.#.Plot..SG |
8ba0 | 44 20 72 65 73 75 6c 74 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 | D.results.#.-----------------..p |
8bc0 | 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 |
8be0 | 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 73 67 64 5f 64 75 61 6c 5f 70 69 | lot.plot1D_mat(a,.b,.sgd_dual_pi |
8c00 | 2c 20 27 64 75 61 6c 20 3a 20 4f 54 20 6d 61 74 72 69 78 20 53 47 44 27 29 0a 70 6c 2e 73 68 6f | ,.'dual.:.OT.matrix.SGD').pl.sho |
8c20 | 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 23 | w()...########################## |
8c40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8c60 | 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 53 69 6e 6b | ####################.#.Plot.Sink |
8c80 | 68 6f 72 6e 20 72 65 73 75 6c 74 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | horn.results.#.----------------- |
8ca0 | 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 | ----..pl.figure(4,.figsize=(5,.5 |
8cc0 | 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 69 6e 6b | )).ot.plot.plot1D_mat(a,.b,.sink |
8ce0 | 68 6f 72 6e 5f 70 69 2c 20 27 4f 54 20 6d 61 74 72 69 78 20 53 69 6e 6b 68 6f 72 6e 27 29 0a 70 | horn_pi,.'OT.matrix.Sinkhorn').p |
8d00 | 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 db 74 d9 4e f2 7c 7e 9e 5c 0e 00 00 5c | l.show().PK.........t.N.|~.\...\ |
8d20 | 0e 00 00 15 00 00 00 70 6c 6f 74 5f 62 61 72 79 63 65 6e 74 65 72 5f 31 44 2e 70 79 23 20 2d 2a | .......plot_barycenter_1D.py#.-* |
8d40 | 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.-*-.""".======== |
8d60 | 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 |
8d80 | 73 74 65 69 6e 20 62 61 72 79 63 65 6e 74 65 72 20 64 65 6d 6f 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | stein.barycenter.demo.========== |
8da0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 | ====================..This.examp |
8dc0 | 6c 65 20 69 6c 6c 75 73 74 72 61 74 65 73 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f | le.illustrates.the.computation.o |
8de0 | 66 20 72 65 67 75 6c 61 72 69 7a 65 64 20 57 61 73 73 65 72 73 79 65 69 6e 20 42 61 72 79 63 65 | f.regularized.Wassersyein.Baryce |
8e00 | 6e 74 65 72 0a 61 73 20 70 72 6f 70 6f 73 65 64 20 69 6e 20 5b 33 5d 2e 0a 0a 0a 5b 33 5d 20 42 | nter.as.proposed.in.[3]....[3].B |
8e20 | 65 6e 61 6d 6f 75 2c 20 4a 2e 20 44 2e 2c 20 43 61 72 6c 69 65 72 2c 20 47 2e 2c 20 43 75 74 75 | enamou,.J..D.,.Carlier,.G.,.Cutu |
8e40 | 72 69 2c 20 4d 2e 2c 20 4e 65 6e 6e 61 2c 20 4c 2e 2c 20 26 20 50 65 79 72 c3 a9 2c 20 47 2e 20 | ri,.M.,.Nenna,.L.,.&.Peyr..,.G.. |
8e60 | 28 32 30 31 35 29 2e 0a 49 74 65 72 61 74 69 76 65 20 42 72 65 67 6d 61 6e 20 70 72 6f 6a 65 63 | (2015)..Iterative.Bregman.projec |
8e80 | 74 69 6f 6e 73 20 66 6f 72 20 72 65 67 75 6c 61 72 69 7a 65 64 20 74 72 61 6e 73 70 6f 72 74 61 | tions.for.regularized.transporta |
8ea0 | 74 69 6f 6e 20 70 72 6f 62 6c 65 6d 73 0a 53 49 41 4d 20 4a 6f 75 72 6e 61 6c 20 6f 6e 20 53 63 | tion.problems.SIAM.Journal.on.Sc |
8ec0 | 69 65 6e 74 69 66 69 63 20 43 6f 6d 70 75 74 69 6e 67 2c 20 33 37 28 32 29 2c 20 41 31 31 31 31 | ientific.Computing,.37(2),.A1111 |
8ee0 | 2d 41 31 31 33 38 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 | -A1138..."""..#.Author:.Remi.Fla |
8f00 | 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 0a 23 | mary.<remi.flamary@unice.fr>.#.# |
8f20 | 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 | .License:.MIT.License..import.nu |
8f40 | 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 | mpy.as.np.import.matplotlib.pyla |
8f60 | 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 23 20 6e 65 63 65 73 73 61 72 79 20 66 6f | b.as.pl.import.ot.#.necessary.fo |
8f80 | 72 20 33 64 20 70 6c 6f 74 20 65 76 65 6e 20 69 66 20 6e 6f 74 20 75 73 65 64 0a 66 72 6f 6d 20 | r.3d.plot.even.if.not.used.from. |
8fa0 | 6d 70 6c 5f 74 6f 6f 6c 6b 69 74 73 2e 6d 70 6c 6f 74 33 64 20 69 6d 70 6f 72 74 20 41 78 65 73 | mpl_toolkits.mplot3d.import.Axes |
8fc0 | 33 44 20 20 23 20 6e 6f 71 61 0a 66 72 6f 6d 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 63 6f 6c 6c 65 | 3D..#.noqa.from.matplotlib.colle |
8fe0 | 63 74 69 6f 6e 73 20 69 6d 70 6f 72 74 20 50 6f 6c 79 43 6f 6c 6c 65 63 74 69 6f 6e 0a 0a 23 23 | ctions.import.PolyCollection..## |
9000 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
9020 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
9040 | 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.#.- |
9060 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 6e 20 | ------------..#%%.parameters..n. |
9080 | 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 6e | =.100..#.nb.bins..#.bin.position |
90a0 | 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 61 | s.x.=.np.arange(n,.dtype=np.floa |
90c0 | 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 61 | t64)..#.Gaussian.distributions.a |
90e0 | 31 20 3d 20 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 | 1.=.ot.datasets.make_1D_gauss(n, |
9100 | 20 6d 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 61 | .m=20,.s=5)..#.m=.mean,.s=.std.a |
9120 | 32 20 3d 20 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 | 2.=.ot.datasets.make_1D_gauss(n, |
9140 | 20 6d 3d 36 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 | .m=60,.s=8)..#.creating.matrix.A |
9160 | 20 63 6f 6e 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 | .containing.all.distributions.A. |
9180 | 3d 20 6e 70 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 | =.np.vstack((a1,.a2)).T.n_distri |
91a0 | 62 75 74 69 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 | butions.=.A.shape[1]..#.loss.mat |
91c0 | 72 69 78 20 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 | rix.+.normalization.M.=.ot.utils |
91e0 | 2e 64 69 73 74 30 28 6e 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 29 0a 0a 23 23 23 23 23 23 23 23 | .dist0(n).M./=.M.max()..######## |
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 | 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a | ######.#.Plot.data.#.---------.. |
9260 | 23 25 25 20 70 6c 6f 74 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 70 6c 2e 66 | #%%.plot.the.distributions..pl.f |
9280 | 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 29 29 0a 66 6f 72 20 69 | igure(1,.figsize=(6.4,.3)).for.i |
92a0 | 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 20 20 20 | .in.range(n_distributions):..... |
92c0 | 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 27 44 69 | pl.plot(x,.A[:,.i]).pl.title('Di |
92e0 | 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a | stributions').pl.tight_layout(). |
9300 | 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 | .############################### |
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 0a 23 20 42 61 72 79 63 65 6e 74 65 72 20 63 6f 6d | ###############.#.Barycenter.com |
9360 | 70 75 74 61 74 69 6f 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | putation.#.--------------------- |
9380 | 2d 0a 0a 23 25 25 20 62 61 72 79 63 65 6e 74 65 72 20 63 6f 6d 70 75 74 61 74 69 6f 6e 0a 0a 61 | -..#%%.barycenter.computation..a |
93a0 | 6c 70 68 61 20 3d 20 30 2e 32 20 20 23 20 30 3c 3d 61 6c 70 68 61 3c 3d 31 0a 77 65 69 67 68 74 | lpha.=.0.2..#.0<=alpha<=1.weight |
93c0 | 73 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 31 20 2d 20 61 6c 70 68 61 2c 20 61 6c 70 68 61 5d 29 | s.=.np.array([1.-.alpha,.alpha]) |
93e0 | 0a 0a 23 20 6c 32 62 61 72 79 0a 62 61 72 79 5f 6c 32 20 3d 20 41 2e 64 6f 74 28 77 65 69 67 68 | ..#.l2bary.bary_l2.=.A.dot(weigh |
9400 | 74 73 29 0a 0a 23 20 77 61 73 73 65 72 73 74 65 69 6e 0a 72 65 67 20 3d 20 31 65 2d 33 0a 62 61 | ts)..#.wasserstein.reg.=.1e-3.ba |
9420 | 72 79 5f 77 61 73 73 20 3d 20 6f 74 2e 62 72 65 67 6d 61 6e 2e 62 61 72 79 63 65 6e 74 65 72 28 | ry_wass.=.ot.bregman.barycenter( |
9440 | 41 2c 20 4d 2c 20 72 65 67 2c 20 77 65 69 67 68 74 73 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 | A,.M,.reg,.weights)..pl.figure(2 |
9460 | 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 31 2c 20 31 29 0a 66 | ).pl.clf().pl.subplot(2,.1,.1).f |
9480 | 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6e 5f 64 69 73 74 72 69 62 75 74 69 6f 6e 73 29 3a 0a | or.i.in.range(n_distributions):. |
94a0 | 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 2c 20 41 5b 3a 2c 20 69 5d 29 0a 70 6c 2e 74 69 74 6c 65 | ....pl.plot(x,.A[:,.i]).pl.title |
94c0 | 28 27 44 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c | ('Distributions')..pl.subplot(2, |
94e0 | 20 31 2c 20 32 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 61 72 79 5f 6c 32 2c 20 27 72 27 2c 20 | .1,.2).pl.plot(x,.bary_l2,.'r',. |
9500 | 6c 61 62 65 6c 3d 27 6c 32 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 61 72 79 5f 77 61 73 73 | label='l2').pl.plot(x,.bary_wass |
9520 | 2c 20 27 67 27 2c 20 6c 61 62 65 6c 3d 27 57 61 73 73 65 72 73 74 65 69 6e 27 29 0a 70 6c 2e 6c | ,.'g',.label='Wasserstein').pl.l |
9540 | 65 67 65 6e 64 28 29 0a 70 6c 2e 74 69 74 6c 65 28 27 42 61 72 79 63 65 6e 74 65 72 73 27 29 0a | egend().pl.title('Barycenters'). |
9560 | 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 23 | pl.tight_layout()..############# |
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 23 23 23 23 23 23 | ################################ |
95a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
95c0 | 23 0a 23 20 42 61 72 79 63 65 6e 74 72 69 63 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 0a 23 20 | #.#.Barycentric.interpolation.#. |
95e0 | 2d 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 62 | -------------------------..#%%.b |
9600 | 61 72 79 63 65 6e 74 65 72 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 0a 0a 6e 5f 61 6c 70 68 61 | arycenter.interpolation..n_alpha |
9620 | 20 3d 20 31 31 0a 61 6c 70 68 61 5f 6c 69 73 74 20 3d 20 6e 70 2e 6c 69 6e 73 70 61 63 65 28 30 | .=.11.alpha_list.=.np.linspace(0 |
9640 | 2c 20 31 2c 20 6e 5f 61 6c 70 68 61 29 0a 0a 0a 42 5f 6c 32 20 3d 20 6e 70 2e 7a 65 72 6f 73 28 | ,.1,.n_alpha)...B_l2.=.np.zeros( |
9660 | 28 6e 2c 20 6e 5f 61 6c 70 68 61 29 29 0a 0a 42 5f 77 61 73 73 20 3d 20 6e 70 2e 63 6f 70 79 28 | (n,.n_alpha))..B_wass.=.np.copy( |
9680 | 42 5f 6c 32 29 0a 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 30 2c 20 6e 5f 61 6c 70 68 61 | B_l2)..for.i.in.range(0,.n_alpha |
96a0 | 29 3a 0a 20 20 20 20 61 6c 70 68 61 20 3d 20 61 6c 70 68 61 5f 6c 69 73 74 5b 69 5d 0a 20 20 20 | ):.....alpha.=.alpha_list[i].... |
96c0 | 20 77 65 69 67 68 74 73 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 31 20 2d 20 61 6c 70 68 61 2c 20 | .weights.=.np.array([1.-.alpha,. |
96e0 | 61 6c 70 68 61 5d 29 0a 20 20 20 20 42 5f 6c 32 5b 3a 2c 20 69 5d 20 3d 20 41 2e 64 6f 74 28 77 | alpha]).....B_l2[:,.i].=.A.dot(w |
9700 | 65 69 67 68 74 73 29 0a 20 20 20 20 42 5f 77 61 73 73 5b 3a 2c 20 69 5d 20 3d 20 6f 74 2e 62 72 | eights).....B_wass[:,.i].=.ot.br |
9720 | 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 65 69 67 | egman.barycenter(A,.M,.reg,.weig |
9740 | 68 74 73 29 0a 0a 23 25 25 20 70 6c 6f 74 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 0a 0a 70 6c | hts)..#%%.plot.interpolation..pl |
9760 | 2e 66 69 67 75 72 65 28 33 29 0a 0a 63 6d 61 70 20 3d 20 70 6c 2e 63 6d 2e 67 65 74 5f 63 6d 61 | .figure(3)..cmap.=.pl.cm.get_cma |
9780 | 70 28 27 76 69 72 69 64 69 73 27 29 0a 76 65 72 74 73 20 3d 20 5b 5d 0a 7a 73 20 3d 20 61 6c 70 | p('viridis').verts.=.[].zs.=.alp |
97a0 | 68 61 5f 6c 69 73 74 0a 66 6f 72 20 69 2c 20 7a 20 69 6e 20 65 6e 75 6d 65 72 61 74 65 28 7a 73 | ha_list.for.i,.z.in.enumerate(zs |
97c0 | 29 3a 0a 20 20 20 20 79 73 20 3d 20 42 5f 6c 32 5b 3a 2c 20 69 5d 0a 20 20 20 20 76 65 72 74 73 | ):.....ys.=.B_l2[:,.i].....verts |
97e0 | 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 61 78 20 3d 20 | .append(list(zip(x,.ys)))..ax.=. |
9800 | 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 27 29 0a 0a 70 | pl.gcf().gca(projection='3d')..p |
9820 | 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 20 66 61 63 65 | oly.=.PolyCollection(verts,.face |
9840 | 63 6f 6c 6f 72 73 3d 5b 63 6d 61 70 28 61 29 20 66 6f 72 20 61 20 69 6e 20 61 6c 70 68 61 5f 6c | colors=[cmap(a).for.a.in.alpha_l |
9860 | 69 73 74 5d 29 0a 70 6f 6c 79 2e 73 65 74 5f 61 6c 70 68 61 28 30 2e 37 29 0a 61 78 2e 61 64 64 | ist]).poly.set_alpha(0.7).ax.add |
9880 | 5f 63 6f 6c 6c 65 63 74 69 6f 6e 33 64 28 70 6f 6c 79 2c 20 7a 73 3d 7a 73 2c 20 7a 64 69 72 3d | _collection3d(poly,.zs=zs,.zdir= |
98a0 | 27 79 27 29 0a 61 78 2e 73 65 74 5f 78 6c 61 62 65 6c 28 27 78 27 29 0a 61 78 2e 73 65 74 5f 78 | 'y').ax.set_xlabel('x').ax.set_x |
98c0 | 6c 69 6d 33 64 28 30 2c 20 6e 29 0a 61 78 2e 73 65 74 5f 79 6c 61 62 65 6c 28 27 24 5c 5c 61 6c | lim3d(0,.n).ax.set_ylabel('$\\al |
98e0 | 70 68 61 24 27 29 0a 61 78 2e 73 65 74 5f 79 6c 69 6d 33 64 28 30 2c 20 31 29 0a 61 78 2e 73 65 | pha$').ax.set_ylim3d(0,.1).ax.se |
9900 | 74 5f 7a 6c 61 62 65 6c 28 27 27 29 0a 61 78 2e 73 65 74 5f 7a 6c 69 6d 33 64 28 30 2c 20 42 5f | t_zlabel('').ax.set_zlim3d(0,.B_ |
9920 | 6c 32 2e 6d 61 78 28 29 20 2a 20 31 2e 30 31 29 0a 70 6c 2e 74 69 74 6c 65 28 27 42 61 72 79 63 | l2.max().*.1.01).pl.title('Baryc |
9940 | 65 6e 74 65 72 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 20 77 69 74 68 20 6c 32 27 29 0a 70 6c | enter.interpolation.with.l2').pl |
9960 | 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 34 29 0a 63 6d | .tight_layout()..pl.figure(4).cm |
9980 | 61 70 20 3d 20 70 6c 2e 63 6d 2e 67 65 74 5f 63 6d 61 70 28 27 76 69 72 69 64 69 73 27 29 0a 76 | ap.=.pl.cm.get_cmap('viridis').v |
99a0 | 65 72 74 73 20 3d 20 5b 5d 0a 7a 73 20 3d 20 61 6c 70 68 61 5f 6c 69 73 74 0a 66 6f 72 20 69 2c | erts.=.[].zs.=.alpha_list.for.i, |
99c0 | 20 7a 20 69 6e 20 65 6e 75 6d 65 72 61 74 65 28 7a 73 29 3a 0a 20 20 20 20 79 73 20 3d 20 42 5f | .z.in.enumerate(zs):.....ys.=.B_ |
99e0 | 77 61 73 73 5b 3a 2c 20 69 5d 0a 20 20 20 20 76 65 72 74 73 2e 61 70 70 65 6e 64 28 6c 69 73 74 | wass[:,.i].....verts.append(list |
9a00 | 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 |
9a20 | 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 |
9a40 | 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 |
9a60 | 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 |
9a80 | 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 |
9aa0 | 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_ |
9ac0 | 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). |
9ae0 | 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 |
9b00 | 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('') |
9b20 | 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 |
9b40 | 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 |
9b60 | 6f 6c 61 74 69 6f 6e 20 77 69 74 68 20 57 61 73 73 65 72 73 74 65 69 6e 27 29 0a 70 6c 2e 74 69 | olation.with.Wasserstein').pl.ti |
9b80 | 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 00 | ght_layout()..pl.show().PK...... |
9ba0 | 00 00 db 74 d9 4e b0 31 70 de ee 10 00 00 ee 10 00 00 14 00 00 00 70 6c 6f 74 5f 6f 74 64 61 5f | ...t.N.1p.............plot_otda_ |
9bc0 | 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 2d 2a | classes.py#.-*-.coding:.utf-8.-* |
9be0 | 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 0a 4f | -.""".========================.O |
9c00 | 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 3d 3d | T.for.domain.adaptation.======== |
9c20 | 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 |
9c40 | 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 69 6e | ntroduces.a.domain.adaptation.in |
9c60 | 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 70 70 | .a.2D.setting.and.the.4.OTDA.app |
9c80 | 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 20 50 | roaches.currently.supported.in.P |
9ca0 | 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 61 72 | OT..."""..#.Authors:.Remi.Flamar |
9cc0 | 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 20 20 20 20 20 | y.<remi.flamary@unice.fr>.#..... |
9ce0 | 20 20 20 20 20 53 74 61 6e 69 73 6c 61 73 20 43 68 61 6d 62 6f 6e 20 3c 73 74 61 6e 2e 63 68 61 | .....Stanislas.Chambon.<stan.cha |
9d00 | 6d 62 6f 6e 40 67 6d 61 69 6c 2e 63 6f 6d 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 | mbon@gmail.com>.#.#.License:.MIT |
9d20 | 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 | .License..import.matplotlib.pyla |
9d40 | 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 23 23 23 | b.as.pl.import.ot...############ |
9d60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
9d80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
9da0 | 23 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | ##.#.Generate.data.#.----------- |
9dc0 | 2d 2d 0a 0a 6e 5f 73 6f 75 72 63 65 5f 73 61 6d 70 6c 65 73 20 3d 20 31 35 30 0a 6e 5f 74 61 72 | --..n_source_samples.=.150.n_tar |
9de0 | 67 65 74 5f 73 61 6d 70 6c 65 73 20 3d 20 31 35 30 0a 0a 58 73 2c 20 79 73 20 3d 20 6f 74 2e 64 | get_samples.=.150..Xs,.ys.=.ot.d |
9e00 | 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 27 33 67 61 75 73 | atasets.make_data_classif('3gaus |
9e20 | 73 27 2c 20 6e 5f 73 6f 75 72 63 65 5f 73 61 6d 70 6c 65 73 29 0a 58 74 2c 20 79 74 20 3d 20 6f | s',.n_source_samples).Xt,.yt.=.o |
9e40 | 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 27 33 67 | t.datasets.make_data_classif('3g |
9e60 | 61 75 73 73 32 27 2c 20 6e 5f 74 61 72 67 65 74 5f 73 61 6d 70 6c 65 73 29 0a 0a 0a 23 23 23 23 | auss2',.n_target_samples)...#### |
9e80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
9ea0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
9ec0 | 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 |
9ee0 | 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. |
9f00 | 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.#.--------------------- |
9f20 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
9f40 | 2d 2d 2d 2d 2d 2d 0a 0a 23 20 45 4d 44 20 54 72 61 6e 73 70 6f 72 74 0a 6f 74 5f 65 6d 64 20 3d | ------..#.EMD.Transport.ot_emd.= |
9f60 | 20 6f 74 2e 64 61 2e 45 4d 44 54 72 61 6e 73 70 6f 72 74 28 29 0a 6f 74 5f 65 6d 64 2e 66 69 74 | .ot.da.EMDTransport().ot_emd.fit |
9f80 | 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 53 69 6e 6b 68 6f 72 6e 20 54 72 61 6e 73 | (Xs=Xs,.Xt=Xt)..#.Sinkhorn.Trans |
9fa0 | 70 6f 72 74 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b 68 6f 72 | port.ot_sinkhorn.=.ot.da.Sinkhor |
9fc0 | 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 6f | nTransport(reg_e=1e-1).ot_sinkho |
9fe0 | 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 6e | rn.fit(Xs=Xs,.Xt=Xt)..#.Sinkhorn |
a000 | 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 75 | .Transport.with.Group.lasso.regu |
a020 | 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 68 | larization.ot_lpl1.=.ot.da.Sinkh |
a040 | 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 67 | ornLpl1Transport(reg_e=1e-1,.reg |
a060 | 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 79 | _cl=1e0).ot_lpl1.fit(Xs=Xs,.ys=y |
a080 | 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 20 | s,.Xt=Xt)..#.Sinkhorn.Transport. |
a0a0 | 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 20 | with.Group.lasso.regularization. |
a0c0 | 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 6c | l1l2.ot_l1l2.=.ot.da.SinkhornL1l |
a0e0 | 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 65 | 2Transport(reg_e=1e-1,.reg_cl=2e |
a100 | 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 20 | 0,.max_iter=20,................. |
a120 | 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 72 | ......................verbose=Tr |
a140 | 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 74 | ue).ot_l1l2.fit(Xs=Xs,.ys=ys,.Xt |
a160 | 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 73 | =Xt)..#.transport.source.samples |
a180 | 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 65 | .onto.target.samples.transp_Xs_e |
a1a0 | 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 61 | md.=.ot_emd.transform(Xs=Xs).tra |
a1c0 | 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 72 | nsp_Xs_sinkhorn.=.ot_sinkhorn.tr |
a1e0 | 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 20 | ansform(Xs=Xs).transp_Xs_lpl1.=. |
a200 | 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 5f | ot_lpl1.transform(Xs=Xs).transp_ |
a220 | 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 58 | Xs_l1l2.=.ot_l1l2.transform(Xs=X |
a240 | 73 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | s)...########################### |
a260 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
a280 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 67 20 31 20 3a 20 70 6c | ###################.#.Fig.1.:.pl |
a2a0 | 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 20 | ots.source.and.target.samples.#. |
a2c0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
a2e0 | 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 31 | -------..pl.figure(1,.figsize=(1 |
a300 | 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 63 | 0,.5)).pl.subplot(1,.2,.1).pl.sc |
a320 | 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,. |
a340 | 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 |
a360 | 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([]). |
a380 | 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 |
a3a0 | 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 32 | e..samples')..pl.subplot(1,.2,.2 |
a3c0 | 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], |
a3e0 | 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 |
a400 | 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 |
a420 | 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 |
a440 | 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 6f | ('Target.samples').pl.tight_layo |
a460 | 75 74 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ut()...######################### |
a480 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
a4a0 | 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 20 | #####################.#.Fig.2.:. |
a4c0 | 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 73 | plot.optimal.couplings.and.trans |
a4e0 | 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 2d | ported.samples.#.--------------- |
a500 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
a520 | 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 61 | -------..param_img.=.{'interpola |
a540 | 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 20 | tion':.'nearest'}..pl.figure(2,. |
a560 | 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 34 | figsize=(15,.8)).pl.subplot(2,.4 |
a580 | 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 2c | ,.1).pl.imshow(ot_emd.coupling_, |
a5a0 | 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 79 | .**param_img).pl.xticks([]).pl.y |
a5c0 | 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 |
a5e0 | 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 74 | ling\nEMDTransport')..pl.subplot |
a600 | 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 2e | (2,.4,.2).pl.imshow(ot_sinkhorn. |
a620 | 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 6b | coupling_,.**param_img).pl.xtick |
a640 | 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 70 | s([]).pl.yticks([]).pl.title('Op |
a660 | 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 72 | timal.coupling\nSinkhornTranspor |
a680 | 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 68 | t')..pl.subplot(2,.4,.3).pl.imsh |
a6a0 | 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 6d | ow(ot_lpl1.coupling_,.**param_im |
a6c0 | 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 70 | g).pl.xticks([]).pl.yticks([]).p |
a6e0 | 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 68 | l.title('Optimal.coupling\nSinkh |
a700 | 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 32 | ornLpl1Transport')..pl.subplot(2 |
a720 | 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 69 | ,.4,.4).pl.imshow(ot_l1l2.coupli |
a740 | 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 0a | ng_,.**param_img).pl.xticks([]). |
a760 | 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 20 | pl.yticks([]).pl.title('Optimal. |
a780 | 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 27 | coupling\nSinkhornL1l2Transport' |
a7a0 | 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 65 | )..pl.subplot(2,.4,.5).pl.scatte |
a7c0 | 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b | r(Xt[:,.0],.Xt[:,.1],.c=yt,.mark |
a7e0 | 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 | er='o',............label='Target |
a800 | 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 30 2e 33 29 0a 70 6c 2e 73 63 61 74 74 65 72 | .samples',.alpha=0.3).pl.scatter |
a820 | 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 5f | (transp_Xs_emd[:,.0],.transp_Xs_ |
a840 | 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 6b | emd[:,.1],.c=ys,............mark |
a860 | 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 20 | er='+',.label='Transp.samples',. |
a880 | 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 5d | s=30).pl.xticks([]).pl.yticks([] |
a8a0 | 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\ |
a8c0 | 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 6c | nEmdTransport').pl.legend(loc="l |
a8e0 | 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 29 | ower.left")..pl.subplot(2,.4,.6) |
a900 | 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 | .pl.scatter(Xt[:,.0],.Xt[:,.1],. |
a920 | 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 | c=yt,.marker='o',............lab |
a940 | 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 0a | el='Target.samples',.alpha=0.3). |
a960 | 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 2c | pl.scatter(transp_Xs_sinkhorn[:, |
a980 | 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 63 | .0],.transp_Xs_sinkhorn[:,.1],.c |
a9a0 | 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 | =ys,............marker='+',.labe |
a9c0 | 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 69 | l='Transp.samples',.s=30).pl.xti |
a9e0 | 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 | cks([]).pl.yticks([]).pl.title(' |
aa00 | 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 61 | Transported.samples\nSinkhornTra |
aa20 | 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 6c | nsport')..pl.subplot(2,.4,.7).pl |
aa40 | 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 |
aa60 | 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= |
aa80 | 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 2e | 'Target.samples',.alpha=0.3).pl. |
aaa0 | 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 72 | scatter(transp_Xs_lpl1[:,.0],.tr |
aac0 | 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 20 | ansp_Xs_lpl1[:,.1],.c=ys,....... |
aae0 | 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 73 | .....marker='+',.label='Transp.s |
ab00 | 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 2e | amples',.s=30).pl.xticks([]).pl. |
ab20 | 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 64 | yticks([]).pl.title('Transported |
ab40 | 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 27 | .samples\nSinkhornLpl1Transport' |
ab60 | 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 65 | )..pl.subplot(2,.4,.8).pl.scatte |
ab80 | 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b | r(Xt[:,.0],.Xt[:,.1],.c=yt,.mark |
aba0 | 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 | er='o',............label='Target |
abc0 | 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 30 2e 33 29 0a 70 6c 2e 73 63 61 74 74 65 72 | .samples',.alpha=0.3).pl.scatter |
abe0 | 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 73 | (transp_Xs_l1l2[:,.0],.transp_Xs |
ac00 | 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 61 | _l1l2[:,.1],.c=ys,............ma |
ac20 | 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 27 | rker='+',.label='Transp.samples' |
ac40 | 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 28 | ,.s=30).pl.xticks([]).pl.yticks( |
ac60 | 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 65 | []).pl.title('Transported.sample |
ac80 | 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 69 | s\nSinkhornL1l2Transport').pl.ti |
aca0 | 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 00 | ght_layout()..pl.show().PK...... |
acc0 | 00 00 da 74 d9 4e ff 09 e8 78 dd 08 00 00 dd 08 00 00 14 00 00 00 70 6c 6f 74 5f 4f 54 5f 31 44 | ...t.N...x............plot_OT_1D |
ace0 | 5f 73 6d 6f 6f 74 68 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 | _smooth.py#.-*-.coding:.utf-8.-* |
ad00 | 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 | -.""".========================== |
ad20 | 3d 0a 31 44 20 73 6d 6f 6f 74 68 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 0a 3d 3d | =.1D.smooth.optimal.transport.== |
ad40 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 | =========================..This. |
ad60 | 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 |
ad80 | 69 6f 6e 20 6f 66 20 45 4d 44 2c 20 53 69 6e 6b 68 6f 72 6e 20 61 6e 64 20 73 6d 6f 6f 74 68 20 | ion.of.EMD,.Sinkhorn.and.smooth. |
ada0 | 4f 54 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 | OT.plans.and.their.visualization |
adc0 | 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.< |
ade0 | 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e | remi.flamary@unice.fr>.#.#.Licen |
ae00 | 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 | se:.MIT.License..import.numpy.as |
ae20 | 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 | .np.import.matplotlib.pylab.as.p |
ae40 | 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 66 72 6f 6d 20 | l.import.ot.import.ot.plot.from. |
ae60 | 6f 74 2e 64 61 74 61 73 65 74 73 20 69 6d 70 6f 72 74 20 6d 61 6b 65 5f 31 44 5f 67 61 75 73 73 | ot.datasets.import.make_1D_gauss |
ae80 | 20 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 | .as.gauss..##################### |
aea0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
aec0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 47 65 6e 65 | #########################.#.Gene |
aee0 | 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 0a 23 25 25 20 | rate.data.#.-------------...#%%. |
af00 | 70 61 72 61 6d 65 74 65 72 73 0a 0a 6e 20 3d 20 31 30 30 20 20 23 20 6e 62 20 62 69 6e 73 0a 0a | parameters..n.=.100..#.nb.bins.. |
af20 | 23 20 62 69 6e 20 70 6f 73 69 74 69 6f 6e 73 0a 78 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 2c | #.bin.positions.x.=.np.arange(n, |
af40 | 20 64 74 79 70 65 3d 6e 70 2e 66 6c 6f 61 74 36 34 29 0a 0a 23 20 47 61 75 73 73 69 61 6e 20 64 | .dtype=np.float64)..#.Gaussian.d |
af60 | 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 61 20 3d 20 67 61 75 73 73 28 6e 2c 20 6d 3d 32 30 2c 20 | istributions.a.=.gauss(n,.m=20,. |
af80 | 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 67 61 75 73 | s=5)..#.m=.mean,.s=.std.b.=.gaus |
afa0 | 73 28 6e 2c 20 6d 3d 36 30 2c 20 73 3d 31 30 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a | s(n,.m=60,.s=10)..#.loss.matrix. |
afc0 | 4d 20 3d 20 6f 74 2e 64 69 73 74 28 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 2c 20 78 | M.=.ot.dist(x.reshape((n,.1)),.x |
afe0 | 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 29 0a 0a | .reshape((n,.1))).M./=.M.max().. |
b000 | 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 | .############################### |
b020 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
b040 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 64 69 73 74 72 69 62 75 74 | ###############.#.Plot.distribut |
b060 | 69 6f 6e 73 20 61 6e 64 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d | ions.and.loss.matrix.#.--------- |
b080 | 2d 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 | -------------------------..#%%.p |
b0a0 | 6c 6f 74 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 70 6c 2e 66 69 67 75 72 65 | lot.the.distributions..pl.figure |
b0c0 | 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 29 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c | (1,.figsize=(6.4,.3)).pl.plot(x, |
b0e0 | 20 61 2c 20 27 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 64 69 73 74 72 69 62 75 74 | .a,.'b',.label='Source.distribut |
b100 | 69 6f 6e 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 2c 20 27 72 27 2c 20 6c 61 62 65 6c 3d 27 | ion').pl.plot(x,.b,.'r',.label=' |
b120 | 54 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 | Target.distribution').pl.legend( |
b140 | 29 0a 0a 23 25 25 20 70 6c 6f 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 61 6e 64 20 6c 6f | )..#%%.plot.distributions.and.lo |
b160 | 73 73 20 6d 61 74 72 69 78 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 3d | ss.matrix..pl.figure(2,.figsize= |
b180 | 28 35 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c | (5,.5)).ot.plot.plot1D_mat(a,.b, |
b1a0 | 20 4d 2c 20 27 43 6f 73 74 20 6d 61 74 72 69 78 20 4d 27 29 0a 0a 23 23 23 23 23 23 23 23 23 23 | .M,.'Cost.matrix.M')..########## |
b1c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
b1e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
b200 | 23 23 23 23 0a 23 20 53 6f 6c 76 65 20 45 4d 44 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 | ####.#.Solve.EMD.#.---------...# |
b220 | 25 25 20 45 4d 44 0a 0a 47 30 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 29 0a 0a 70 6c | %%.EMD..G0.=.ot.emd(a,.b,.M)..pl |
b240 | 2e 66 69 67 75 72 65 28 33 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 29 0a 6f 74 2e 70 6c | .figure(3,.figsize=(5,.5)).ot.pl |
b260 | 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 47 30 2c 20 27 4f 54 20 6d 61 74 72 | ot.plot1D_mat(a,.b,.G0,.'OT.matr |
b280 | 69 78 20 47 30 27 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ix.G0')..####################### |
b2a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
b2c0 | 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. |
b2e0 | 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 0a 0a 0a 23 25 25 20 | Sinkhorn.#.--------------...#%%. |
b300 | 53 69 6e 6b 68 6f 72 6e 0a 0a 6c 61 6d 62 64 20 3d 20 32 65 2d 33 0a 47 73 20 3d 20 6f 74 2e 73 | Sinkhorn..lambd.=.2e-3.Gs.=.ot.s |
b320 | 69 6e 6b 68 6f 72 6e 28 61 2c 20 62 2c 20 4d 2c 20 6c 61 6d 62 64 2c 20 76 65 72 62 6f 73 65 3d | inkhorn(a,.b,.M,.lambd,.verbose= |
b340 | 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 2c 20 | True)..pl.figure(4,.figsize=(5,. |
b360 | 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 73 2c | 5)).ot.plot.plot1D_mat(a,.b,.Gs, |
b380 | 20 27 4f 54 20 6d 61 74 72 69 78 20 53 69 6e 6b 68 6f 72 6e 27 29 0a 0a 70 6c 2e 73 68 6f 77 28 | .'OT.matrix.Sinkhorn')..pl.show( |
b3a0 | 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | )..############################# |
b3c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
b3e0 | 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 6d 6f 6f 74 68 | #################.#.Solve.Smooth |
b400 | 20 4f 54 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 6d 6f 6f 74 | .OT.#.--------------...#%%.Smoot |
b420 | 68 20 4f 54 20 77 69 74 68 20 4b 4c 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 0a 6c 61 6d | h.OT.with.KL.regularization..lam |
b440 | 62 64 20 3d 20 32 65 2d 33 0a 47 73 6d 20 3d 20 6f 74 2e 73 6d 6f 6f 74 68 2e 73 6d 6f 6f 74 68 | bd.=.2e-3.Gsm.=.ot.smooth.smooth |
b460 | 5f 6f 74 5f 64 75 61 6c 28 61 2c 20 62 2c 20 4d 2c 20 6c 61 6d 62 64 2c 20 72 65 67 5f 74 79 70 | _ot_dual(a,.b,.M,.lambd,.reg_typ |
b480 | 65 3d 27 6b 6c 27 29 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 | e='kl')..pl.figure(5,.figsize=(5 |
b4a0 | 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 |
b4c0 | 73 6d 2c 20 27 4f 54 20 6d 61 74 72 69 78 20 53 6d 6f 6f 74 68 20 4f 54 20 4b 4c 20 72 65 67 2e | sm,.'OT.matrix.Smooth.OT.KL.reg. |
b4e0 | 27 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 0a 0a 23 25 25 20 53 6d 6f 6f 74 68 20 4f 54 20 77 69 | ')..pl.show()...#%%.Smooth.OT.wi |
b500 | 74 68 20 4b 4c 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 0a 6c 61 6d 62 64 20 3d 20 31 65 | th.KL.regularization..lambd.=.1e |
b520 | 2d 31 0a 47 73 6d 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 | -1.Gsm.=.ot.smooth.smooth_ot_dua |
b540 | 6c 28 61 2c 20 62 2c 20 4d 2c 20 6c 61 6d 62 64 2c 20 72 65 67 5f 74 79 70 65 3d 27 6c 32 27 29 | l(a,.b,.M,.lambd,.reg_type='l2') |
b560 | 0a 0a 70 6c 2e 66 69 67 75 72 65 28 36 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 29 0a 6f | ..pl.figure(6,.figsize=(5,.5)).o |
b580 | 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 6d 2c 20 27 4f 54 | t.plot.plot1D_mat(a,.b,.Gsm,.'OT |
b5a0 | 20 6d 61 74 72 69 78 20 53 6d 6f 6f 74 68 20 4f 54 20 6c 32 20 72 65 67 2e 27 29 0a 0a 70 6c 2e | .matrix.Smooth.OT.l2.reg.')..pl. |
b5c0 | 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 db 74 d9 4e b0 ed ff 28 54 10 00 00 54 10 00 | show().PK.........t.N...(T...T.. |
b5e0 | 00 22 00 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 6d 61 70 70 69 6e 67 5f 63 6f 6c 6f 72 73 5f 69 6d | ."...plot_otda_mapping_colors_im |
b600 | 61 67 65 73 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 | ages.py#.-*-.coding:.utf-8.-*-." |
b620 | 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 | "".============================= |
b640 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4f 54 20 66 6f 72 20 | ========================.OT.for. |
b660 | 69 6d 61 67 65 20 63 6f 6c 6f 72 20 61 64 61 70 74 61 74 69 6f 6e 20 77 69 74 68 20 6d 61 70 70 | image.color.adaptation.with.mapp |
b680 | 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 3d | ing.estimation.================= |
b6a0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
b6c0 | 3d 3d 3d 3d 0a 0a 4f 54 20 66 6f 72 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 20 77 | ====..OT.for.domain.adaptation.w |
b6e0 | 69 74 68 20 69 6d 61 67 65 20 63 6f 6c 6f 72 20 61 64 61 70 74 61 74 69 6f 6e 20 5b 36 5d 20 77 | ith.image.color.adaptation.[6].w |
b700 | 69 74 68 20 6d 61 70 70 69 6e 67 0a 65 73 74 69 6d 61 74 69 6f 6e 20 5b 38 5d 2e 0a 0a 5b 36 5d | ith.mapping.estimation.[8]...[6] |
b720 | 20 46 65 72 72 61 64 61 6e 73 2c 20 53 2e 2c 20 50 61 70 61 64 61 6b 69 73 2c 20 4e 2e 2c 20 50 | .Ferradans,.S.,.Papadakis,.N.,.P |
b740 | 65 79 72 65 2c 20 47 2e 2c 20 26 20 41 75 6a 6f 6c 2c 20 4a 2e 20 46 2e 20 28 32 30 31 34 29 2e | eyre,.G.,.&.Aujol,.J..F..(2014). |
b760 | 20 52 65 67 75 6c 61 72 69 7a 65 64 0a 20 20 20 20 64 69 73 63 72 65 74 65 20 6f 70 74 69 6d 61 | .Regularized.....discrete.optima |
b780 | 6c 20 74 72 61 6e 73 70 6f 72 74 2e 20 53 49 41 4d 20 4a 6f 75 72 6e 61 6c 20 6f 6e 20 49 6d 61 | l.transport..SIAM.Journal.on.Ima |
b7a0 | 67 69 6e 67 20 53 63 69 65 6e 63 65 73 2c 20 37 28 33 29 2c 0a 20 20 20 20 31 38 35 33 2d 31 38 | ging.Sciences,.7(3),.....1853-18 |
b7c0 | 38 32 2e 0a 5b 38 5d 20 4d 2e 20 50 65 72 72 6f 74 2c 20 4e 2e 20 43 6f 75 72 74 79 2c 20 52 2e | 82..[8].M..Perrot,.N..Courty,.R. |
b7e0 | 20 46 6c 61 6d 61 72 79 2c 20 41 2e 20 48 61 62 72 61 72 64 2c 20 22 4d 61 70 70 69 6e 67 20 65 | .Flamary,.A..Habrard,."Mapping.e |
b800 | 73 74 69 6d 61 74 69 6f 6e 20 66 6f 72 0a 20 20 20 20 64 69 73 63 72 65 74 65 20 6f 70 74 69 6d | stimation.for.....discrete.optim |
b820 | 61 6c 20 74 72 61 6e 73 70 6f 72 74 22 2c 20 4e 65 75 72 61 6c 20 49 6e 66 6f 72 6d 61 74 69 6f | al.transport",.Neural.Informatio |
b840 | 6e 20 50 72 6f 63 65 73 73 69 6e 67 20 53 79 73 74 65 6d 73 20 28 4e 49 50 53 29 2c 0a 20 20 20 | n.Processing.Systems.(NIPS),.... |
b860 | 20 32 30 31 36 2e 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 73 3a 20 52 65 6d 69 20 46 6c 61 | .2016..."""..#.Authors:.Remi.Fla |
b880 | 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>.#.. |
b8a0 | 20 20 20 20 20 20 20 20 53 74 61 6e 69 73 6c 61 73 20 43 68 61 6d 62 6f 6e 20 3c 73 74 61 6e 2e | ........Stanislas.Chambon.<stan. |
b8c0 | 63 68 61 6d 62 6f 6e 40 67 6d 61 69 6c 2e 63 6f 6d 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 | chambon@gmail.com>.#.#.License:. |
b8e0 | 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a | MIT.License..import.numpy.as.np. |
b900 | 66 72 6f 6d 20 73 63 69 70 79 20 69 6d 70 6f 72 74 20 6e 64 69 6d 61 67 65 0a 69 6d 70 6f 72 74 | from.scipy.import.ndimage.import |
b920 | 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f | .matplotlib.pylab.as.pl.import.o |
b940 | 74 0a 0a 72 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 52 61 6e 64 6f 6d 53 74 61 74 65 28 34 32 29 | t..r.=.np.random.RandomState(42) |
b960 | 0a 0a 0a 64 65 66 20 69 6d 32 6d 61 74 28 49 29 3a 0a 20 20 20 20 22 22 22 43 6f 6e 76 65 72 74 | ...def.im2mat(I):....."""Convert |
b980 | 73 20 61 6e 64 20 69 6d 61 67 65 20 74 6f 20 6d 61 74 72 69 78 20 28 6f 6e 65 20 70 69 78 65 6c | s.and.image.to.matrix.(one.pixel |
b9a0 | 20 70 65 72 20 6c 69 6e 65 29 22 22 22 0a 20 20 20 20 72 65 74 75 72 6e 20 49 2e 72 65 73 68 61 | .per.line)""".....return.I.resha |
b9c0 | 70 65 28 28 49 2e 73 68 61 70 65 5b 30 5d 20 2a 20 49 2e 73 68 61 70 65 5b 31 5d 2c 20 49 2e 73 | pe((I.shape[0].*.I.shape[1],.I.s |
b9e0 | 68 61 70 65 5b 32 5d 29 29 0a 0a 0a 64 65 66 20 6d 61 74 32 69 6d 28 58 2c 20 73 68 61 70 65 29 | hape[2]))...def.mat2im(X,.shape) |
ba00 | 3a 0a 20 20 20 20 22 22 22 43 6f 6e 76 65 72 74 73 20 62 61 63 6b 20 61 20 6d 61 74 72 69 78 20 | :....."""Converts.back.a.matrix. |
ba20 | 74 6f 20 61 6e 20 69 6d 61 67 65 22 22 22 0a 20 20 20 20 72 65 74 75 72 6e 20 58 2e 72 65 73 68 | to.an.image""".....return.X.resh |
ba40 | 61 70 65 28 73 68 61 70 65 29 0a 0a 0a 64 65 66 20 6d 69 6e 6d 61 78 28 49 29 3a 0a 20 20 20 20 | ape(shape)...def.minmax(I):..... |
ba60 | 72 65 74 75 72 6e 20 6e 70 2e 63 6c 69 70 28 49 2c 20 30 2c 20 31 29 0a 0a 0a 23 23 23 23 23 23 | return.np.clip(I,.0,.1)...###### |
ba80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
baa0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
bac0 | 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.#.----- |
bae0 | 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 20 4c 6f 61 64 69 6e 67 20 69 6d 61 67 65 73 0a 49 31 20 3d 20 | --------..#.Loading.images.I1.=. |
bb00 | 6e 64 69 6d 61 67 65 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 6f 63 65 61 6e 5f 64 61 | ndimage.imread('../data/ocean_da |
bb20 | 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 20 32 35 36 | y.jpg').astype(np.float64)./.256 |
bb40 | 0a 49 32 20 3d 20 6e 64 69 6d 61 67 65 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 6f 63 | .I2.=.ndimage.imread('../data/oc |
bb60 | 65 61 6e 5f 73 75 6e 73 65 74 2e 6a 70 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 | ean_sunset.jpg').astype(np.float |
bb80 | 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 0a 58 32 20 3d | 64)./.256...X1.=.im2mat(I1).X2.= |
bba0 | 20 69 6d 32 6d 61 74 28 49 32 29 0a 0a 23 20 74 72 61 69 6e 69 6e 67 20 73 61 6d 70 6c 65 73 0a | .im2mat(I2)..#.training.samples. |
bbc0 | 6e 62 20 3d 20 31 30 30 30 0a 69 64 78 31 20 3d 20 72 2e 72 61 6e 64 69 6e 74 28 58 31 2e 73 68 | nb.=.1000.idx1.=.r.randint(X1.sh |
bbe0 | 61 70 65 5b 30 5d 2c 20 73 69 7a 65 3d 28 6e 62 2c 29 29 0a 69 64 78 32 20 3d 20 72 2e 72 61 6e | ape[0],.size=(nb,)).idx2.=.r.ran |
bc00 | 64 69 6e 74 28 58 32 2e 73 68 61 70 65 5b 30 5d 2c 20 73 69 7a 65 3d 28 6e 62 2c 29 29 0a 0a 58 | dint(X2.shape[0],.size=(nb,))..X |
bc20 | 73 20 3d 20 58 31 5b 69 64 78 31 2c 20 3a 5d 0a 58 74 20 3d 20 58 32 5b 69 64 78 32 2c 20 3a 5d | s.=.X1[idx1,.:].Xt.=.X2[idx2,.:] |
bc40 | 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ...############################# |
bc60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
bc80 | 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 61 64 61 70 74 | #################.#.Domain.adapt |
bca0 | 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 6e 20 74 72 61 | ation.for.pixel.distribution.tra |
bcc0 | 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 2d 2d 2d 2d 2d | nsfer.#.------------------------ |
bce0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 20 45 4d 44 | -------------------------..#.EMD |
bd00 | 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 44 54 72 61 6e | Transport.ot_emd.=.ot.da.EMDTran |
bd20 | 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 74 3d 58 74 29 | sport().ot_emd.fit(Xs=Xs,.Xt=Xt) |
bd40 | 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 6e 73 66 6f 72 | .transp_Xs_emd.=.ot_emd.transfor |
bd60 | 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 28 6d 61 74 32 | m(Xs=X1).Image_emd.=.minmax(mat2 |
bd80 | 69 6d 28 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 2c 20 49 31 2e 73 68 61 70 65 29 29 0a 0a 23 20 | im(transp_Xs_emd,.I1.shape))..#. |
bda0 | 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 72 6e 20 3d 20 | SinkhornTransport.ot_sinkhorn.=. |
bdc0 | 6f 74 2e 64 61 2e 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 28 72 65 67 5f 65 3d 31 65 | ot.da.SinkhornTransport(reg_e=1e |
bde0 | 2d 31 29 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 | -1).ot_sinkhorn.fit(Xs=Xs,.Xt=Xt |
be00 | 29 0a 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 5f 73 69 6e 6b 68 6f | ).transp_Xs_sinkhorn.=.ot_sinkho |
be20 | 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 69 6e 6b 68 6f | rn.transform(Xs=X1).Image_sinkho |
be40 | 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 73 5f 73 69 6e | rn.=.minmax(mat2im(transp_Xs_sin |
be60 | 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 6e 67 5f 6c 69 | khorn,.I1.shape))..ot_mapping_li |
be80 | 6e 65 61 72 20 3d 20 6f 74 2e 64 61 2e 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 28 0a 20 | near.=.ot.da.MappingTransport(.. |
bea0 | 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 72 75 65 2c 20 | ...mu=1e0,.eta=1e-8,.bias=True,. |
bec0 | 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 6f 74 5f 6d 61 | max_iter=20,.verbose=True).ot_ma |
bee0 | 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 58 74 29 0a 0a | pping_linear.fit(Xs=Xs,.Xt=Xt).. |
bf00 | 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 61 6e 73 66 6f | X1tl.=.ot_mapping_linear.transfo |
bf20 | 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 65 61 72 20 3d | rm(Xs=X1).Image_mapping_linear.= |
bf40 | 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 70 65 29 29 0a | .minmax(mat2im(X1tl,.I1.shape)). |
bf60 | 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 67 61 75 73 73 69 61 6e 20 3d 20 6f 74 2e 64 61 2e 4d 61 70 | .ot_mapping_gaussian.=.ot.da.Map |
bf80 | 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 28 0a 20 20 20 20 6d 75 3d 31 65 30 2c 20 65 74 61 3d 31 | pingTransport(.....mu=1e0,.eta=1 |
bfa0 | 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 61 78 5f 69 74 | e-2,.sigma=1,.bias=False,.max_it |
bfc0 | 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 70 69 6e 67 5f | er=10,.verbose=True).ot_mapping_ |
bfe0 | 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 0a 58 31 74 6e | gaussian.fit(Xs=Xs,.Xt=Xt)..X1tn |
c000 | 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 |
c020 | 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 64 20 6d 61 70 | (Xs=X1)..#.use.the.estimated.map |
c040 | 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 20 3d 20 6d 69 | ping.Image_mapping_gaussian.=.mi |
c060 | 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 29 0a 0a 0a 23 | nmax(mat2im(X1tn,.I1.shape))...# |
c080 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
c0a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
c0c0 | 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 61 6c 20 69 6d | #############.#.Plot.original.im |
c0e0 | 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 0a 0a 70 6c 2e | ages.#.--------------------..pl. |
c100 | 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 29 29 0a 70 6c 2e 73 | figure(1,.figsize=(6.4,.3)).pl.s |
c120 | 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 29 0a 70 6c | ubplot(1,.2,.1).pl.imshow(I1).pl |
c140 | 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 31 27 29 | .axis('off').pl.title('Image.1') |
c160 | 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 | ..pl.subplot(1,.2,.2).pl.imshow( |
c180 | 49 32 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 | I2).pl.axis('off').pl.title('Ima |
c1a0 | 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 23 | ge.2').pl.tight_layout()...##### |
c1c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
c1e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
c200 | 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 65 73 20 64 69 | #########.#.Plot.pixel.values.di |
c220 | 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 2d 2d 2d 2d 2d | stribution.#.------------------- |
c240 | 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 69 67 73 69 7a | -----------..pl.figure(2,.figsiz |
c260 | 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 32 2c 20 31 29 | e=(6.4,.5))..pl.subplot(1,.2,.1) |
c280 | 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 58 73 5b 3a 2c 20 32 5d 2c 20 | .pl.scatter(Xs[:,.0],.Xs[:,.2],. |
c2a0 | 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 0a 70 6c 2e 78 | c=Xs).pl.axis([0,.1,.0,.1]).pl.x |
c2c0 | 6c 61 62 65 6c 28 27 52 65 64 27 29 0a 70 6c 2e 79 6c 61 62 65 6c 28 27 42 6c 75 65 27 29 0a 70 | label('Red').pl.ylabel('Blue').p |
c2e0 | 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 31 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 | l.title('Image.1')..pl.subplot(1 |
c300 | 2c 20 32 2c 20 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b | ,.2,.2).pl.scatter(Xt[:,.0],.Xt[ |
c320 | 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 20 30 2c 20 31 | :,.2],.c=Xt).pl.axis([0,.1,.0,.1 |
c340 | 5d 29 0a 70 6c 2e 78 6c 61 62 65 6c 28 27 52 65 64 27 29 0a 70 6c 2e 79 6c 61 62 65 6c 28 27 42 | ]).pl.xlabel('Red').pl.ylabel('B |
c360 | 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 6c 2e 74 69 67 | lue').pl.title('Image.2').pl.tig |
c380 | 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()...################## |
c3a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
c3c0 | 23 23 23 23 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 |
c3e0 | 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.#.------- |
c400 | 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 |
c420 | 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 28 32 2c 20 33 | igsize=(10,.5))..pl.subplot(2,.3 |
c440 | 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' |
c460 | 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( |
c480 | 32 2c 20 33 2c 20 34 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 29 0a 70 6c 2e 61 78 69 73 28 27 | 2,.3,.4).pl.imshow(I2).pl.axis(' |
c4a0 | 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 |
c4c0 | 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 65 5f 65 6d 64 | lot(2,.3,.2).pl.imshow(Image_emd |
c4e0 | 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 45 6d 64 54 72 | ).pl.axis('off').pl.title('EmdTr |
c500 | 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 35 29 0a 70 | ansport')..pl.subplot(2,.3,.5).p |
c520 | 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 2e 61 78 69 73 | l.imshow(Image_sinkhorn).pl.axis |
c540 | 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 72 61 6e 73 70 | ('off').pl.title('SinkhornTransp |
c560 | 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 33 29 0a 70 6c 2e 69 6d | ort')..pl.subplot(2,.3,.3).pl.im |
c580 | 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 70 6c 2e 61 78 | show(Image_mapping_linear).pl.ax |
c5a0 | 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 54 72 61 6e 73 | is('off').pl.title('MappingTrans |
c5c0 | 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 28 32 2c 20 33 | port.(linear)')..pl.subplot(2,.3 |
c5e0 | 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 67 5f 67 61 75 | ,.6).pl.imshow(Image_mapping_gau |
c600 | 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 74 6c 65 28 27 | ssian).pl.axis('off').pl.title(' |
c620 | 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 27 29 0a 70 6c | MappingTransport.(gaussian)').pl |
c640 | 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 | .tight_layout()..pl.show().PK... |
c660 | 00 00 00 00 00 da 74 d9 4e 90 0c 61 ee fa 07 00 00 fa 07 00 00 1f 00 00 00 70 6c 6f 74 5f 66 72 | ......t.N..a.............plot_fr |
c680 | 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 20 2d 2a 2d 20 63 6f | ee_support_barycenter.py#.-*-.co |
c6a0 | 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ding:.utf-8.-*-.""".============ |
c6c0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
c6e0 | 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 57 61 73 73 65 72 73 | ========.2D.free.support.Wassers |
c700 | 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 69 62 75 74 69 6f 6e | tein.barycenters.of.distribution |
c720 | 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 3d 3d 3d | s.============================== |
c740 | 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 74 72 61 | ======================..Illustra |
c760 | 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 72 79 63 65 6e 74 65 | tion.of.2D.Wasserstein.barycente |
c780 | 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 61 72 65 20 77 65 69 | rs.if.discributions.that.are.wei |
c7a0 | 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 0a 0a 23 20 41 75 74 | ghted.sum.of.diracs..."""..#.Aut |
c7c0 | 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 2e 73 65 67 75 79 40 | hor:.Vivien.Seguy.<vivien.seguy@ |
c7e0 | 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 23 0a 23 20 4c 69 63 | iip.ist.i.kyoto-u.ac.jp>.#.#.Lic |
c800 | 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 | ense:.MIT.License..import.numpy. |
c820 | 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 | as.np.import.matplotlib.pylab.as |
c840 | 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | .pl.import.ot...################ |
c860 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
c880 | 23 23 23 23 23 23 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 | ##############################.# |
c8a0 | 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 23 | .Generate.data.#.-------------.# |
c8c0 | 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 6e 65 72 61 74 69 6f | %%.parameters.and.data.generatio |
c8e0 | 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 63 61 74 69 6f 6e 73 | n.N.=.3.d.=.2.measures_locations |
c900 | 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 5b 5d 0a 0a 66 6f 72 | .=.[].measures_weights.=.[]..for |
c920 | 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 3d 20 6e 70 2e 72 61 | .i.in.range(N):......n_i.=.np.ra |
c940 | 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 32 30 29 20 20 23 20 | ndom.randint(low=1,.high=20)..#. |
c960 | 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 2e 72 61 6e 64 6f 6d | nb.samples......mu_i.=.np.random |
c980 | 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 47 61 75 73 73 69 61 | .normal(0.,.4.,.(d,))..#.Gaussia |
c9a0 | 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 6f 6d 2e 72 61 6e 64 | n.mean......A_i.=.np.random.rand |
c9c0 | 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 28 41 5f 69 2c 20 41 | (d,.d).....cov_i.=.np.dot(A_i,.A |
c9e0 | 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 61 6e 20 63 6f 76 61 | _i.transpose())..#.Gaussian.cova |
ca00 | 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 6f 74 2e 64 61 74 61 | riance.matrix......x_i.=.ot.data |
ca20 | 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 69 2c 20 | sets.make_2D_samples_gauss(n_i,. |
ca40 | 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 61 74 69 6f 6e 73 0a | mu_i,.cov_i)..#.Dirac.locations. |
ca60 | 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 72 6d 28 30 2e 2c 20 | ....b_i.=.np.random.uniform(0.,. |
ca80 | 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 20 2f 20 6e 70 2e 73 | 1.,.(n_i,)).....b_i.=.b_i./.np.s |
caa0 | 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 0a 20 20 20 20 6d 65 | um(b_i)..#.Dirac.weights......me |
cac0 | 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 5f 69 29 0a 20 20 20 | asures_locations.append(x_i).... |
cae0 | 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 62 5f 69 29 0a 0a 0a | .measures_weights.append(b_i)... |
cb00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
cb20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
cb40 | 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 66 72 65 65 20 73 75 | ##############.#.Compute.free.su |
cb60 | 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 2d 2d 2d 2d 2d 2d 2d | pport.barycenter.#.------------- |
cb80 | 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 61 63 73 20 6f 66 20 | ..k.=.10..#.number.of.Diracs.of. |
cba0 | 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 70 2e 72 61 6e 64 6f | the.barycenter.X_init.=.np.rando |
cbc0 | 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 20 23 20 69 6e 69 74 | m.normal(0.,.1.,.(k,.d))..#.init |
cbe0 | 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 70 2e 6f 6e 65 73 28 | ial.Dirac.locations.b.=.np.ones( |
cc00 | 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 68 65 20 62 61 72 79 | (k,))./.k..#.weights.of.the.bary |
cc20 | 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 74 69 6d 69 7a 65 64 | center.(it.will.not.be.optimized |
cc40 | 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 6f 70 74 69 6d 69 7a | ,.only.the.locations.are.optimiz |
cc60 | 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 72 74 5f 62 61 72 79 | ed)..X.=.ot.lp.free_support_bary |
cc80 | 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 2c 20 6d 65 61 73 75 | center(measures_locations,.measu |
cca0 | 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 0a 23 23 23 23 23 23 | res_weights,.X_init,.b)...###### |
ccc0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
cce0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
cd00 | 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d | ########.#.Plot.data.#.--------- |
cd20 | 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 62 5f 69 29 20 69 6e | ..pl.figure(1).for.(x_i,.b_i).in |
cd40 | 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 6d 65 61 73 75 72 65 | .zip(measures_locations,.measure |
cd60 | 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 70 2e 72 61 6e 64 6f | s_weights):.....color.=.np.rando |
cd80 | 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 2a 20 4e 29 0a 20 20 | m.randint(low=1,.high=10.*.N)... |
cda0 | 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 5f 69 5b 3a 2c 20 31 | ..pl.scatter(x_i[:,.0],.x_i[:,.1 |
cdc0 | 5d 2c 20 73 3d 62 20 2a 20 31 30 30 30 2c 20 6c 61 62 65 6c 3d 27 69 6e 70 75 74 20 6d 65 61 73 | ],.s=b.*.1000,.label='input.meas |
cde0 | 75 72 65 27 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 5b 3a 2c 20 30 5d 2c 20 58 5b 3a 2c 20 31 | ure').pl.scatter(X[:,.0],.X[:,.1 |
ce00 | 5d 2c 20 73 3d 62 20 2a 20 31 30 30 30 2c 20 63 3d 27 62 6c 61 63 6b 27 2c 20 6d 61 72 6b 65 72 | ],.s=b.*.1000,.c='black',.marker |
ce20 | 3d 27 5e 27 2c 20 6c 61 62 65 6c 3d 27 32 2d 57 61 73 73 65 72 73 74 65 69 6e 20 62 61 72 79 63 | ='^',.label='2-Wasserstein.baryc |
ce40 | 65 6e 74 65 72 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 44 61 74 61 20 6d 65 61 73 75 72 65 73 20 | enter').pl.title('Data.measures. |
ce60 | 61 6e 64 20 74 68 65 69 72 20 62 61 72 79 63 65 6e 74 65 72 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 | and.their.barycenter').pl.legend |
ce80 | 28 6c 6f 63 3d 30 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 db 74 d9 4e | (loc=0).pl.show().PK.........t.N |
cea0 | e5 5f 4e 9c 14 11 00 00 14 11 00 00 0b 00 00 00 70 6c 6f 74 5f 66 67 77 2e 70 79 23 20 2d 2a 2d | ._N.............plot_fgw.py#.-*- |
cec0 | 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d | .coding:.utf-8.-*-.""".========= |
cee0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 50 6c 6f 74 20 46 75 73 65 64 | =====================.Plot.Fused |
cf00 | 2d 67 72 6f 6d 6f 76 2d 57 61 73 73 65 72 73 74 65 69 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | -gromov-Wasserstein.============ |
cf20 | 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 |
cf40 | 20 69 6c 6c 75 73 74 72 61 74 65 73 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66 20 | .illustrates.the.computation.of. |
cf60 | 46 47 57 20 66 6f 72 20 31 44 20 6d 65 61 73 75 72 65 73 5b 31 38 5d 2e 0a 0a 2e 2e 20 5b 31 38 | FGW.for.1D.measures[18]......[18 |
cf80 | 5d 20 56 61 79 65 72 20 54 69 74 6f 75 61 6e 2c 20 43 68 61 70 65 6c 20 4c 61 65 74 69 74 69 61 | ].Vayer.Titouan,.Chapel.Laetitia |
cfa0 | 2c 20 46 6c 61 6d 61 72 79 20 52 7b 5c 27 65 7d 6d 69 2c 20 54 61 76 65 6e 61 72 64 20 52 6f 6d | ,.Flamary.R{\'e}mi,.Tavenard.Rom |
cfc0 | 61 69 6e 0a 20 20 20 20 20 20 61 6e 64 20 43 6f 75 72 74 79 20 4e 69 63 6f 6c 61 73 0a 20 20 20 | ain.......and.Courty.Nicolas.... |
cfe0 | 20 22 4f 70 74 69 6d 61 6c 20 54 72 61 6e 73 70 6f 72 74 20 66 6f 72 20 73 74 72 75 63 74 75 72 | ."Optimal.Transport.for.structur |
d000 | 65 64 20 64 61 74 61 20 77 69 74 68 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 6f 6e 20 67 72 61 70 | ed.data.with.application.on.grap |
d020 | 68 73 22 0a 20 20 20 20 49 6e 74 65 72 6e 61 74 69 6f 6e 61 6c 20 43 6f 6e 66 65 72 65 6e 63 65 | hs".....International.Conference |
d040 | 20 6f 6e 20 4d 61 63 68 69 6e 65 20 4c 65 61 72 6e 69 6e 67 20 28 49 43 4d 4c 29 2e 20 32 30 31 | .on.Machine.Learning.(ICML)..201 |
d060 | 39 2e 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a 20 54 69 74 6f 75 61 6e 20 56 61 79 65 72 | 9..."""..#.Author:.Titouan.Vayer |
d080 | 20 3c 74 69 74 6f 75 61 6e 2e 76 61 79 65 72 40 69 72 69 73 61 2e 66 72 3e 0a 23 0a 23 20 4c 69 | .<titouan.vayer@irisa.fr>.#.#.Li |
d0a0 | 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c | cense:.MIT.License..import.matpl |
d0c0 | 6f 74 6c 69 62 2e 70 79 70 6c 6f 74 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 | otlib.pyplot.as.pl.import.numpy. |
d0e0 | 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6f 74 0a 66 72 6f 6d 20 6f 74 2e 67 72 6f 6d 6f 76 20 69 | as.np.import.ot.from.ot.gromov.i |
d100 | 6d 70 6f 72 74 20 67 72 6f 6d 6f 76 5f 77 61 73 73 65 72 73 74 65 69 6e 2c 20 66 75 73 65 64 5f | mport.gromov_wasserstein,.fused_ |
d120 | 67 72 6f 6d 6f 76 5f 77 61 73 73 65 72 73 74 65 69 6e 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 | gromov_wasserstein..############ |
d140 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
d160 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
d180 | 23 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a | ##.#.Generate.data.#.---------.. |
d1a0 | 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 0a 23 20 57 65 20 63 72 65 61 74 65 20 74 77 6f 20 31 | #%%.parameters.#.We.create.two.1 |
d1c0 | 44 20 72 61 6e 64 6f 6d 20 6d 65 61 73 75 72 65 73 0a 6e 20 3d 20 32 30 20 20 23 20 6e 75 6d 62 | D.random.measures.n.=.20..#.numb |
d1e0 | 65 72 20 6f 66 20 70 6f 69 6e 74 73 20 69 6e 20 74 68 65 20 66 69 72 73 74 20 64 69 73 74 72 69 | er.of.points.in.the.first.distri |
d200 | 62 75 74 69 6f 6e 0a 6e 32 20 3d 20 33 30 20 20 23 20 6e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e | bution.n2.=.30..#.number.of.poin |
d220 | 74 73 20 69 6e 20 74 68 65 20 73 65 63 6f 6e 64 20 64 69 73 74 72 69 62 75 74 69 6f 6e 0a 73 69 | ts.in.the.second.distribution.si |
d240 | 67 20 3d 20 31 20 20 23 20 73 74 64 20 6f 66 20 66 69 72 73 74 20 64 69 73 74 72 69 62 75 74 69 | g.=.1..#.std.of.first.distributi |
d260 | 6f 6e 0a 73 69 67 32 20 3d 20 30 2e 31 20 20 23 20 73 74 64 20 6f 66 20 73 65 63 6f 6e 64 20 64 | on.sig2.=.0.1..#.std.of.second.d |
d280 | 69 73 74 72 69 62 75 74 69 6f 6e 0a 0a 6e 70 2e 72 61 6e 64 6f 6d 2e 73 65 65 64 28 30 29 0a 0a | istribution..np.random.seed(0).. |
d2a0 | 70 68 69 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 29 5b 3a 2c 20 4e 6f 6e 65 5d 0a 78 73 20 3d | phi.=.np.arange(n)[:,.None].xs.= |
d2c0 | 20 70 68 69 20 2b 20 73 69 67 20 2a 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 6e 28 6e 2c 20 | .phi.+.sig.*.np.random.randn(n,. |
d2e0 | 31 29 0a 79 73 20 3d 20 6e 70 2e 76 73 74 61 63 6b 28 28 6e 70 2e 6f 6e 65 73 28 28 6e 20 2f 2f | 1).ys.=.np.vstack((np.ones((n.// |
d300 | 20 32 2c 20 31 29 29 2c 20 30 20 2a 20 6e 70 2e 6f 6e 65 73 28 28 6e 20 2f 2f 20 32 2c 20 31 29 | .2,.1)),.0.*.np.ones((n.//.2,.1) |
d320 | 29 29 29 20 2b 20 73 69 67 32 20 2a 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 6e 28 6e 2c 20 | ))).+.sig2.*.np.random.randn(n,. |
d340 | 31 29 0a 0a 70 68 69 32 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 32 29 5b 3a 2c 20 4e 6f 6e 65 | 1)..phi2.=.np.arange(n2)[:,.None |
d360 | 5d 0a 78 74 20 3d 20 70 68 69 32 20 2b 20 73 69 67 20 2a 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 | ].xt.=.phi2.+.sig.*.np.random.ra |
d380 | 6e 64 6e 28 6e 32 2c 20 31 29 0a 79 74 20 3d 20 6e 70 2e 76 73 74 61 63 6b 28 28 6e 70 2e 6f 6e | ndn(n2,.1).yt.=.np.vstack((np.on |
d3a0 | 65 73 28 28 6e 32 20 2f 2f 20 32 2c 20 31 29 29 2c 20 30 20 2a 20 6e 70 2e 6f 6e 65 73 28 28 6e | es((n2.//.2,.1)),.0.*.np.ones((n |
d3c0 | 32 20 2f 2f 20 32 2c 20 31 29 29 29 29 20 2b 20 73 69 67 32 20 2a 20 6e 70 2e 72 61 6e 64 6f 6d | 2.//.2,.1)))).+.sig2.*.np.random |
d3e0 | 2e 72 61 6e 64 6e 28 6e 32 2c 20 31 29 0a 79 74 20 3d 20 79 74 5b 3a 3a 2d 31 2c 20 3a 5d 0a 0a | .randn(n2,.1).yt.=.yt[::-1,.:].. |
d400 | 70 20 3d 20 6f 74 2e 75 6e 69 66 28 6e 29 0a 71 20 3d 20 6f 74 2e 75 6e 69 66 28 6e 32 29 0a 0a | p.=.ot.unif(n).q.=.ot.unif(n2).. |
d420 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
d440 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
d460 | 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.#.--- |
d480 | 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 6c 6f 74 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f | ------..#%%.plot.the.distributio |
d4a0 | 6e 73 0a 0a 70 6c 2e 63 6c 6f 73 65 28 31 30 29 0a 70 6c 2e 66 69 67 75 72 65 28 31 30 2c 20 28 | ns..pl.close(10).pl.figure(10,.( |
d4c0 | 37 2c 20 37 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 31 2c 20 31 29 0a 0a 70 6c 2e | 7,.7))..pl.subplot(2,.1,.1)..pl. |
d4e0 | 73 63 61 74 74 65 72 28 79 73 2c 20 78 73 2c 20 63 3d 70 68 69 2c 20 73 3d 37 30 29 0a 70 6c 2e | scatter(ys,.xs,.c=phi,.s=70).pl. |
d500 | 79 6c 61 62 65 6c 28 27 46 65 61 74 75 72 65 20 76 61 6c 75 65 20 61 27 2c 20 66 6f 6e 74 73 69 | ylabel('Feature.value.a',.fontsi |
d520 | 7a 65 3d 32 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 24 5c 6d 75 3d 5c 73 75 6d 5f 69 20 5c 64 65 | ze=20).pl.title('$\mu=\sum_i.\de |
d540 | 6c 74 61 5f 7b 78 5f 69 2c 61 5f 69 7d 24 27 2c 20 66 6f 6e 74 73 69 7a 65 3d 32 35 2c 20 75 73 | lta_{x_i,a_i}$',.fontsize=25,.us |
d560 | 65 74 65 78 3d 54 72 75 65 2c 20 79 3d 31 29 0a 70 6c 2e 78 74 69 63 6b 73 28 28 29 29 0a 70 6c | etex=True,.y=1).pl.xticks(()).pl |
d580 | 2e 79 74 69 63 6b 73 28 28 29 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 31 2c 20 32 29 0a | .yticks(()).pl.subplot(2,.1,.2). |
d5a0 | 70 6c 2e 73 63 61 74 74 65 72 28 79 74 2c 20 78 74 2c 20 63 3d 70 68 69 32 2c 20 73 3d 37 30 29 | pl.scatter(yt,.xt,.c=phi2,.s=70) |
d5c0 | 0a 70 6c 2e 78 6c 61 62 65 6c 28 27 63 6f 6f 72 64 69 6e 61 74 65 73 20 78 2f 79 27 2c 20 66 6f | .pl.xlabel('coordinates.x/y',.fo |
d5e0 | 6e 74 73 69 7a 65 3d 32 35 29 0a 70 6c 2e 79 6c 61 62 65 6c 28 27 46 65 61 74 75 72 65 20 76 61 | ntsize=25).pl.ylabel('Feature.va |
d600 | 6c 75 65 20 62 27 2c 20 66 6f 6e 74 73 69 7a 65 3d 32 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 24 | lue.b',.fontsize=20).pl.title('$ |
d620 | 5c 5c 6e 75 3d 5c 73 75 6d 5f 6a 20 5c 64 65 6c 74 61 5f 7b 79 5f 6a 2c 62 5f 6a 7d 24 27 2c 20 | \\nu=\sum_j.\delta_{y_j,b_j}$',. |
d640 | 66 6f 6e 74 73 69 7a 65 3d 32 35 2c 20 75 73 65 74 65 78 3d 54 72 75 65 2c 20 79 3d 31 29 0a 70 | fontsize=25,.usetex=True,.y=1).p |
d660 | 6c 2e 79 74 69 63 6b 73 28 28 29 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 70 | l.yticks(()).pl.tight_layout().p |
d680 | 6c 2e 73 68 6f 77 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | l.show()..###################### |
d6a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
d6c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 43 72 65 61 74 | ########################.#.Creat |
d6e0 | 65 20 73 74 72 75 63 74 75 72 65 20 6d 61 74 72 69 63 65 73 20 61 6e 64 20 61 63 72 6f 73 73 2d | e.structure.matrices.and.across- |
d700 | 66 65 61 74 75 72 65 20 64 69 73 74 61 6e 63 65 20 6d 61 74 72 69 78 0a 23 20 2d 2d 2d 2d 2d 2d | feature.distance.matrix.#.------ |
d720 | 2d 2d 2d 0a 0a 23 25 25 20 53 74 72 75 63 74 75 72 65 20 6d 61 74 72 69 63 65 73 20 61 6e 64 20 | ---..#%%.Structure.matrices.and. |
d740 | 61 63 72 6f 73 73 2d 66 65 61 74 75 72 65 73 20 64 69 73 74 61 6e 63 65 20 6d 61 74 72 69 78 0a | across-features.distance.matrix. |
d760 | 43 31 20 3d 20 6f 74 2e 64 69 73 74 28 78 73 29 0a 43 32 20 3d 20 6f 74 2e 64 69 73 74 28 78 74 | C1.=.ot.dist(xs).C2.=.ot.dist(xt |
d780 | 29 0a 4d 20 3d 20 6f 74 2e 64 69 73 74 28 79 73 2c 20 79 74 29 0a 77 31 20 3d 20 6f 74 2e 75 6e | ).M.=.ot.dist(ys,.yt).w1.=.ot.un |
d7a0 | 69 66 28 43 31 2e 73 68 61 70 65 5b 30 5d 29 0a 77 32 20 3d 20 6f 74 2e 75 6e 69 66 28 43 32 2e | if(C1.shape[0]).w2.=.ot.unif(C2. |
d7c0 | 73 68 61 70 65 5b 30 5d 29 0a 47 6f 74 20 3d 20 6f 74 2e 65 6d 64 28 5b 5d 2c 20 5b 5d 2c 20 4d | shape[0]).Got.=.ot.emd([],.[],.M |
d7e0 | 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | )..############################# |
d800 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
d820 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 6d 61 74 72 69 63 65 | #################.#.Plot.matrice |
d840 | 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 0a 63 6d 61 70 20 3d 20 27 52 65 64 73 27 | s.#.---------..#%%.cmap.=.'Reds' |
d860 | 0a 70 6c 2e 63 6c 6f 73 65 28 31 30 29 0a 70 6c 2e 66 69 67 75 72 65 28 31 30 2c 20 28 35 2c 20 | .pl.close(10).pl.figure(10,.(5,. |
d880 | 35 29 29 0a 66 73 20 3d 20 31 35 0a 6c 5f 78 20 3d 20 5b 30 2c 20 35 2c 20 31 30 2c 20 31 35 5d | 5)).fs.=.15.l_x.=.[0,.5,.10,.15] |
d8a0 | 0a 6c 5f 79 20 3d 20 5b 30 2c 20 35 2c 20 31 30 2c 20 31 35 2c 20 32 30 2c 20 32 35 5d 0a 67 73 | .l_y.=.[0,.5,.10,.15,.20,.25].gs |
d8c0 | 20 3d 20 70 6c 2e 47 72 69 64 53 70 65 63 28 35 2c 20 35 29 0a 0a 61 78 31 20 3d 20 70 6c 2e 73 | .=.pl.GridSpec(5,.5)..ax1.=.pl.s |
d8e0 | 75 62 70 6c 6f 74 28 67 73 5b 33 3a 2c 20 3a 32 5d 29 0a 0a 70 6c 2e 69 6d 73 68 6f 77 28 43 31 | ubplot(gs[3:,.:2])..pl.imshow(C1 |
d900 | 2c 20 63 6d 61 70 3d 63 6d 61 70 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 | ,.cmap=cmap,.interpolation='near |
d920 | 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 22 24 43 5f 31 24 22 2c 20 66 6f 6e 74 73 69 7a 65 | est').pl.title("$C_1$",.fontsize |
d940 | 3d 66 73 29 0a 70 6c 2e 78 6c 61 62 65 6c 28 22 24 6b 24 22 2c 20 66 6f 6e 74 73 69 7a 65 3d 66 | =fs).pl.xlabel("$k$",.fontsize=f |
d960 | 73 29 0a 70 6c 2e 79 6c 61 62 65 6c 28 22 24 69 24 22 2c 20 66 6f 6e 74 73 69 7a 65 3d 66 73 29 | s).pl.ylabel("$i$",.fontsize=fs) |
d980 | 0a 70 6c 2e 78 74 69 63 6b 73 28 6c 5f 78 29 0a 70 6c 2e 79 74 69 63 6b 73 28 6c 5f 78 29 0a 0a | .pl.xticks(l_x).pl.yticks(l_x).. |
d9a0 | 61 78 32 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 28 67 73 5b 3a 33 2c 20 32 3a 5d 29 0a 0a 70 6c | ax2.=.pl.subplot(gs[:3,.2:])..pl |
d9c0 | 2e 69 6d 73 68 6f 77 28 43 32 2c 20 63 6d 61 70 3d 63 6d 61 70 2c 20 69 6e 74 65 72 70 6f 6c 61 | .imshow(C2,.cmap=cmap,.interpola |
d9e0 | 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 22 24 43 5f 32 24 22 | tion='nearest').pl.title("$C_2$" |
da00 | 2c 20 66 6f 6e 74 73 69 7a 65 3d 66 73 29 0a 70 6c 2e 79 6c 61 62 65 6c 28 22 24 6c 24 22 2c 20 | ,.fontsize=fs).pl.ylabel("$l$",. |
da20 | 66 6f 6e 74 73 69 7a 65 3d 66 73 29 0a 23 70 6c 2e 79 6c 61 62 65 6c 28 22 24 6c 24 22 2c 66 6f | fontsize=fs).#pl.ylabel("$l$",fo |
da40 | 6e 74 73 69 7a 65 3d 66 73 29 0a 70 6c 2e 78 74 69 63 6b 73 28 28 29 29 0a 70 6c 2e 79 74 69 63 | ntsize=fs).pl.xticks(()).pl.ytic |
da60 | 6b 73 28 6c 5f 79 29 0a 61 78 32 2e 73 65 74 5f 61 73 70 65 63 74 28 27 61 75 74 6f 27 29 0a 0a | ks(l_y).ax2.set_aspect('auto').. |
da80 | 61 78 33 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 28 67 73 5b 33 3a 2c 20 32 3a 5d 2c 20 73 68 61 | ax3.=.pl.subplot(gs[3:,.2:],.sha |
daa0 | 72 65 78 3d 61 78 32 2c 20 73 68 61 72 65 79 3d 61 78 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 4d | rex=ax2,.sharey=ax1).pl.imshow(M |
dac0 | 2c 20 63 6d 61 70 3d 63 6d 61 70 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 | ,.cmap=cmap,.interpolation='near |
dae0 | 65 73 74 27 29 0a 70 6c 2e 79 74 69 63 6b 73 28 6c 5f 78 29 0a 70 6c 2e 78 74 69 63 6b 73 28 6c | est').pl.yticks(l_x).pl.xticks(l |
db00 | 5f 79 29 0a 70 6c 2e 79 6c 61 62 65 6c 28 22 24 69 24 22 2c 20 66 6f 6e 74 73 69 7a 65 3d 66 73 | _y).pl.ylabel("$i$",.fontsize=fs |
db20 | 29 0a 70 6c 2e 74 69 74 6c 65 28 22 24 4d 5f 7b 41 42 7d 24 22 2c 20 66 6f 6e 74 73 69 7a 65 3d | ).pl.title("$M_{AB}$",.fontsize= |
db40 | 66 73 29 0a 70 6c 2e 78 6c 61 62 65 6c 28 22 24 6a 24 22 2c 20 66 6f 6e 74 73 69 7a 65 3d 66 73 | fs).pl.xlabel("$j$",.fontsize=fs |
db60 | 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 61 78 33 2e 73 65 74 5f 61 73 70 65 | ).pl.tight_layout().ax3.set_aspe |
db80 | 63 74 28 27 61 75 74 6f 27 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 | ct('auto').pl.show()..########## |
dba0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
dbc0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
dbe0 | 23 23 23 23 0a 23 20 43 6f 6d 70 75 74 65 20 46 47 57 2f 47 57 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d | ####.#.Compute.FGW/GW.#.-------- |
dc00 | 2d 0a 0a 23 25 25 20 43 6f 6d 70 75 74 69 6e 67 20 46 47 57 20 61 6e 64 20 47 57 0a 61 6c 70 68 | -..#%%.Computing.FGW.and.GW.alph |
dc20 | 61 20 3d 20 31 65 2d 33 0a 0a 6f 74 2e 74 69 63 28 29 0a 47 77 67 2c 20 6c 6f 67 77 20 3d 20 66 | a.=.1e-3..ot.tic().Gwg,.logw.=.f |
dc40 | 75 73 65 64 5f 67 72 6f 6d 6f 76 5f 77 61 73 73 65 72 73 74 65 69 6e 28 4d 2c 20 43 31 2c 20 43 | used_gromov_wasserstein(M,.C1,.C |
dc60 | 32 2c 20 70 2c 20 71 2c 20 6c 6f 73 73 5f 66 75 6e 3d 27 73 71 75 61 72 65 5f 6c 6f 73 73 27 2c | 2,.p,.q,.loss_fun='square_loss', |
dc80 | 20 61 6c 70 68 61 3d 61 6c 70 68 61 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 2c 20 6c 6f 67 3d | .alpha=alpha,.verbose=True,.log= |
dca0 | 54 72 75 65 29 0a 6f 74 2e 74 6f 63 28 29 0a 0a 23 25 72 65 6c 6f 61 64 5f 65 78 74 20 57 47 57 | True).ot.toc()..#%reload_ext.WGW |
dcc0 | 0a 47 67 2c 20 6c 6f 67 20 3d 20 67 72 6f 6d 6f 76 5f 77 61 73 73 65 72 73 74 65 69 6e 28 43 31 | .Gg,.log.=.gromov_wasserstein(C1 |
dce0 | 2c 20 43 32 2c 20 70 2c 20 71 2c 20 6c 6f 73 73 5f 66 75 6e 3d 27 73 71 75 61 72 65 5f 6c 6f 73 | ,.C2,.p,.q,.loss_fun='square_los |
dd00 | 73 27 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 2c 20 6c 6f 67 3d 54 72 75 65 29 0a 0a 23 23 23 | s',.verbose=True,.log=True)..### |
dd20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
dd40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
dd60 | 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 56 69 73 75 61 6c 69 7a 65 20 74 72 61 6e 73 70 6f 72 | ###########.#.Visualize.transpor |
dd80 | 74 20 6d 61 74 72 69 63 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 76 69 73 75 | t.matrices.#.---------..#%%.visu |
dda0 | 20 4f 54 20 6d 61 74 72 69 78 0a 63 6d 61 70 20 3d 20 27 42 6c 75 65 73 27 0a 66 73 20 3d 20 31 | .OT.matrix.cmap.=.'Blues'.fs.=.1 |
ddc0 | 35 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 28 31 33 2c 20 35 29 29 0a 70 6c 2e 63 6c 66 28 29 | 5.pl.figure(2,.(13,.5)).pl.clf() |
dde0 | 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 47 | .pl.subplot(1,.3,.1).pl.imshow(G |
de00 | 6f 74 2c 20 63 6d 61 70 3d 63 6d 61 70 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 | ot,.cmap=cmap,.interpolation='ne |
de20 | 61 72 65 73 74 27 29 0a 23 70 6c 2e 78 6c 61 62 65 6c 28 22 24 79 24 22 2c 66 6f 6e 74 73 69 7a | arest').#pl.xlabel("$y$",fontsiz |
de40 | 65 3d 66 73 29 0a 70 6c 2e 79 6c 61 62 65 6c 28 22 24 69 24 22 2c 20 66 6f 6e 74 73 69 7a 65 3d | e=fs).pl.ylabel("$i$",.fontsize= |
de60 | 66 73 29 0a 70 6c 2e 78 74 69 63 6b 73 28 28 29 29 0a 0a 70 6c 2e 74 69 74 6c 65 28 27 57 61 73 | fs).pl.xticks(())..pl.title('Was |
de80 | 73 65 72 73 74 65 69 6e 20 28 24 4d 24 20 6f 6e 6c 79 29 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f | serstein.($M$.only)')..pl.subplo |
dea0 | 74 28 31 2c 20 33 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 47 67 2c 20 63 6d 61 70 3d 63 6d | t(1,.3,.2).pl.imshow(Gg,.cmap=cm |
dec0 | 61 70 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e | ap,.interpolation='nearest').pl. |
dee0 | 74 69 74 6c 65 28 27 47 72 6f 6d 6f 76 20 28 24 43 5f 31 2c 43 5f 32 24 20 6f 6e 6c 79 29 27 29 | title('Gromov.($C_1,C_2$.only)') |
df00 | 0a 70 6c 2e 78 74 69 63 6b 73 28 28 29 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 | .pl.xticks(()).pl.subplot(1,.3,. |
df20 | 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 47 77 67 2c 20 63 6d 61 70 3d 63 6d 61 70 2c 20 69 6e 74 | 3).pl.imshow(Gwg,.cmap=cmap,.int |
df40 | 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 | erpolation='nearest').pl.title(' |
df60 | 46 47 57 20 20 28 24 4d 2b 43 5f 31 2c 43 5f 32 24 29 27 29 0a 0a 70 6c 2e 78 6c 61 62 65 6c 28 | FGW..($M+C_1,C_2$)')..pl.xlabel( |
df80 | 22 24 6a 24 22 2c 20 66 6f 6e 74 73 69 7a 65 3d 66 73 29 0a 70 6c 2e 79 6c 61 62 65 6c 28 22 24 | "$j$",.fontsize=fs).pl.ylabel("$ |
dfa0 | 69 24 22 2c 20 66 6f 6e 74 73 69 7a 65 3d 66 73 29 0a 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f | i$",.fontsize=fs)..pl.tight_layo |
dfc0 | 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 db 74 d9 4e ea 88 04 | ut().pl.show().PK.........t.N... |
dfe0 | 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 72 5f 66 67 77 | .............plot_barycenter_fgw |
e000 | 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.-*-.""".= |
e020 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
e040 | 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 69 6e 67 20 46 | .Plot.graphs'.barycenter.using.F |
e060 | 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 3d 3d 3d 3d 3d | GW.============================= |
e080 | 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 74 | ====..This.example.illustrates.t |
e0a0 | 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 66 20 6c 61 62 | he.computation.barycenter.of.lab |
e0c0 | 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 69 72 65 73 20 | eled.graphs.using.FGW..Requires. |
e0e0 | 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 20 54 69 74 6f | networkx.>=2.....[18].Vayer.Tito |
e100 | 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 72 79 20 52 7b | uan,.Chapel.Laetitia,.Flamary.R{ |
e120 | 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 20 20 20 61 6e | \'e}mi,.Tavenard.Romain.......an |
e140 | 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 61 6c 20 54 72 | d.Courty.Nicolas....."Optimal.Tr |
e160 | 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 20 77 69 74 68 | ansport.for.structured.data.with |
e180 | 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 20 49 6e 74 65 | .application.on.graphs".....Inte |
e1a0 | 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 68 69 6e 65 20 | rnational.Conference.on.Machine. |
e1c0 | 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 0a 0a 23 20 41 | Learning.(ICML)..2019..."""..#.A |
e1e0 | 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 61 6e 2e 76 61 | uthor:.Titouan.Vayer.<titouan.va |
e200 | 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 4d 49 54 20 4c | yer@irisa.fr>.#.#.License:.MIT.L |
e220 | 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 69 6d 70 6f 72 | icense..#%%.load.libraries.impor |
e240 | 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e | t.numpy.as.np.import.matplotlib. |
e260 | 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 6b 78 20 61 73 | pyplot.as.plt.import.networkx.as |
e280 | 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 73 70 61 72 73 | .nx.import.math.from.scipy.spars |
e2a0 | 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 61 74 68 0a 69 | e.csgraph.import.shortest_path.i |
e2c0 | 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 6d 63 6f 6c 0a | mport.matplotlib.colors.as.mcol. |
e2e0 | 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 72 6f 6d 20 6f | from.matplotlib.import.cm.from.o |
e300 | 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 74 65 72 73 0a | t.gromov.import.fgw_barycenters. |
e320 | 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 69 6e 64 5f 74 | #%%.Graph.functions...def.find_t |
e340 | 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 65 70 3d 31 30 | hresh(C,.inf=0.5,.sup=3,.step=10 |
e360 | 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 65 20 61 64 65 | ):.....""".Trick.to.find.the.ade |
e380 | 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 20 76 61 6c 75 | quate.thresholds.from.where.valu |
e3a0 | 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 64 65 72 65 64 | e.of.the.C.matrix.are.considered |
e3c0 | 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 6f 64 65 73 20 | .close.enough.to.say.that.nodes. |
e3e0 | 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 74 68 72 65 73 | are.connected.........Tthe.thres |
e400 | 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 63 68 20 62 65 | hold.is.found.by.a.linesearch.be |
e420 | 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 22 20 77 69 74 | tween.values."inf".and."sup".wit |
e440 | 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 0a 20 20 20 20 | h."step".thresholds.tested...... |
e460 | 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 73 20 74 68 65 | ....The.optimal.threshold.is.the |
e480 | 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 63 6f 6e 73 74 | .one.which.minimizes.the.reconst |
e4a0 | 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 68 6f 72 74 65 | ruction.error.between.the.shorte |
e4c0 | 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 74 68 65 20 74 | st_path.matrix.coming.from.the.t |
e4e0 | 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 20 20 20 20 20 | hresholded.adjency.matrix....... |
e500 | 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 20 20 20 20 50 | ..and.the.original.matrix......P |
e520 | 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 20 20 43 20 3a | arameters.....----------.....C.: |
e540 | 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 6e 6f 64 65 73 | .ndarray,.shape.(n_nodes,n_nodes |
e560 | 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 20 6d 61 74 72 | ).............The.structure.matr |
e580 | 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 6c 6f 61 74 0a | ix.to.threshold.....inf.:.float. |
e5a0 | 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 74 68 65 20 6c | ..........The.beginning.of.the.l |
e5c0 | 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 20 20 20 20 20 | inesearch.....sup.:.float....... |
e5e0 | 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 63 68 0a 20 20 | ....The.end.of.the.linesearch... |
e600 | 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 20 20 4e 75 6d | ..step.:.integer.............Num |
e620 | 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 20 20 22 22 22 | ber.of.thresholds.tested.....""" |
e640 | 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 20 6e 70 2e 6c | .....dist.=.[].....search.=.np.l |
e660 | 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 20 66 6f 72 20 | inspace(inf,.sup,.step).....for. |
e680 | 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 70 72 69 6d 65 | thresh.in.search:.........Cprime |
e6a0 | 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 73 68 29 0a 20 | .=.sp_to_adjency(C,.0,.thresh).. |
e6c0 | 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 70 72 69 6d 65 | .......SC.=.shortest_path(Cprime |
e6e0 | 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 20 3d 3d 20 66 | ,.method='D').........SC[SC.==.f |
e700 | 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 64 69 73 74 2e | loat('inf')].=.100.........dist. |
e720 | 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 43 29 29 0a 20 | append(np.linalg.norm(SC.-.C)).. |
e740 | 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 64 69 73 74 29 | ...return.search[np.argmin(dist) |
e760 | 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 28 43 2c 20 74 | ],.dist...def.sp_to_adjency(C,.t |
e780 | 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 29 3a 0a 20 20 | hreshinf=0.2,.threshsup=1.8):... |
e7a0 | 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 75 72 65 20 6d | ..""".Thresholds.the.structure.m |
e7c0 | 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 6e 20 61 64 6a | atrix.in.order.to.compute.an.adj |
e7e0 | 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 20 62 65 74 77 | ency.matrix......All.values.betw |
e800 | 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 20 61 72 65 20 | een.threshinf.and.threshsup.are. |
e820 | 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 6e 65 63 74 65 | considered.representing.connecte |
e840 | 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 61 72 65 20 73 | d.nodes.and.set.to.1..Else.are.s |
e860 | 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 2d 2d 2d 2d 2d | et.to.0.....Parameters.....----- |
e880 | 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 65 20 28 6e 5f | -----.....C.:.ndarray,.shape.(n_ |
e8a0 | 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 73 74 72 75 63 | nodes,n_nodes).........The.struc |
e8c0 | 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 20 20 74 68 72 | ture.matrix.to.threshold.....thr |
e8e0 | 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 6d 69 6e 69 6d | eshinf.:.float.........The.minim |
e900 | 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 68 69 63 68 20 | um.value.of.distance.from.which. |
e920 | 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 20 20 20 74 68 | the.new.value.is.set.to.1.....th |
e940 | 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 20 6d 61 78 69 | reshsup.:.float.........The.maxi |
e960 | 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 68 69 63 68 | mum.value.of.distance.from.which |
e980 | 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 20 20 20 52 | .the.new.value.is.set.to.1.....R |
e9a0 | 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 6e 64 61 72 72 | eturns.....-------.....C.:.ndarr |
e9c0 | 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 0a 20 20 20 20 | ay,.shape.(n_nodes,n_nodes)..... |
e9e0 | 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 61 63 68 20 65 | ....The.threshold.matrix..Each.e |
ea00 | 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 20 20 20 20 48 | lement.is.in.{0,1}.....""".....H |
ea20 | 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 66 69 6c 6c 5f | .=.np.zeros_like(C).....np.fill_ |
ea40 | 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 0a 20 20 20 20 | diagonal(H,.np.diagonal(C))..... |
ea60 | 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 6d 28 6e 70 2e | C.=.C.-.H.....C.=.np.minimum(np. |
ea80 | 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 73 68 73 75 70 | maximum(C,.threshinf),.threshsup |
eaa0 | 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 0a 20 20 20 20 | ).....C[C.==.threshsup].=.0..... |
eac0 | 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 0a 0a 0a 64 65 | C[C.!=.0].=.1......return.C...de |
eae0 | 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 68 28 4e 3d 32 | f.build_noisy_circular_graph(N=2 |
eb00 | 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 69 73 65 3d 46 | 0,.mu=0,.sigma=0.3,.with_noise=F |
eb20 | 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 2c 20 70 3d 4e | alse,.structure_noise=False,.p=N |
eb40 | 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 79 20 63 69 72 | one):.....""".Create.a.noisy.cir |
eb60 | 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 20 6e 78 2e 47 | cular.graph.....""".....g.=.nx.G |
eb80 | 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 28 6c 69 73 74 | raph().....g.add_nodes_from(list |
eba0 | 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 6e 67 65 28 4e | (range(N))).....for.i.in.range(N |
ebc0 | 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 2e 72 61 6e 64 | ):.........noise.=.float(np.rand |
ebe0 | 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 20 20 20 20 20 | om.normal(mu,.sigma,.1))........ |
ec00 | 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 20 67 2e 61 64 | .if.with_noise:.............g.ad |
ec20 | 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 28 32 20 | d_node(i,.attr_name=math.sin((2. |
ec40 | 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 29 0a 20 20 20 | *.i.*.math.pi./.N)).+.noise).... |
ec60 | 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 64 5f 6e 6f 64 | .....else:.............g.add_nod |
ec80 | 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 20 69 20 2a 20 | e(i,.attr_name=math.sin(2.*.i.*. |
eca0 | 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 5f 65 64 67 65 | math.pi./.N)).........g.add_edge |
ecc0 | 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 74 75 72 65 5f | (i,.i.+.1).........if.structure_ |
ece0 | 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 74 20 3d 20 6e | noise:.............randomint.=.n |
ed00 | 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 20 20 20 20 20 | p.random.randint(0,.p).......... |
ed20 | 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 20 20 20 20 20 | ...if.randomint.==.0:........... |
ed40 | 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 20 20 20 20 20 | ......if.i.<=.N.-.3:............ |
ed60 | 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 32 29 0a 20 20 | .........g.add_edge(i,.i.+.2)... |
ed80 | 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 3a 0a 20 20 20 | ..............if.i.==.N.-.2:.... |
eda0 | 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 28 69 2c 20 30 | .................g.add_edge(i,.0 |
edc0 | 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 31 3a | ).................if.i.==.N.-.1: |
ede0 | 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 28 | .....................g.add_edge( |
ee00 | 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 20 20 20 20 6e | i,.1).....g.add_edge(N,.0).....n |
ee20 | 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 61 6c 28 6d 75 | oise.=.float(np.random.normal(mu |
ee40 | 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 69 73 65 3a 0a | ,.sigma,.1)).....if.with_noise:. |
ee60 | 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 6e 61 6d 65 3d | ........g.add_node(N,.attr_name= |
ee80 | 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 20 4e 29 29 20 | math.sin((2.*.N.*.math.pi./.N)). |
eea0 | 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 67 2e 61 64 64 | +.noise).....else:.........g.add |
eec0 | 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 28 32 20 2a 20 | _node(N,.attr_name=math.sin(2.*. |
eee0 | 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 6e 20 67 0a 0a | N.*.math.pi./.N)).....return.g.. |
ef00 | 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 20 76 6d 69 6e | .def.graph_colors(nx_graph,.vmin |
ef20 | 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 6f 6c 2e 4e 6f | =0,.vmax=7):.....cnorm.=.mcol.No |
ef40 | 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 78 29 0a 20 20 | rmalize(vmin=vmin,.vmax=vmax)... |
ef60 | 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 28 6e 6f 72 6d | ..cpick.=.cm.ScalarMappable(norm |
ef80 | 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 20 63 70 69 63 | =cnorm,.cmap='viridis').....cpic |
efa0 | 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 20 3d 20 7b 7d | k.set_array([]).....val_map.=.{} |
efc0 | 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 65 5f 61 74 74 | .....for.k,.v.in.nx.get_node_att |
efe0 | 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 65 27 29 2e 69 | ributes(nx_graph,.'attr_name').i |
f000 | 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 3d 20 63 70 69 | tems():.........val_map[k].=.cpi |
f020 | 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 5b 5d 0a 20 20 | ck.to_rgba(v).....colors.=.[]... |
f040 | 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 73 28 29 3a 0a | ..for.node.in.nx_graph.nodes():. |
f060 | 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 61 70 5b 6e 6f | ........colors.append(val_map[no |
f080 | 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 23 23 23 23 23 | de]).....return.colors..######## |
f0a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f0c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f0e0 | 23 23 23 23 23 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d | ######.#.Generate.data.#.------- |
f100 | 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 74 0a 23 20 57 | ------..#%%.circular.dataset.#.W |
f120 | 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 63 69 72 63 75 | e.build.a.dataset.of.noisy.circu |
f140 | 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 64 20 6f 6e 20 | lar.graphs..#.Noise.is.added.on. |
f160 | 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 6e 6e 65 63 74 | the.structures.by.random.connect |
f180 | 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 20 67 61 75 73 | ions.and.on.the.features.by.gaus |
f1a0 | 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 64 28 33 30 29 | sian.noise....np.random.seed(30) |
f1c0 | 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 0a 20 20 20 20 | .X0.=.[].for.k.in.range(9):..... |
f1e0 | 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 6c 61 72 5f 67 | X0.append(build_noisy_circular_g |
f200 | 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 32 35 29 2c 20 | raph(np.random.randint(15,.25),. |
f220 | 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 6e 6f 69 73 65 | with_noise=True,.structure_noise |
f240 | 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 23 23 23 23 23 | =True,.p=3))..################## |
f260 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f280 | 23 23 23 23 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 |
f2a0 | 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 6c 6f 74 20 67 | lot.data.#.---------..#%%.Plot.g |
f2c0 | 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 38 2c 20 31 30 | raphs..plt.figure(figsize=(8,.10 |
f2e0 | 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 0a 20 20 20 20 | )).for.i.in.range(len(X0)):..... |
f300 | 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 20 20 67 20 3d | plt.subplot(3,.3,.i.+.1).....g.= |
f320 | 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 6b 61 77 61 69 | .X0[i].....pos.=.nx.kamada_kawai |
f340 | 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 6f 73 3d 70 6f | _layout(g).....nx.draw(g,.pos=po |
f360 | 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 67 2c 20 76 6d | s,.node_color=graph_colors(g,.vm |
f380 | 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 3d 46 61 6c 73 | in=-1,.vmax=1),.with_labels=Fals |
f3a0 | 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 74 6c 65 28 27 | e,.node_size=100).plt.suptitle(' |
f3c0 | 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 6c 6f 72 20 69 | Dataset.of.noisy.graphs..Color.i |
f3e0 | 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 7a 65 3d 32 30 | ndicates.the.label',.fontsize=20 |
f400 | 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 23 23 23 23 23 | ).plt.show()..################## |
f420 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f440 | 23 23 23 23 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 42 | ############################.#.B |
f460 | 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 2d 2d 2d 2d 2d | arycenter.computation.#.-------- |
f480 | 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 75 74 65 20 74 | --------------..#%%.We.compute.t |
f4a0 | 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 72 75 63 74 75 | he.barycenter.using.FGW..Structu |
f4c0 | 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 69 6e 67 20 74 | re.matrices.are.computed.using.t |
f4e0 | 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 6e 20 74 68 65 | he.shortest_path.distance.in.the |
f500 | 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 20 61 72 65 20 | .graph.#.Features.distances.are. |
f520 | 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 3d 20 5b 73 68 | the.euclidean.distances.Cs.=.[sh |
f540 | 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 74 72 69 78 28 | ortest_path(nx.adjacency_matrix( |
f560 | 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 6e 65 73 28 6c | x)).for.x.in.X0].ps.=.[np.ones(l |
f580 | 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 73 28 29 29 20 | en(x.nodes()))./.len(x.nodes()). |
f5a0 | 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 28 5b 76 20 66 | for.x.in.X0].Ys.=.[np.array([v.f |
f5c0 | 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 74 72 69 62 75 | or.(k,.v).in.nx.get_node_attribu |
f5e0 | 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 5d 29 2e 72 65 | tes(x,.'attr_name').items()]).re |
f600 | 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 61 6d 62 64 61 | shape(-1,.1).for.x.in.X0].lambda |
f620 | 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 73 29 29 20 2f | s.=.np.array([np.ones(len(Ys))./ |
f640 | 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 20 3d 20 31 35 | .len(Ys)]).ravel().sizebary.=.15 |
f660 | 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 77 69 74 68 20 | ..#.we.choose.a.barycenter.with. |
f680 | 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 61 72 79 63 65 | 15.nodes..A,.C,.log.=.fgw_baryce |
f6a0 | 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 20 6c 61 6d 62 | nters(sizebary,.Ys,.Cs,.ps,.lamb |
f6c0 | 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 0a 23 23 23 23 | das,.alpha=0.95,.log=True)..#### |
f6e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f700 | 23 23 23 23 23 23 23 23 23 23 23 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 0a 23 20 50 6c 6f 74 20 42 61 72 79 63 65 6e 74 65 72 0a 23 20 2d | ##########.#.Plot.Barycenter.#.- |
f740 | 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 43 72 | ------------------------..#%%.Cr |
f760 | 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 6e 78 2e 66 72 | eate.the.barycenter.bary.=.nx.fr |
f780 | 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 63 79 28 43 2c | om_numpy_matrix(sp_to_adjency(C, |
f7a0 | 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 64 5f 74 68 72 | .threshinf=0,.threshsup=find_thr |
f7c0 | 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 5d 29 29 0a 66 | esh(C,.sup=100,.step=100)[0])).f |
f7e0 | 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 6c 28 29 29 3a | or.i,.v.in.enumerate(A.ravel()): |
f800 | 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 6e 61 6d 65 3d | .....bary.add_node(i,.attr_name= |
f820 | 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 61 69 5f 6c 61 | v)..#%%.pos.=.nx.kamada_kawai_la |
f840 | 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 73 3d 70 6f 73 | yout(bary).nx.draw(bary,.pos=pos |
f860 | 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 61 72 79 2c 20 | ,.node_color=graph_colors(bary,. |
f880 | 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 3d 46 61 | vmin=-1,.vmax=1),.with_labels=Fa |
f8a0 | 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 65 72 27 2c 20 | lse).plt.suptitle('Barycenter',. |
f8c0 | 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 04 14 00 00 00 | fontsize=20).plt.show().PK...... |
f8e0 | 00 00 db 74 d9 4e 6f 6c 58 5b 88 13 00 00 88 13 00 00 13 00 00 00 70 6c 6f 74 5f 4f 54 5f 4c 31 | ...t.NolX[............plot_OT_L1 |
f900 | 5f 76 73 5f 4c 32 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d | _vs_L2.py#.-*-.coding:.utf-8.-*- |
f920 | 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 | .""".=========================== |
f940 | 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 |
f960 | 70 6f 72 74 20 66 6f 72 20 64 69 66 66 65 72 65 6e 74 20 6d 65 74 72 69 63 73 0a 3d 3d 3d 3d 3d | port.for.different.metrics.===== |
f980 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
f9a0 | 3d 3d 3d 3d 3d 0a 0a 32 44 20 4f 54 20 6f 6e 20 65 6d 70 69 72 69 63 61 6c 20 64 69 73 74 72 69 | =====..2D.OT.on.empirical.distri |
f9c0 | 62 75 74 69 6f 20 20 77 69 74 68 20 64 69 66 66 65 72 65 6e 74 20 67 6f 75 6e 64 20 6d 65 74 72 | butio..with.different.gound.metr |
f9e0 | 69 63 2e 0a 0a 53 74 6f 6c 65 20 74 68 65 20 66 69 67 75 72 65 20 69 64 65 61 20 66 72 6f 6d 20 | ic...Stole.the.figure.idea.from. |
fa00 | 46 69 67 2e 20 31 20 61 6e 64 20 32 20 69 6e 0a 68 74 74 70 73 3a 2f 2f 61 72 78 69 76 2e 6f 72 | Fig..1.and.2.in.https://arxiv.or |
fa20 | 67 2f 70 64 66 2f 31 37 30 36 2e 30 37 36 35 30 2e 70 64 66 0a 0a 0a 22 22 22 0a 0a 23 20 41 75 | g/pdf/1706.07650.pdf..."""..#.Au |
fa40 | 74 68 6f 72 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 | thor:.Remi.Flamary.<remi.flamary |
fa60 | 40 75 6e 69 63 65 2e 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 | @unice.fr>.#.#.License:.MIT.Lice |
fa80 | 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 |
faa0 | 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. |
fac0 | 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 23 | import.ot.plot..################ |
fae0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
fb00 | 23 23 23 23 23 23 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 | ##############################.# |
fb20 | 20 44 61 74 61 73 65 74 20 31 20 3a 20 75 6e 69 66 6f 72 6d 20 73 61 6d 70 6c 69 6e 67 0a 23 20 | .Dataset.1.:.uniform.sampling.#. |
fb40 | 2d 2d 2d 2d 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 | ----------------------------..n. |
fb60 | 3d 20 32 30 20 20 23 20 6e 62 20 73 61 6d 70 6c 65 73 0a 78 73 20 3d 20 6e 70 2e 7a 65 72 6f 73 | =.20..#.nb.samples.xs.=.np.zeros |
fb80 | 28 28 6e 2c 20 32 29 29 0a 78 73 5b 3a 2c 20 30 5d 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 29 | ((n,.2)).xs[:,.0].=.np.arange(n) |
fba0 | 20 2b 20 31 0a 78 73 5b 3a 2c 20 31 5d 20 3d 20 28 6e 70 2e 61 72 61 6e 67 65 28 6e 29 20 2b 20 | .+.1.xs[:,.1].=.(np.arange(n).+. |
fbc0 | 31 29 20 2a 20 2d 30 2e 30 30 31 20 20 23 20 74 6f 20 6d 61 6b 65 20 69 74 20 73 74 72 69 63 74 | 1).*.-0.001..#.to.make.it.strict |
fbe0 | 6c 79 20 63 6f 6e 76 65 78 2e 2e 2e 0a 0a 78 74 20 3d 20 6e 70 2e 7a 65 72 6f 73 28 28 6e 2c 20 | ly.convex.....xt.=.np.zeros((n,. |
fc00 | 32 29 29 0a 78 74 5b 3a 2c 20 31 5d 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 29 20 2b 20 31 0a | 2)).xt[:,.1].=.np.arange(n).+.1. |
fc20 | 0a 61 2c 20 62 20 3d 20 6f 74 2e 75 6e 69 66 28 6e 29 2c 20 6f 74 2e 75 6e 69 66 28 6e 29 20 20 | .a,.b.=.ot.unif(n),.ot.unif(n).. |
fc40 | 23 20 75 6e 69 66 6f 72 6d 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6f 6e 20 73 61 6d 70 6c 65 | #.uniform.distribution.on.sample |
fc60 | 73 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 31 20 3d 20 6f 74 2e 64 69 73 74 28 78 73 | s..#.loss.matrix.M1.=.ot.dist(xs |
fc80 | 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 0a 4d 31 20 2f 3d 20 | ,.xt,.metric='euclidean').M1./=. |
fca0 | 4d 31 2e 6d 61 78 28 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 32 20 3d 20 6f 74 2e | M1.max()..#.loss.matrix.M2.=.ot. |
fcc0 | 64 69 73 74 28 78 73 2c 20 78 74 2c 20 6d 65 74 72 69 63 3d 27 73 71 65 75 63 6c 69 64 65 61 6e | dist(xs,.xt,.metric='sqeuclidean |
fce0 | 27 29 0a 4d 32 20 2f 3d 20 4d 32 2e 6d 61 78 28 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 | ').M2./=.M2.max()..#.loss.matrix |
fd00 | 0a 4d 70 20 3d 20 6e 70 2e 73 71 72 74 28 6f 74 2e 64 69 73 74 28 78 73 2c 20 78 74 2c 20 6d 65 | .Mp.=.np.sqrt(ot.dist(xs,.xt,.me |
fd20 | 74 72 69 63 3d 27 65 75 63 6c 69 64 65 61 6e 27 29 29 0a 4d 70 20 2f 3d 20 4d 70 2e 6d 61 78 28 | tric='euclidean')).Mp./=.Mp.max( |
fd40 | 29 0a 0a 23 20 44 61 74 61 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 | )..#.Data.pl.figure(1,.figsize=( |
fd60 | 37 2c 20 33 29 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d | 7,.3)).pl.clf().pl.plot(xs[:,.0] |
fd80 | 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 | ,.xs[:,.1],.'+b',.label='Source. |
fda0 | 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a | samples').pl.plot(xt[:,.0],.xt[: |
fdc0 | 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 | ,.1],.'xr',.label='Target.sample |
fde0 | 73 27 29 0a 70 6c 2e 61 78 69 73 28 27 65 71 75 61 6c 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 | s').pl.axis('equal').pl.title('S |
fe00 | 6f 75 72 63 65 20 61 6e 64 20 74 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 | ource.and.target.distributions') |
fe20 | 0a 0a 0a 23 20 43 6f 73 74 20 6d 61 74 72 69 63 65 73 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 | ...#.Cost.matrices.pl.figure(2,. |
fe40 | 66 69 67 73 69 7a 65 3d 28 37 2c 20 33 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 | figsize=(7,.3))..pl.subplot(1,.3 |
fe60 | 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 4d 31 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e | ,.1).pl.imshow(M1,.interpolation |
fe80 | 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 45 75 63 6c 69 64 65 61 6e 20 | ='nearest').pl.title('Euclidean. |
fea0 | 63 6f 73 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 32 29 0a 70 6c 2e 69 | cost')..pl.subplot(1,.3,.2).pl.i |
fec0 | 6d 73 68 6f 77 28 4d 32 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 | mshow(M2,.interpolation='nearest |
fee0 | 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 71 75 61 72 65 64 20 45 75 63 6c 69 64 65 61 6e 20 63 | ').pl.title('Squared.Euclidean.c |
ff00 | 6f 73 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 33 29 0a 70 6c 2e 69 6d | ost')..pl.subplot(1,.3,.3).pl.im |
ff20 | 73 68 6f 77 28 4d 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 | show(Mp,.interpolation='nearest' |
ff40 | 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 71 72 74 20 45 75 63 6c 69 64 65 61 6e 20 63 6f 73 74 27 | ).pl.title('Sqrt.Euclidean.cost' |
ff60 | 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()..########### |
ff80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
ffa0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
ffc0 | 23 23 23 0a 23 20 44 61 74 61 73 65 74 20 31 20 3a 20 50 6c 6f 74 20 4f 54 20 4d 61 74 72 69 63 | ###.#.Dataset.1.:.Plot.OT.Matric |
ffe0 | 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | es.#.--------------------------- |
10000 | 2d 0a 0a 0a 23 25 25 20 45 4d 44 0a 47 31 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 31 | -...#%%.EMD.G1.=.ot.emd(a,.b,.M1 |
10020 | 29 0a 47 32 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 32 29 0a 47 70 20 3d 20 6f 74 2e | ).G2.=.ot.emd(a,.b,.M2).Gp.=.ot. |
10040 | 65 6d 64 28 61 2c 20 62 2c 20 4d 70 29 0a 0a 23 20 4f 54 20 6d 61 74 72 69 63 65 73 0a 70 6c 2e | emd(a,.b,.Mp)..#.OT.matrices.pl. |
10060 | 66 69 67 75 72 65 28 33 2c 20 66 69 67 73 69 7a 65 3d 28 37 2c 20 33 29 29 0a 0a 70 6c 2e 73 75 | figure(3,.figsize=(7,.3))..pl.su |
10080 | 62 70 6c 6f 74 28 31 2c 20 33 2c 20 31 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 | bplot(1,.3,.1).ot.plot.plot2D_sa |
100a0 | 6d 70 6c 65 73 5f 6d 61 74 28 78 73 2c 20 78 74 2c 20 47 31 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c | mples_mat(xs,.xt,.G1,.c=[.5,..5, |
100c0 | 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], |
100e0 | 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 |
10100 | 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', |
10120 | 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 61 78 69 73 | .label='Target.samples').pl.axis |
10140 | 28 27 65 71 75 61 6c 27 29 0a 23 20 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e | ('equal').#.pl.legend(loc=0).pl. |
10160 | 74 69 74 6c 65 28 27 4f 54 20 45 75 63 6c 69 64 65 61 6e 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f | title('OT.Euclidean')..pl.subplo |
10180 | 74 28 31 2c 20 33 2c 20 32 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 | t(1,.3,.2).ot.plot.plot2D_sample |
101a0 | 73 5f 6d 61 74 28 78 73 2c 20 78 74 2c 20 47 32 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 | s_mat(xs,.xt,.G2,.c=[.5,..5,.1]) |
101c0 | 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 62 | .pl.plot(xs[:,.0],.xs[:,.1],.'+b |
101e0 | 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 6c | ',.label='Source.samples').pl.pl |
10200 | 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 | ot(xt[:,.0],.xt[:,.1],.'xr',.lab |
10220 | 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 61 78 69 73 28 27 65 71 | el='Target.samples').pl.axis('eq |
10240 | 75 61 6c 27 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 | ual').#.pl.legend(loc=0).pl.titl |
10260 | 65 28 27 4f 54 20 73 71 75 61 72 65 64 20 45 75 63 6c 69 64 65 61 6e 27 29 0a 0a 70 6c 2e 73 75 | e('OT.squared.Euclidean')..pl.su |
10280 | 62 70 6c 6f 74 28 31 2c 20 33 2c 20 33 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 | bplot(1,.3,.3).ot.plot.plot2D_sa |
102a0 | 6d 70 6c 65 73 5f 6d 61 74 28 78 73 2c 20 78 74 2c 20 47 70 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c | mples_mat(xs,.xt,.Gp,.c=[.5,..5, |
102c0 | 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], |
102e0 | 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 |
10300 | 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', |
10320 | 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 61 78 69 73 | .label='Target.samples').pl.axis |
10340 | 28 27 65 71 75 61 6c 27 29 0a 23 20 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e | ('equal').#.pl.legend(loc=0).pl. |
10360 | 74 69 74 6c 65 28 27 4f 54 20 73 71 72 74 20 45 75 63 6c 69 64 65 61 6e 27 29 0a 70 6c 2e 74 69 | title('OT.sqrt.Euclidean').pl.ti |
10380 | 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 0a 0a 23 23 23 23 23 23 | ght_layout()..pl.show()...###### |
103a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
103c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
103e0 | 23 23 23 23 23 23 23 23 0a 23 20 44 61 74 61 73 65 74 20 32 20 3a 20 50 61 72 74 69 61 6c 20 63 | ########.#.Dataset.2.:.Partial.c |
10400 | 69 72 63 6c 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 | ircle.#.------------------------ |
10420 | 2d 2d 0a 0a 6e 20 3d 20 35 30 20 20 23 20 6e 62 20 73 61 6d 70 6c 65 73 0a 78 74 6f 74 20 3d 20 | --..n.=.50..#.nb.samples.xtot.=. |
10440 | 6e 70 2e 7a 65 72 6f 73 28 28 6e 20 2b 20 31 2c 20 32 29 29 0a 78 74 6f 74 5b 3a 2c 20 30 5d 20 | np.zeros((n.+.1,.2)).xtot[:,.0]. |
10460 | 3d 20 6e 70 2e 63 6f 73 28 0a 20 20 20 20 28 6e 70 2e 61 72 61 6e 67 65 28 6e 20 2b 20 31 29 20 | =.np.cos(.....(np.arange(n.+.1). |
10480 | 2b 20 31 2e 30 29 20 2a 20 30 2e 39 20 2f 20 28 6e 20 2b 20 32 29 20 2a 20 32 20 2a 20 6e 70 2e | +.1.0).*.0.9./.(n.+.2).*.2.*.np. |
104a0 | 70 69 29 0a 78 74 6f 74 5b 3a 2c 20 31 5d 20 3d 20 6e 70 2e 73 69 6e 28 0a 20 20 20 20 28 6e 70 | pi).xtot[:,.1].=.np.sin(.....(np |
104c0 | 2e 61 72 61 6e 67 65 28 6e 20 2b 20 31 29 20 2b 20 31 2e 30 29 20 2a 20 30 2e 39 20 2f 20 28 6e | .arange(n.+.1).+.1.0).*.0.9./.(n |
104e0 | 20 2b 20 32 29 20 2a 20 32 20 2a 20 6e 70 2e 70 69 29 0a 0a 78 73 20 3d 20 78 74 6f 74 5b 3a 6e | .+.2).*.2.*.np.pi)..xs.=.xtot[:n |
10500 | 2c 20 3a 5d 0a 78 74 20 3d 20 78 74 6f 74 5b 31 3a 2c 20 3a 5d 0a 0a 61 2c 20 62 20 3d 20 6f 74 | ,.:].xt.=.xtot[1:,.:]..a,.b.=.ot |
10520 | 2e 75 6e 69 66 28 6e 29 2c 20 6f 74 2e 75 6e 69 66 28 6e 29 20 20 23 20 75 6e 69 66 6f 72 6d 20 | .unif(n),.ot.unif(n)..#.uniform. |
10540 | 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6f 6e 20 73 61 6d 70 6c 65 73 0a 0a 23 20 6c 6f 73 73 20 | distribution.on.samples..#.loss. |
10560 | 6d 61 74 72 69 78 0a 4d 31 20 3d 20 6f 74 2e 64 69 73 74 28 78 73 2c 20 78 74 2c 20 6d 65 74 72 | matrix.M1.=.ot.dist(xs,.xt,.metr |
10580 | 69 63 3d 27 65 75 63 6c 69 64 65 61 6e 27 29 0a 4d 31 20 2f 3d 20 4d 31 2e 6d 61 78 28 29 0a 0a | ic='euclidean').M1./=.M1.max().. |
105a0 | 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 32 20 3d 20 6f 74 2e 64 69 73 74 28 78 73 2c 20 78 | #.loss.matrix.M2.=.ot.dist(xs,.x |
105c0 | 74 2c 20 6d 65 74 72 69 63 3d 27 73 71 65 75 63 6c 69 64 65 61 6e 27 29 0a 4d 32 20 2f 3d 20 4d | t,.metric='sqeuclidean').M2./=.M |
105e0 | 32 2e 6d 61 78 28 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 70 20 3d 20 6e 70 2e 73 | 2.max()..#.loss.matrix.Mp.=.np.s |
10600 | 71 72 74 28 6f 74 2e 64 69 73 74 28 78 73 2c 20 78 74 2c 20 6d 65 74 72 69 63 3d 27 65 75 63 6c | qrt(ot.dist(xs,.xt,.metric='eucl |
10620 | 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 0a 23 20 44 61 74 61 | idean')).Mp./=.Mp.max()...#.Data |
10640 | 0a 70 6c 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 37 2c 20 33 29 29 0a 70 6c | .pl.figure(4,.figsize=(7,.3)).pl |
10660 | 2e 63 6c 66 28 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 | .clf().pl.plot(xs[:,.0],.xs[:,.1 |
10680 | 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 | ],.'+b',.label='Source.samples') |
106a0 | 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 | .pl.plot(xt[:,.0],.xt[:,.1],.'xr |
106c0 | 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 61 78 | ',.label='Target.samples').pl.ax |
106e0 | 69 73 28 27 65 71 75 61 6c 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 20 61 6e 64 | is('equal').pl.title('Source.and |
10700 | 20 74 72 61 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 0a 23 20 43 6f 73 74 | .traget.distributions')...#.Cost |
10720 | 20 6d 61 74 72 69 63 65 73 0a 70 6c 2e 66 69 67 75 72 65 28 35 2c 20 66 69 67 73 69 7a 65 3d 28 | .matrices.pl.figure(5,.figsize=( |
10740 | 37 2c 20 33 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 31 29 0a 70 6c 2e 69 | 7,.3))..pl.subplot(1,.3,.1).pl.i |
10760 | 6d 73 68 6f 77 28 4d 31 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 | mshow(M1,.interpolation='nearest |
10780 | 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 45 75 63 6c 69 64 65 61 6e 20 63 6f 73 74 27 29 0a 0a 70 | ').pl.title('Euclidean.cost')..p |
107a0 | 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 4d 32 2c | l.subplot(1,.3,.2).pl.imshow(M2, |
107c0 | 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 |
107e0 | 6c 65 28 27 53 71 75 61 72 65 64 20 45 75 63 6c 69 64 65 61 6e 20 63 6f 73 74 27 29 0a 0a 70 6c | le('Squared.Euclidean.cost')..pl |
10800 | 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 4d 70 2c 20 | .subplot(1,.3,.3).pl.imshow(Mp,. |
10820 | 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c | interpolation='nearest').pl.titl |
10840 | 65 28 27 53 71 72 74 20 45 75 63 6c 69 64 65 61 6e 20 63 6f 73 74 27 29 0a 70 6c 2e 74 69 67 68 | e('Sqrt.Euclidean.cost').pl.tigh |
10860 | 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()..#################### |
10880 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
108a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 44 61 74 | ##########################.#.Dat |
108c0 | 61 73 65 74 20 32 20 3a 20 50 6c 6f 74 20 20 4f 54 20 4d 61 74 72 69 63 65 73 0a 23 20 2d 2d 2d | aset.2.:.Plot..OT.Matrices.#.--- |
108e0 | 2d 2d 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 | --------------------------...#%% |
10900 | 20 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 | .EMD.G1.=.ot.emd(a,.b,.M1).G2.=. |
10920 | 6f 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 | ot.emd(a,.b,.M2).Gp.=.ot.emd(a,. |
10940 | 62 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 | b,.Mp)..#.OT.matrices.pl.figure( |
10960 | 36 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 | 6,.figsize=(7,.3))..pl.subplot(1 |
10980 | 2c 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 | ,.3,.1).ot.plot.plot2D_samples_m |
109a0 | 61 74 28 78 73 2c 20 78 74 2c 20 47 31 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c | at(xs,.xt,.G1,.c=[.5,..5,.1]).pl |
109c0 | 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 | .plot(xs[:,.0],.xs[:,.1],.'+b',. |
109e0 | 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 | label='Source.samples').pl.plot( |
10a00 | 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d | xt[:,.0],.xt[:,.1],.'xr',.label= |
10a20 | 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 61 78 69 73 28 27 65 71 75 61 6c | 'Target.samples').pl.axis('equal |
10a40 | 27 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 | ').#.pl.legend(loc=0).pl.title(' |
10a60 | 4f 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 | OT.Euclidean')..pl.subplot(1,.3, |
10a80 | 20 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 | .2).ot.plot.plot2D_samples_mat(x |
10aa0 | 73 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 | s,.xt,.G2,.c=[.5,..5,.1]).pl.plo |
10ac0 | 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 | t(xs[:,.0],.xs[:,.1],.'+b',.labe |
10ae0 | 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a | l='Source.samples').pl.plot(xt[: |
10b00 | 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 | ,.0],.xt[:,.1],.'xr',.label='Tar |
10b20 | 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 61 78 69 73 28 27 65 71 75 61 6c 27 29 0a 23 | get.samples').pl.axis('equal').# |
10b40 | 20 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 73 | .pl.legend(loc=0).pl.title('OT.s |
10b60 | 71 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 | quared.Euclidean')..pl.subplot(1 |
10b80 | 2c 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 | ,.3,.3).ot.plot.plot2D_samples_m |
10ba0 | 61 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 | at(xs,.xt,.Gp,.c=[.5,..5,.1]).pl |
10bc0 | 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 | .plot(xs[:,.0],.xs[:,.1],.'+b',. |
10be0 | 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 | label='Source.samples').pl.plot( |
10c00 | 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d | xt[:,.0],.xt[:,.1],.'xr',.label= |
10c20 | 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 61 78 69 73 28 27 65 71 75 61 6c | 'Target.samples').pl.axis('equal |
10c40 | 27 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 | ').#.pl.legend(loc=0).pl.title(' |
10c60 | 4f 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 | OT.sqrt.Euclidean').pl.tight_lay |
10c80 | 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 db 74 d9 4e a6 | out()..pl.show().PK.........t.N. |
10ca0 | 16 4e 83 2e 17 00 00 2e 17 00 00 21 00 00 00 70 6c 6f 74 5f 62 61 72 79 63 65 6e 74 65 72 5f 6c | .N.........!...plot_barycenter_l |
10cc0 | 70 5f 76 73 5f 65 6e 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 | p_vs_entropic.py#.-*-.coding:.ut |
10ce0 | 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.-*-.""".==================== |
10d00 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
10d20 | 3d 3d 3d 3d 3d 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 | =============================.1D |
10d40 | 20 57 61 73 73 65 72 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 | .Wasserstein.barycenter.comparis |
10d60 | 6f 6e 20 62 65 74 77 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 | on.between.exact.LP.and.entropic |
10d80 | 20 72 65 67 75 6c 61 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 | .regularization.================ |
10da0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
10dc0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
10de0 | 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. |
10e00 | 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 |
10e20 | 72 73 74 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 | rstein.Barycenter.as.proposed.in |
10e40 | 20 5b 33 5d 20 61 6e 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 | .[3].and.exact.LP.barycenters.us |
10e60 | 69 6e 67 20 73 74 61 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 | ing.standard.LP.solver...It.repr |
10e80 | 6f 64 75 63 65 73 20 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 | oduces.approximately.Figure.3.1. |
10ea0 | 61 6e 64 20 33 2e 32 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 | and.3.2.from.the.following.paper |
10ec0 | 3a 0a 43 75 74 75 72 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 | :.Cuturi,.M.,.&.Peyr..,.G..(2016 |
10ee0 | 29 2e 20 41 20 73 6d 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 | )..A.smoothed.dual.approach.for. |
10f00 | 76 61 72 69 61 74 69 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 | variational.Wasserstein.problems |
10f20 | 2e 20 53 49 41 4d 20 4a 6f 75 72 6e 61 6c 20 6f 6e 20 49 6d 61 67 69 6e 67 20 53 63 69 65 6e 63 | ..SIAM.Journal.on.Imaging.Scienc |
10f40 | 65 73 2c 20 39 28 31 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 | es,.9(1),.320-343...[3].Benamou, |
10f60 | 20 4a 2e 20 44 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 | .J..D.,.Carlier,.G.,.Cuturi,.M., |
10f80 | 20 4e 65 6e 6e 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 | .Nenna,.L.,.&.Peyr..,.G..(2015). |
10fa0 | 0a 49 74 65 72 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 | .Iterative.Bregman.projections.f |
10fc0 | 6f 72 20 72 65 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 | or.regularized.transportation.pr |
10fe0 | 6f 62 6c 65 6d 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 | oblems.SIAM.Journal.on.Scientifi |
11000 | 63 20 43 6f 6d 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 | c.Computing,.37(2),.A1111-A1138. |
11020 | 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 |
11040 | 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 |
11060 | 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. |
11080 | 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 |
110a0 | 0a 69 6d 70 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 | .import.ot.#.necessary.for.3d.pl |
110c0 | 6f 74 20 65 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 | ot.even.if.not.used.from.mpl_too |
110e0 | 6c 6b 69 74 73 2e 6d 70 6c 6f 74 33 64 20 69 6d 70 6f 72 74 20 41 78 65 73 33 44 20 20 23 20 6e | lkits.mplot3d.import.Axes3D..#.n |
11100 | 6f 71 61 0a 66 72 6f 6d 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 63 6f 6c 6c 65 63 74 69 6f 6e 73 20 | oqa.from.matplotlib.collections. |
11120 | 69 6d 70 6f 72 74 20 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 | import.PolyCollection..#.noqa..# |
11140 | 69 6d 70 6f 72 74 20 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 | import.ot.lp.cvx.as.cvx..####### |
11160 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
11180 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
111a0 | 23 23 23 23 23 23 23 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 | #######.#.Gaussian.Data.#.------ |
111c0 | 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 70 72 6f 62 6c 65 6d | -------..#%%.parameters..problem |
111e0 | 73 20 3d 20 5b 5d 0a 0a 6e 20 3d 20 31 30 30 20 20 23 20 6e 62 20 62 69 6e 73 0a 0a 23 20 62 69 | s.=.[]..n.=.100..#.nb.bins..#.bi |
11200 | 6e 20 70 6f 73 69 74 69 6f 6e 73 0a 78 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 2c 20 64 74 79 | n.positions.x.=.np.arange(n,.dty |
11220 | 70 65 3d 6e 70 2e 66 6c 6f 61 74 36 34 29 0a 0a 23 20 47 61 75 73 73 69 61 6e 20 64 69 73 74 72 | pe=np.float64)..#.Gaussian.distr |
11240 | 69 62 75 74 69 6f 6e 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 | ibutions.#.Gaussian.distribution |
11260 | 73 0a 61 31 20 3d 20 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 | s.a1.=.ot.datasets.make_1D_gauss |
11280 | 28 6e 2c 20 6d 3d 32 30 2c 20 73 3d 35 29 20 20 23 20 6d 3d 20 6d 65 61 6e 2c 20 73 3d 20 73 74 | (n,.m=20,.s=5)..#.m=.mean,.s=.st |
112a0 | 64 0a 61 32 20 3d 20 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 | d.a2.=.ot.datasets.make_1D_gauss |
112c0 | 28 6e 2c 20 6d 3d 36 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 | (n,.m=60,.s=8)..#.creating.matri |
112e0 | 78 20 41 20 63 6f 6e 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 | x.A.containing.all.distributions |
11300 | 0a 41 20 3d 20 6e 70 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 | .A.=.np.vstack((a1,.a2)).T.n_dis |
11320 | 74 72 69 62 75 74 69 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 | tributions.=.A.shape[1]..#.loss. |
11340 | 6d 61 74 72 69 78 20 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 | matrix.+.normalization.M.=.ot.ut |
11360 | 69 6c 73 2e 64 69 73 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 | ils.dist0(n).M./=.M.max()...#%%. |
11380 | 70 6c 6f 74 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 70 6c 2e 66 69 67 75 72 | plot.the.distributions..pl.figur |
113a0 | 65 28 31 2c 20 66 69 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 | e(1,.figsize=(6.4,.3)).for.i.in. |
113c0 | 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 20 20 20 70 6c 2e 70 | range(n_distributions):.....pl.p |
113e0 | 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 27 44 69 73 74 72 69 | lot(x,.A[:,.i]).pl.title('Distri |
11400 | 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 23 25 25 | butions').pl.tight_layout()..#%% |
11420 | 20 62 61 72 79 63 65 6e 74 65 72 20 63 6f 6d 70 75 74 61 74 69 6f 6e 0a 0a 61 6c 70 68 61 20 3d | .barycenter.computation..alpha.= |
11440 | 20 30 2e 35 20 20 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 | .0.5..#.0<=alpha<=1.weights.=.np |
11460 | 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 0a 23 20 6c 32 | .array([1.-.alpha,.alpha])..#.l2 |
11480 | 62 61 72 79 0a 62 61 72 79 5f 6c 32 20 3d 20 41 2e 64 6f 74 28 77 65 69 67 68 74 73 29 0a 0a 23 | bary.bary_l2.=.A.dot(weights)..# |
114a0 | 20 77 61 73 73 65 72 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 | .wasserstein.reg.=.1e-3.ot.tic() |
114c0 | 0a 62 61 72 79 5f 77 61 73 73 20 3d 20 6f 74 2e 62 72 65 67 6d 61 6e 2e 62 61 72 79 63 65 6e 74 | .bary_wass.=.ot.bregman.barycent |
114e0 | 65 72 28 41 2c 20 4d 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 | er(A,.M,.reg,.weights).ot.toc(). |
11500 | 0a 0a 6f 74 2e 74 69 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 | ..ot.tic().bary_wass2.=.ot.lp.ba |
11520 | 72 79 63 65 6e 74 65 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 | rycenter(A,.M,.weights,.solver=' |
11540 | 69 6e 74 65 72 69 6f 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 | interior-point',.verbose=True).o |
11560 | 74 2e 74 6f 63 28 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 | t.toc()..pl.figure(2).pl.clf().p |
11580 | 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 |
115a0 | 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( |
115c0 | 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 |
115e0 | 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 |
11600 | 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'). |
11620 | 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 |
11640 | 3d 27 52 65 67 20 57 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 | ='Reg.Wasserstein').pl.plot(x,.b |
11660 | 61 72 79 5f 77 61 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 | ary_wass2,.'b',.label='LP.Wasser |
11680 | 73 74 65 69 6e 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 29 0a 70 6c 2e 74 69 74 6c 65 28 27 42 61 | stein').pl.legend().pl.title('Ba |
116a0 | 72 79 63 65 6e 74 65 72 73 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 | rycenters').pl.tight_layout()..p |
116c0 | 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 20 62 61 72 | roblems.append([A,.[bary_l2,.bar |
116e0 | 79 5f 77 61 73 73 2c 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 | y_wass,.bary_wass2]])..######### |
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 23 23 23 23 23 | ################################ |
11720 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
11740 | 23 23 23 23 23 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 | #####.#.Dirac.Data.#.----------. |
11760 | 0a 23 25 25 20 70 61 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 | .#%%.parameters..a1.=.1.0.*.(x.> |
11780 | 20 31 30 29 20 2a 20 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 | .10).*.(x.<.50).a2.=.1.0.*.(x.>. |
117a0 | 36 30 29 20 2a 20 28 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 | 60).*.(x.<.80)..a1./=.a1.sum().a |
117c0 | 32 20 2f 3d 20 61 32 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 | 2./=.a2.sum()..#.creating.matrix |
117e0 | 20 41 20 63 6f 6e 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 | .A.containing.all.distributions. |
11800 | 41 20 3d 20 6e 70 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 | A.=.np.vstack((a1,.a2)).T.n_dist |
11820 | 72 69 62 75 74 69 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 | ributions.=.A.shape[1]..#.loss.m |
11840 | 61 74 72 69 78 20 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 | atrix.+.normalization.M.=.ot.uti |
11860 | 6c 73 2e 64 69 73 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 | ls.dist0(n).M./=.M.max()...#%%.p |
11880 | 6c 6f 74 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 70 6c 2e 66 69 67 75 72 65 | lot.the.distributions..pl.figure |
118a0 | 28 31 2c 20 66 69 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 | (1,.figsize=(6.4,.3)).for.i.in.r |
118c0 | 61 6e 67 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 | ange(n_distributions):.....pl.pl |
118e0 | 6f 74 28 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 | ot(x,.A[:,.i]).pl.title('Distrib |
11900 | 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 25 25 | utions').pl.tight_layout()...#%% |
11920 | 20 62 61 72 79 63 65 6e 74 65 72 20 63 6f 6d 70 75 74 61 74 69 6f 6e 0a 0a 61 6c 70 68 61 20 3d | .barycenter.computation..alpha.= |
11940 | 20 30 2e 35 20 20 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 | .0.5..#.0<=alpha<=1.weights.=.np |
11960 | 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 0a 23 20 6c 32 | .array([1.-.alpha,.alpha])..#.l2 |
11980 | 62 61 72 79 0a 62 61 72 79 5f 6c 32 20 3d 20 41 2e 64 6f 74 28 77 65 69 67 68 74 73 29 0a 0a 23 | bary.bary_l2.=.A.dot(weights)..# |
119a0 | 20 77 61 73 73 65 72 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 | .wasserstein.reg.=.1e-3.ot.tic() |
119c0 | 0a 62 61 72 79 5f 77 61 73 73 20 3d 20 6f 74 2e 62 72 65 67 6d 61 6e 2e 62 61 72 79 63 65 6e 74 | .bary_wass.=.ot.bregman.barycent |
119e0 | 65 72 28 41 2c 20 4d 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 | er(A,.M,.reg,.weights).ot.toc(). |
11a00 | 0a 0a 6f 74 2e 74 69 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 | ..ot.tic().bary_wass2.=.ot.lp.ba |
11a20 | 72 79 63 65 6e 74 65 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 | rycenter(A,.M,.weights,.solver=' |
11a40 | 69 6e 74 65 72 69 6f 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 | interior-point',.verbose=True).o |
11a60 | 74 2e 74 6f 63 28 29 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 | t.toc()...problems.append([A,.[b |
11a80 | 61 72 79 5f 6c 32 2c 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 | ary_l2,.bary_wass,.bary_wass2]]) |
11aa0 | 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 |
11ac0 | 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 |
11ae0 | 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[:, |
11b00 | 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').. |
11b20 | 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 |
11b40 | 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 |
11b60 | 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 |
11b80 | 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 |
11ba0 | 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') |
11bc0 | 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 |
11be0 | 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 25 25 20 70 61 72 61 | rs').pl.tight_layout()..#%%.para |
11c00 | 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 3d 20 6e 70 | meters..a1.=.np.zeros(n).a2.=.np |
11c20 | 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 30 5d 20 3d | .zeros(n)..a1[10].=..25.a1[20].= |
11c40 | 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 0a 0a 61 31 | ..5.a1[30].=..25.a2[80].=.1...a1 |
11c60 | 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 0a 23 20 63 | ./=.a1.sum().a2./=.a2.sum()..#.c |
11c80 | 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 61 6c 6c 20 | reating.matrix.A.containing.all. |
11ca0 | 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 28 61 31 2c | distributions.A.=.np.vstack((a1, |
11cc0 | 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 73 68 61 70 | .a2)).T.n_distributions.=.A.shap |
11ce0 | 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 69 7a 61 74 | e[1]..#.loss.matrix.+.normalizat |
11d00 | 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 2f 3d 20 4d | ion.M.=.ot.utils.dist0(n).M./=.M |
11d20 | 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 62 75 74 69 | .max()...#%%.plot.the.distributi |
11d40 | 6f 6e 73 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 | ons..pl.figure(1,.figsize=(6.4,. |
11d60 | 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 75 74 69 6f | 3)).for.i.in.range(n_distributio |
11d80 | 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 2e | ns):.....pl.plot(x,.A[:,.i]).pl. |
11da0 | 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 67 68 74 5f | title('Distributions').pl.tight_ |
11dc0 | 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 6d 70 75 74 | layout()...#%%.barycenter.comput |
11de0 | 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 68 61 3c 3d | ation..alpha.=.0.5..#.0<=alpha<= |
11e00 | 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 70 68 61 2c | 1.weights.=.np.array([1.-.alpha, |
11e20 | 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 20 41 2e 64 | .alpha])..#.l2bary.bary_l2.=.A.d |
11e40 | 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 65 67 20 3d | ot(weights)..#.wasserstein.reg.= |
11e60 | 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 74 2e 62 72 | .1e-3.ot.tic().bary_wass.=.ot.br |
11e80 | 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 65 69 67 | egman.barycenter(A,.M,.reg,.weig |
11ea0 | 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 79 5f 77 61 | hts).ot.toc()...ot.tic().bary_wa |
11ec0 | 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 20 77 65 69 | ss2.=.ot.lp.barycenter(A,.M,.wei |
11ee0 | 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 27 2c 20 76 | ghts,.solver='interior-point',.v |
11f00 | 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 6c 65 6d 73 | erbose=True).ot.toc()...problems |
11f20 | 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, |
11f40 | 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 0a 70 6c 2e | .bary_wass2]])..pl.figure(2).pl. |
11f60 | 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 72 20 69 20 | clf().pl.subplot(2,.1,.1).for.i. |
11f80 | 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 20 20 20 70 | in.range(n_distributions):.....p |
11fa0 | 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 27 44 69 73 | l.plot(x,.A[:,.i]).pl.title('Dis |
11fc0 | 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 31 2c 20 32 | tributions')..pl.subplot(2,.1,.2 |
11fe0 | 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 61 62 65 6c | ).pl.plot(x,.bary_l2,.'r',.label |
12000 | 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 20 27 67 27 | ='l2').pl.plot(x,.bary_wass,.'g' |
12020 | 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 6c 2e 70 6c | ,.label='Reg.Wasserstein').pl.pl |
12040 | 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 3d 27 4c 50 | ot(x,.bary_wass2,.'b',.label='LP |
12060 | 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 6c 2e 74 69 | .Wasserstein').pl.legend().pl.ti |
12080 | 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 6f | tle('Barycenters').pl.tight_layo |
120a0 | 75 74 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ut()...######################### |
120c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
120e0 | 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 6c 20 66 69 | #####################.#.Final.fi |
12100 | 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 6c 6f 74 0a | gure.#.------------.#..#%%.plot. |
12120 | 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 28 6e 62 6d | .nbm.=.len(problems).nbm2.=.(nbm |
12140 | 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 29 29 0a 70 | .//.2)...pl.figure(2,.(20,.6)).p |
12160 | 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 3a 0a 0a 20 | l.clf()..for.i.in.range(nbm):... |
12180 | 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 72 79 5f 6c | ...A.=.problems[i][0].....bary_l |
121a0 | 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 72 79 5f 77 | 2.=.problems[i][1][0].....bary_w |
121c0 | 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 62 61 72 79 | ass.=.problems[i][1][1].....bary |
121e0 | 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 20 20 20 20 | _wass2.=.problems[i][1][2]...... |
12200 | 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 20 20 66 6f | pl.subplot(2,.nbm,.1.+.i).....fo |
12220 | 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 29 3a 0a 20 | r.j.in.range(n_distributions):.. |
12240 | 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 20 20 20 69 | .......pl.plot(x,.A[:,.j]).....i |
12260 | 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 65 28 27 44 | f.i.==.nbm2:.........pl.title('D |
12280 | 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 28 28 29 29 | istributions').....pl.xticks(()) |
122a0 | 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 75 62 70 6c | .....pl.yticks(())......pl.subpl |
122c0 | 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 20 70 6c 2e | ot(2,.nbm,.1.+.i.+.nbm)......pl. |
122e0 | 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 27 4c 32 20 | plot(x,.bary_l2,.'r',.label='L2. |
12300 | 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 20 62 61 72 | (Euclidean)').....pl.plot(x,.bar |
12320 | 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 |
12340 | 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 73 73 32 2c | ein').....pl.plot(x,.bary_wass2, |
12360 | 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 0a 20 20 | .'b',.label='LP.Wasserstein')... |
12380 | 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 6c 2e 6c 65 | ..if.i.==.nbm.-.1:.........pl.le |
123a0 | 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 20 20 20 20 | gend().....if.i.==.nbm2:........ |
123c0 | 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 20 20 70 6c | .pl.title('Barycenters')......pl |
123e0 | 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 29 0a 50 4b | .xticks(()).....pl.yticks(()).PK |
12400 | 03 04 14 00 00 00 00 00 db 74 d9 4e a7 6b f0 c3 bf 0b 00 00 bf 0b 00 00 15 00 00 00 70 6c 6f 74 | .........t.N.k..............plot |
12420 | 5f 4f 54 5f 32 44 5f 73 61 6d 70 6c 65 73 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 | _OT_2D_samples.py#.-*-.coding:.u |
12440 | 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.-*-.""".=================== |
12460 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
12480 | 3d 0a 32 44 20 4f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 20 62 65 74 77 65 65 6e 20 65 | =.2D.Optimal.transport.between.e |
124a0 | 6d 70 69 72 69 63 61 6c 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d | mpirical.distributions.========= |
124c0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
124e0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 49 6c 6c 75 73 74 72 61 74 69 6f 6e 20 6f 66 20 32 44 20 | ===========..Illustration.of.2D. |
12500 | 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 20 62 65 74 77 65 65 6e 20 64 69 73 63 72 69 | optimal.transport.between.discri |
12520 | 62 75 74 69 6f 6e 73 20 74 68 61 74 20 61 72 65 20 77 65 69 67 68 74 65 64 0a 73 75 6d 20 6f 66 | butions.that.are.weighted.sum.of |
12540 | 20 64 69 72 61 63 73 2e 20 54 68 65 20 4f 54 20 6d 61 74 72 69 78 20 69 73 20 70 6c 6f 74 74 65 | .diracs..The.OT.matrix.is.plotte |
12560 | 64 20 77 69 74 68 20 74 68 65 20 73 61 6d 70 6c 65 73 2e 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 | d.with.the.samples..."""..#.Auth |
12580 | 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 75 | or:.Remi.Flamary.<remi.flamary@u |
125a0 | 6e 69 63 65 2e 66 72 3e 0a 23 20 20 20 20 20 20 20 20 20 4b 69 6c 69 61 6e 20 46 61 74 72 61 73 | nice.fr>.#.........Kilian.Fatras |
125c0 | 20 3c 6b 69 6c 69 61 6e 2e 66 61 74 72 61 73 40 69 72 69 73 61 2e 66 72 3e 0a 23 0a 23 20 4c 69 | .<kilian.fatras@irisa.fr>.#.#.Li |
125e0 | 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 | cense:.MIT.License..import.numpy |
12600 | 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 | .as.np.import.matplotlib.pylab.a |
12620 | 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 69 6d 70 6f 72 74 20 6f 74 2e 70 6c 6f 74 0a 0a 23 | s.pl.import.ot.import.ot.plot..# |
12640 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
12660 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
12680 | 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.#. |
126a0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 20 61 6e | -------------..#%%.parameters.an |
126c0 | 64 20 64 61 74 61 20 67 65 6e 65 72 61 74 69 6f 6e 0a 0a 6e 20 3d 20 35 30 20 20 23 20 6e 62 20 | d.data.generation..n.=.50..#.nb. |
126e0 | 73 61 6d 70 6c 65 73 0a 0a 6d 75 5f 73 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 30 2c 20 30 5d 29 | samples..mu_s.=.np.array([0,.0]) |
12700 | 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 30 2c 20 31 | .cov_s.=.np.array([[1,.0],.[0,.1 |
12720 | 5d 5d 29 0a 0a 6d 75 5f 74 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 34 2c 20 34 5d 29 0a 63 6f 76 | ]])..mu_t.=.np.array([4,.4]).cov |
12740 | 5f 74 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 5b 31 2c 20 2d 2e 38 5d 2c 20 5b 2d 2e 38 2c 20 31 | _t.=.np.array([[1,.-.8],.[-.8,.1 |
12760 | 5d 5d 29 0a 0a 78 73 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 32 44 5f 73 61 | ]])..xs.=.ot.datasets.make_2D_sa |
12780 | 6d 70 6c 65 73 5f 67 61 75 73 73 28 6e 2c 20 6d 75 5f 73 2c 20 63 6f 76 5f 73 29 0a 78 74 20 3d | mples_gauss(n,.mu_s,.cov_s).xt.= |
127a0 | 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 61 75 | .ot.datasets.make_2D_samples_gau |
127c0 | 73 73 28 6e 2c 20 6d 75 5f 74 2c 20 63 6f 76 5f 74 29 0a 0a 61 2c 20 62 20 3d 20 6e 70 2e 6f 6e | ss(n,.mu_t,.cov_t)..a,.b.=.np.on |
127e0 | 65 73 28 28 6e 2c 29 29 20 2f 20 6e 2c 20 6e 70 2e 6f 6e 65 73 28 28 6e 2c 29 29 20 2f 20 6e 20 | es((n,))./.n,.np.ones((n,))./.n. |
12800 | 20 23 20 75 6e 69 66 6f 72 6d 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6f 6e 20 73 61 6d 70 6c | .#.uniform.distribution.on.sampl |
12820 | 65 73 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 20 3d 20 6f 74 2e 64 69 73 74 28 78 73 | es..#.loss.matrix.M.=.ot.dist(xs |
12840 | 2c 20 78 74 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 | ,.xt).M./=.M.max()..############ |
12860 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
12880 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
128a0 | 23 23 0a 23 20 50 6c 6f 74 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 | ##.#.Plot.data.#.---------..#%%. |
128c0 | 70 6c 6f 74 20 73 61 6d 70 6c 65 73 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 29 0a 70 6c 2e 70 6c | plot.samples..pl.figure(1).pl.pl |
128e0 | 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 | ot(xs[:,.0],.xs[:,.1],.'+b',.lab |
12900 | 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b | el='Source.samples').pl.plot(xt[ |
12920 | 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 | :,.0],.xt[:,.1],.'xr',.label='Ta |
12940 | 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a | rget.samples').pl.legend(loc=0). |
12960 | 70 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 20 61 6e 64 20 74 61 72 67 65 74 20 64 69 73 74 | pl.title('Source.and.target.dist |
12980 | 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 29 0a 70 6c 2e 69 6d 73 | ributions')..pl.figure(2).pl.ims |
129a0 | 68 6f 77 28 4d 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a | how(M,.interpolation='nearest'). |
129c0 | 70 6c 2e 74 69 74 6c 65 28 27 43 6f 73 74 20 6d 61 74 72 69 78 20 4d 27 29 0a 0a 23 23 23 23 23 | pl.title('Cost.matrix.M')..##### |
129e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
12a00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
12a20 | 23 23 23 23 23 23 23 23 23 0a 23 20 43 6f 6d 70 75 74 65 20 45 4d 44 0a 23 20 2d 2d 2d 2d 2d 2d | #########.#.Compute.EMD.#.------ |
12a40 | 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 45 4d 44 0a 0a 47 30 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 | -----..#%%.EMD..G0.=.ot.emd(a,.b |
12a60 | 2c 20 4d 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 47 30 2c | ,.M)..pl.figure(3).pl.imshow(G0, |
12a80 | 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 |
12aa0 | 6c 65 28 27 4f 54 20 6d 61 74 72 69 78 20 47 30 27 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 34 29 | le('OT.matrix.G0')..pl.figure(4) |
12ac0 | 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 78 73 2c 20 | .ot.plot.plot2D_samples_mat(xs,. |
12ae0 | 78 74 2c 20 47 30 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 70 6c 6f 74 28 78 | xt,.G0,.c=[.5,..5,.1]).pl.plot(x |
12b00 | 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=' |
12b20 | 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 | Source.samples').pl.plot(xt[:,.0 |
12b40 | 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 | ],.xt[:,.1],.'xr',.label='Target |
12b60 | 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 |
12b80 | 69 74 6c 65 28 27 4f 54 20 6d 61 74 72 69 78 20 77 69 74 68 20 73 61 6d 70 6c 65 73 27 29 0a 0a | itle('OT.matrix.with.samples').. |
12ba0 | 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 | .############################### |
12bc0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
12be0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 43 6f 6d 70 75 74 65 20 53 69 6e 6b 68 6f | ###############.#.Compute.Sinkho |
12c00 | 72 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 73 69 6e 6b 68 | rn.#.----------------..#%%.sinkh |
12c20 | 6f 72 6e 0a 0a 23 20 72 65 67 20 74 65 72 6d 0a 6c 61 6d 62 64 20 3d 20 31 65 2d 33 0a 0a 47 73 | orn..#.reg.term.lambd.=.1e-3..Gs |
12c40 | 20 3d 20 6f 74 2e 73 69 6e 6b 68 6f 72 6e 28 61 2c 20 62 2c 20 4d 2c 20 6c 61 6d 62 64 29 0a 0a | .=.ot.sinkhorn(a,.b,.M,.lambd).. |
12c60 | 70 6c 2e 66 69 67 75 72 65 28 35 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 47 73 2c 20 69 6e 74 65 72 | pl.figure(5).pl.imshow(Gs,.inter |
12c80 | 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 | polation='nearest').pl.title('OT |
12ca0 | 20 6d 61 74 72 69 78 20 73 69 6e 6b 68 6f 72 6e 27 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 36 29 | .matrix.sinkhorn')..pl.figure(6) |
12cc0 | 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 78 73 2c 20 | .ot.plot.plot2D_samples_mat(xs,. |
12ce0 | 78 74 2c 20 47 73 2c 20 63 6f 6c 6f 72 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 70 6c | xt,.Gs,.color=[.5,..5,.1]).pl.pl |
12d00 | 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 | ot(xs[:,.0],.xs[:,.1],.'+b',.lab |
12d20 | 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b | el='Source.samples').pl.plot(xt[ |
12d40 | 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 | :,.0],.xt[:,.1],.'xr',.label='Ta |
12d60 | 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a | rget.samples').pl.legend(loc=0). |
12d80 | 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 6d 61 74 72 69 78 20 53 69 6e 6b 68 6f 72 6e 20 77 69 74 | pl.title('OT.matrix.Sinkhorn.wit |
12da0 | 68 20 73 61 6d 70 6c 65 73 27 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 0a 0a 23 23 23 23 23 23 23 | h.samples')..pl.show()...####### |
12dc0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
12de0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
12e00 | 23 23 23 23 23 23 23 0a 23 20 45 6d 70 72 69 72 69 63 61 6c 20 53 69 6e 6b 68 6f 72 6e 0a 23 20 | #######.#.Emprirical.Sinkhorn.#. |
12e20 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 73 69 6e 6b 68 6f 72 6e 0a 0a | ----------------..#%%.sinkhorn.. |
12e40 | 23 20 72 65 67 20 74 65 72 6d 0a 6c 61 6d 62 64 20 3d 20 31 65 2d 33 0a 0a 47 65 73 20 3d 20 6f | #.reg.term.lambd.=.1e-3..Ges.=.o |
12e60 | 74 2e 62 72 65 67 6d 61 6e 2e 65 6d 70 69 72 69 63 61 6c 5f 73 69 6e 6b 68 6f 72 6e 28 78 73 2c | t.bregman.empirical_sinkhorn(xs, |
12e80 | 20 78 74 2c 20 6c 61 6d 62 64 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 37 29 0a 70 6c 2e 69 6d 73 | .xt,.lambd)..pl.figure(7).pl.ims |
12ea0 | 68 6f 77 28 47 65 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 | how(Ges,.interpolation='nearest' |
12ec0 | 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 6d 61 74 72 69 78 20 65 6d 70 69 72 69 63 61 6c 20 | ).pl.title('OT.matrix.empirical. |
12ee0 | 73 69 6e 6b 68 6f 72 6e 27 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 38 29 0a 6f 74 2e 70 6c 6f 74 | sinkhorn')..pl.figure(8).ot.plot |
12f00 | 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 65 73 2c | .plot2D_samples_mat(xs,.xt,.Ges, |
12f20 | 20 63 6f 6c 6f 72 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 | .color=[.5,..5,.1]).pl.plot(xs[: |
12f40 | 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 | ,.0],.xs[:,.1],.'+b',.label='Sou |
12f60 | 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 | rce.samples').pl.plot(xt[:,.0],. |
12f80 | 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 | xt[:,.1],.'xr',.label='Target.sa |
12fa0 | 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c | mples').pl.legend(loc=0).pl.titl |
12fc0 | 65 28 27 4f 54 20 6d 61 74 72 69 78 20 53 69 6e 6b 68 6f 72 6e 20 66 72 6f 6d 20 73 61 6d 70 6c | e('OT.matrix.Sinkhorn.from.sampl |
12fe0 | 65 73 27 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 da 74 d9 4e 0e e0 | es')..pl.show().PK.........t.N.. |
13000 | 72 82 97 0b 00 00 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 | r.............plot_otda_linear_m |
13020 | 61 70 70 69 6e 67 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 | apping.py#!/usr/bin/env.python3. |
13040 | 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.-*-.""".==== |
13060 | 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 4c 69 6e 65 61 72 20 | ========================.Linear. |
13080 | 4f 54 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 3d 3d | OT.mapping.estimation.========== |
130a0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 | ==================..."""..#.Auth |
130c0 | 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 75 | or:.Remi.Flamary.<remi.flamary@u |
130e0 | 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 73 | nice.fr>.#.#.License:.MIT.Licens |
13100 | 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 70 79 6c | e..import.numpy.as.np.import.pyl |
13120 | 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 | ab.as.pl.import.ot..############ |
13140 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
13160 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
13180 | 23 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | ##.#.Generate.data.#.----------- |
131a0 | 2d 2d 0a 0a 6e 20 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 | --..n.=.1000.d.=.2.sigma.=..1..# |
131c0 | 20 73 6f 75 72 63 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 | .source.samples.angles.=.np.rand |
131e0 | 6f 6d 2e 72 61 6e 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 | om.rand(n,.1).*.2.*.np.pi.xs.=.n |
13200 | 70 2e 63 6f 6e 63 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 | p.concatenate((np.sin(angles),.n |
13220 | 70 2e 63 6f 73 28 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 | p.cos(angles)),................. |
13240 | 20 20 20 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 | ....axis=1).+.sigma.*.np.random. |
13260 | 72 61 6e 64 6e 28 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 | randn(n,.2).xs[:n.//.2,.1].+=.2. |
13280 | 0a 0a 23 20 74 61 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 | ..#.target.samples.anglet.=.np.r |
132a0 | 61 6e 64 6f 6d 2e 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 | andom.rand(n,.1).*.2.*.np.pi.xt. |
132c0 | 3d 20 6e 70 2e 63 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 | =.np.concatenate((np.sin(anglet) |
132e0 | 2c 20 6e 70 2e 63 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 | ,.np.cos(anglet)),.............. |
13300 | 20 20 20 20 20 20 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 | .......axis=1).+.sigma.*.np.rand |
13320 | 6f 6d 2e 72 61 6e 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 | om.randn(n,.2).xt[:n.//.2,.1].+= |
13340 | 20 32 0a 0a 0a 41 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 | .2...A.=.np.array([[1.5,..7],.[. |
13360 | 37 2c 20 31 2e 35 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 | 7,.1.5]]).b.=.np.array([[4,.2]]) |
13380 | 0a 78 74 20 3d 20 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 | .xt.=.xt.dot(A).+.b..########### |
133a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
133c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
133e0 | 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 70 6c 2e | ###.#.Plot.data.#.---------..pl. |
13400 | 66 69 67 75 72 65 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 | figure(1,.(5,.5)).pl.plot(xs[:,. |
13420 | 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 74 5b 3a 2c | 0],.xs[:,.1],.'+').pl.plot(xt[:, |
13440 | 20 30 5d 2c 20 78 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 | .0],.xt[:,.1],.'o')...########## |
13460 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
13480 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
134a0 | 23 23 23 23 0a 23 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 | ####.#.Estimate.linear.mapping.a |
134c0 | 6e 64 20 74 72 61 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 | nd.transport.#.----------------- |
134e0 | 2d 2d 2d 2d 2d 2d 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 | --------------------..Ae,.be.=.o |
13500 | 74 2e 64 61 2e 4f 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 | t.da.OT_mapping_linear(xs,.xt).. |
13520 | 78 73 74 20 3d 20 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 | xst.=.xs.dot(Ae).+.be...######## |
13540 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
13560 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
13580 | 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 | ######.#.Plot.transported.sample |
135a0 | 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 0a 0a 70 6c | s.#.------------------------..pl |
135c0 | 2e 66 69 67 75 72 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 | .figure(1,.(5,.5)).pl.clf().pl.p |
135e0 | 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 27 29 0a 70 6c 2e | lot(xs[:,.0],.xs[:,.1],.'+').pl. |
13600 | 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 6f 27 29 0a 70 6c | plot(xt[:,.0],.xt[:,.1],.'o').pl |
13620 | 2e 70 6c 6f 74 28 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 | .plot(xst[:,.0],.xst[:,.1],.'+') |
13640 | 0a 0a 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 | ..pl.show()..################### |
13660 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
13680 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 4c 6f | ###########################.#.Lo |
136a0 | 61 64 20 69 6d 61 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 | ad.image.data.#.---------------. |
136c0 | 0a 0a 64 65 66 20 69 6d 32 6d 61 74 28 49 29 3a 0a 20 20 20 20 22 22 22 43 6f 6e 76 65 72 74 73 | ..def.im2mat(I):....."""Converts |
136e0 | 20 61 6e 64 20 69 6d 61 67 65 20 74 6f 20 6d 61 74 72 69 78 20 28 6f 6e 65 20 70 69 78 65 6c 20 | .and.image.to.matrix.(one.pixel. |
13700 | 70 65 72 20 6c 69 6e 65 29 22 22 22 0a 20 20 20 20 72 65 74 75 72 6e 20 49 2e 72 65 73 68 61 70 | per.line)""".....return.I.reshap |
13720 | 65 28 28 49 2e 73 68 61 70 65 5b 30 5d 20 2a 20 49 2e 73 68 61 70 65 5b 31 5d 2c 20 49 2e 73 68 | e((I.shape[0].*.I.shape[1],.I.sh |
13740 | 61 70 65 5b 32 5d 29 29 0a 0a 0a 64 65 66 20 6d 61 74 32 69 6d 28 58 2c 20 73 68 61 70 65 29 3a | ape[2]))...def.mat2im(X,.shape): |
13760 | 0a 20 20 20 20 22 22 22 43 6f 6e 76 65 72 74 73 20 62 61 63 6b 20 61 20 6d 61 74 72 69 78 20 74 | ....."""Converts.back.a.matrix.t |
13780 | 6f 20 61 6e 20 69 6d 61 67 65 22 22 22 0a 20 20 20 20 72 65 74 75 72 6e 20 58 2e 72 65 73 68 61 | o.an.image""".....return.X.resha |
137a0 | 70 65 28 73 68 61 70 65 29 0a 0a 0a 64 65 66 20 6d 69 6e 6d 61 78 28 49 29 3a 0a 20 20 20 20 72 | pe(shape)...def.minmax(I):.....r |
137c0 | 65 74 75 72 6e 20 6e 70 2e 63 6c 69 70 28 49 2c 20 30 2c 20 31 29 0a 0a 0a 23 20 4c 6f 61 64 69 | eturn.np.clip(I,.0,.1)...#.Loadi |
137e0 | 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 |
13800 | 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 |
13820 | 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 |
13840 | 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. |
13860 | 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) |
13880 | 0a 58 32 20 3d 20 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 | .X2.=.im2mat(I2)..############## |
138a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
138c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
138e0 | 0a 23 20 45 73 74 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 | .#.Estimate.mapping.and.adapt.#. |
13900 | 2d 2d 2d 2d 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 6d 61 | ----------------------------..ma |
13920 | 70 70 69 6e 67 20 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 | pping.=.ot.da.LinearTransport(). |
13940 | 0a 6d 61 70 70 69 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 | .mapping.fit(Xs=X1,.Xt=X2)...xst |
13960 | 20 3d 20 6d 61 70 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 | .=.mapping.transform(Xs=X1).xts. |
13980 | 3d 20 6d 61 70 70 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 | =.mapping.inverse_transform(Xt=X |
139a0 | 32 29 0a 0a 49 31 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 | 2)..I1t.=.minmax(mat2im(xst,.I1. |
139c0 | 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 69 6d 28 78 74 73 2c | shape)).I2t.=.minmax(mat2im(xts, |
139e0 | 20 49 32 2e 73 68 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 | .I2.shape))..#.%%...############ |
13a00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
13a20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
13a40 | 23 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 | ##.#.Plot.transformed.images.#.- |
13a60 | 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 |
13a80 | 65 28 32 2c 20 66 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 | e(2,.figsize=(10,.7))..pl.subplo |
13aa0 | 74 28 32 2c 20 32 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 29 0a 70 6c 2e 61 78 69 73 | t(2,.2,.1).pl.imshow(I1).pl.axis |
13ac0 | 28 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 | ('off').pl.title('Im..1')..pl.su |
13ae0 | 62 70 6c 6f 74 28 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 | bplot(2,.2,.2).pl.imshow(I2).pl. |
13b00 | 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 2e 20 32 27 29 0a 0a 70 | axis('off').pl.title('Im..2')..p |
13b20 | 6c 2e 73 75 62 70 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 | l.subplot(2,.2,.3).pl.imshow(I1t |
13b40 | 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 4d 61 70 70 69 | ).pl.axis('off').pl.title('Mappi |
13b60 | 6e 67 20 49 6d 2e 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 | ng.Im..1')..pl.subplot(2,.2,.4). |
13b80 | 70 6c 2e 69 6d 73 68 6f 77 28 49 32 74 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c | pl.imshow(I2t).pl.axis('off').pl |
13ba0 | 2e 74 69 74 6c 65 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 | .title('Inverse.mapping.Im..2'). |
13bc0 | 50 4b 03 04 14 00 00 00 00 00 db 74 d9 4e cd ad d9 82 f4 0f 00 00 f4 0f 00 00 14 00 00 00 70 6c | PK.........t.N................pl |
13be0 | 6f 74 5f 6f 74 64 61 5f 6d 61 70 70 69 6e 67 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 | ot_otda_mapping.py#.-*-.coding:. |
13c00 | 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.-*-.""".================== |
13c20 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4f 54 20 6d 61 70 | =========================.OT.map |
13c40 | 70 69 6e 67 20 65 73 74 69 6d 61 74 69 6f 6e 20 66 6f 72 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 | ping.estimation.for.domain.adapt |
13c60 | 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 3d 3d 3d | ation.========================== |
13c80 | 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 20 | =================..This.example. |
13ca0 | 70 72 65 73 65 6e 74 73 20 68 6f 77 20 74 6f 20 75 73 65 20 4d 61 70 70 69 6e 67 54 72 61 6e 73 | presents.how.to.use.MappingTrans |
13cc0 | 70 6f 72 74 20 74 6f 20 65 73 74 69 6d 61 74 65 20 61 74 20 74 68 65 20 73 61 6d 65 0a 74 69 6d | port.to.estimate.at.the.same.tim |
13ce0 | 65 20 62 6f 74 68 20 74 68 65 20 63 6f 75 70 6c 69 6e 67 20 74 72 61 6e 73 70 6f 72 74 20 61 6e | e.both.the.coupling.transport.an |
13d00 | 64 20 61 70 70 72 6f 78 69 6d 61 74 65 20 74 68 65 20 74 72 61 6e 73 70 6f 72 74 20 6d 61 70 20 | d.approximate.the.transport.map. |
13d20 | 77 69 74 68 20 65 69 74 68 65 72 0a 61 20 6c 69 6e 65 61 72 20 6f 72 20 61 20 6b 65 72 6e 65 6c | with.either.a.linear.or.a.kernel |
13d40 | 69 7a 65 64 20 6d 61 70 70 69 6e 67 20 61 73 20 69 6e 74 72 6f 64 75 63 65 64 20 69 6e 20 5b 38 | ized.mapping.as.introduced.in.[8 |
13d60 | 5d 2e 0a 0a 5b 38 5d 20 4d 2e 20 50 65 72 72 6f 74 2c 20 4e 2e 20 43 6f 75 72 74 79 2c 20 52 2e | ]...[8].M..Perrot,.N..Courty,.R. |
13d80 | 20 46 6c 61 6d 61 72 79 2c 20 41 2e 20 48 61 62 72 61 72 64 2c 0a 20 20 20 20 22 4d 61 70 70 69 | .Flamary,.A..Habrard,....."Mappi |
13da0 | 6e 67 20 65 73 74 69 6d 61 74 69 6f 6e 20 66 6f 72 20 64 69 73 63 72 65 74 65 20 6f 70 74 69 6d | ng.estimation.for.discrete.optim |
13dc0 | 61 6c 20 74 72 61 6e 73 70 6f 72 74 22 2c 0a 20 20 20 20 4e 65 75 72 61 6c 20 49 6e 66 6f 72 6d | al.transport",.....Neural.Inform |
13de0 | 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 49 50 53 29 2c | ation.Processing.Systems.(NIPS), |
13e00 | 20 32 30 31 36 2e 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 73 3a 20 52 65 6d 69 20 46 6c 61 6d | .2016.."""..#.Authors:.Remi.Flam |
13e20 | 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>.#... |
13e40 | 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 |
13e60 | 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 |
13e80 | 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 |
13ea0 | 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 |
13ec0 | 6f 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 | ort.ot...####################### |
13ee0 | 23 23 23 23 23 23 23 23 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 0a 23 20 47 65 6e 65 72 61 | #######################.#.Genera |
13f20 | 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 5f 73 6f 75 72 63 | te.data.#.-------------..n_sourc |
13f40 | 65 5f 73 61 6d 70 6c 65 73 20 3d 20 31 30 30 0a 6e 5f 74 61 72 67 65 74 5f 73 61 6d 70 6c 65 73 | e_samples.=.100.n_target_samples |
13f60 | 20 3d 20 31 30 30 0a 74 68 65 74 61 20 3d 20 32 20 2a 20 6e 70 2e 70 69 20 2f 20 32 30 0a 6e 6f | .=.100.theta.=.2.*.np.pi./.20.no |
13f80 | 69 73 65 5f 6c 65 76 65 6c 20 3d 20 30 2e 31 0a 0a 58 73 2c 20 79 73 20 3d 20 6f 74 2e 64 61 74 | ise_level.=.0.1..Xs,.ys.=.ot.dat |
13fa0 | 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 0a 20 20 20 20 27 67 61 | asets.make_data_classif(.....'ga |
13fc0 | 75 73 73 72 6f 74 27 2c 20 6e 5f 73 6f 75 72 63 65 5f 73 61 6d 70 6c 65 73 2c 20 6e 7a 3d 6e 6f | ussrot',.n_source_samples,.nz=no |
13fe0 | 69 73 65 5f 6c 65 76 65 6c 29 0a 58 73 5f 6e 65 77 2c 20 5f 20 3d 20 6f 74 2e 64 61 74 61 73 65 | ise_level).Xs_new,._.=.ot.datase |
14000 | 74 73 2e 6d 61 6b 65 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 0a 20 20 20 20 27 67 61 75 73 73 | ts.make_data_classif(.....'gauss |
14020 | 72 6f 74 27 2c 20 6e 5f 73 6f 75 72 63 65 5f 73 61 6d 70 6c 65 73 2c 20 6e 7a 3d 6e 6f 69 73 65 | rot',.n_source_samples,.nz=noise |
14040 | 5f 6c 65 76 65 6c 29 0a 58 74 2c 20 79 74 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b | _level).Xt,.yt.=.ot.datasets.mak |
14060 | 65 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 0a 20 20 20 20 27 67 61 75 73 73 72 6f 74 27 2c 20 | e_data_classif(.....'gaussrot',. |
14080 | 6e 5f 74 61 72 67 65 74 5f 73 61 6d 70 6c 65 73 2c 20 74 68 65 74 61 3d 74 68 65 74 61 2c 20 6e | n_target_samples,.theta=theta,.n |
140a0 | 7a 3d 6e 6f 69 73 65 5f 6c 65 76 65 6c 29 0a 0a 23 20 6f 6e 65 20 6f 66 20 74 68 65 20 74 61 72 | z=noise_level)..#.one.of.the.tar |
140c0 | 67 65 74 20 6d 6f 64 65 20 63 68 61 6e 67 65 73 20 69 74 73 20 76 61 72 69 61 6e 63 65 20 28 6e | get.mode.changes.its.variance.(n |
140e0 | 6f 20 6c 69 6e 65 61 72 20 6d 61 70 70 69 6e 67 29 0a 58 74 5b 79 74 20 3d 3d 20 32 5d 20 2a 3d | o.linear.mapping).Xt[yt.==.2].*= |
14100 | 20 33 0a 58 74 20 3d 20 58 74 20 2b 20 34 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | .3.Xt.=.Xt.+.4..################ |
14120 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
14140 | 23 23 23 23 23 23 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 | ##############################.# |
14160 | 20 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 | .Plot.data.#.---------..pl.figur |
14180 | 65 28 31 2c 20 28 31 30 2c 20 35 29 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 2e 73 63 61 74 74 65 | e(1,.(10,.5)).pl.clf().pl.scatte |
141a0 | 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 58 73 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b | r(Xs[:,.0],.Xs[:,.1],.c=ys,.mark |
141c0 | 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a | er='+',.label='Source.samples'). |
141e0 | 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 |
14200 | 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 |
14220 | 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 | amples').pl.legend(loc=0).pl.tit |
14240 | 6c 65 28 27 53 6f 75 72 63 65 20 61 6e 64 20 74 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 69 | le('Source.and.target.distributi |
14260 | 6f 6e 73 27 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ons')...######################## |
14280 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
142a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 49 6e 73 74 61 6e 74 | ######################.#.Instant |
142c0 | 69 61 74 65 20 74 68 65 20 64 69 66 66 65 72 65 6e 74 20 74 72 61 6e 73 70 6f 72 74 20 61 6c 67 | iate.the.different.transport.alg |
142e0 | 6f 72 69 74 68 6d 73 20 61 6e 64 20 66 69 74 20 74 68 65 6d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d | orithms.and.fit.them.#.--------- |
14300 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
14320 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 20 4d 61 70 70 69 6e 67 54 72 61 | ------------------..#.MappingTra |
14340 | 6e 73 70 6f 72 74 20 77 69 74 68 20 6c 69 6e 65 61 72 20 6b 65 72 6e 65 6c 0a 6f 74 5f 6d 61 70 | nsport.with.linear.kernel.ot_map |
14360 | 70 69 6e 67 5f 6c 69 6e 65 61 72 20 3d 20 6f 74 2e 64 61 2e 4d 61 70 70 69 6e 67 54 72 61 6e 73 | ping_linear.=.ot.da.MappingTrans |
14380 | 70 6f 72 74 28 0a 20 20 20 20 6b 65 72 6e 65 6c 3d 22 6c 69 6e 65 61 72 22 2c 20 6d 75 3d 31 65 | port(.....kernel="linear",.mu=1e |
143a0 | 30 2c 20 65 74 61 3d 31 65 2d 38 2c 20 62 69 61 73 3d 54 72 75 65 2c 0a 20 20 20 20 6d 61 78 5f | 0,.eta=1e-8,.bias=True,.....max_ |
143c0 | 69 74 65 72 3d 32 30 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 0a 6f 74 5f 6d 61 70 70 69 | iter=20,.verbose=True)..ot_mappi |
143e0 | 6e 67 5f 6c 69 6e 65 61 72 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 66 | ng_linear.fit(Xs=Xs,.Xt=Xt)..#.f |
14400 | 6f 72 20 6f 72 69 67 69 6e 61 6c 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 2c 20 74 72 61 6e | or.original.source.samples,.tran |
14420 | 73 66 6f 72 6d 20 61 70 70 6c 69 65 73 20 62 61 72 79 63 65 6e 74 72 69 63 20 6d 61 70 70 69 6e | sform.applies.barycentric.mappin |
14440 | 67 0a 74 72 61 6e 73 70 5f 58 73 5f 6c 69 6e 65 61 72 20 3d 20 6f 74 5f 6d 61 70 70 69 6e 67 5f | g.transp_Xs_linear.=.ot_mapping_ |
14460 | 6c 69 6e 65 61 72 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 0a 23 20 66 6f 72 20 6f | linear.transform(Xs=Xs)..#.for.o |
14480 | 75 74 20 6f 66 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 2c 20 74 72 61 6e 73 66 6f 72 6d 20 | ut.of.source.samples,.transform. |
144a0 | 61 70 70 6c 69 65 73 20 74 68 65 20 6c 69 6e 65 61 72 20 6d 61 70 70 69 6e 67 0a 74 72 61 6e 73 | applies.the.linear.mapping.trans |
144c0 | 70 5f 58 73 5f 6c 69 6e 65 61 72 5f 6e 65 77 20 3d 20 6f 74 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e | p_Xs_linear_new.=.ot_mapping_lin |
144e0 | 65 61 72 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 5f 6e 65 77 29 0a 0a 0a 23 20 4d 61 70 | ear.transform(Xs=Xs_new)...#.Map |
14500 | 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 20 77 69 74 68 20 67 61 75 73 73 69 61 6e 20 6b 65 72 6e | pingTransport.with.gaussian.kern |
14520 | 65 6c 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 67 61 75 73 73 69 61 6e 20 3d 20 6f 74 2e 64 61 2e 4d | el.ot_mapping_gaussian.=.ot.da.M |
14540 | 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 28 0a 20 20 20 20 6b 65 72 6e 65 6c 3d 22 67 61 75 | appingTransport(.....kernel="gau |
14560 | 73 73 69 61 6e 22 2c 20 65 74 61 3d 31 65 2d 35 2c 20 6d 75 3d 31 65 2d 31 2c 20 62 69 61 73 3d | ssian",.eta=1e-5,.mu=1e-1,.bias= |
14580 | 54 72 75 65 2c 20 73 69 67 6d 61 3d 31 2c 0a 20 20 20 20 6d 61 78 5f 69 74 65 72 3d 31 30 2c 20 | True,.sigma=1,.....max_iter=10,. |
145a0 | 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 67 61 75 73 73 69 61 | verbose=True).ot_mapping_gaussia |
145c0 | 6e 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 66 6f 72 20 6f 72 69 67 69 | n.fit(Xs=Xs,.Xt=Xt)..#.for.origi |
145e0 | 6e 61 6c 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 2c 20 74 72 61 6e 73 66 6f 72 6d 20 61 70 | nal.source.samples,.transform.ap |
14600 | 70 6c 69 65 73 20 62 61 72 79 63 65 6e 74 72 69 63 20 6d 61 70 70 69 6e 67 0a 74 72 61 6e 73 70 | plies.barycentric.mapping.transp |
14620 | 5f 58 73 5f 67 61 75 73 73 69 61 6e 20 3d 20 6f 74 5f 6d 61 70 70 69 6e 67 5f 67 61 75 73 73 69 | _Xs_gaussian.=.ot_mapping_gaussi |
14640 | 61 6e 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 0a 23 20 66 6f 72 20 6f 75 74 20 6f | an.transform(Xs=Xs)..#.for.out.o |
14660 | 66 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 2c 20 74 72 61 6e 73 66 6f 72 6d 20 61 70 70 6c | f.source.samples,.transform.appl |
14680 | 69 65 73 20 74 68 65 20 67 61 75 73 73 69 61 6e 20 6d 61 70 70 69 6e 67 0a 74 72 61 6e 73 70 5f | ies.the.gaussian.mapping.transp_ |
146a0 | 58 73 5f 67 61 75 73 73 69 61 6e 5f 6e 65 77 20 3d 20 6f 74 5f 6d 61 70 70 69 6e 67 5f 67 61 75 | Xs_gaussian_new.=.ot_mapping_gau |
146c0 | 73 73 69 61 6e 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 5f 6e 65 77 29 0a 0a 0a 23 23 23 | ssian.transform(Xs=Xs_new)...### |
146e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
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 0a 23 20 50 6c 6f 74 20 74 72 61 6e 73 70 6f 72 74 65 64 20 73 | ###########.#.Plot.transported.s |
14740 | 61 6d 70 6c 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | amples.#.----------------------- |
14760 | 2d 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 | -..pl.figure(2).pl.clf().pl.subp |
14780 | 6c 6f 74 28 32 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d | lot(2,.2,.1).pl.scatter(Xt[:,.0] |
147a0 | 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 | ,.Xt[:,.1],.c=yt,.marker='o',... |
147c0 | 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c | .........label='Target.samples', |
147e0 | 20 61 6c 70 68 61 3d 2e 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f | .alpha=.2).pl.scatter(transp_Xs_ |
14800 | 6c 69 6e 65 61 72 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 6c 69 6e 65 61 72 5b 3a | linear[:,.0],.transp_Xs_linear[: |
14820 | 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 0a 20 20 20 20 20 20 20 20 | ,.1],.c=ys,.marker='+',......... |
14840 | 20 20 20 6c 61 62 65 6c 3d 27 4d 61 70 70 65 64 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 | ...label='Mapped.source.samples' |
14860 | 29 0a 70 6c 2e 74 69 74 6c 65 28 22 42 61 72 79 2e 20 6d 61 70 70 69 6e 67 20 28 6c 69 6e 65 61 | ).pl.title("Bary..mapping.(linea |
14880 | 72 29 22 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f | r)").pl.legend(loc=0)..pl.subplo |
148a0 | 74 28 32 2c 20 32 2c 20 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 | t(2,.2,.2).pl.scatter(Xt[:,.0],. |
148c0 | 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 | Xt[:,.1],.c=yt,.marker='o',..... |
148e0 | 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 | .......label='Target.samples',.a |
14900 | 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 6c 69 | lpha=.2).pl.scatter(transp_Xs_li |
14920 | 6e 65 61 72 5f 6e 65 77 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 6c 69 6e 65 61 72 | near_new[:,.0],.transp_Xs_linear |
14940 | 5f 6e 65 77 5b 3a 2c 20 31 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 63 3d 79 73 2c 20 6d 61 72 | _new[:,.1],............c=ys,.mar |
14960 | 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 4c 65 61 72 6e 65 64 20 6d 61 70 70 69 6e 67 27 | ker='+',.label='Learned.mapping' |
14980 | 29 0a 70 6c 2e 74 69 74 6c 65 28 22 45 73 74 69 6d 2e 20 6d 61 70 70 69 6e 67 20 28 6c 69 6e 65 | ).pl.title("Estim..mapping.(line |
149a0 | 61 72 29 22 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 33 29 0a 70 6c 2e 73 63 | ar)")..pl.subplot(2,.2,.3).pl.sc |
149c0 | 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,. |
149e0 | 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 |
14a00 | 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 |
14a20 | 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 67 61 75 73 73 69 61 6e 5b 3a 2c 20 30 5d 2c 20 74 72 | ter(transp_Xs_gaussian[:,.0],.tr |
14a40 | 61 6e 73 70 5f 58 73 5f 67 61 75 73 73 69 61 6e 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 | ansp_Xs_gaussian[:,.1],.c=ys,... |
14a60 | 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 62 61 72 79 | .........marker='+',.label='bary |
14a80 | 63 65 6e 74 72 69 63 20 6d 61 70 70 69 6e 67 27 29 0a 70 6c 2e 74 69 74 6c 65 28 22 42 61 72 79 | centric.mapping').pl.title("Bary |
14aa0 | 2e 20 6d 61 70 70 69 6e 67 20 28 6b 65 72 6e 65 6c 29 22 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 | ..mapping.(kernel)")..pl.subplot |
14ac0 | 28 32 2c 20 32 2c 20 34 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 | (2,.2,.4).pl.scatter(Xt[:,.0],.X |
14ae0 | 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 | t[:,.1],.c=yt,.marker='o',...... |
14b00 | 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c | ......label='Target.samples',.al |
14b20 | 70 68 61 3d 2e 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 67 61 75 | pha=.2).pl.scatter(transp_Xs_gau |
14b40 | 73 73 69 61 6e 5f 6e 65 77 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 67 61 75 73 73 | ssian_new[:,.0],.transp_Xs_gauss |
14b60 | 69 61 6e 5f 6e 65 77 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 | ian_new[:,.1],.c=ys,............ |
14b80 | 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 4c 65 61 72 6e 65 64 20 6d 61 70 70 69 | marker='+',.label='Learned.mappi |
14ba0 | 6e 67 27 29 0a 70 6c 2e 74 69 74 6c 65 28 22 45 73 74 69 6d 2e 20 6d 61 70 70 69 6e 67 20 28 6b | ng').pl.title("Estim..mapping.(k |
14bc0 | 65 72 6e 65 6c 29 22 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 | ernel)").pl.tight_layout()..pl.s |
14be0 | 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 da 74 d9 4e 7a 2e b5 2b 65 09 00 00 65 09 00 00 | how().PK.........t.Nz..+e...e... |
14c00 | 13 00 00 00 70 6c 6f 74 5f 63 6f 6d 70 75 74 65 5f 65 6d 64 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 | ....plot_compute_emd.py#.-*-.cod |
14c20 | 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ing:.utf-8.-*-.""".============= |
14c40 | 3d 3d 3d 3d 0a 50 6c 6f 74 20 6d 75 6c 74 69 70 6c 65 20 45 4d 44 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d | ====.Plot.multiple.EMD.========= |
14c60 | 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 53 68 6f 77 73 20 68 6f 77 20 74 6f 20 63 6f 6d 70 75 74 65 20 6d | ========..Shows.how.to.compute.m |
14c80 | 75 6c 74 69 70 6c 65 20 45 4d 44 20 61 6e 64 20 53 69 6e 6b 68 6f 72 6e 20 77 69 74 68 20 74 77 | ultiple.EMD.and.Sinkhorn.with.tw |
14ca0 | 6f 20 64 69 66 66 65 72 6e 74 0a 67 72 6f 75 6e 64 20 6d 65 74 72 69 63 73 20 61 6e 64 20 70 6c | o.differnt.ground.metrics.and.pl |
14cc0 | 6f 74 20 74 68 65 69 72 20 76 61 6c 75 65 73 20 66 6f 72 20 64 69 66 66 65 65 6e 74 20 64 69 73 | ot.their.values.for.diffeent.dis |
14ce0 | 74 72 69 62 75 74 69 6f 6e 73 2e 0a 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a 20 52 65 6d | tributions...."""..#.Author:.Rem |
14d00 | 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 | i.Flamary.<remi.flamary@unice.fr |
14d20 | 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f | >.#.#.License:.MIT.License..impo |
14d40 | 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 | rt.numpy.as.np.import.matplotlib |
14d60 | 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 66 72 6f 6d 20 6f 74 2e 64 | .pylab.as.pl.import.ot.from.ot.d |
14d80 | 61 74 61 73 65 74 73 20 69 6d 70 6f 72 74 20 6d 61 6b 65 5f 31 44 5f 67 61 75 73 73 20 61 73 20 | atasets.import.make_1D_gauss.as. |
14da0 | 67 61 75 73 73 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 | gauss...######################## |
14dc0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
14de0 | 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 |
14e00 | 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 20 70 61 72 61 | e.data.#.-------------..#%%.para |
14e20 | 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 6e 5f 74 61 72 | meters..n.=.100..#.nb.bins.n_tar |
14e40 | 67 65 74 20 3d 20 35 30 20 20 23 20 6e 62 20 74 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 69 | get.=.50..#.nb.target.distributi |
14e60 | 6f 6e 73 0a 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 | ons...#.bin.positions.x.=.np.ara |
14e80 | 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 6c 73 74 5f 6d 20 | nge(n,.dtype=np.float64)..lst_m. |
14ea0 | 3d 20 6e 70 2e 6c 69 6e 73 70 61 63 65 28 32 30 2c 20 39 30 2c 20 6e 5f 74 61 72 67 65 74 29 0a | =.np.linspace(20,.90,.n_target). |
14ec0 | 0a 23 20 47 61 75 73 73 69 61 6e 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 61 20 3d 20 67 61 | .#.Gaussian.distributions.a.=.ga |
14ee0 | 75 73 73 28 6e 2c 20 6d 3d 32 30 2c 20 73 3d 35 29 20 20 23 20 6d 3d 20 6d 65 61 6e 2c 20 73 3d | uss(n,.m=20,.s=5)..#.m=.mean,.s= |
14f00 | 20 73 74 64 0a 0a 42 20 3d 20 6e 70 2e 7a 65 72 6f 73 28 28 6e 2c 20 6e 5f 74 61 72 67 65 74 29 | .std..B.=.np.zeros((n,.n_target) |
14f20 | 29 0a 0a 66 6f 72 20 69 2c 20 6d 20 69 6e 20 65 6e 75 6d 65 72 61 74 65 28 6c 73 74 5f 6d 29 3a | )..for.i,.m.in.enumerate(lst_m): |
14f40 | 0a 20 20 20 20 42 5b 3a 2c 20 69 5d 20 3d 20 67 61 75 73 73 28 6e 2c 20 6d 3d 6d 2c 20 73 3d 35 | .....B[:,.i].=.gauss(n,.m=m,.s=5 |
14f60 | 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 20 61 6e 64 20 6e 6f 72 6d 61 6c 69 7a 61 74 69 | )..#.loss.matrix.and.normalizati |
14f80 | 6f 6e 0a 4d 20 3d 20 6f 74 2e 64 69 73 74 28 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 | on.M.=.ot.dist(x.reshape((n,.1)) |
14fa0 | 2c 20 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 2c 20 27 65 75 63 6c 69 64 65 61 6e 27 | ,.x.reshape((n,.1)),.'euclidean' |
14fc0 | 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 29 0a 4d 32 20 3d 20 6f 74 2e 64 69 73 74 28 78 2e 72 65 | ).M./=.M.max().M2.=.ot.dist(x.re |
14fe0 | 73 68 61 70 65 28 28 6e 2c 20 31 29 29 2c 20 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 | shape((n,.1)),.x.reshape((n,.1)) |
15000 | 2c 20 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 | ,.'sqeuclidean').M2./=.M2.max(). |
15020 | 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 | .############################### |
15040 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
15060 | 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.#.-- |
15080 | 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 |
150a0 | 6f 6e 73 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 | ons..pl.figure(1).pl.subplot(2,. |
150c0 | 31 2c 20 31 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 61 2c 20 27 62 27 2c 20 6c 61 62 65 6c 3d 27 | 1,.1).pl.plot(x,.a,.'b',.label=' |
150e0 | 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 74 69 74 6c 65 28 27 | Source.distribution').pl.title(' |
15100 | 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 73 75 62 70 6c 6f 74 | Source.distribution').pl.subplot |
15120 | 28 32 2c 20 31 2c 20 32 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 42 2c 20 6c 61 62 65 6c 3d 27 54 | (2,.1,.2).pl.plot(x,.B,.label='T |
15140 | 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 | arget.distributions').pl.title(' |
15160 | 54 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 70 6c 2e 74 69 67 68 74 5f | Target.distributions').pl.tight_ |
15180 | 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()...##################### |
151a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
151c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 43 6f 6d 70 | #########################.#.Comp |
151e0 | 75 74 65 20 45 4d 44 20 66 6f 72 20 74 68 65 20 64 69 66 66 65 72 65 6e 74 20 6c 6f 73 73 65 73 | ute.EMD.for.the.different.losses |
15200 | 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 | .#.----------------------------- |
15220 | 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 43 6f 6d 70 75 74 65 20 61 6e 64 20 70 6c 6f 74 20 64 69 | -------..#%%.Compute.and.plot.di |
15240 | 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 64 5f 65 | stributions.and.loss.matrix..d_e |
15260 | 6d 64 20 3d 20 6f 74 2e 65 6d 64 32 28 61 2c 20 42 2c 20 4d 29 20 20 23 20 64 69 72 65 63 74 20 | md.=.ot.emd2(a,.B,.M)..#.direct. |
15280 | 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66 20 45 4d 44 0a 64 5f 65 6d 64 32 20 3d 20 6f 74 2e 65 | computation.of.EMD.d_emd2.=.ot.e |
152a0 | 6d 64 32 28 61 2c 20 42 2c 20 4d 32 29 20 20 23 20 64 69 72 65 63 74 20 63 6f 6d 70 75 74 61 74 | md2(a,.B,.M2)..#.direct.computat |
152c0 | 69 6f 6e 20 6f 66 20 45 4d 44 20 77 69 74 68 20 6c 6f 73 73 20 4d 32 0a 0a 0a 70 6c 2e 66 69 67 | ion.of.EMD.with.loss.M2...pl.fig |
152e0 | 75 72 65 28 32 29 0a 70 6c 2e 70 6c 6f 74 28 64 5f 65 6d 64 2c 20 6c 61 62 65 6c 3d 27 45 75 63 | ure(2).pl.plot(d_emd,.label='Euc |
15300 | 6c 69 64 65 61 6e 20 45 4d 44 27 29 0a 70 6c 2e 70 6c 6f 74 28 64 5f 65 6d 64 32 2c 20 6c 61 62 | lidean.EMD').pl.plot(d_emd2,.lab |
15320 | 65 6c 3d 27 53 71 75 61 72 65 64 20 45 75 63 6c 69 64 65 61 6e 20 45 4d 44 27 29 0a 70 6c 2e 74 | el='Squared.Euclidean.EMD').pl.t |
15340 | 69 74 6c 65 28 27 45 4d 44 20 64 69 73 74 61 6e 63 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 | itle('EMD.distances').pl.legend( |
15360 | 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | )..############################# |
15380 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
153a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 43 6f 6d 70 75 74 65 20 53 69 6e 6b | #################.#.Compute.Sink |
153c0 | 68 6f 72 6e 20 66 6f 72 20 74 68 65 20 64 69 66 66 65 72 65 6e 74 20 6c 6f 73 73 65 73 0a 23 20 | horn.for.the.different.losses.#. |
153e0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
15400 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 0a 72 65 67 20 3d 20 31 65 2d 32 0a 64 5f 73 69 6e 6b | ---------..#%%.reg.=.1e-2.d_sink |
15420 | 68 6f 72 6e 20 3d 20 6f 74 2e 73 69 6e 6b 68 6f 72 6e 32 28 61 2c 20 42 2c 20 4d 2c 20 72 65 67 | horn.=.ot.sinkhorn2(a,.B,.M,.reg |
15440 | 29 0a 64 5f 73 69 6e 6b 68 6f 72 6e 32 20 3d 20 6f 74 2e 73 69 6e 6b 68 6f 72 6e 32 28 61 2c 20 | ).d_sinkhorn2.=.ot.sinkhorn2(a,. |
15460 | 42 2c 20 4d 32 2c 20 72 65 67 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 29 0a 70 6c 2e 63 6c 66 | B,.M2,.reg)..pl.figure(2).pl.clf |
15480 | 28 29 0a 70 6c 2e 70 6c 6f 74 28 64 5f 65 6d 64 2c 20 6c 61 62 65 6c 3d 27 45 75 63 6c 69 64 65 | ().pl.plot(d_emd,.label='Euclide |
154a0 | 61 6e 20 45 4d 44 27 29 0a 70 6c 2e 70 6c 6f 74 28 64 5f 65 6d 64 32 2c 20 6c 61 62 65 6c 3d 27 | an.EMD').pl.plot(d_emd2,.label=' |
154c0 | 53 71 75 61 72 65 64 20 45 75 63 6c 69 64 65 61 6e 20 45 4d 44 27 29 0a 70 6c 2e 70 6c 6f 74 28 | Squared.Euclidean.EMD').pl.plot( |
154e0 | 64 5f 73 69 6e 6b 68 6f 72 6e 2c 20 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 45 75 63 6c 69 64 65 61 | d_sinkhorn,.'+',.label='Euclidea |
15500 | 6e 20 53 69 6e 6b 68 6f 72 6e 27 29 0a 70 6c 2e 70 6c 6f 74 28 64 5f 73 69 6e 6b 68 6f 72 6e 32 | n.Sinkhorn').pl.plot(d_sinkhorn2 |
15520 | 2c 20 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 53 71 75 61 72 65 64 20 45 75 63 6c 69 64 65 61 6e 20 | ,.'+',.label='Squared.Euclidean. |
15540 | 53 69 6e 6b 68 6f 72 6e 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 45 4d 44 20 64 69 73 74 61 6e 63 | Sinkhorn').pl.title('EMD.distanc |
15560 | 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 | es').pl.legend()..pl.show().PK.. |
15580 | 14 00 00 00 00 00 da 74 d9 4e d1 a8 d7 2e a9 09 00 00 a9 09 00 00 20 00 00 00 70 6c 6f 74 5f 63 | .......t.N................plot_c |
155a0 | 6f 6e 76 6f 6c 75 74 69 6f 6e 61 6c 5f 62 61 72 79 63 65 6e 74 65 72 2e 70 79 0a 23 25 25 0a 23 | onvolutional_barycenter.py.#%%.# |
155c0 | 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.-*-.""".===== |
155e0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
15600 | 3d 3d 3d 3d 3d 3d 3d 0a 43 6f 6e 76 6f 6c 75 74 69 6f 6e 61 6c 20 57 61 73 73 65 72 73 74 65 69 | =======.Convolutional.Wasserstei |
15620 | 6e 20 42 61 72 79 63 65 6e 74 65 72 20 65 78 61 6d 70 6c 65 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | n.Barycenter.example.=========== |
15640 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
15660 | 3d 0a 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 69 | =..This.example.is.designed.to.i |
15680 | 6c 6c 75 73 74 72 61 74 65 20 68 6f 77 20 74 68 65 20 43 6f 6e 76 6f 6c 75 74 69 6f 6e 61 6c 20 | llustrate.how.the.Convolutional. |
156a0 | 57 61 73 73 65 72 73 74 65 69 6e 20 42 61 72 79 63 65 6e 74 65 72 0a 66 75 6e 63 74 69 6f 6e 20 | Wasserstein.Barycenter.function. |
156c0 | 6f 66 20 50 4f 54 20 77 6f 72 6b 73 2e 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a 20 4e 69 63 | of.POT.works.."""..#.Author:.Nic |
156e0 | 6f 6c 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 0a 23 | olas.Courty.<ncourty@irisa.fr>.# |
15700 | 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 0a 69 6d 70 6f 72 74 | .#.License:.MIT.License...import |
15720 | 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 70 6c 0a | .numpy.as.np.import.pylab.as.pl. |
15740 | 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 23 23 23 | import.ot..##################### |
15760 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
15780 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 44 61 74 61 | #########################.#.Data |
157a0 | 20 70 72 65 70 61 72 61 74 69 6f 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a | .preparation.#.----------------. |
157c0 | 23 0a 23 20 54 68 65 20 66 6f 75 72 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 61 72 65 20 63 | #.#.The.four.distributions.are.c |
157e0 | 6f 6e 73 74 72 75 63 74 65 64 20 66 72 6f 6d 20 34 20 73 69 6d 70 6c 65 20 69 6d 61 67 65 73 0a | onstructed.from.4.simple.images. |
15800 | 0a 0a 66 31 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 72 65 | ..f1.=.1.-.pl.imread('../data/re |
15820 | 64 63 72 6f 73 73 2e 70 6e 67 27 29 5b 3a 2c 20 3a 2c 20 32 5d 0a 66 32 20 3d 20 31 20 2d 20 70 | dcross.png')[:,.:,.2].f2.=.1.-.p |
15840 | 6c 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 64 75 63 6b 2e 70 6e 67 27 29 5b 3a 2c 20 | l.imread('../data/duck.png')[:,. |
15860 | 3a 2c 20 32 5d 0a 66 33 20 3d 20 31 20 2d 20 70 6c 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 | :,.2].f3.=.1.-.pl.imread('../dat |
15880 | 61 2f 68 65 61 72 74 2e 70 6e 67 27 29 5b 3a 2c 20 3a 2c 20 32 5d 0a 66 34 20 3d 20 31 20 2d 20 | a/heart.png')[:,.:,.2].f4.=.1.-. |
158a0 | 70 6c 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 74 6f 6f 74 68 2e 70 6e 67 27 29 5b 3a | pl.imread('../data/tooth.png')[: |
158c0 | 2c 20 3a 2c 20 32 5d 0a 0a 41 20 3d 20 5b 5d 0a 66 31 20 3d 20 66 31 20 2f 20 6e 70 2e 73 75 6d | ,.:,.2]..A.=.[].f1.=.f1./.np.sum |
158e0 | 28 66 31 29 0a 66 32 20 3d 20 66 32 20 2f 20 6e 70 2e 73 75 6d 28 66 32 29 0a 66 33 20 3d 20 66 | (f1).f2.=.f2./.np.sum(f2).f3.=.f |
15900 | 33 20 2f 20 6e 70 2e 73 75 6d 28 66 33 29 0a 66 34 20 3d 20 66 34 20 2f 20 6e 70 2e 73 75 6d 28 | 3./.np.sum(f3).f4.=.f4./.np.sum( |
15920 | 66 34 29 0a 41 2e 61 70 70 65 6e 64 28 66 31 29 0a 41 2e 61 70 70 65 6e 64 28 66 32 29 0a 41 2e | f4).A.append(f1).A.append(f2).A. |
15940 | 61 70 70 65 6e 64 28 66 33 29 0a 41 2e 61 70 70 65 6e 64 28 66 34 29 0a 41 20 3d 20 6e 70 2e 61 | append(f3).A.append(f4).A.=.np.a |
15960 | 72 72 61 79 28 41 29 0a 0a 6e 62 5f 69 6d 61 67 65 73 20 3d 20 35 0a 0a 23 20 74 68 6f 73 65 20 | rray(A)..nb_images.=.5..#.those. |
15980 | 61 72 65 20 74 68 65 20 66 6f 75 72 20 63 6f 72 6e 65 72 73 20 63 6f 6f 72 64 69 6e 61 74 65 73 | are.the.four.corners.coordinates |
159a0 | 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 69 6e 74 65 72 70 6f 6c 61 74 65 64 20 62 79 20 62 69 | .that.will.be.interpolated.by.bi |
159c0 | 6c 69 6e 65 61 72 0a 23 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 0a 76 31 20 3d 20 6e 70 2e 61 | linear.#.interpolation.v1.=.np.a |
159e0 | 72 72 61 79 28 28 31 2c 20 30 2c 20 30 2c 20 30 29 29 0a 76 32 20 3d 20 6e 70 2e 61 72 72 61 79 | rray((1,.0,.0,.0)).v2.=.np.array |
15a00 | 28 28 30 2c 20 31 2c 20 30 2c 20 30 29 29 0a 76 33 20 3d 20 6e 70 2e 61 72 72 61 79 28 28 30 2c | ((0,.1,.0,.0)).v3.=.np.array((0, |
15a20 | 20 30 2c 20 31 2c 20 30 29 29 0a 76 34 20 3d 20 6e 70 2e 61 72 72 61 79 28 28 30 2c 20 30 2c 20 | .0,.1,.0)).v4.=.np.array((0,.0,. |
15a40 | 30 2c 20 31 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 | 0,.1))...####################### |
15a60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
15a80 | 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 42 61 72 79 63 65 | #######################.#.Baryce |
15aa0 | 6e 74 65 72 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 61 6e 64 20 76 69 73 75 61 6c 69 7a 61 74 69 | nter.computation.and.visualizati |
15ac0 | 6f 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | on.#.--------------------------- |
15ae0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 0a 70 6c 2e 66 69 67 75 72 65 28 66 69 67 73 69 | -------------.#..pl.figure(figsi |
15b00 | 7a 65 3d 28 31 30 2c 20 31 30 29 29 0a 70 6c 2e 74 69 74 6c 65 28 27 43 6f 6e 76 6f 6c 75 74 69 | ze=(10,.10)).pl.title('Convoluti |
15b20 | 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 73 20 69 6e 20 | onal.Wasserstein.Barycenters.in. |
15b40 | 50 4f 54 27 29 0a 63 6d 20 3d 20 27 42 6c 75 65 73 27 0a 23 20 72 65 67 75 6c 61 72 69 7a 61 74 | POT').cm.=.'Blues'.#.regularizat |
15b60 | 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 0a 72 65 67 20 3d 20 30 2e 30 30 34 0a 66 6f 72 20 69 20 | ion.parameter.reg.=.0.004.for.i. |
15b80 | 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 66 6f 72 20 6a 20 69 | in.range(nb_images):.....for.j.i |
15ba0 | 6e 20 72 61 6e 67 65 28 6e 62 5f 69 6d 61 67 65 73 29 3a 0a 20 20 20 20 20 20 20 20 70 6c 2e 73 | n.range(nb_images):.........pl.s |
15bc0 | 75 62 70 6c 6f 74 28 6e 62 5f 69 6d 61 67 65 73 2c 20 6e 62 5f 69 6d 61 67 65 73 2c 20 69 20 2a | ubplot(nb_images,.nb_images,.i.* |
15be0 | 20 6e 62 5f 69 6d 61 67 65 73 20 2b 20 6a 20 2b 20 31 29 0a 20 20 20 20 20 20 20 20 74 78 20 3d | .nb_images.+.j.+.1).........tx.= |
15c00 | 20 66 6c 6f 61 74 28 69 29 20 2f 20 28 6e 62 5f 69 6d 61 67 65 73 20 2d 20 31 29 0a 20 20 20 20 | .float(i)./.(nb_images.-.1)..... |
15c20 | 20 20 20 20 74 79 20 3d 20 66 6c 6f 61 74 28 6a 29 20 2f 20 28 6e 62 5f 69 6d 61 67 65 73 20 2d | ....ty.=.float(j)./.(nb_images.- |
15c40 | 20 31 29 0a 0a 20 20 20 20 20 20 20 20 23 20 77 65 69 67 68 74 73 20 61 72 65 20 63 6f 6e 73 74 | .1)..........#.weights.are.const |
15c60 | 72 75 63 74 65 64 20 62 79 20 62 69 6c 69 6e 65 61 72 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e | ructed.by.bilinear.interpolation |
15c80 | 0a 20 20 20 20 20 20 20 20 74 6d 70 31 20 3d 20 28 31 20 2d 20 74 78 29 20 2a 20 76 31 20 2b 20 | .........tmp1.=.(1.-.tx).*.v1.+. |
15ca0 | 74 78 20 2a 20 76 32 0a 20 20 20 20 20 20 20 20 74 6d 70 32 20 3d 20 28 31 20 2d 20 74 78 29 20 | tx.*.v2.........tmp2.=.(1.-.tx). |
15cc0 | 2a 20 76 33 20 2b 20 74 78 20 2a 20 76 34 0a 20 20 20 20 20 20 20 20 77 65 69 67 68 74 73 20 3d | *.v3.+.tx.*.v4.........weights.= |
15ce0 | 20 28 31 20 2d 20 74 79 29 20 2a 20 74 6d 70 31 20 2b 20 74 79 20 2a 20 74 6d 70 32 0a 0a 20 20 | .(1.-.ty).*.tmp1.+.ty.*.tmp2.... |
15d00 | 20 20 20 20 20 20 69 66 20 69 20 3d 3d 20 30 20 61 6e 64 20 6a 20 3d 3d 20 30 3a 0a 20 20 20 20 | ......if.i.==.0.and.j.==.0:..... |
15d20 | 20 20 20 20 20 20 20 20 70 6c 2e 69 6d 73 68 6f 77 28 66 31 2c 20 63 6d 61 70 3d 63 6d 29 0a 20 | ........pl.imshow(f1,.cmap=cm).. |
15d40 | 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')....... |
15d60 | 20 20 65 6c 69 66 20 69 20 3d 3d 20 30 20 61 6e 64 20 6a 20 3d 3d 20 28 6e 62 5f 69 6d 61 67 65 | ..elif.i.==.0.and.j.==.(nb_image |
15d80 | 73 20 2d 20 31 29 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 33 | s.-.1):.............pl.imshow(f3 |
15da0 | 2c 20 63 6d 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 | ,.cmap=cm).............pl.axis(' |
15dc0 | 6f 66 66 27 29 0a 20 20 20 20 20 20 20 20 65 6c 69 66 20 69 20 3d 3d 20 28 6e 62 5f 69 6d 61 67 | off').........elif.i.==.(nb_imag |
15de0 | 65 73 20 2d 20 31 29 20 61 6e 64 20 6a 20 3d 3d 20 30 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 | es.-.1).and.j.==.0:............. |
15e00 | 70 6c 2e 69 6d 73 68 6f 77 28 66 32 2c 20 63 6d 61 70 3d 63 6d 29 0a 20 20 20 20 20 20 20 20 20 | pl.imshow(f2,.cmap=cm).......... |
15e20 | 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 69 66 20 69 | ...pl.axis('off').........elif.i |
15e40 | 20 3d 3d 20 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 28 6e 62 | .==.(nb_images.-.1).and.j.==.(nb |
15e60 | 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 6d 73 | _images.-.1):.............pl.ims |
15e80 | 68 6f 77 28 66 34 2c 20 63 6d 61 70 3d 63 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 6c 2e | how(f4,.cmap=cm).............pl. |
15ea0 | 61 78 69 73 28 27 6f 66 66 27 29 0a 20 20 20 20 20 20 20 20 65 6c 73 65 3a 0a 20 20 20 20 20 20 | axis('off').........else:....... |
15ec0 | 20 20 20 20 20 20 23 20 63 61 6c 6c 20 74 6f 20 62 61 72 79 63 65 6e 74 65 72 20 63 6f 6d 70 75 | ......#.call.to.barycenter.compu |
15ee0 | 74 61 74 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 2e | tation.............pl.imshow(ot. |
15f00 | 62 72 65 67 6d 61 6e 2e 63 6f 6e 76 6f 6c 75 74 69 6f 6e 61 6c 5f 62 61 72 79 63 65 6e 74 65 72 | bregman.convolutional_barycenter |
15f20 | 32 64 28 41 2c 20 72 65 67 2c 20 77 65 69 67 68 74 73 29 2c 20 63 6d 61 70 3d 63 6d 29 0a 20 20 | 2d(A,.reg,.weights),.cmap=cm)... |
15f40 | 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 70 6c 2e 73 68 6f 77 | ..........pl.axis('off').pl.show |
15f60 | 28 29 0a 50 4b 03 04 14 00 00 00 00 00 db 74 d9 4e 20 57 90 f6 08 0f 00 00 08 0f 00 00 19 00 00 | ().PK.........t.N.W............. |
15f80 | 00 70 6c 6f 74 5f 55 4f 54 5f 62 61 72 79 63 65 6e 74 65 72 5f 31 44 2e 70 79 23 20 2d 2a 2d 20 | .plot_UOT_barycenter_1D.py#.-*-. |
15fa0 | 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.-*-.""".========== |
15fc0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
15fe0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 31 44 20 57 61 73 73 65 72 73 74 65 69 6e | =================.1D.Wasserstein |
16000 | 20 62 61 72 79 63 65 6e 74 65 72 20 64 65 6d 6f 20 66 6f 72 20 55 6e 62 61 6c 61 6e 63 65 64 20 | .barycenter.demo.for.Unbalanced. |
16020 | 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | distributions.================== |
16040 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
16060 | 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 |
16080 | 74 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 | tes.the.computation.of.regulariz |
160a0 | 65 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 | ed.Wassersyein.Barycenter.as.pro |
160c0 | 70 6f 73 65 64 20 69 6e 20 5b 31 30 5d 20 66 6f 72 20 55 6e 62 61 6c 61 6e 63 65 64 20 69 6e 70 | posed.in.[10].for.Unbalanced.inp |
160e0 | 75 74 73 2e 0a 0a 0a 5b 31 30 5d 20 43 68 69 7a 61 74 2c 20 4c 2e 2c 20 50 65 79 72 c3 a9 2c 20 | uts....[10].Chizat,.L.,.Peyr..,. |
16100 | 47 2e 2c 20 53 63 68 6d 69 74 7a 65 72 2c 20 42 2e 2c 20 26 20 56 69 61 6c 61 72 64 2c 20 46 2e | G.,.Schmitzer,.B.,.&.Vialard,.F. |
16120 | 20 58 2e 20 28 32 30 31 36 29 2e 20 53 63 61 6c 69 6e 67 20 61 6c 67 6f 72 69 74 68 6d 73 20 66 | .X..(2016)..Scaling.algorithms.f |
16140 | 6f 72 20 75 6e 62 61 6c 61 6e 63 65 64 20 74 72 61 6e 73 70 6f 72 74 20 70 72 6f 62 6c 65 6d 73 | or.unbalanced.transport.problems |
16160 | 2e 20 61 72 58 69 76 20 70 72 65 70 72 69 6e 74 20 61 72 58 69 76 3a 31 36 30 37 2e 30 35 38 31 | ..arXiv.preprint.arXiv:1607.0581 |
16180 | 36 2e 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a 20 48 69 63 68 61 6d 20 4a 61 6e 61 74 69 | 6..."""..#.Author:.Hicham.Janati |
161a0 | 20 3c 68 69 63 68 61 6d 2e 6a 61 6e 61 74 69 40 69 6e 72 69 61 2e 66 72 3e 0a 23 0a 23 20 4c 69 | .<hicham.janati@inria.fr>.#.#.Li |
161c0 | 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 | cense:.MIT.License..import.numpy |
161e0 | 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 | .as.np.import.matplotlib.pylab.a |
16200 | 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 23 20 6e 65 63 65 73 73 61 72 79 20 66 6f 72 20 33 | s.pl.import.ot.#.necessary.for.3 |
16220 | 64 20 70 6c 6f 74 20 65 76 65 6e 20 69 66 20 6e 6f 74 20 75 73 65 64 0a 66 72 6f 6d 20 6d 70 6c | d.plot.even.if.not.used.from.mpl |
16240 | 5f 74 6f 6f 6c 6b 69 74 73 2e 6d 70 6c 6f 74 33 64 20 69 6d 70 6f 72 74 20 41 78 65 73 33 44 20 | _toolkits.mplot3d.import.Axes3D. |
16260 | 20 23 20 6e 6f 71 61 0a 66 72 6f 6d 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 63 6f 6c 6c 65 63 74 69 | .#.noqa.from.matplotlib.collecti |
16280 | 6f 6e 73 20 69 6d 70 6f 72 74 20 50 6f 6c 79 43 6f 6c 6c 65 63 74 69 6f 6e 0a 0a 23 23 23 23 23 | ons.import.PolyCollection..##### |
162a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
162c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 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 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d | #########.#.Generate.data.#.---- |
16300 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 6e 20 3d 20 31 30 30 | ---------..#.parameters..n.=.100 |
16320 | 20 20 23 20 6e 62 20 62 69 6e 73 0a 0a 23 20 62 69 6e 20 70 6f 73 69 74 69 6f 6e 73 0a 78 20 3d | ..#.nb.bins..#.bin.positions.x.= |
16340 | 20 6e 70 2e 61 72 61 6e 67 65 28 6e 2c 20 64 74 79 70 65 3d 6e 70 2e 66 6c 6f 61 74 36 34 29 0a | .np.arange(n,.dtype=np.float64). |
16360 | 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 6f | .#.Gaussian.distributions.a1.=.o |
16380 | 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 30 | t.datasets.make_1D_gauss(n,.m=20 |
163a0 | 2c 20 73 3d 35 29 20 20 23 20 6d 3d 20 6d 65 61 6e 2c 20 73 3d 20 73 74 64 0a 61 32 20 3d 20 6f | ,.s=5)..#.m=.mean,.s=.std.a2.=.o |
163c0 | 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 30 | t.datasets.make_1D_gauss(n,.m=60 |
163e0 | 2c 20 73 3d 38 29 0a 0a 23 20 6d 61 6b 65 20 75 6e 62 61 6c 61 6e 63 65 64 20 64 69 73 74 73 0a | ,.s=8)..#.make.unbalanced.dists. |
16400 | 61 32 20 2a 3d 20 33 2e 0a 0a 23 20 63 72 65 61 74 69 6e 67 20 6d 61 74 72 69 78 20 41 20 63 6f | a2.*=.3...#.creating.matrix.A.co |
16420 | 6e 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 | ntaining.all.distributions.A.=.n |
16440 | 70 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 | p.vstack((a1,.a2)).T.n_distribut |
16460 | 69 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 | ions.=.A.shape[1]..#.loss.matrix |
16480 | 20 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 | .+.normalization.M.=.ot.utils.di |
164a0 | 73 74 30 28 6e 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 | st0(n).M./=.M.max()..########### |
164c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
164e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
16500 | 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 20 70 | ###.#.Plot.data.#.---------..#.p |
16520 | 6c 6f 74 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 70 6c 2e 66 69 67 75 72 65 | lot.the.distributions..pl.figure |
16540 | 28 31 2c 20 66 69 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 | (1,.figsize=(6.4,.3)).for.i.in.r |
16560 | 61 6e 67 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 | ange(n_distributions):.....pl.pl |
16580 | 6f 74 28 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 | ot(x,.A[:,.i]).pl.title('Distrib |
165a0 | 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 23 23 23 23 | utions').pl.tight_layout()..#### |
165c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
165e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
16600 | 23 23 23 23 23 23 23 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 | ##########.#.Barycenter.computat |
16620 | 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 0a 0a 23 20 | ion.#.----------------------..#. |
16640 | 6e 6f 6e 20 77 65 69 67 68 74 65 64 20 62 61 72 79 63 65 6e 74 65 72 20 63 6f 6d 70 75 74 61 74 | non.weighted.barycenter.computat |
16660 | 69 6f 6e 0a 0a 77 65 69 67 68 74 20 3d 20 30 2e 35 20 20 23 20 30 3c 3d 77 65 69 67 68 74 3c 3d | ion..weight.=.0.5..#.0<=weight<= |
16680 | 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 77 65 69 67 68 74 | 1.weights.=.np.array([1.-.weight |
166a0 | 2c 20 77 65 69 67 68 74 5d 29 0a 0a 23 20 6c 32 62 61 72 79 0a 62 61 72 79 5f 6c 32 20 3d 20 41 | ,.weight])..#.l2bary.bary_l2.=.A |
166c0 | 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 65 67 | .dot(weights)..#.wasserstein.reg |
166e0 | 20 3d 20 31 65 2d 33 0a 61 6c 70 68 61 20 3d 20 31 2e 0a 0a 62 61 72 79 5f 77 61 73 73 20 3d 20 | .=.1e-3.alpha.=.1...bary_wass.=. |
16700 | 6f 74 2e 75 6e 62 61 6c 61 6e 63 65 64 2e 62 61 72 79 63 65 6e 74 65 72 5f 75 6e 62 61 6c 61 6e | ot.unbalanced.barycenter_unbalan |
16720 | 63 65 64 28 41 2c 20 4d 2c 20 72 65 67 2c 20 61 6c 70 68 61 2c 20 77 65 69 67 68 74 73 29 0a 0a | ced(A,.M,.reg,.alpha,.weights).. |
16740 | 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 |
16760 | 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 |
16780 | 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 |
167a0 | 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 |
167c0 | 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 |
167e0 | 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 |
16800 | 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 |
16820 | 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 |
16840 | 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()..## |
16860 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
16880 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
168a0 | 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 |
168c0 | 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.#.--------------------- |
168e0 | 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 |
16900 | 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 |
16920 | 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 |
16940 | 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 |
16960 | 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 |
16980 | 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 |
169a0 | 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 |
169c0 | 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_ |
169e0 | 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_ |
16a00 | 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 |
16a20 | 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 |
16a40 | 61 2c 20 77 65 69 67 68 74 73 29 0a 0a 0a 23 20 70 6c 6f 74 20 69 6e 74 65 72 70 6f 6c 61 74 69 | a,.weights)...#.plot.interpolati |
16a60 | 6f 6e 0a 0a 70 6c 2e 66 69 67 75 72 65 28 33 29 0a 0a 63 6d 61 70 20 3d 20 70 6c 2e 63 6d 2e 67 | on..pl.figure(3)..cmap.=.pl.cm.g |
16a80 | 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 |
16aa0 | 20 3d 20 77 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 | .=.weight_list.for.i,.z.in.enume |
16ac0 | 72 61 74 65 28 7a 73 29 3a 0a 20 20 20 20 79 73 20 3d 20 42 5f 6c 32 5b 3a 2c 20 69 5d 0a 20 20 | rate(zs):.....ys.=.B_l2[:,.i]... |
16ae0 | 20 20 76 65 72 74 73 2e 61 70 70 65 6e 64 28 6c 69 73 74 28 7a 69 70 28 78 2c 20 79 73 29 29 29 | ..verts.append(list(zip(x,.ys))) |
16b00 | 0a 0a 61 78 20 3d 20 70 6c 2e 67 63 66 28 29 2e 67 63 61 28 70 72 6f 6a 65 63 74 69 6f 6e 3d 27 | ..ax.=.pl.gcf().gca(projection=' |
16b20 | 33 64 27 29 0a 0a 70 6f 6c 79 20 3d 20 50 6f 6c 79 43 6f 6c 6c 65 63 74 69 6f 6e 28 76 65 72 74 | 3d')..poly.=.PolyCollection(vert |
16b40 | 73 2c 20 66 61 63 65 63 6f 6c 6f 72 73 3d 5b 63 6d 61 70 28 61 29 20 66 6f 72 20 61 20 69 6e 20 | s,.facecolors=[cmap(a).for.a.in. |
16b60 | 77 65 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 | weight_list]).poly.set_alpha(0.7 |
16b80 | 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 |
16ba0 | 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'). |
16bc0 | 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 |
16be0 | 6c 28 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 | l(r'$\alpha$').ax.set_ylim3d(0,. |
16c00 | 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 |
16c20 | 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 |
16c40 | 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 |
16c60 | 20 6c 32 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 66 69 67 75 | .l2').pl.tight_layout()..pl.figu |
16c80 | 72 65 28 34 29 0a 63 6d 61 70 20 3d 20 70 6c 2e 63 6d 2e 67 65 74 5f 63 6d 61 70 28 27 76 69 72 | re(4).cmap.=.pl.cm.get_cmap('vir |
16ca0 | 69 64 69 73 27 29 0a 76 65 72 74 73 20 3d 20 5b 5d 0a 7a 73 20 3d 20 77 65 69 67 68 74 5f 6c 69 | idis').verts.=.[].zs.=.weight_li |
16cc0 | 73 74 0a 66 6f 72 20 69 2c 20 7a 20 69 6e 20 65 6e 75 6d 65 72 61 74 65 28 7a 73 29 3a 0a 20 20 | st.for.i,.z.in.enumerate(zs):... |
16ce0 | 20 20 79 73 20 3d 20 42 5f 77 61 73 73 5b 3a 2c 20 69 5d 0a 20 20 20 20 76 65 72 74 73 2e 61 70 | ..ys.=.B_wass[:,.i].....verts.ap |
16d00 | 70 65 6e 64 28 6c 69 73 74 28 7a 69 70 28 78 2c 20 79 73 29 29 29 0a 0a 61 78 20 3d 20 70 6c 2e | pend(list(zip(x,.ys)))..ax.=.pl. |
16d20 | 67 63 66 28 29 2e 67 63 61 28 70 72 6f 6a 65 63 74 69 6f 6e 3d 27 33 64 27 29 0a 0a 70 6f 6c 79 | gcf().gca(projection='3d')..poly |
16d40 | 20 3d 20 50 6f 6c 79 43 6f 6c 6c 65 63 74 69 6f 6e 28 76 65 72 74 73 2c 20 66 61 63 65 63 6f 6c | .=.PolyCollection(verts,.facecol |
16d60 | 6f 72 73 3d 5b 63 6d 61 70 28 61 29 20 66 6f 72 20 61 20 69 6e 20 77 65 69 67 68 74 5f 6c 69 73 | ors=[cmap(a).for.a.in.weight_lis |
16d80 | 74 5d 29 0a 70 6f 6c 79 2e 73 65 74 5f 61 6c 70 68 61 28 30 2e 37 29 0a 61 78 2e 61 64 64 5f 63 | t]).poly.set_alpha(0.7).ax.add_c |
16da0 | 6f 6c 6c 65 63 74 69 6f 6e 33 64 28 70 6f 6c 79 2c 20 7a 73 3d 7a 73 2c 20 7a 64 69 72 3d 27 79 | ollection3d(poly,.zs=zs,.zdir='y |
16dc0 | 27 29 0a 61 78 2e 73 65 74 5f 78 6c 61 62 65 6c 28 27 78 27 29 0a 61 78 2e 73 65 74 5f 78 6c 69 | ').ax.set_xlabel('x').ax.set_xli |
16de0 | 6d 33 64 28 30 2c 20 6e 29 0a 61 78 2e 73 65 74 5f 79 6c 61 62 65 6c 28 72 27 24 5c 61 6c 70 68 | m3d(0,.n).ax.set_ylabel(r'$\alph |
16e00 | 61 24 27 29 0a 61 78 2e 73 65 74 5f 79 6c 69 6d 33 64 28 30 2c 20 31 29 0a 61 78 2e 73 65 74 5f | a$').ax.set_ylim3d(0,.1).ax.set_ |
16e20 | 7a 6c 61 62 65 6c 28 27 27 29 0a 61 78 2e 73 65 74 5f 7a 6c 69 6d 33 64 28 30 2c 20 42 5f 6c 32 | zlabel('').ax.set_zlim3d(0,.B_l2 |
16e40 | 2e 6d 61 78 28 29 20 2a 20 31 2e 30 31 29 0a 70 6c 2e 74 69 74 6c 65 28 27 42 61 72 79 63 65 6e | .max().*.1.01).pl.title('Barycen |
16e60 | 74 65 72 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 20 77 69 74 68 20 57 61 73 73 65 72 73 74 65 | ter.interpolation.with.Wasserste |
16e80 | 69 6e 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 | in').pl.tight_layout()..pl.show( |
16ea0 | 29 0a 50 4b 03 04 14 00 00 00 00 00 db 74 d9 4e f4 37 b2 97 17 0e 00 00 17 0e 00 00 19 00 00 00 | ).PK.........t.N.7.............. |
16ec0 | 70 6c 6f 74 5f 6f 74 64 61 5f 63 6f 6c 6f 72 5f 69 6d 61 67 65 73 2e 70 79 23 20 2d 2a 2d 20 63 | plot_otda_color_images.py#.-*-.c |
16ee0 | 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 3d | oding:.utf-8.-*-.""".=========== |
16f00 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4f 54 20 66 6f 72 20 69 6d 61 67 65 20 | ==================.OT.for.image. |
16f20 | 63 6f 6c 6f 72 20 61 64 61 70 74 61 74 69 6f 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | color.adaptation.=============== |
16f40 | 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 70 72 65 | ==============..This.example.pre |
16f60 | 73 65 6e 74 73 20 61 20 77 61 79 20 6f 66 20 74 72 61 6e 73 66 65 72 72 69 6e 67 20 63 6f 6c 6f | sents.a.way.of.transferring.colo |
16f80 | 72 73 20 62 65 74 77 65 65 6e 20 74 77 6f 20 69 6d 61 67 65 73 0a 77 69 74 68 20 4f 70 74 69 6d | rs.between.two.images.with.Optim |
16fa0 | 61 6c 20 54 72 61 6e 73 70 6f 72 74 20 61 73 20 69 6e 74 72 6f 64 75 63 65 64 20 69 6e 20 5b 36 | al.Transport.as.introduced.in.[6 |
16fc0 | 5d 0a 0a 5b 36 5d 20 46 65 72 72 61 64 61 6e 73 2c 20 53 2e 2c 20 50 61 70 61 64 61 6b 69 73 2c | ]..[6].Ferradans,.S.,.Papadakis, |
16fe0 | 20 4e 2e 2c 20 50 65 79 72 65 2c 20 47 2e 2c 20 26 20 41 75 6a 6f 6c 2c 20 4a 2e 20 46 2e 20 28 | .N.,.Peyre,.G.,.&.Aujol,.J..F..( |
17000 | 32 30 31 34 29 2e 0a 52 65 67 75 6c 61 72 69 7a 65 64 20 64 69 73 63 72 65 74 65 20 6f 70 74 69 | 2014)..Regularized.discrete.opti |
17020 | 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 2e 0a 53 49 41 4d 20 4a 6f 75 72 6e 61 6c 20 6f 6e 20 49 | mal.transport..SIAM.Journal.on.I |
17040 | 6d 61 67 69 6e 67 20 53 63 69 65 6e 63 65 73 2c 20 37 28 33 29 2c 20 31 38 35 33 2d 31 38 38 32 | maging.Sciences,.7(3),.1853-1882 |
17060 | 2e 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 73 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c | .."""..#.Authors:.Remi.Flamary.< |
17080 | 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>.#........ |
170a0 | 20 20 53 74 61 6e 69 73 6c 61 73 20 43 68 61 6d 62 6f 6e 20 3c 73 74 61 6e 2e 63 68 61 6d 62 6f | ..Stanislas.Chambon.<stan.chambo |
170c0 | 6e 40 67 6d 61 69 6c 2e 63 6f 6d 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 | n@gmail.com>.#.#.License:.MIT.Li |
170e0 | 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 66 72 6f 6d 20 73 | cense..import.numpy.as.np.from.s |
17100 | 63 69 70 79 20 69 6d 70 6f 72 74 20 6e 64 69 6d 61 67 65 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c | cipy.import.ndimage.import.matpl |
17120 | 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 0a 0a 72 20 | otlib.pylab.as.pl.import.ot...r. |
17140 | 3d 20 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 | =.np.random.RandomState(42)...de |
17160 | 66 20 69 6d 32 6d 61 74 28 49 29 3a 0a 20 20 20 20 22 22 22 43 6f 6e 76 65 72 74 73 20 61 6e 20 | f.im2mat(I):....."""Converts.an. |
17180 | 69 6d 61 67 65 20 74 6f 20 6d 61 74 72 69 78 20 28 6f 6e 65 20 70 69 78 65 6c 20 70 65 72 20 6c | image.to.matrix.(one.pixel.per.l |
171a0 | 69 6e 65 29 22 22 22 0a 20 20 20 20 72 65 74 75 72 6e 20 49 2e 72 65 73 68 61 70 65 28 28 49 2e | ine)""".....return.I.reshape((I. |
171c0 | 73 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 | shape[0].*.I.shape[1],.I.shape[2 |
171e0 | 5d 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 | ]))...def.mat2im(X,.shape):..... |
17200 | 22 22 22 43 6f 6e 76 65 72 74 73 20 62 61 63 6b 20 61 20 6d 61 74 72 69 78 20 74 6f 20 61 6e 20 | """Converts.back.a.matrix.to.an. |
17220 | 69 6d 61 67 65 22 22 22 0a 20 20 20 20 72 65 74 75 72 6e 20 58 2e 72 65 73 68 61 70 65 28 73 68 | image""".....return.X.reshape(sh |
17240 | 61 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 | ape)...def.minmax(I):.....return |
17260 | 20 6e 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 | .np.clip(I,.0,.1)...############ |
17280 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
172a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
172c0 | 23 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | ##.#.Generate.data.#.----------- |
172e0 | 2d 2d 0a 0a 23 20 4c 6f 61 64 69 6e 67 20 69 6d 61 67 65 73 0a 49 31 20 3d 20 6e 64 69 6d 61 67 | --..#.Loading.images.I1.=.ndimag |
17300 | 65 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 6f 63 65 61 6e 5f 64 61 79 2e 6a 70 67 27 | e.imread('../data/ocean_day.jpg' |
17320 | 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 20 2f 20 32 35 36 0a 49 32 20 3d 20 | ).astype(np.float64)./.256.I2.=. |
17340 | 6e 64 69 6d 61 67 65 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 6f 63 65 61 6e 5f 73 75 | ndimage.imread('../data/ocean_su |
17360 | 6e 73 65 74 2e 6a 70 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 20 2f 20 | nset.jpg').astype(np.float64)./. |
17380 | 32 35 36 0a 0a 58 31 20 3d 20 69 6d 32 6d 61 74 28 49 31 29 0a 58 32 20 3d 20 69 6d 32 6d 61 74 | 256..X1.=.im2mat(I1).X2.=.im2mat |
173a0 | 28 49 32 29 0a 0a 23 20 74 72 61 69 6e 69 6e 67 20 73 61 6d 70 6c 65 73 0a 6e 62 20 3d 20 31 30 | (I2)..#.training.samples.nb.=.10 |
173c0 | 30 30 0a 69 64 78 31 20 3d 20 72 2e 72 61 6e 64 69 6e 74 28 58 31 2e 73 68 61 70 65 5b 30 5d 2c | 00.idx1.=.r.randint(X1.shape[0], |
173e0 | 20 73 69 7a 65 3d 28 6e 62 2c 29 29 0a 69 64 78 32 20 3d 20 72 2e 72 61 6e 64 69 6e 74 28 58 32 | .size=(nb,)).idx2.=.r.randint(X2 |
17400 | 2e 73 68 61 70 65 5b 30 5d 2c 20 73 69 7a 65 3d 28 6e 62 2c 29 29 0a 0a 58 73 20 3d 20 58 31 5b | .shape[0],.size=(nb,))..Xs.=.X1[ |
17420 | 69 64 78 31 2c 20 3a 5d 0a 58 74 20 3d 20 58 32 5b 69 64 78 32 2c 20 3a 5d 0a 0a 0a 23 23 23 23 | idx1,.:].Xt.=.X2[idx2,.:]...#### |
17440 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
17460 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
17480 | 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 6f 72 69 67 69 6e 61 6c 20 69 6d 61 67 65 | ##########.#.Plot.original.image |
174a0 | 0a 23 20 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 |
174c0 | 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 29 29 0a 0a 70 6c 2e 73 75 62 70 6c | e(1,.figsize=(6.4,.3))..pl.subpl |
174e0 | 6f 74 28 31 2c 20 32 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 29 0a 70 6c 2e 61 78 69 | ot(1,.2,.1).pl.imshow(I1).pl.axi |
17500 | 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 70 6c | s('off').pl.title('Image.1')..pl |
17520 | 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 29 0a | .subplot(1,.2,.2).pl.imshow(I2). |
17540 | 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 32 | pl.axis('off').pl.title('Image.2 |
17560 | 27 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ')...########################### |
17580 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
175a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 53 63 61 74 74 65 72 20 70 6c | ###################.#.Scatter.pl |
175c0 | 6f 74 20 6f 66 20 63 6f 6c 6f 72 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | ot.of.colors.#.----------------- |
175e0 | 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 | -----..pl.figure(2,.figsize=(6.4 |
17600 | 2c 20 33 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 63 | ,.3))..pl.subplot(1,.2,.1).pl.sc |
17620 | 61 74 74 65 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 58 73 5b 3a 2c 20 32 5d 2c 20 63 3d 58 73 29 0a | atter(Xs[:,.0],.Xs[:,.2],.c=Xs). |
17640 | 70 6c 2e 61 78 69 73 28 5b 30 2c 20 31 2c 20 30 2c 20 31 5d 29 0a 70 6c 2e 78 6c 61 62 65 6c 28 | pl.axis([0,.1,.0,.1]).pl.xlabel( |
17660 | 27 52 65 64 27 29 0a 70 6c 2e 79 6c 61 62 65 6c 28 27 42 6c 75 65 27 29 0a 70 6c 2e 74 69 74 6c | 'Red').pl.ylabel('Blue').pl.titl |
17680 | 65 28 27 49 6d 61 67 65 20 31 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 32 | e('Image.1')..pl.subplot(1,.2,.2 |
176a0 | 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 32 5d 2c | ).pl.scatter(Xt[:,.0],.Xt[:,.2], |
176c0 | 20 63 3d 58 74 29 0a 70 6c 2e 61 78 69 73 28 5b 30 2c 20 31 2c 20 30 2c 20 31 5d 29 0a 70 6c 2e | .c=Xt).pl.axis([0,.1,.0,.1]).pl. |
176e0 | 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 65 27 29 0a | xlabel('Red').pl.ylabel('Blue'). |
17700 | 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 32 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 | pl.title('Image.2').pl.tight_lay |
17720 | 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()...######################## |
17740 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
17760 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 49 6e 73 74 61 6e 74 | ######################.#.Instant |
17780 | 69 61 74 65 20 74 68 65 20 64 69 66 66 65 72 65 6e 74 20 74 72 61 6e 73 70 6f 72 74 20 61 6c 67 | iate.the.different.transport.alg |
177a0 | 6f 72 69 74 68 6d 73 20 61 6e 64 20 66 69 74 20 74 68 65 6d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d | orithms.and.fit.them.#.--------- |
177c0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
177e0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 20 45 4d 44 54 72 61 6e 73 70 6f | ------------------..#.EMDTranspo |
17800 | 72 74 0a 6f 74 5f 65 6d 64 20 3d 20 6f 74 2e 64 61 2e 45 4d 44 54 72 61 6e 73 70 6f 72 74 28 29 | rt.ot_emd.=.ot.da.EMDTransport() |
17820 | 0a 6f 74 5f 65 6d 64 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 53 69 6e | .ot_emd.fit(Xs=Xs,.Xt=Xt)..#.Sin |
17840 | 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 2e | khornTransport.ot_sinkhorn.=.ot. |
17860 | 64 61 2e 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 28 72 65 67 5f 65 3d 31 65 2d 31 29 | da.SinkhornTransport(reg_e=1e-1) |
17880 | 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a | .ot_sinkhorn.fit(Xs=Xs,.Xt=Xt).. |
178a0 | 23 20 70 72 65 64 69 63 74 69 6f 6e 20 62 65 74 77 65 65 6e 20 69 6d 61 67 65 73 20 28 75 73 69 | #.prediction.between.images.(usi |
178c0 | 6e 67 20 6f 75 74 20 6f 66 20 73 61 6d 70 6c 65 20 70 72 65 64 69 63 74 69 6f 6e 20 61 73 20 69 | ng.out.of.sample.prediction.as.i |
178e0 | 6e 20 5b 36 5d 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 | n.[6]).transp_Xs_emd.=.ot_emd.tr |
17900 | 61 6e 73 66 6f 72 6d 28 58 73 3d 58 31 29 0a 74 72 61 6e 73 70 5f 58 74 5f 65 6d 64 20 3d 20 6f | ansform(Xs=X1).transp_Xt_emd.=.o |
17920 | 74 5f 65 6d 64 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 | t_emd.inverse_transform(Xt=X2).. |
17940 | 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 5f 73 69 6e 6b 68 6f 72 6e | transp_Xs_sinkhorn.=.ot_sinkhorn |
17960 | 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 31 29 0a 74 72 61 6e 73 70 5f 58 74 5f 73 69 6e 6b | .transform(Xs=X1).transp_Xt_sink |
17980 | 68 6f 72 6e 20 3d 20 6f 74 5f 73 69 6e 6b 68 6f 72 6e 2e 69 6e 76 65 72 73 65 5f 74 72 61 6e 73 | horn.=.ot_sinkhorn.inverse_trans |
179a0 | 66 6f 72 6d 28 58 74 3d 58 32 29 0a 0a 49 31 74 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d | form(Xt=X2)..I1t.=.minmax(mat2im |
179c0 | 28 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 2c 20 49 31 2e 73 68 61 70 65 29 29 0a 49 32 74 20 3d | (transp_Xs_emd,.I1.shape)).I2t.= |
179e0 | 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 74 72 61 6e 73 70 5f 58 74 5f 65 6d 64 2c 20 49 32 | .minmax(mat2im(transp_Xt_emd,.I2 |
17a00 | 2e 73 68 61 70 65 29 29 0a 0a 49 31 74 65 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 74 | .shape))..I1te.=.minmax(mat2im(t |
17a20 | 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 2c 20 49 31 2e 73 68 61 70 65 29 29 0a 49 32 | ransp_Xs_sinkhorn,.I1.shape)).I2 |
17a40 | 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 74 5f 73 69 6e | te.=.minmax(mat2im(transp_Xt_sin |
17a60 | 6b 68 6f 72 6e 2c 20 49 32 2e 73 68 61 70 65 29 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 | khorn,.I2.shape))...############ |
17a80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
17aa0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
17ac0 | 23 23 0a 23 20 50 6c 6f 74 20 6e 65 77 20 69 6d 61 67 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d | ##.#.Plot.new.images.#.--------- |
17ae0 | 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 33 2c 20 66 69 67 73 69 7a 65 3d 28 38 2c | ------..pl.figure(3,.figsize=(8, |
17b00 | 20 34 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 31 29 0a 70 6c 2e 69 6d 73 | .4))..pl.subplot(2,.3,.1).pl.ims |
17b20 | 68 6f 77 28 49 31 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 | how(I1).pl.axis('off').pl.title( |
17b40 | 27 49 6d 61 67 65 20 31 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 32 29 0a | 'Image.1')..pl.subplot(2,.3,.2). |
17b60 | 70 6c 2e 69 6d 73 68 6f 77 28 49 31 74 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c | pl.imshow(I1t).pl.axis('off').pl |
17b80 | 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 31 20 41 64 61 70 74 27 29 0a 0a 70 6c 2e 73 75 62 70 | .title('Image.1.Adapt')..pl.subp |
17ba0 | 6c 6f 74 28 32 2c 20 33 2c 20 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 74 65 29 0a 70 6c 2e | lot(2,.3,.3).pl.imshow(I1te).pl. |
17bc0 | 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 31 20 41 64 | axis('off').pl.title('Image.1.Ad |
17be0 | 61 70 74 20 28 72 65 67 29 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 34 29 | apt.(reg)')..pl.subplot(2,.3,.4) |
17c00 | 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c | .pl.imshow(I2).pl.axis('off').pl |
17c20 | 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 32 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c | .title('Image.2')..pl.subplot(2, |
17c40 | 20 33 2c 20 35 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 74 29 0a 70 6c 2e 61 78 69 73 28 27 6f | .3,.5).pl.imshow(I2t).pl.axis('o |
17c60 | 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 27 29 0a 0a | ff').pl.title('Image.2.Adapt').. |
17c80 | 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 36 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 | pl.subplot(2,.3,.6).pl.imshow(I2 |
17ca0 | 74 65 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 | te).pl.axis('off').pl.title('Ima |
17cc0 | 67 65 20 32 20 41 64 61 70 74 20 28 72 65 67 29 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f | ge.2.Adapt.(reg)').pl.tight_layo |
17ce0 | 75 74 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 01 02 14 03 14 00 00 00 00 00 da 74 d9 4e | ut()..pl.show().PK...........t.N |
17d00 | 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 00 00 00 00 70 6c | ..............................pl |
17d20 | 6f 74 5f 55 4f 54 5f 31 44 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 da 74 d9 4e c6 3b 52 da | ot_UOT_1D.pyPK...........t.N.;R. |
17d40 | f3 0a 00 00 f3 0a 00 00 0e 00 00 00 00 00 00 00 00 00 00 00 b4 81 bd 06 00 00 70 6c 6f 74 5f 67 | ..........................plot_g |
17d60 | 72 6f 6d 6f 76 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 da 74 d9 4e a4 4f 47 3f 0c 0c 00 00 | romov.pyPK...........t.N.OG?.... |
17d80 | 0c 0c 00 00 0b 00 00 00 00 00 00 00 00 00 00 00 b4 81 dc 11 00 00 70 6c 6f 74 5f 57 44 41 2e 70 | ......................plot_WDA.p |
17da0 | 79 50 4b 01 02 14 03 14 00 00 00 00 00 dc 74 d9 4e e5 d4 47 7d 9d 1c 00 00 9d 1c 00 00 19 00 00 | yPK...........t.N..G}........... |
17dc0 | 00 00 00 00 00 00 00 00 00 b4 81 11 1e 00 00 70 6c 6f 74 5f 67 72 6f 6d 6f 76 5f 62 61 72 79 63 | ...............plot_gromov_baryc |
17de0 | 65 6e 74 65 72 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 da 74 d9 4e b8 cd f6 1b 7e 0b 00 00 | enter.pyPK...........t.N....~... |
17e00 | 7e 0b 00 00 13 00 00 00 00 00 00 00 00 00 00 00 b4 81 e5 3a 00 00 70 6c 6f 74 5f 6f 70 74 69 6d | ~..................:..plot_optim |
17e20 | 5f 4f 54 72 65 67 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 db 74 d9 4e 39 06 7c 60 0c 15 00 | _OTreg.pyPK...........t.N9.|`... |
17e40 | 00 0c 15 00 00 0f 00 00 00 00 00 00 00 00 00 00 00 b4 81 94 46 00 00 70 6c 6f 74 5f 6f 74 64 61 | ....................F..plot_otda |
17e60 | 5f 64 32 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 db 74 d9 4e 71 12 0d cb 23 12 00 00 23 12 | _d2.pyPK...........t.Nq...#...#. |
17e80 | 00 00 1c 00 00 00 00 00 00 00 00 00 00 00 b4 81 cd 5b 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 73 65 | .................[..plot_otda_se |
17ea0 | 6d 69 5f 73 75 70 65 72 76 69 73 65 64 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 da 74 d9 4e | mi_supervised.pyPK...........t.N |
17ec0 | 0b 5c 2a af a2 06 00 00 a2 06 00 00 0d 00 00 00 00 00 00 00 00 00 00 00 b4 81 2a 6e 00 00 70 6c | .\*.......................*n..pl |
17ee0 | 6f 74 5f 4f 54 5f 31 44 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 db 74 d9 4e 6d 8a 53 18 e2 | ot_OT_1D.pyPK...........t.Nm.S.. |
17f00 | 17 00 00 e2 17 00 00 12 00 00 00 00 00 00 00 00 00 00 00 b4 81 f7 74 00 00 70 6c 6f 74 5f 73 74 | ......................t..plot_st |
17f20 | 6f 63 68 61 73 74 69 63 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 db 74 d9 4e f2 7c 7e 9e 5c | ochastic.pyPK...........t.N.|~.\ |
17f40 | 0e 00 00 5c 0e 00 00 15 00 00 00 00 00 00 00 00 00 00 00 b4 81 09 8d 00 00 70 6c 6f 74 5f 62 61 | ...\.....................plot_ba |
17f60 | 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 db 74 d9 4e b0 31 | rycenter_1D.pyPK...........t.N.1 |
17f80 | 70 de ee 10 00 00 ee 10 00 00 14 00 00 00 00 00 00 00 00 00 00 00 b4 81 98 9b 00 00 70 6c 6f 74 | p...........................plot |
17fa0 | 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 da 74 d9 4e | _otda_classes.pyPK...........t.N |
17fc0 | 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 b8 ac 00 00 70 6c | ...x..........................pl |
17fe0 | 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 db 74 | ot_OT_1D_smooth.pyPK...........t |
18000 | d9 4e b0 ed ff 28 54 10 00 00 54 10 00 00 22 00 00 00 00 00 00 00 00 00 00 00 b4 81 c7 b5 00 00 | .N...(T...T..."................. |
18020 | 70 6c 6f 74 5f 6f 74 64 61 5f 6d 61 70 70 69 6e 67 5f 63 6f 6c 6f 72 73 5f 69 6d 61 67 65 73 2e | plot_otda_mapping_colors_images. |
18040 | 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 da 74 d9 4e 90 0c 61 ee fa 07 00 00 fa 07 00 00 1f 00 | pyPK...........t.N..a........... |
18060 | 00 00 00 00 00 00 00 00 00 00 b4 81 5b c6 00 00 70 6c 6f 74 5f 66 72 65 65 5f 73 75 70 70 6f 72 | ............[...plot_free_suppor |
18080 | 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 db 74 d9 4e e5 | t_barycenter.pyPK...........t.N. |
180a0 | 5f 4e 9c 14 11 00 00 14 11 00 00 0b 00 00 00 00 00 00 00 00 00 00 00 b4 81 92 ce 00 00 70 6c 6f | _N...........................plo |
180c0 | 74 5f 66 67 77 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 db 74 d9 4e ea 88 04 1c d5 18 00 00 | t_fgw.pyPK...........t.N........ |
180e0 | d5 18 00 00 16 00 00 00 00 00 00 00 00 00 00 00 b4 81 cf df 00 00 70 6c 6f 74 5f 62 61 72 79 63 | ......................plot_baryc |
18100 | 65 6e 74 65 72 5f 66 67 77 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 db 74 d9 4e 6f 6c 58 5b | enter_fgw.pyPK...........t.NolX[ |
18120 | 88 13 00 00 88 13 00 00 13 00 00 00 00 00 00 00 00 00 00 00 b4 81 d8 f8 00 00 70 6c 6f 74 5f 4f | ..........................plot_O |
18140 | 54 5f 4c 31 5f 76 73 5f 4c 32 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 db 74 d9 4e a6 16 4e | T_L1_vs_L2.pyPK...........t.N..N |
18160 | 83 2e 17 00 00 2e 17 00 00 21 00 00 00 00 00 00 00 00 00 00 00 b4 81 91 0c 01 00 70 6c 6f 74 5f | .........!.................plot_ |
18180 | 62 61 72 79 63 65 6e 74 65 72 5f 6c 70 5f 76 73 5f 65 6e 74 72 6f 70 69 63 2e 70 79 50 4b 01 02 | barycenter_lp_vs_entropic.pyPK.. |
181a0 | 14 03 14 00 00 00 00 00 db 74 d9 4e a7 6b f0 c3 bf 0b 00 00 bf 0b 00 00 15 00 00 00 00 00 00 00 | .........t.N.k.................. |
181c0 | 00 00 00 00 b4 81 fe 23 01 00 70 6c 6f 74 5f 4f 54 5f 32 44 5f 73 61 6d 70 6c 65 73 2e 70 79 50 | .......#..plot_OT_2D_samples.pyP |
181e0 | 4b 01 02 14 03 14 00 00 00 00 00 da 74 d9 4e 0e e0 72 82 97 0b 00 00 97 0b 00 00 1b 00 00 00 00 | K...........t.N..r.............. |
18200 | 00 00 00 00 00 00 00 b4 81 f0 2f 01 00 70 6c 6f 74 5f 6f 74 64 61 5f 6c 69 6e 65 61 72 5f 6d 61 | ........../..plot_otda_linear_ma |
18220 | 70 70 69 6e 67 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 db 74 d9 4e cd ad d9 82 f4 0f 00 00 | pping.pyPK...........t.N........ |
18240 | f4 0f 00 00 14 00 00 00 00 00 00 00 00 00 00 00 b4 81 c0 3b 01 00 70 6c 6f 74 5f 6f 74 64 61 5f | ...................;..plot_otda_ |
18260 | 6d 61 70 70 69 6e 67 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 da 74 d9 4e 7a 2e b5 2b 65 09 | mapping.pyPK...........t.Nz..+e. |
18280 | 00 00 65 09 00 00 13 00 00 00 00 00 00 00 00 00 00 00 b4 81 e6 4b 01 00 70 6c 6f 74 5f 63 6f 6d | ..e..................K..plot_com |
182a0 | 70 75 74 65 5f 65 6d 64 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 da 74 d9 4e d1 a8 d7 2e a9 | pute_emd.pyPK...........t.N..... |
182c0 | 09 00 00 a9 09 00 00 20 00 00 00 00 00 00 00 00 00 00 00 b4 81 7c 55 01 00 70 6c 6f 74 5f 63 6f | .....................|U..plot_co |
182e0 | 6e 76 6f 6c 75 74 69 6f 6e 61 6c 5f 62 61 72 79 63 65 6e 74 65 72 2e 70 79 50 4b 01 02 14 03 14 | nvolutional_barycenter.pyPK..... |
18300 | 00 00 00 00 00 db 74 d9 4e 20 57 90 f6 08 0f 00 00 08 0f 00 00 19 00 00 00 00 00 00 00 00 00 00 | ......t.N.W..................... |
18320 | 00 b4 81 63 5f 01 00 70 6c 6f 74 5f 55 4f 54 5f 62 61 72 79 63 65 6e 74 65 72 5f 31 44 2e 70 79 | ...c_..plot_UOT_barycenter_1D.py |
18340 | 50 4b 01 02 14 03 14 00 00 00 00 00 db 74 d9 4e f4 37 b2 97 17 0e 00 00 17 0e 00 00 19 00 00 00 | PK...........t.N.7.............. |
18360 | 00 00 00 00 00 00 00 00 b4 81 a2 6e 01 00 70 6c 6f 74 5f 6f 74 64 61 5f 63 6f 6c 6f 72 5f 69 6d | ...........n..plot_otda_color_im |
18380 | 61 67 65 73 2e 70 79 50 4b 05 06 00 00 00 00 19 00 19 00 97 06 00 00 f0 7c 01 00 00 00 | ages.pyPK...............|.... |