ofs | hex dump | ascii |
---|
0000 | 50 4b 03 04 14 00 00 00 00 00 0b 88 21 4b f7 3c 08 36 45 0f 00 00 45 0f 00 00 15 00 00 00 70 6c | PK..........!K.<.6E...E.......pl |
0020 | 6f 74 5f 62 61 72 79 63 65 6e 74 65 72 5f 31 44 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a | ot_barycenter_1D.py#.-*-.coding: |
0040 | 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | .utf-8.-*-.""".================= |
0060 | 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 20 62 61 72 | =============.1D.Wasserstein.bar |
0080 | 79 63 65 6e 74 65 72 20 64 65 6d 6f 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ycenter.demo.=================== |
00a0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 6c 6c 75 73 74 | ===========..This.example.illust |
00c0 | 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 72 65 67 75 6c 61 72 | rates.the.computation.of.regular |
00e0 | 69 7a 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 | ized.Wassersyein.Barycenter.as.p |
0100 | 72 6f 70 6f 73 65 64 20 69 6e 20 5b 33 5d 2e 0a 0a 0a 5b 33 5d 20 42 65 6e 61 6d 6f 75 2c 20 4a | roposed.in.[3]....[3].Benamou,.J |
0120 | 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 20 4e | ..D.,.Carlier,.G.,.Cuturi,.M.,.N |
0140 | 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 0a 49 | enna,.L.,.&.Peyr..,.G..(2015)..I |
0160 | 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 6f 72 | terative.Bregman.projections.for |
0180 | 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 6f 62 | .regularized.transportation.prob |
01a0 | 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 63 20 | lems.SIAM.Journal.on.Scientific. |
01c0 | 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 0a 0a | Computing,.37(2),.A1111-A1138... |
01e0 | 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d | """..#.Author:.Remi.Flamary.<rem |
0200 | 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a | i.flamary@unice.fr>.#.#.License: |
0220 | 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 | .MIT.License..import.numpy.as.np |
0240 | 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 | .import.matplotlib.pylab.as.pl.i |
0260 | 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 6f 74 | mport.ot.#.necessary.for.3d.plot |
0280 | 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 6c 6b | .even.if.not.used.from.mpl_toolk |
02a0 | 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 6f 71 | its.mplot3d.import.Axes3D..#.noq |
02c0 | 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 69 6d | a.from.matplotlib.collections.im |
02e0 | 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 23 23 23 23 23 23 | port.PolyCollection..########### |
0300 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
0320 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
0340 | 23 23 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 23 23 23 23 23 23 23 23 23 23 23 | ###.#.Generate.data.############ |
0360 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
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 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 6e 20 3d 20 31 30 30 20 20 23 20 6e | ##..#%%.parameters..n.=.100..#.n |
03c0 | 62 20 62 69 6e 73 0a 0a 23 20 62 69 6e 20 70 6f 73 69 74 69 6f 6e 73 0a 78 20 3d 20 6e 70 2e 61 | b.bins..#.bin.positions.x.=.np.a |
03e0 | 72 61 6e 67 65 28 6e 2c 20 64 74 79 70 65 3d 6e 70 2e 66 6c 6f 61 74 36 34 29 0a 0a 23 20 47 61 | range(n,.dtype=np.float64)..#.Ga |
0400 | 75 73 73 69 61 6e 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 61 31 20 3d 20 6f 74 2e 64 61 74 | ussian.distributions.a1.=.ot.dat |
0420 | 61 73 65 74 73 2e 67 65 74 5f 31 44 5f 67 61 75 73 73 28 6e 2c 20 6d 3d 32 30 2c 20 73 3d 35 29 | asets.get_1D_gauss(n,.m=20,.s=5) |
0440 | 20 20 23 20 6d 3d 20 6d 65 61 6e 2c 20 73 3d 20 73 74 64 0a 61 32 20 3d 20 6f 74 2e 64 61 74 61 | ..#.m=.mean,.s=.std.a2.=.ot.data |
0460 | 73 65 74 73 2e 67 65 74 5f 31 44 5f 67 61 75 73 73 28 6e 2c 20 6d 3d 36 30 2c 20 73 3d 38 29 0a | sets.get_1D_gauss(n,.m=60,.s=8). |
0480 | 0a 23 20 63 72 65 61 74 69 6e 67 20 6d 61 74 72 69 78 20 41 20 63 6f 6e 74 61 69 6e 69 6e 67 20 | .#.creating.matrix.A.containing. |
04a0 | 61 6c 6c 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 41 20 3d 20 6e 70 2e 76 73 74 61 63 6b 28 | all.distributions.A.=.np.vstack( |
04c0 | 28 61 31 2c 20 61 32 29 29 2e 54 0a 6e 5f 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 3d 20 41 2e | (a1,.a2)).T.n_distributions.=.A. |
04e0 | 73 68 61 70 65 5b 31 5d 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 20 2b 20 6e 6f 72 6d 61 6c | shape[1]..#.loss.matrix.+.normal |
0500 | 69 7a 61 74 69 6f 6e 0a 4d 20 3d 20 6f 74 2e 75 74 69 6c 73 2e 64 69 73 74 30 28 6e 29 0a 4d 20 | ization.M.=.ot.utils.dist0(n).M. |
0520 | 2f 3d 20 4d 2e 6d 61 78 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | /=.M.max()..#################### |
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 0a 23 20 50 6c 6f | ##########################.#.Plo |
0580 | 74 20 64 61 74 61 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | t.data.######################### |
05a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
05c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23 25 25 20 70 6c 6f 74 20 | #####################..#%%.plot. |
05e0 | 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 | the.distributions..pl.figure(1,. |
0600 | 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 61 6e 67 65 | figsize=(6.4,.3)).for.i.in.range |
0620 | 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 78 | (n_distributions):.....pl.plot(x |
0640 | 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 6f | ,.A[:,.i]).pl.title('Distributio |
0660 | 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 23 23 23 23 | ns').pl.tight_layout()..######## |
0680 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
06a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
06c0 | 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 69 6f 6e 0a | ######.#.Barycenter.computation. |
06e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
0700 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
0720 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23 25 25 20 62 61 72 79 63 65 6e 74 65 72 20 63 | ##############..#%%.barycenter.c |
0740 | 6f 6d 70 75 74 61 74 69 6f 6e 0a 0a 61 6c 70 68 61 20 3d 20 30 2e 32 20 20 23 20 30 3c 3d 61 6c | omputation..alpha.=.0.2..#.0<=al |
0760 | 70 68 61 3c 3d 31 0a 77 65 69 67 68 74 73 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 31 20 2d 20 61 | pha<=1.weights.=.np.array([1.-.a |
0780 | 6c 70 68 61 2c 20 61 6c 70 68 61 5d 29 0a 0a 23 20 6c 32 62 61 72 79 0a 62 61 72 79 5f 6c 32 20 | lpha,.alpha])..#.l2bary.bary_l2. |
07a0 | 3d 20 41 2e 64 6f 74 28 77 65 69 67 68 74 73 29 0a 0a 23 20 77 61 73 73 65 72 73 74 65 69 6e 0a | =.A.dot(weights)..#.wasserstein. |
07c0 | 72 65 67 20 3d 20 31 65 2d 33 0a 62 61 72 79 5f 77 61 73 73 20 3d 20 6f 74 2e 62 72 65 67 6d 61 | reg.=.1e-3.bary_wass.=.ot.bregma |
07e0 | 6e 2e 62 61 72 79 63 65 6e 74 65 72 28 41 2c 20 4d 2c 20 72 65 67 2c 20 77 65 69 67 68 74 73 29 | n.barycenter(A,.M,.reg,.weights) |
0800 | 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 |
0820 | 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 |
0840 | 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[:, |
0860 | 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').. |
0880 | 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 |
08a0 | 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 |
08c0 | 28 78 2c 20 62 61 72 79 5f 77 61 73 73 2c 20 27 67 27 2c 20 6c 61 62 65 6c 3d 27 57 61 73 73 65 | (x,.bary_wass,.'g',.label='Wasse |
08e0 | 72 73 74 65 69 6e 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 29 0a 70 6c 2e 74 69 74 6c 65 28 27 42 | rstein').pl.legend().pl.title('B |
0900 | 61 72 79 63 65 6e 74 65 72 73 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a | arycenters').pl.tight_layout().. |
0920 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
0940 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
0960 | 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 72 69 63 20 69 6e 74 | ##############.#.Barycentric.int |
0980 | 65 72 70 6f 6c 61 74 69 6f 6e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | erpolation.##################### |
09a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
09c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23 25 25 20 62 | #########################..#%%.b |
09e0 | 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 |
0a00 | 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 |
0a20 | 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( |
0a40 | 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( |
0a60 | 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 |
0a80 | 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].... |
0aa0 | 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,. |
0ac0 | 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 |
0ae0 | 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 |
0b00 | 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 |
0b20 | 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 |
0b40 | 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 |
0b60 | 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 |
0b80 | 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 |
0ba0 | 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 |
0bc0 | 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.=. |
0be0 | 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 |
0c00 | 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 |
0c20 | 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 |
0c40 | 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 |
0c60 | 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= |
0c80 | 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 |
0ca0 | 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 |
0cc0 | 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 |
0ce0 | 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_ |
0d00 | 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 |
0d20 | 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 |
0d40 | 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 |
0d60 | 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 |
0d80 | 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, |
0da0 | 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_ |
0dc0 | 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 |
0de0 | 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 |
0e00 | 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 |
0e20 | 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 |
0e40 | 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 |
0e60 | 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 |
0e80 | 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_ |
0ea0 | 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). |
0ec0 | 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 |
0ee0 | 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('') |
0f00 | 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 |
0f20 | 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 |
0f40 | 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 |
0f60 | 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...... |
0f80 | 00 00 0b 88 21 4b 0a 2e ad 80 b8 10 00 00 b8 10 00 00 14 00 00 00 70 6c 6f 74 5f 6f 74 64 61 5f | ....!K................plot_otda_ |
0fa0 | 6d 61 70 70 69 6e 67 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a | mapping.py#.-*-.coding:.utf-8.-* |
0fc0 | 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 | -.""".========================== |
0fe0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4f 54 20 6d 61 70 70 69 6e 67 20 65 73 74 | =================.OT.mapping.est |
1000 | 69 6d 61 74 69 6f 6e 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 | imation.for.domain.adaptation.== |
1020 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
1040 | 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 73 65 6e 74 73 | =========..This.example.presents |
1060 | 20 68 6f 77 20 74 6f 20 75 73 65 20 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 20 74 6f 20 | .how.to.use.MappingTransport.to. |
1080 | 65 73 74 69 6d 61 74 65 20 61 74 20 74 68 65 20 73 61 6d 65 0a 74 69 6d 65 20 62 6f 74 68 20 74 | estimate.at.the.same.time.both.t |
10a0 | 68 65 20 63 6f 75 70 6c 69 6e 67 20 74 72 61 6e 73 70 6f 72 74 20 61 6e 64 20 61 70 70 72 6f 78 | he.coupling.transport.and.approx |
10c0 | 69 6d 61 74 65 20 74 68 65 20 74 72 61 6e 73 70 6f 72 74 20 6d 61 70 20 77 69 74 68 20 65 69 74 | imate.the.transport.map.with.eit |
10e0 | 68 65 72 0a 61 20 6c 69 6e 65 61 72 20 6f 72 20 61 20 6b 65 72 6e 65 6c 69 7a 65 64 20 6d 61 70 | her.a.linear.or.a.kernelized.map |
1100 | 70 69 6e 67 20 61 73 20 69 6e 74 72 6f 64 75 63 65 64 20 69 6e 20 5b 38 5d 2e 0a 0a 5b 38 5d 20 | ping.as.introduced.in.[8]...[8]. |
1120 | 4d 2e 20 50 65 72 72 6f 74 2c 20 4e 2e 20 43 6f 75 72 74 79 2c 20 52 2e 20 46 6c 61 6d 61 72 79 | M..Perrot,.N..Courty,.R..Flamary |
1140 | 2c 20 41 2e 20 48 61 62 72 61 72 64 2c 0a 20 20 20 20 22 4d 61 70 70 69 6e 67 20 65 73 74 69 6d | ,.A..Habrard,....."Mapping.estim |
1160 | 61 74 69 6f 6e 20 66 6f 72 20 64 69 73 63 72 65 74 65 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 | ation.for.discrete.optimal.trans |
1180 | 70 6f 72 74 22 2c 0a 20 20 20 20 4e 65 75 72 61 6c 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 50 72 | port",.....Neural.Information.Pr |
11a0 | 6f 63 65 73 73 69 6e 67 20 53 79 73 74 65 6d 73 20 28 4e 49 50 53 29 2c 20 32 30 31 36 2e 0a 22 | ocessing.Systems.(NIPS),.2016.." |
11c0 | 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 65 6d | ""..#.Authors:.Remi.Flamary.<rem |
11e0 | 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 20 53 | i.flamary@unice.fr>.#..........S |
1200 | 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 40 67 | tanislas.Chambon.<stan.chambon@g |
1220 | 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 65 6e | mail.com>.#.#.License:.MIT.Licen |
1240 | 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 | se..import.numpy.as.np.import.ma |
1260 | 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.. |
1280 | 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 | .############################### |
12a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
12c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a | ###############.#.Generate.data. |
12e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
1300 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
1320 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 6e 5f 73 6f 75 72 63 65 5f 73 61 6d 70 6c 65 73 | ##############..n_source_samples |
1340 | 20 3d 20 31 30 30 0a 6e 5f 74 61 72 67 65 74 5f 73 61 6d 70 6c 65 73 20 3d 20 31 30 30 0a 74 68 | .=.100.n_target_samples.=.100.th |
1360 | 65 74 61 20 3d 20 32 20 2a 20 6e 70 2e 70 69 20 2f 20 32 30 0a 6e 6f 69 73 65 5f 6c 65 76 65 6c | eta.=.2.*.np.pi./.20.noise_level |
1380 | 20 3d 20 30 2e 31 0a 0a 58 73 2c 20 79 73 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 | .=.0.1..Xs,.ys.=.ot.datasets.get |
13a0 | 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 6e | _data_classif(.....'gaussrot',.n |
13c0 | 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 5f 6c 65 76 65 6c 29 | _source_samples,.nz=noise_level) |
13e0 | 0a 58 73 5f 6e 65 77 2c 20 5f 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 64 61 74 | .Xs_new,._.=.ot.datasets.get_dat |
1400 | 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 6e 5f 73 6f 75 | a_classif(.....'gaussrot',.n_sou |
1420 | 72 63 65 5f 73 61 6d 70 6c 65 73 2c 20 6e 7a 3d 6e 6f 69 73 65 5f 6c 65 76 65 6c 29 0a 58 74 2c | rce_samples,.nz=noise_level).Xt, |
1440 | 20 79 74 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 64 61 74 61 5f 63 6c 61 73 73 | .yt.=.ot.datasets.get_data_class |
1460 | 69 66 28 0a 20 20 20 20 27 67 61 75 73 73 72 6f 74 27 2c 20 6e 5f 74 61 72 67 65 74 5f 73 61 6d | if(.....'gaussrot',.n_target_sam |
1480 | 70 6c 65 73 2c 20 74 68 65 74 61 3d 74 68 65 74 61 2c 20 6e 7a 3d 6e 6f 69 73 65 5f 6c 65 76 65 | ples,.theta=theta,.nz=noise_leve |
14a0 | 6c 29 0a 0a 23 20 6f 6e 65 20 6f 66 20 74 68 65 20 74 61 72 67 65 74 20 6d 6f 64 65 20 63 68 61 | l)..#.one.of.the.target.mode.cha |
14c0 | 6e 67 65 73 20 69 74 73 20 76 61 72 69 61 6e 63 65 20 28 6e 6f 20 6c 69 6e 65 61 72 20 6d 61 70 | nges.its.variance.(no.linear.map |
14e0 | 70 69 6e 67 29 0a 58 74 5b 79 74 20 3d 3d 20 32 5d 20 2a 3d 20 33 0a 58 74 20 3d 20 58 74 20 2b | ping).Xt[yt.==.2].*=.3.Xt.=.Xt.+ |
1500 | 20 34 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 | .4..############################ |
1520 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
1540 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 64 61 74 61 0a 23 | ##################.#.Plot.data.# |
1560 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
1580 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
15a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 28 31 30 2c | #############..pl.figure(1,.(10, |
15c0 | 20 35 29 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 73 5b 3a 2c 20 30 | .5)).pl.clf().pl.scatter(Xs[:,.0 |
15e0 | 5d 2c 20 58 73 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c | ],.Xs[:,.1],.c=ys,.marker='+',.l |
1600 | 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 73 63 61 74 74 65 | abel='Source.samples').pl.scatte |
1620 | 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 |
1640 | 65 72 3d 27 6f 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a | er='o',.label='Target.samples'). |
1660 | 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 |
1680 | 65 20 61 6e 64 20 74 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 0a 23 | e.and.target.distributions')...# |
16a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
16c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
16e0 | 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. |
1700 | 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 |
1720 | 6e 64 20 66 69 74 20 74 68 65 6d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | nd.fit.them.#################### |
1740 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
1760 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23 20 4d 61 | ##########################..#.Ma |
1780 | 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 20 77 69 74 68 20 6c 69 6e 65 61 72 20 6b 65 72 6e 65 | ppingTransport.with.linear.kerne |
17a0 | 6c 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 20 3d 20 6f 74 2e 64 61 2e 4d 61 70 70 | l.ot_mapping_linear.=.ot.da.Mapp |
17c0 | 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 6c 69 6e 65 61 72 | ingTransport(.....kernel="linear |
17e0 | 22 2c 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 0a | ",.mu=1e0,.eta=1e-8,.bias=True,. |
1800 | 20 20 20 20 6d 61 78 5f 69 74 65 72 3d 32 30 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 0a | ....max_iter=20,.verbose=True).. |
1820 | 6f 74 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d | ot_mapping_linear.fit(Xs=Xs,.Xt= |
1840 | 58 74 29 0a 0a 23 20 66 6f 72 20 6f 72 69 67 69 6e 61 6c 20 73 6f 75 72 63 65 20 73 61 6d 70 6c | Xt)..#.for.original.source.sampl |
1860 | 65 73 2c 20 74 72 61 6e 73 66 6f 72 6d 20 61 70 70 6c 69 65 73 20 62 61 72 79 63 65 6e 74 72 69 | es,.transform.applies.barycentri |
1880 | 63 20 6d 61 70 70 69 6e 67 0a 74 72 61 6e 73 70 5f 58 73 5f 6c 69 6e 65 61 72 20 3d 20 6f 74 5f | c.mapping.transp_Xs_linear.=.ot_ |
18a0 | 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a | mapping_linear.transform(Xs=Xs). |
18c0 | 0a 23 20 66 6f 72 20 6f 75 74 20 6f 66 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 2c 20 74 72 | .#.for.out.of.source.samples,.tr |
18e0 | 61 6e 73 66 6f 72 6d 20 61 70 70 6c 69 65 73 20 74 68 65 20 6c 69 6e 65 61 72 20 6d 61 70 70 69 | ansform.applies.the.linear.mappi |
1900 | 6e 67 0a 74 72 61 6e 73 70 5f 58 73 5f 6c 69 6e 65 61 72 5f 6e 65 77 20 3d 20 6f 74 5f 6d 61 70 | ng.transp_Xs_linear_new.=.ot_map |
1920 | 70 69 6e 67 5f 6c 69 6e 65 61 72 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 5f 6e 65 77 29 | ping_linear.transform(Xs=Xs_new) |
1940 | 0a 0a 0a 23 20 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 20 77 69 74 68 20 67 61 75 73 73 | ...#.MappingTransport.with.gauss |
1960 | 69 61 6e 20 6b 65 72 6e 65 6c 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 67 61 75 73 73 69 61 6e 20 3d | ian.kernel.ot_mapping_gaussian.= |
1980 | 20 6f 74 2e 64 61 2e 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 28 0a 20 20 20 20 6b 65 72 | .ot.da.MappingTransport(.....ker |
19a0 | 6e 65 6c 3d 22 67 61 75 73 73 69 61 6e 22 2c 20 65 74 61 3d 31 65 2d 35 2c 20 6d 75 3d 31 65 2d | nel="gaussian",.eta=1e-5,.mu=1e- |
19c0 | 31 2c 20 62 69 61 73 3d 54 72 75 65 2c 20 73 69 67 6d 61 3d 31 2c 0a 20 20 20 20 6d 61 78 5f 69 | 1,.bias=True,.sigma=1,.....max_i |
19e0 | 74 65 72 3d 31 30 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 6f 74 5f 6d 61 70 70 69 6e 67 | ter=10,.verbose=True).ot_mapping |
1a00 | 5f 67 61 75 73 73 69 61 6e 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 66 | _gaussian.fit(Xs=Xs,.Xt=Xt)..#.f |
1a20 | 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 |
1a40 | 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 |
1a60 | 67 0a 74 72 61 6e 73 70 5f 58 73 5f 67 61 75 73 73 69 61 6e 20 3d 20 6f 74 5f 6d 61 70 70 69 6e | g.transp_Xs_gaussian.=.ot_mappin |
1a80 | 67 5f 67 61 75 73 73 69 61 6e 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 0a 23 20 66 | g_gaussian.transform(Xs=Xs)..#.f |
1aa0 | 6f 72 20 6f 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 | or.out.of.source.samples,.transf |
1ac0 | 6f 72 6d 20 61 70 70 6c 69 65 73 20 74 68 65 20 67 61 75 73 73 69 61 6e 20 6d 61 70 70 69 6e 67 | orm.applies.the.gaussian.mapping |
1ae0 | 0a 74 72 61 6e 73 70 5f 58 73 5f 67 61 75 73 73 69 61 6e 5f 6e 65 77 20 3d 20 6f 74 5f 6d 61 70 | .transp_Xs_gaussian_new.=.ot_map |
1b00 | 70 69 6e 67 5f 67 61 75 73 73 69 61 6e 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 5f 6e 65 | ping_gaussian.transform(Xs=Xs_ne |
1b20 | 77 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 | w)...########################### |
1b40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
1b60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 74 72 61 6e 73 | ###################.#.Plot.trans |
1b80 | 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ported.samples.################# |
1ba0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
1bc0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 70 | #############################..p |
1be0 | 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 28 | l.figure(2).pl.clf().pl.subplot( |
1c00 | 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 2c 20 58 74 | 2,.2,.1).pl.scatter(Xt[:,.0],.Xt |
1c20 | 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 20 | [:,.1],.c=yt,.marker='o',....... |
1c40 | 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 70 | .....label='Target.samples',.alp |
1c60 | 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 6e 65 | ha=.2).pl.scatter(transp_Xs_line |
1c80 | 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 2c 20 31 5d | ar[:,.0],.transp_Xs_linear[:,.1] |
1ca0 | 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 20 20 20 6c | ,.c=ys,.marker='+',............l |
1cc0 | 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 29 0a 70 6c | abel='Mapped.source.samples').pl |
1ce0 | 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 72 29 22 29 | .title("Bary..mapping.(linear)") |
1d00 | 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 74 28 32 2c | .pl.legend(loc=0)..pl.subplot(2, |
1d20 | 20 32 2c 20 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a | .2,.2).pl.scatter(Xt[:,.0],.Xt[: |
1d40 | 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 | ,.1],.c=yt,.marker='o',......... |
1d60 | 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 | ...label='Target.samples',.alpha |
1d80 | 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 6e 65 61 72 | =.2).pl.scatter(transp_Xs_linear |
1da0 | 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 5f 6e 65 77 | _new[:,.0],.transp_Xs_linear_new |
1dc0 | 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 6b 65 72 3d | [:,.1],............c=ys,.marker= |
1de0 | 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 29 0a 70 6c | '+',.label='Learned.mapping').pl |
1e00 | 2e 74 69 74 6c 65 28 22 45 73 74 69 6d 2e 20 6d 61 70 70 69 6e 67 20 28 6c 69 6e 65 61 72 29 22 | .title("Estim..mapping.(linear)" |
1e20 | 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 33 29 0a 70 6c 2e 73 63 61 74 74 65 | )..pl.subplot(2,.2,.3).pl.scatte |
1e40 | 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 |
1e60 | 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 |
1e80 | 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 2e 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 | .samples',.alpha=.2).pl.scatter( |
1ea0 | 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 61 6e 73 70 | transp_Xs_gaussian[:,.0],.transp |
1ec0 | 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 20 20 20 20 | _Xs_gaussian[:,.1],.c=ys,....... |
1ee0 | 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 63 65 6e 74 | .....marker='+',.label='barycent |
1f00 | 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 2e 20 6d 61 | ric.mapping').pl.title("Bary..ma |
1f20 | 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 28 32 2c 20 | pping.(kernel)")..pl.subplot(2,. |
1f40 | 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 74 5b 3a 2c | 2,.4).pl.scatter(Xt[:,.0],.Xt[:, |
1f60 | 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 | .1],.c=yt,.marker='o',.......... |
1f80 | 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d | ..label='Target.samples',.alpha= |
1fa0 | 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 73 73 69 61 | .2).pl.scatter(transp_Xs_gaussia |
1fc0 | 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 69 61 6e 5f | n_new[:,.0],.transp_Xs_gaussian_ |
1fe0 | 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 6d 61 72 6b | new[:,.1],.c=ys,............mark |
2000 | 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 29 | er='+',.label='Learned.mapping') |
2020 | 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 65 72 6e 65 | .pl.title("Estim..mapping.(kerne |
2040 | 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 68 6f 77 28 | l)").pl.tight_layout()..pl.show( |
2060 | 29 0a 50 4b 03 04 14 00 00 00 00 00 0b 88 21 4b b7 26 0b b3 8b 11 00 00 8b 11 00 00 14 00 00 00 | ).PK..........!K.&.............. |
2080 | 70 6c 6f 74 5f 6f 74 64 61 5f 63 6c 61 73 73 65 73 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 | plot_otda_classes.py#.-*-.coding |
20a0 | 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | :.utf-8.-*-.""".================ |
20c0 | 3d 3d 3d 3d 3d 3d 3d 3d 0a 4f 54 20 66 6f 72 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f | ========.OT.for.domain.adaptatio |
20e0 | 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 0a 0a 54 68 69 73 | n.========================..This |
2100 | 20 65 78 61 6d 70 6c 65 20 69 6e 74 72 6f 64 75 63 65 73 20 61 20 64 6f 6d 61 69 6e 20 61 64 61 | .example.introduces.a.domain.ada |
2120 | 70 74 61 74 69 6f 6e 20 69 6e 20 61 20 32 44 20 73 65 74 74 69 6e 67 20 61 6e 64 20 74 68 65 20 | ptation.in.a.2D.setting.and.the. |
2140 | 34 20 4f 54 44 41 0a 61 70 70 72 6f 61 63 68 65 73 20 63 75 72 72 65 6e 74 6c 79 20 73 75 70 70 | 4.OTDA.approaches.currently.supp |
2160 | 6f 72 74 65 64 20 69 6e 20 50 4f 54 2e 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 73 3a 20 52 | orted.in.POT..."""..#.Authors:.R |
2180 | 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. |
21a0 | 66 72 3e 0a 23 20 20 20 20 20 20 20 20 20 20 53 74 61 6e 69 73 6c 61 73 20 43 68 61 6d 62 6f 6e | fr>.#..........Stanislas.Chambon |
21c0 | 20 3c 73 74 61 6e 2e 63 68 61 6d 62 6f 6e 40 67 6d 61 69 6c 2e 63 6f 6d 3e 0a 23 0a 23 20 4c 69 | .<stan.chambon@gmail.com>.#.#.Li |
21e0 | 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 |
2200 | 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 0a 0a 23 23 | otlib.pylab.as.pl.import.ot...## |
2220 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
2240 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
2260 | 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 67 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 23 23 | ############.#.generate.data.### |
2280 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
22a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
22c0 | 23 23 23 23 23 23 23 23 23 23 23 0a 0a 6e 5f 73 6f 75 72 63 65 5f 73 61 6d 70 6c 65 73 20 3d 20 | ###########..n_source_samples.=. |
22e0 | 31 35 30 0a 6e 5f 74 61 72 67 65 74 5f 73 61 6d 70 6c 65 73 20 3d 20 31 35 30 0a 0a 58 73 2c 20 | 150.n_target_samples.=.150..Xs,. |
2300 | 79 73 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 64 61 74 61 5f 63 6c 61 73 73 69 | ys.=.ot.datasets.get_data_classi |
2320 | 66 28 27 33 67 61 75 73 73 27 2c 20 6e 5f 73 6f 75 72 63 65 5f 73 61 6d 70 6c 65 73 29 0a 58 74 | f('3gauss',.n_source_samples).Xt |
2340 | 2c 20 79 74 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 64 61 74 61 5f 63 6c 61 73 | ,.yt.=.ot.datasets.get_data_clas |
2360 | 73 69 66 28 27 33 67 61 75 73 73 32 27 2c 20 6e 5f 74 61 72 67 65 74 5f 73 61 6d 70 6c 65 73 29 | sif('3gauss2',.n_target_samples) |
2380 | 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 | ...############################# |
23a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
23c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 49 6e 73 74 61 6e 74 69 61 74 65 20 | #################.#.Instantiate. |
23e0 | 74 68 65 20 64 69 66 66 65 72 65 6e 74 20 74 72 61 6e 73 70 6f 72 74 20 61 6c 67 6f 72 69 74 68 | the.different.transport.algorith |
2400 | 6d 73 20 61 6e 64 20 66 69 74 20 74 68 65 6d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ms.and.fit.them.################ |
2420 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
2440 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a | ##############################.. |
2460 | 23 20 45 4d 44 20 54 72 61 6e 73 70 6f 72 74 0a 6f 74 5f 65 6d 64 20 3d 20 6f 74 2e 64 61 2e 45 | #.EMD.Transport.ot_emd.=.ot.da.E |
2480 | 4d 44 54 72 61 6e 73 70 6f 72 74 28 29 0a 6f 74 5f 65 6d 64 2e 66 69 74 28 58 73 3d 58 73 2c 20 | MDTransport().ot_emd.fit(Xs=Xs,. |
24a0 | 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 0a 6f 74 5f | Xt=Xt)..#.Sinkhorn.Transport.ot_ |
24c0 | 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f | sinkhorn.=.ot.da.SinkhornTranspo |
24e0 | 72 74 28 72 65 67 5f 65 3d 31 65 2d 31 29 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 2e 66 69 74 28 58 | rt(reg_e=1e-1).ot_sinkhorn.fit(X |
2500 | 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 70 6f | s=Xs,.Xt=Xt)..#.Sinkhorn.Transpo |
2520 | 72 74 20 77 69 74 68 20 47 72 6f 75 70 20 6c 61 73 73 6f 20 72 65 67 75 6c 61 72 69 7a 61 74 69 | rt.with.Group.lasso.regularizati |
2540 | 6f 6e 0a 6f 74 5f 6c 70 6c 31 20 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b 68 6f 72 6e 4c 70 6c 31 54 | on.ot_lpl1.=.ot.da.SinkhornLpl1T |
2560 | 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 31 65 30 29 | ransport(reg_e=1e-1,.reg_cl=1e0) |
2580 | 0a 6f 74 5f 6c 70 6c 31 2e 66 69 74 28 58 73 3d 58 73 2c 20 79 73 3d 79 73 2c 20 58 74 3d 58 74 | .ot_lpl1.fit(Xs=Xs,.ys=ys,.Xt=Xt |
25a0 | 29 0a 0a 23 20 53 69 6e 6b 68 6f 72 6e 20 54 72 61 6e 73 70 6f 72 74 20 77 69 74 68 20 47 72 6f | )..#.Sinkhorn.Transport.with.Gro |
25c0 | 75 70 20 6c 61 73 73 6f 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 20 6c 31 6c 32 0a 6f 74 5f | up.lasso.regularization.l1l2.ot_ |
25e0 | 6c 31 6c 32 20 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b 68 6f 72 6e 4c 31 6c 32 54 72 61 6e 73 70 6f | l1l2.=.ot.da.SinkhornL1l2Transpo |
2600 | 72 74 28 72 65 67 5f 65 3d 31 65 2d 31 2c 20 72 65 67 5f 63 6c 3d 32 65 30 2c 20 6d 61 78 5f 69 | rt(reg_e=1e-1,.reg_cl=2e0,.max_i |
2620 | 74 65 72 3d 32 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ter=20,......................... |
2640 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 6f 74 5f 6c | ..............verbose=True).ot_l |
2660 | 31 6c 32 2e 66 69 74 28 58 73 3d 58 73 2c 20 79 73 3d 79 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 | 1l2.fit(Xs=Xs,.ys=ys,.Xt=Xt)..#. |
2680 | 74 72 61 6e 73 70 6f 72 74 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 20 6f 6e 74 6f 20 74 61 | transport.source.samples.onto.ta |
26a0 | 72 67 65 74 20 73 61 6d 70 6c 65 73 0a 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 20 3d 20 6f 74 5f | rget.samples.transp_Xs_emd.=.ot_ |
26c0 | 65 6d 64 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 74 72 61 6e 73 70 5f 58 73 5f 73 | emd.transform(Xs=Xs).transp_Xs_s |
26e0 | 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 5f 73 69 6e 6b 68 6f 72 6e 2e 74 72 61 6e 73 66 6f 72 6d 28 | inkhorn.=.ot_sinkhorn.transform( |
2700 | 58 73 3d 58 73 29 0a 74 72 61 6e 73 70 5f 58 73 5f 6c 70 6c 31 20 3d 20 6f 74 5f 6c 70 6c 31 2e | Xs=Xs).transp_Xs_lpl1.=.ot_lpl1. |
2720 | 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 74 72 61 6e 73 70 5f 58 73 5f 6c 31 6c 32 20 | transform(Xs=Xs).transp_Xs_l1l2. |
2740 | 3d 20 6f 74 5f 6c 31 6c 32 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 0a 0a 23 23 23 | =.ot_l1l2.transform(Xs=Xs)...### |
2760 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
2780 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
27a0 | 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 67 20 31 20 3a 20 70 6c 6f 74 73 20 73 6f 75 72 | ###########.#.Fig.1.:.plots.sour |
27c0 | 63 65 20 61 6e 64 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 0a 23 23 23 23 23 23 23 23 23 23 | ce.and.target.samples.########## |
27e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
2800 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
2820 | 23 23 23 23 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 31 30 2c 20 | ####..pl.figure(1,.figsize=(10,. |
2840 | 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 61 74 74 | 5)).pl.subplot(1,.2,.1).pl.scatt |
2860 | 65 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 58 73 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 | er(Xs[:,.0],.Xs[:,.1],.c=ys,.mar |
2880 | 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 | ker='+',.label='Source.samples') |
28a0 | 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e | .pl.xticks([]).pl.yticks([]).pl. |
28c0 | 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 20 20 | legend(loc=0).pl.title('Source.. |
28e0 | 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 29 0a 70 | samples')..pl.subplot(1,.2,.2).p |
2900 | 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d | l.scatter(Xt[:,.0],.Xt[:,.1],.c= |
2920 | 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 | yt,.marker='o',.label='Target.sa |
2940 | 6d 70 6c 65 73 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 | mples').pl.xticks([]).pl.yticks( |
2960 | 5b 5d 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 | []).pl.legend(loc=0).pl.title('T |
2980 | 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 75 74 28 | arget.samples').pl.tight_layout( |
29a0 | 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | )...############################ |
29c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
29e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 67 20 32 20 3a 20 70 6c 6f | ##################.#.Fig.2.:.plo |
2a00 | 74 20 6f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 73 20 61 6e 64 20 74 72 61 6e 73 70 6f 72 | t.optimal.couplings.and.transpor |
2a20 | 74 65 64 20 73 61 6d 70 6c 65 73 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ted.samples.#################### |
2a40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
2a60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 70 61 72 61 | ##########################..para |
2a80 | 6d 5f 69 6d 67 20 3d 20 7b 27 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 27 3a 20 27 6e 65 61 72 65 | m_img.=.{'interpolation':.'neare |
2aa0 | 73 74 27 2c 20 27 63 6d 61 70 27 3a 20 27 73 70 65 63 74 72 61 6c 27 7d 0a 0a 70 6c 2e 66 69 67 | st',.'cmap':.'spectral'}..pl.fig |
2ac0 | 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 31 35 2c 20 38 29 29 0a 70 6c 2e 73 75 62 70 6c | ure(2,.figsize=(15,.8)).pl.subpl |
2ae0 | 6f 74 28 32 2c 20 34 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 65 6d 64 2e 63 6f 75 | ot(2,.4,.1).pl.imshow(ot_emd.cou |
2b00 | 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 73 28 5b | pling_,.**param_img).pl.xticks([ |
2b20 | 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 70 74 69 6d | ]).pl.yticks([]).pl.title('Optim |
2b40 | 61 6c 20 63 6f 75 70 6c 69 6e 67 5c 6e 45 4d 44 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e | al.coupling\nEMDTransport')..pl. |
2b60 | 73 75 62 70 6c 6f 74 28 32 2c 20 34 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 73 69 | subplot(2,.4,.2).pl.imshow(ot_si |
2b80 | 6e 6b 68 6f 72 6e 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 2a 2a 70 61 72 61 6d 5f 69 6d 67 29 0a 70 | nkhorn.coupling_,.**param_img).p |
2ba0 | 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 | l.xticks([]).pl.yticks([]).pl.ti |
2bc0 | 74 6c 65 28 27 4f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 5c 6e 53 69 6e 6b 68 6f 72 6e 54 | tle('Optimal.coupling\nSinkhornT |
2be0 | 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 34 2c 20 33 29 0a | ransport')..pl.subplot(2,.4,.3). |
2c00 | 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 6c 70 6c 31 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 2a 2a 70 | pl.imshow(ot_lpl1.coupling_,.**p |
2c20 | 61 72 61 6d 5f 69 6d 67 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b | aram_img).pl.xticks([]).pl.ytick |
2c40 | 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 | s([]).pl.title('Optimal.coupling |
2c60 | 5c 6e 53 69 6e 6b 68 6f 72 6e 4c 70 6c 31 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 | \nSinkhornLpl1Transport')..pl.su |
2c80 | 62 70 6c 6f 74 28 32 2c 20 34 2c 20 34 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 6c 31 6c 32 | bplot(2,.4,.4).pl.imshow(ot_l1l2 |
2ca0 | 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 2a 2a 70 61 72 61 6d 5f 69 6d 67 29 0a 70 6c 2e 78 74 69 63 | .coupling_,.**param_img).pl.xtic |
2cc0 | 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f | ks([]).pl.yticks([]).pl.title('O |
2ce0 | 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 31 6c 32 54 72 61 | ptimal.coupling\nSinkhornL1l2Tra |
2d00 | 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 35 29 0a 70 6c | nsport')..pl.subplot(2,.4,.5).pl |
2d20 | 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 |
2d40 | 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= |
2d60 | 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. |
2d80 | 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 5b 3a 2c 20 30 5d 2c 20 74 72 61 | scatter(transp_Xs_emd[:,.0],.tra |
2da0 | 6e 73 70 5f 58 73 5f 65 6d 64 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 | nsp_Xs_emd[:,.1],.c=ys,......... |
2dc0 | 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 61 6d | ...marker='+',.label='Transp.sam |
2de0 | 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 79 74 | ples',.s=30).pl.xticks([]).pl.yt |
2e00 | 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 20 73 | icks([]).pl.title('Transported.s |
2e20 | 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 6e 64 | amples\nEmdTransport').pl.legend |
2e40 | 28 6c 6f 63 3d 22 6c 6f 77 65 72 20 6c 65 66 74 22 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 | (loc="lower.left")..pl.subplot(2 |
2e60 | 2c 20 34 2c 20 36 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 | ,.4,.6).pl.scatter(Xt[:,.0],.Xt[ |
2e80 | 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 20 20 | :,.1],.c=yt,.marker='o',........ |
2ea0 | 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 70 68 | ....label='Target.samples',.alph |
2ec0 | 61 3d 30 2e 33 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b | a=0.3).pl.scatter(transp_Xs_sink |
2ee0 | 68 6f 72 6e 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 5b 3a | horn[:,.0],.transp_Xs_sinkhorn[: |
2f00 | 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b | ,.1],.c=ys,............marker='+ |
2f20 | 27 2c 20 6c 61 62 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 20 73 3d 33 30 29 | ',.label='Transp.samples',.s=30) |
2f40 | 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e | .pl.xticks([]).pl.yticks([]).pl. |
2f60 | 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 |
2f80 | 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 34 | hornTransport')..pl.subplot(2,.4 |
2fa0 | 2c 20 37 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 | ,.7).pl.scatter(Xt[:,.0],.Xt[:,. |
2fc0 | 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 | 1],.c=yt,.marker='o',........... |
2fe0 | 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 30 | .label='Target.samples',.alpha=0 |
3000 | 2e 33 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 6c 70 6c 31 5b 3a 2c | .3).pl.scatter(transp_Xs_lpl1[:, |
3020 | 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 6c 70 6c 31 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c | .0],.transp_Xs_lpl1[:,.1],.c=ys, |
3040 | 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 54 | ............marker='+',.label='T |
3060 | 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 20 73 3d 33 30 29 0a 70 6c 2e 78 74 69 63 6b 73 28 | ransp.samples',.s=30).pl.xticks( |
3080 | 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 72 61 6e | []).pl.yticks([]).pl.title('Tran |
30a0 | 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 5c 6e 53 69 6e 6b 68 6f 72 6e 4c 70 6c 31 54 72 61 | sported.samples\nSinkhornLpl1Tra |
30c0 | 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 38 29 0a 70 6c | nsport')..pl.subplot(2,.4,.8).pl |
30e0 | 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 |
3100 | 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= |
3120 | 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. |
3140 | 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 6c 31 6c 32 5b 3a 2c 20 30 5d 2c 20 74 72 | scatter(transp_Xs_l1l2[:,.0],.tr |
3160 | 61 6e 73 70 5f 58 73 5f 6c 31 6c 32 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 | ansp_Xs_l1l2[:,.1],.c=ys,....... |
3180 | 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 |
31a0 | 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. |
31c0 | 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 |
31e0 | 20 73 61 6d 70 6c 65 73 5c 6e 53 69 6e 6b 68 6f 72 6e 4c 31 6c 32 54 72 61 6e 73 70 6f 72 74 27 | .samples\nSinkhornL1l2Transport' |
3200 | 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 | ).pl.tight_layout()..pl.show().P |
3220 | 4b 03 04 14 00 00 00 00 00 0b 88 21 4b 57 2f 82 87 43 0a 00 00 43 0a 00 00 15 00 00 00 70 6c 6f | K..........!KW/..C...C.......plo |
3240 | 74 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 | t_OT_2D_samples.py#.-*-.coding:. |
3260 | 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.-*-.""".================== |
3280 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
32a0 | 3d 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 | ==.2D.Optimal.transport.between. |
32c0 | 65 6d 70 69 72 69 63 61 6c 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 3d 3d 3d 3d 3d 3d 3d 3d | empirical.distributions.======== |
32e0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
3300 | 3d 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 | ============..Illustration.of.2D |
3320 | 20 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 | .optimal.transport.between.discr |
3340 | 69 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 | ibutions.that.are.weighted.sum.o |
3360 | 66 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 | f.diracs..The.OT.matrix.is.plott |
3380 | 65 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 | ed.with.the.samples..."""..#.Aut |
33a0 | 68 6f 72 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 | hor:.Remi.Flamary.<remi.flamary@ |
33c0 | 75 6e 69 63 65 2e 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e | unice.fr>.#.#.License:.MIT.Licen |
33e0 | 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 | se..import.numpy.as.np.import.ma |
3400 | 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.. |
3420 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
3440 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
3460 | 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.# |
3480 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
34a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
34c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 20 61 6e | #############..#%%.parameters.an |
34e0 | 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. |
3500 | 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]) |
3520 | 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 |
3540 | 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 |
3560 | 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 |
3580 | 5d 5d 29 0a 0a 78 73 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 32 44 5f 73 61 6d | ]])..xs.=.ot.datasets.get_2D_sam |
35a0 | 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 20 | ples_gauss(n,.mu_s,.cov_s).xt.=. |
35c0 | 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 32 44 5f 73 61 6d 70 6c 65 73 5f 67 61 75 73 73 | ot.datasets.get_2D_samples_gauss |
35e0 | 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 65 73 | (n,.mu_t,.cov_t)..a,.b.=.np.ones |
3600 | 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 20 23 | ((n,))./.n,.np.ones((n,))./.n..# |
3620 | 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 73 | .uniform.distribution.on.samples |
3640 | 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 2c 20 | ..#.loss.matrix.M.=.ot.dist(xs,. |
3660 | 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 23 23 | xt).M./=.M.max()..############## |
3680 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
36a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
36c0 | 0a 23 20 50 6c 6f 74 20 64 61 74 61 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | .#.Plot.data.################### |
36e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
3700 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23 25 25 | ###########################..#%% |
3720 | 20 70 6c 6f 74 20 73 61 6d 70 6c 65 73 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 29 0a 70 6c 2e 70 | .plot.samples..pl.figure(1).pl.p |
3740 | 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 | lot(xs[:,.0],.xs[:,.1],.'+b',.la |
3760 | 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 | bel='Source.samples').pl.plot(xt |
3780 | 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 | [:,.0],.xt[:,.1],.'xr',.label='T |
37a0 | 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 | arget.samples').pl.legend(loc=0) |
37c0 | 0a 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 | .pl.title('Source.and.target.dis |
37e0 | 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 29 0a 70 6c 2e 69 6d | tributions')..pl.figure(2).pl.im |
3800 | 73 68 6f 77 28 4d 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 | show(M,.interpolation='nearest') |
3820 | 0a 70 6c 2e 74 69 74 6c 65 28 27 43 6f 73 74 20 6d 61 74 72 69 78 20 4d 27 29 0a 0a 23 23 23 23 | .pl.title('Cost.matrix.M')..#### |
3840 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
3860 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
3880 | 23 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 23 23 23 23 23 23 | ##########.#.Compute.EMD.####### |
38a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
38c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
38e0 | 23 23 23 23 23 23 23 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 | #######..#%%.EMD..G0.=.ot.emd(a, |
3900 | 20 62 2c 20 4d 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 47 | .b,.M)..pl.figure(3).pl.imshow(G |
3920 | 30 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 74 | 0,.interpolation='nearest').pl.t |
3940 | 69 74 6c 65 28 27 4f 54 20 6d 61 74 72 69 78 20 47 30 27 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 | itle('OT.matrix.G0')..pl.figure( |
3960 | 34 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 78 73 | 4).ot.plot.plot2D_samples_mat(xs |
3980 | 2c 20 78 74 2c 20 47 30 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 70 6c 6f 74 | ,.xt,.G0,.c=[.5,..5,.1]).pl.plot |
39a0 | 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c | (xs[:,.0],.xs[:,.1],.'+b',.label |
39c0 | 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c | ='Source.samples').pl.plot(xt[:, |
39e0 | 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 | .0],.xt[:,.1],.'xr',.label='Targ |
3a00 | 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 70 6c | et.samples').pl.legend(loc=0).pl |
3a20 | 2e 74 69 74 6c 65 28 27 4f 54 20 6d 61 74 72 69 78 20 77 69 74 68 20 73 61 6d 70 6c 65 73 27 29 | .title('OT.matrix.with.samples') |
3a40 | 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 | ...############################# |
3a60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
3a80 | 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 |
3aa0 | 68 6f 72 6e 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 | horn.########################### |
3ac0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
3ae0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23 25 25 20 73 69 6e 6b 68 6f 72 | ###################..#%%.sinkhor |
3b00 | 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 20 3d | n..#.reg.term.lambd.=.1e-3..Gs.= |
3b20 | 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 70 6c | .ot.sinkhorn(a,.b,.M,.lambd)..pl |
3b40 | 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 70 6f | .figure(5).pl.imshow(Gs,.interpo |
3b60 | 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 20 6d | lation='nearest').pl.title('OT.m |
3b80 | 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 0a 6f | atrix.sinkhorn')..pl.figure(6).o |
3ba0 | 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 78 73 2c 20 78 74 | t.plot.plot2D_samples_mat(xs,.xt |
3bc0 | 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 6f 74 | ,.Gs,.color=[.5,..5,.1]).pl.plot |
3be0 | 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c | (xs[:,.0],.xs[:,.1],.'+b',.label |
3c00 | 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c | ='Source.samples').pl.plot(xt[:, |
3c20 | 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 | .0],.xt[:,.1],.'xr',.label='Targ |
3c40 | 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 70 6c | et.samples').pl.legend(loc=0).pl |
3c60 | 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 68 20 | .title('OT.matrix.Sinkhorn.with. |
3c80 | 73 61 6d 70 6c 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 0b | samples')..pl.show().PK......... |
3ca0 | 88 21 4b 0a f1 8e 4a 3a 14 00 00 3a 14 00 00 13 00 00 00 70 6c 6f 74 5f 4f 54 5f 4c 31 5f 76 73 | .!K...J:...:.......plot_OT_L1_vs |
3cc0 | 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 0a 22 22 | _L2.py#.-*-.coding:.utf-8.-*-."" |
3ce0 | 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 3d | ".============================== |
3d00 | 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 70 6f 72 | ============.2D.Optimal.transpor |
3d20 | 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 3d 3d 3d | t.for.different.metrics.======== |
3d40 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
3d60 | 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 62 75 74 | ==..2D.OT.on.empirical.distribut |
3d80 | 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 69 63 2e | io..with.different.gound.metric. |
3da0 | 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 46 69 67 | ..Stole.the.figure.idea.from.Fig |
3dc0 | 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 67 2f 70 | ..1.and.2.in.https://arxiv.org/p |
3de0 | 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 74 68 6f | df/1706.07650.pdf..."""..#.Autho |
3e00 | 72 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e | r:.Remi.Flamary.<remi.flamary@un |
3e20 | 69 63 65 2e 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 | ice.fr>.#.#.License:.MIT.License |
3e40 | 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 | ..import.numpy.as.np.import.matp |
3e60 | 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 23 23 | lotlib.pylab.as.pl.import.ot..## |
3e80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
3ea0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
3ec0 | 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 44 61 74 61 73 65 74 20 31 20 3a 20 75 6e 69 66 6f | ############.#.Dataset.1.:.unifo |
3ee0 | 72 6d 20 73 61 6d 70 6c 69 6e 67 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | rm.sampling.#################### |
3f00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
3f20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 6e 20 3d 20 | ##########################..n.=. |
3f40 | 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 28 28 | 20..#.nb.samples.xs.=.np.zeros(( |
3f60 | 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 20 2b | n,.2)).xs[:,.0].=.np.arange(n).+ |
3f80 | 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 31 29 | .1.xs[:,.1].=.(np.arange(n).+.1) |
3fa0 | 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 6c 79 | .*.-0.001..#.to.make.it.strictly |
3fc0 | 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 32 29 | .convex.....xt.=.np.zeros((n,.2) |
3fe0 | 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 0a 61 | ).xt[:,.1].=.np.arange(n).+.1..a |
4000 | 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 23 20 | ,.b.=.ot.unif(n),.ot.unif(n)..#. |
4020 | 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 73 0a | uniform.distribution.on.samples. |
4040 | 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 2c 20 | .#.loss.matrix.M1.=.ot.dist(xs,. |
4060 | 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 4d 31 | xt,.metric='euclidean').M1./=.M1 |
4080 | 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 64 69 | .max()..#.loss.matrix.M2.=.ot.di |
40a0 | 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 27 29 | st(xs,.xt,.metric='sqeuclidean') |
40c0 | 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 0a 4d | .M2./=.M2.max()..#.loss.matrix.M |
40e0 | 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 74 72 | p.=.np.sqrt(ot.dist(xs,.xt,.metr |
4100 | 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 29 0a | ic='euclidean')).Mp./=.Mp.max(). |
4120 | 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 37 2c | .#.Data.pl.figure(1,.figsize=(7, |
4140 | 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 2c 20 | .3)).pl.clf().pl.plot(xs[:,.0],. |
4160 | 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 73 61 | xs[:,.1],.'+b',.label='Source.sa |
4180 | 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 2c 20 | mples').pl.plot(xt[:,.0],.xt[:,. |
41a0 | 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 73 27 | 1],.'xr',.label='Target.samples' |
41c0 | 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 6f 75 | ).pl.axis('equal').pl.title('Sou |
41e0 | 72 63 65 20 61 6e 64 20 74 72 61 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a | rce.and.traget.distributions').. |
4200 | 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 66 69 | .#.Cost.matrices.pl.figure(2,.fi |
4220 | 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 2c 20 | gsize=(7,.3))..pl.subplot(1,.3,. |
4240 | 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 3d 27 | 1).pl.imshow(M1,.interpolation=' |
4260 | 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 63 6f | nearest').pl.title('Euclidean.co |
4280 | 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 6d 73 | st')..pl.subplot(1,.3,.2).pl.ims |
42a0 | 68 6f 77 28 4d 32 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 | how(M2,.interpolation='nearest') |
42c0 | 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 6f 73 | .pl.title('Squared.Euclidean.cos |
42e0 | 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 73 68 | t')..pl.subplot(1,.3,.3).pl.imsh |
4300 | 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 29 0a | ow(Mp,.interpolation='nearest'). |
4320 | 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 29 0a | pl.title('Sqrt.Euclidean.cost'). |
4340 | 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()..############# |
4360 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
4380 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
43a0 | 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 65 73 | #.#.Dataset.1.:.Plot.OT.Matrices |
43c0 | 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 | .############################### |
43e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
4400 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 0a 23 25 25 20 45 4d 44 0a 47 31 20 3d 20 6f | ###############...#%%.EMD.G1.=.o |
4420 | 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 31 29 0a 47 32 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 | t.emd(a,.b,.M1).G2.=.ot.emd(a,.b |
4440 | 2c 20 4d 32 29 0a 47 70 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 70 29 0a 0a 23 20 4f | ,.M2).Gp.=.ot.emd(a,.b,.Mp)..#.O |
4460 | 54 20 6d 61 74 72 69 63 65 73 0a 70 6c 2e 66 69 67 75 72 65 28 33 2c 20 66 69 67 73 69 7a 65 3d | T.matrices.pl.figure(3,.figsize= |
4480 | 28 37 2c 20 33 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 31 29 0a 6f 74 2e | (7,.3))..pl.subplot(1,.3,.1).ot. |
44a0 | 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 78 73 2c 20 78 74 2c 20 | plot.plot2D_samples_mat(xs,.xt,. |
44c0 | 47 31 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c | G1,.c=[.5,..5,.1]).pl.plot(xs[:, |
44e0 | 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 72 | .0],.xs[:,.1],.'+b',.label='Sour |
4500 | 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 78 | ce.samples').pl.plot(xt[:,.0],.x |
4520 | 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 6d | t[:,.1],.'xr',.label='Target.sam |
4540 | 70 6c 65 73 27 29 0a 70 6c 2e 61 78 69 73 28 27 65 71 75 61 6c 27 29 0a 23 20 70 6c 2e 6c 65 67 | ples').pl.axis('equal').#.pl.leg |
4560 | 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 45 75 63 6c 69 64 65 61 | end(loc=0).pl.title('OT.Euclidea |
4580 | 6e 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 32 29 0a 6f 74 2e 70 6c 6f 74 | n')..pl.subplot(1,.3,.2).ot.plot |
45a0 | 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 78 73 2c 20 78 74 2c 20 47 32 2c 20 | .plot2D_samples_mat(xs,.xt,.G2,. |
45c0 | 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c | c=[.5,..5,.1]).pl.plot(xs[:,.0], |
45e0 | 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 73 | .xs[:,.1],.'+b',.label='Source.s |
4600 | 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 2c | amples').pl.plot(xt[:,.0],.xt[:, |
4620 | 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 73 | .1],.'xr',.label='Target.samples |
4640 | 27 29 0a 70 6c 2e 61 78 69 73 28 27 65 71 75 61 6c 27 29 0a 23 20 70 6c 2e 6c 65 67 65 6e 64 28 | ').pl.axis('equal').#.pl.legend( |
4660 | 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 73 71 75 61 72 65 64 20 45 75 63 6c | loc=0).pl.title('OT.squared.Eucl |
4680 | 69 64 65 61 6e 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 33 29 0a 6f 74 2e | idean')..pl.subplot(1,.3,.3).ot. |
46a0 | 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 78 73 2c 20 78 74 2c 20 | plot.plot2D_samples_mat(xs,.xt,. |
46c0 | 47 70 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c | Gp,.c=[.5,..5,.1]).pl.plot(xs[:, |
46e0 | 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 72 | .0],.xs[:,.1],.'+b',.label='Sour |
4700 | 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 78 | ce.samples').pl.plot(xt[:,.0],.x |
4720 | 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 6d | t[:,.1],.'xr',.label='Target.sam |
4740 | 70 6c 65 73 27 29 0a 70 6c 2e 61 78 69 73 28 27 65 71 75 61 6c 27 29 0a 23 20 70 6c 2e 6c 65 67 | ples').pl.axis('equal').#.pl.leg |
4760 | 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 73 71 72 74 20 45 75 63 | end(loc=0).pl.title('OT.sqrt.Euc |
4780 | 6c 69 64 65 61 6e 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 | lidean').pl.tight_layout()..pl.s |
47a0 | 68 6f 77 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | how()...######################## |
47c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
47e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 44 61 74 61 73 65 74 | ######################.#.Dataset |
4800 | 20 32 20 3a 20 50 61 72 74 69 61 6c 20 63 69 72 63 6c 65 0a 23 23 23 23 23 23 23 23 23 23 23 23 | .2.:.Partial.circle.############ |
4820 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
4840 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
4860 | 23 23 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.=. |
4880 | 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]. |
48a0 | 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). |
48c0 | 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. |
48e0 | 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 |
4900 | 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 |
4920 | 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 |
4940 | 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 |
4960 | 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. |
4980 | 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. |
49a0 | 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 |
49c0 | 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().. |
49e0 | 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 |
4a00 | 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 |
4a20 | 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 |
4a40 | 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 |
4a60 | 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 |
4a80 | 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 |
4aa0 | 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 |
4ac0 | 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') |
4ae0 | 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 |
4b00 | 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 |
4b20 | 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 |
4b40 | 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 |
4b60 | 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=( |
4b80 | 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 |
4ba0 | 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 |
4bc0 | 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 |
4be0 | 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, |
4c00 | 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 |
4c20 | 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 |
4c40 | 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,. |
4c60 | 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 |
4c80 | 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 |
4ca0 | 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()..#################### |
4cc0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
4ce0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 44 61 74 | ##########################.#.Dat |
4d00 | 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 23 23 23 23 | aset.2.:.Plot..OT.Matrices.##### |
4d20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
4d40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
4d60 | 23 23 23 23 23 23 23 23 23 0a 0a 0a 23 25 25 20 45 4d 44 0a 47 31 20 3d 20 6f 74 2e 65 6d 64 28 | #########...#%%.EMD.G1.=.ot.emd( |
4d80 | 61 2c 20 62 2c 20 4d 31 29 0a 47 32 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 32 29 0a | a,.b,.M1).G2.=.ot.emd(a,.b,.M2). |
4da0 | 47 70 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 70 29 0a 0a 23 20 4f 54 20 6d 61 74 72 | Gp.=.ot.emd(a,.b,.Mp)..#.OT.matr |
4dc0 | 69 63 65 73 0a 70 6c 2e 66 69 67 75 72 65 28 36 2c 20 66 69 67 73 69 7a 65 3d 28 37 2c 20 33 29 | ices.pl.figure(6,.figsize=(7,.3) |
4de0 | 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 31 29 0a 6f 74 2e 70 6c 6f 74 2e 70 | )..pl.subplot(1,.3,.1).ot.plot.p |
4e00 | 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 31 2c 20 63 3d | lot2D_samples_mat(xs,.xt,.G1,.c= |
4e20 | 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 | [.5,..5,.1]).pl.plot(xs[:,.0],.x |
4e40 | 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d | s[:,.1],.'+b',.label='Source.sam |
4e60 | 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 | ples').pl.plot(xt[:,.0],.xt[:,.1 |
4e80 | 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 | ],.'xr',.label='Target.samples') |
4ea0 | 0a 70 6c 2e 61 78 69 73 28 27 65 71 75 61 6c 27 29 0a 23 20 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f | .pl.axis('equal').#.pl.legend(lo |
4ec0 | 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 45 75 63 6c 69 64 65 61 6e 27 29 0a 0a 70 | c=0).pl.title('OT.Euclidean')..p |
4ee0 | 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 32 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 | l.subplot(1,.3,.2).ot.plot.plot2 |
4f00 | 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 78 73 2c 20 78 74 2c 20 47 32 2c 20 63 3d 5b 2e 35 2c | D_samples_mat(xs,.xt,.G2,.c=[.5, |
4f20 | 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c | ..5,.1]).pl.plot(xs[:,.0],.xs[:, |
4f40 | 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 | .1],.'+b',.label='Source.samples |
4f60 | 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 | ').pl.plot(xt[:,.0],.xt[:,.1],.' |
4f80 | 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e | xr',.label='Target.samples').pl. |
4fa0 | 61 78 69 73 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 | axis('equal').#.pl.legend(loc=0) |
4fc0 | 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 73 71 75 61 72 65 64 20 45 75 63 6c 69 64 65 61 6e 27 | .pl.title('OT.squared.Euclidean' |
4fe0 | 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 33 29 0a 6f 74 2e 70 6c 6f 74 2e 70 | )..pl.subplot(1,.3,.3).ot.plot.p |
5000 | 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 70 2c 20 63 3d | lot2D_samples_mat(xs,.xt,.Gp,.c= |
5020 | 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 | [.5,..5,.1]).pl.plot(xs[:,.0],.x |
5040 | 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d | s[:,.1],.'+b',.label='Source.sam |
5060 | 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 | ples').pl.plot(xt[:,.0],.xt[:,.1 |
5080 | 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 | ],.'xr',.label='Target.samples') |
50a0 | 0a 70 6c 2e 61 78 69 73 28 27 65 71 75 61 6c 27 29 0a 23 20 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f | .pl.axis('equal').#.pl.legend(lo |
50c0 | 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 73 71 72 74 20 45 75 63 6c 69 64 65 61 6e | c=0).pl.title('OT.sqrt.Euclidean |
50e0 | 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a | ').pl.tight_layout()..pl.show(). |
5100 | 50 4b 03 04 14 00 00 00 00 00 0b 88 21 4b 8e 86 6b 49 44 11 00 00 44 11 00 00 22 00 00 00 70 6c | PK..........!K..kID...D..."...pl |
5120 | 6f 74 5f 6f 74 64 61 5f 6d 61 70 70 69 6e 67 5f 63 6f 6c 6f 72 73 5f 69 6d 61 67 65 73 2e 70 79 | ot_otda_mapping_colors_images.py |
5140 | 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.-*-.""".==== |
5160 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
5180 | 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 63 | =================.OT.for.image.c |
51a0 | 6f 6c 6f 72 20 61 64 61 70 74 61 74 69 6f 6e 20 77 69 74 68 20 6d 61 70 70 69 6e 67 20 65 73 74 | olor.adaptation.with.mapping.est |
51c0 | 69 6d 61 74 69 6f 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | imation.======================== |
51e0 | 3d 3d 3d 3d 3d 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 4f | =============================..O |
5200 | 54 20 66 6f 72 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 20 77 69 74 68 20 69 6d 61 | T.for.domain.adaptation.with.ima |
5220 | 67 65 20 63 6f 6c 6f 72 20 61 64 61 70 74 61 74 69 6f 6e 20 5b 36 5d 20 77 69 74 68 20 6d 61 70 | ge.color.adaptation.[6].with.map |
5240 | 70 69 6e 67 0a 65 73 74 69 6d 61 74 69 6f 6e 20 5b 38 5d 2e 0a 0a 5b 36 5d 20 46 65 72 72 61 64 | ping.estimation.[8]...[6].Ferrad |
5260 | 61 6e 73 2c 20 53 2e 2c 20 50 61 70 61 64 61 6b 69 73 2c 20 4e 2e 2c 20 50 65 79 72 65 2c 20 47 | ans,.S.,.Papadakis,.N.,.Peyre,.G |
5280 | 2e 2c 20 26 20 41 75 6a 6f 6c 2c 20 4a 2e 20 46 2e 20 28 32 30 31 34 29 2e 20 52 65 67 75 6c 61 | .,.&.Aujol,.J..F..(2014)..Regula |
52a0 | 72 69 7a 65 64 0a 20 20 20 20 64 69 73 63 72 65 74 65 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 | rized.....discrete.optimal.trans |
52c0 | 70 6f 72 74 2e 20 53 49 41 4d 20 4a 6f 75 72 6e 61 6c 20 6f 6e 20 49 6d 61 67 69 6e 67 20 53 63 | port..SIAM.Journal.on.Imaging.Sc |
52e0 | 69 65 6e 63 65 73 2c 20 37 28 33 29 2c 0a 20 20 20 20 31 38 35 33 2d 31 38 38 32 2e 0a 5b 38 5d | iences,.7(3),.....1853-1882..[8] |
5300 | 20 4d 2e 20 50 65 72 72 6f 74 2c 20 4e 2e 20 43 6f 75 72 74 79 2c 20 52 2e 20 46 6c 61 6d 61 72 | .M..Perrot,.N..Courty,.R..Flamar |
5320 | 79 2c 20 41 2e 20 48 61 62 72 61 72 64 2c 20 22 4d 61 70 70 69 6e 67 20 65 73 74 69 6d 61 74 69 | y,.A..Habrard,."Mapping.estimati |
5340 | 6f 6e 20 66 6f 72 0a 20 20 20 20 64 69 73 63 72 65 74 65 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e | on.for.....discrete.optimal.tran |
5360 | 73 70 6f 72 74 22 2c 20 4e 65 75 72 61 6c 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 50 72 6f 63 65 | sport",.Neural.Information.Proce |
5380 | 73 73 69 6e 67 20 53 79 73 74 65 6d 73 20 28 4e 49 50 53 29 2c 0a 20 20 20 20 32 30 31 36 2e 0a | ssing.Systems.(NIPS),.....2016.. |
53a0 | 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 |
53c0 | 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>.#......... |
53e0 | 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 |
5400 | 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 |
5420 | 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 63 | ense..import.numpy.as.np.from.sc |
5440 | 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 6f | ipy.import.ndimage.import.matplo |
5460 | 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 72 20 3d 20 | tlib.pylab.as.pl.import.ot..r.=. |
5480 | 6e 70 2e 72 61 6e 64 6f 6d 2e 52 61 6e 64 6f 6d 53 74 61 74 65 28 34 32 29 0a 0a 0a 64 65 66 20 | np.random.RandomState(42)...def. |
54a0 | 69 6d 32 6d 61 74 28 49 29 3a 0a 20 20 20 20 22 22 22 43 6f 6e 76 65 72 74 73 20 61 6e 64 20 69 | im2mat(I):....."""Converts.and.i |
54c0 | 6d 61 67 65 20 74 6f 20 6d 61 74 72 69 78 20 28 6f 6e 65 20 70 69 78 65 6c 20 70 65 72 20 6c 69 | mage.to.matrix.(one.pixel.per.li |
54e0 | 6e 65 29 22 22 22 0a 20 20 20 20 72 65 74 75 72 6e 20 49 2e 72 65 73 68 61 70 65 28 28 49 2e 73 | ne)""".....return.I.reshape((I.s |
5500 | 68 61 70 65 5b 30 5d 20 2a 20 49 2e 73 68 61 70 65 5b 31 5d 2c 20 49 2e 73 68 61 70 65 5b 32 5d | hape[0].*.I.shape[1],.I.shape[2] |
5520 | 29 29 0a 0a 0a 64 65 66 20 6d 61 74 32 69 6d 28 58 2c 20 73 68 61 70 65 29 3a 0a 20 20 20 20 22 | ))...def.mat2im(X,.shape):....." |
5540 | 22 22 43 6f 6e 76 65 72 74 73 20 62 61 63 6b 20 61 20 6d 61 74 72 69 78 20 74 6f 20 61 6e 20 69 | ""Converts.back.a.matrix.to.an.i |
5560 | 6d 61 67 65 22 22 22 0a 20 20 20 20 72 65 74 75 72 6e 20 58 2e 72 65 73 68 61 70 65 28 73 68 61 | mage""".....return.X.reshape(sha |
5580 | 70 65 29 0a 0a 0a 64 65 66 20 6d 69 6e 6d 61 78 28 49 29 3a 0a 20 20 20 20 72 65 74 75 72 6e 20 | pe)...def.minmax(I):.....return. |
55a0 | 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 23 | np.clip(I,.0,.1)...############# |
55c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
55e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
5600 | 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | #.#.Generate.data.############## |
5620 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
5640 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
5660 | 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 65 2e | ..#.Loading.images.I1.=.ndimage. |
5680 | 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 29 2e | imread('../data/ocean_day.jpg'). |
56a0 | 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 6e 64 | astype(np.float64)./.256.I2.=.nd |
56c0 | 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 6e 73 | image.imread('../data/ocean_suns |
56e0 | 65 74 2e 6a 70 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 20 2f 20 32 35 | et.jpg').astype(np.float64)./.25 |
5700 | 36 0a 0a 0a 58 31 20 3d 20 69 6d 32 6d 61 74 28 49 31 29 0a 58 32 20 3d 20 69 6d 32 6d 61 74 28 | 6...X1.=.im2mat(I1).X2.=.im2mat( |
5720 | 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 30 | I2)..#.training.samples.nb.=.100 |
5740 | 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 20 | 0.idx1.=.r.randint(X1.shape[0],. |
5760 | 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 2e | size=(nb,)).idx2.=.r.randint(X2. |
5780 | 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 69 | shape[0],.size=(nb,))..Xs.=.X1[i |
57a0 | 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 23 | dx1,.:].Xt.=.X2[idx2,.:]...##### |
57c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
57e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
5800 | 23 23 23 23 23 23 23 23 23 0a 23 20 44 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 20 66 6f | #########.#.Domain.adaptation.fo |
5820 | 72 20 70 69 78 65 6c 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20 74 72 61 6e 73 66 65 72 0a 23 23 | r.pixel.distribution.transfer.## |
5840 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
5860 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
5880 | 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23 20 45 4d 44 54 72 61 6e 73 70 6f 72 74 0a 6f 74 5f | ############..#.EMDTransport.ot_ |
58a0 | 65 6d 64 20 3d 20 6f 74 2e 64 61 2e 45 4d 44 54 72 61 6e 73 70 6f 72 74 28 29 0a 6f 74 5f 65 6d | emd.=.ot.da.EMDTransport().ot_em |
58c0 | 64 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 74 72 61 6e 73 70 5f 58 73 5f 65 6d | d.fit(Xs=Xs,.Xt=Xt).transp_Xs_em |
58e0 | 64 20 3d 20 6f 74 5f 65 6d 64 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 31 29 0a 49 6d 61 67 | d.=.ot_emd.transform(Xs=X1).Imag |
5900 | 65 5f 65 6d 64 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 74 72 61 6e 73 70 5f 58 73 5f | e_emd.=.minmax(mat2im(transp_Xs_ |
5920 | 65 6d 64 2c 20 49 31 2e 73 68 61 70 65 29 29 0a 0a 23 20 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 | emd,.I1.shape))..#.SinkhornTrans |
5940 | 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 |
5960 | 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 |
5980 | 72 6e 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 74 72 61 6e 73 70 5f 58 73 5f 73 | rn.fit(Xs=Xs,.Xt=Xt).transp_Xs_s |
59a0 | 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 5f 65 6d 64 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 31 | inkhorn.=.ot_emd.transform(Xs=X1 |
59c0 | 29 0a 49 6d 61 67 65 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d | ).Image_sinkhorn.=.minmax(mat2im |
59e0 | 28 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 2c 20 49 31 2e 73 68 61 70 65 29 29 0a | (transp_Xs_sinkhorn,.I1.shape)). |
5a00 | 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 20 3d 20 6f 74 2e 64 61 2e 4d 61 70 70 69 | .ot_mapping_linear.=.ot.da.Mappi |
5a20 | 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 65 2d | ngTransport(.....mu=1e0,.eta=1e- |
5a40 | 38 2c 20 62 69 61 73 3d 54 72 75 65 2c 20 6d 61 78 5f 69 74 65 72 3d 32 30 2c 20 76 65 72 62 6f | 8,.bias=True,.max_iter=20,.verbo |
5a60 | 73 65 3d 54 72 75 65 29 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 2e 66 69 74 28 58 | se=True).ot_mapping_linear.fit(X |
5a80 | 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 58 31 74 6c 20 3d 20 6f 74 5f 6d 61 70 70 69 6e 67 5f | s=Xs,.Xt=Xt)..X1tl.=.ot_mapping_ |
5aa0 | 6c 69 6e 65 61 72 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 31 29 0a 49 6d 61 67 65 5f 6d 61 | linear.transform(Xs=X1).Image_ma |
5ac0 | 70 70 69 6e 67 5f 6c 69 6e 65 61 72 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 58 31 74 | pping_linear.=.minmax(mat2im(X1t |
5ae0 | 6c 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 67 61 75 73 73 69 | l,.I1.shape))..ot_mapping_gaussi |
5b00 | 61 6e 20 3d 20 6f 74 2e 64 61 2e 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 28 0a 20 20 20 | an.=.ot.da.MappingTransport(.... |
5b20 | 20 6d 75 3d 31 65 30 2c 20 65 74 61 3d 31 65 2d 32 2c 20 73 69 67 6d 61 3d 31 2c 20 62 69 61 73 | .mu=1e0,.eta=1e-2,.sigma=1,.bias |
5b40 | 3d 46 61 6c 73 65 2c 20 6d 61 78 5f 69 74 65 72 3d 31 30 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 | =False,.max_iter=10,.verbose=Tru |
5b60 | 65 29 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 67 61 75 73 73 69 61 6e 2e 66 69 74 28 58 73 3d 58 73 | e).ot_mapping_gaussian.fit(Xs=Xs |
5b80 | 2c 20 58 74 3d 58 74 29 0a 0a 58 31 74 6e 20 3d 20 6f 74 5f 6d 61 70 70 69 6e 67 5f 67 61 75 73 | ,.Xt=Xt)..X1tn.=.ot_mapping_gaus |
5ba0 | 73 69 61 6e 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 31 29 20 20 23 20 75 73 65 20 74 68 65 | sian.transform(Xs=X1)..#.use.the |
5bc0 | 20 65 73 74 69 6d 61 74 65 64 20 6d 61 70 70 69 6e 67 0a 49 6d 61 67 65 5f 6d 61 70 70 69 6e 67 | .estimated.mapping.Image_mapping |
5be0 | 5f 67 61 75 73 73 69 61 6e 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 58 31 74 6e 2c 20 | _gaussian.=.minmax(mat2im(X1tn,. |
5c00 | 49 31 2e 73 68 61 70 65 29 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | I1.shape))...################### |
5c20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
5c40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c | ###########################.#.Pl |
5c60 | 6f 74 20 6f 72 69 67 69 6e 61 6c 20 69 6d 61 67 65 73 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 | ot.original.images.############# |
5c80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
5ca0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
5cc0 | 23 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 29 | #..pl.figure(1,.figsize=(6.4,.3) |
5ce0 | 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 69 6d 73 68 6f 77 28 | ).pl.subplot(1,.2,.1).pl.imshow( |
5d00 | 49 31 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 | I1).pl.axis('off').pl.title('Ima |
5d20 | 67 65 20 31 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 32 29 0a 70 6c 2e 69 | ge.1')..pl.subplot(1,.2,.2).pl.i |
5d40 | 6d 73 68 6f 77 28 49 32 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c | mshow(I2).pl.axis('off').pl.titl |
5d60 | 65 28 27 49 6d 61 67 65 20 32 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a | e('Image.2').pl.tight_layout().. |
5d80 | 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 | .############################### |
5da0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
5dc0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 70 69 78 65 6c 20 76 61 6c | ###############.#.Plot.pixel.val |
5de0 | 75 65 73 20 64 69 73 74 72 69 62 75 74 69 6f 6e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ues.distribution.############### |
5e00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
5e20 | 23 23 23 23 23 23 23 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 | ###############################. |
5e40 | 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 35 29 29 0a | .pl.figure(2,.figsize=(6.4,.5)). |
5e60 | 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 | .pl.subplot(1,.2,.1).pl.scatter( |
5e80 | 58 73 5b 3a 2c 20 30 5d 2c 20 58 73 5b 3a 2c 20 32 5d 2c 20 63 3d 58 73 29 0a 70 6c 2e 61 78 69 | Xs[:,.0],.Xs[:,.2],.c=Xs).pl.axi |
5ea0 | 73 28 5b 30 2c 20 31 2c 20 30 2c 20 31 5d 29 0a 70 6c 2e 78 6c 61 62 65 6c 28 27 52 65 64 27 29 | s([0,.1,.0,.1]).pl.xlabel('Red') |
5ec0 | 0a 70 6c 2e 79 6c 61 62 65 6c 28 27 42 6c 75 65 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 | .pl.ylabel('Blue').pl.title('Ima |
5ee0 | 67 65 20 31 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 32 29 0a 70 6c 2e 73 | ge.1')..pl.subplot(1,.2,.2).pl.s |
5f00 | 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 32 5d 2c 20 63 3d 58 74 29 | catter(Xt[:,.0],.Xt[:,.2],.c=Xt) |
5f20 | 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 6c 61 62 65 6c | .pl.axis([0,.1,.0,.1]).pl.xlabel |
5f40 | 28 27 52 65 64 27 29 0a 70 6c 2e 79 6c 61 62 65 6c 28 27 42 6c 75 65 27 29 0a 70 6c 2e 74 69 74 | ('Red').pl.ylabel('Blue').pl.tit |
5f60 | 6c 65 28 27 49 6d 61 67 65 20 32 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a | le('Image.2').pl.tight_layout(). |
5f80 | 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 | ..############################## |
5fa0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
5fc0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 74 72 61 6e 73 66 6f 72 | ################.#.Plot.transfor |
5fe0 | 6d 65 64 20 69 6d 61 67 65 73 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | med.images.##################### |
6000 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
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 0a 0a 70 6c 2e 66 69 | #########################..pl.fi |
6040 | 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 31 30 2c 20 35 29 29 0a 0a 70 6c 2e 73 75 62 | gure(2,.figsize=(10,.5))..pl.sub |
6060 | 70 6c 6f 74 28 32 2c 20 33 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 29 0a 70 6c 2e 61 | plot(2,.3,.1).pl.imshow(I1).pl.a |
6080 | 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 31 27 29 0a 0a 70 6c | xis('off').pl.title('Im..1')..pl |
60a0 | 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 34 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 29 0a | .subplot(2,.3,.4).pl.imshow(I2). |
60c0 | 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 2e 20 32 27 29 | pl.axis('off').pl.title('Im..2') |
60e0 | 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 | ..pl.subplot(2,.3,.2).pl.imshow( |
6100 | 49 6d 61 67 65 5f 65 6d 64 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 | Image_emd).pl.axis('off').pl.tit |
6120 | 6c 65 28 27 45 6d 64 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 | le('EmdTransport')..pl.subplot(2 |
6140 | 2c 20 33 2c 20 35 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 6d 61 67 65 5f 73 69 6e 6b 68 6f 72 6e | ,.3,.5).pl.imshow(Image_sinkhorn |
6160 | 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 53 69 6e 6b 68 | ).pl.axis('off').pl.title('Sinkh |
6180 | 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 2c | ornTransport')..pl.subplot(2,.3, |
61a0 | 20 33 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 6c 69 6e 65 | .3).pl.imshow(Image_mapping_line |
61c0 | 61 72 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 | ar).pl.axis('off').pl.title('Map |
61e0 | 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 20 28 6c 69 6e 65 61 72 29 27 29 0a 0a 70 6c 2e 73 75 62 | pingTransport.(linear)')..pl.sub |
6200 | 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 6d 61 67 65 5f 6d 61 | plot(2,.3,.6).pl.imshow(Image_ma |
6220 | 70 70 69 6e 67 5f 67 61 75 73 73 69 61 6e 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 | pping_gaussian).pl.axis('off').p |
6240 | 6c 2e 74 69 74 6c 65 28 27 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 20 28 67 61 75 73 73 | l.title('MappingTransport.(gauss |
6260 | 69 61 6e 29 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 68 6f | ian)').pl.tight_layout()..pl.sho |
6280 | 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 0b 88 21 4b 77 57 0d 45 09 0f 00 00 09 0f 00 00 19 00 | w().PK..........!KwW.E.......... |
62a0 | 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 63 6f 6c 6f 72 5f 69 6d 61 67 65 73 2e 70 79 23 20 2d 2a 2d | ..plot_otda_color_images.py#.-*- |
62c0 | 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.-*-.""".========= |
62e0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4f 54 20 66 6f 72 20 69 6d 61 67 | ====================.OT.for.imag |
6300 | 65 20 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 | e.color.adaptation.============= |
6320 | 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 70 | ================..This.example.p |
6340 | 72 65 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 | resents.a.way.of.transferring.co |
6360 | 6c 6f 72 73 20 62 65 74 77 65 65 6e 20 74 77 6f 20 69 6d 61 67 65 0a 77 69 74 68 20 4f 70 74 69 | lors.between.two.image.with.Opti |
6380 | 6d 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 | mal.Transport.as.introduced.in.[ |
63a0 | 36 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 | 6]..[6].Ferradans,.S.,.Papadakis |
63c0 | 2c 20 4e 2e 2c 20 50 65 79 72 65 2c 20 47 2e 2c 20 26 20 41 75 6a 6f 6c 2c 20 4a 2e 20 46 2e 20 | ,.N.,.Peyre,.G.,.&.Aujol,.J..F.. |
63e0 | 28 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 | (2014)..Regularized.discrete.opt |
6400 | 69 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 | imal.transport..SIAM.Journal.on. |
6420 | 49 6d 61 67 69 6e 67 20 53 63 69 65 6e 63 65 73 2c 20 37 28 33 29 2c 20 31 38 35 33 2d 31 38 38 | Imaging.Sciences,.7(3),.1853-188 |
6440 | 32 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 | 2.."""..#.Authors:.Remi.Flamary. |
6460 | 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 20 20 20 20 20 20 20 | <remi.flamary@unice.fr>.#....... |
6480 | 20 20 20 53 74 61 6e 69 73 6c 61 73 20 43 68 61 6d 62 6f 6e 20 3c 73 74 61 6e 2e 63 68 61 6d 62 | ...Stanislas.Chambon.<stan.chamb |
64a0 | 6f 6e 40 67 6d 61 69 6c 2e 63 6f 6d 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c | on@gmail.com>.#.#.License:.MIT.L |
64c0 | 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 66 72 6f 6d 20 | icense..import.numpy.as.np.from. |
64e0 | 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 20 6d 61 74 70 | scipy.import.ndimage.import.matp |
6500 | 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 0a 0a 72 | lotlib.pylab.as.pl.import.ot...r |
6520 | 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 0a 0a 0a 64 | .=.np.random.RandomState(42)...d |
6540 | 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 20 61 6e | ef.im2mat(I):....."""Converts.an |
6560 | 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 70 65 72 | d.image.to.matrix.(one.pixel.per |
6580 | 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 65 28 28 | .line)""".....return.I.reshape(( |
65a0 | 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 61 70 65 | I.shape[0].*.I.shape[1],.I.shape |
65c0 | 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 0a 20 20 | [2]))...def.mat2im(X,.shape):... |
65e0 | 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 6f 20 61 | .."""Converts.back.a.matrix.to.a |
6600 | 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 70 65 28 | n.image""".....return.X.reshape( |
6620 | 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 65 74 75 | shape)...def.minmax(I):.....retu |
6640 | 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 23 23 23 23 | rn.np.clip(I,.0,.1)...########## |
6660 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
6680 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
66a0 | 23 23 23 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 23 23 23 23 23 23 23 23 23 23 | ####.#.Generate.data.########### |
66c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
66e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
6700 | 23 23 23 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 | ###..#.Loading.images.I1.=.ndima |
6720 | 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 79 2e 6a 70 67 | ge.imread('../data/ocean_day.jpg |
6740 | 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 20 2f 20 32 35 36 0a 49 32 20 3d | ').astype(np.float64)./.256.I2.= |
6760 | 20 6e 64 69 6d 61 67 65 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 6f 63 65 61 6e 5f 73 | .ndimage.imread('../data/ocean_s |
6780 | 75 6e 73 65 74 2e 6a 70 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 20 2f | unset.jpg').astype(np.float64)./ |
67a0 | 20 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 | .256..X1.=.im2mat(I1).X2.=.im2ma |
67c0 | 74 28 49 32 29 0a 0a 23 20 74 72 61 69 6e 69 6e 67 20 73 61 6d 70 6c 65 73 0a 6e 62 20 3d 20 31 | t(I2)..#.training.samples.nb.=.1 |
67e0 | 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 61 70 65 5b 30 5d | 000.idx1.=.r.randint(X1.shape[0] |
6800 | 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 64 69 6e 74 28 58 | ,.size=(nb,)).idx2.=.r.randint(X |
6820 | 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 73 20 3d 20 58 31 | 2.shape[0],.size=(nb,))..Xs.=.X1 |
6840 | 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 0a 0a 0a 23 23 23 | [idx1,.:].Xt.=.X2[idx2,.:]...### |
6860 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
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 0a 23 20 50 6c 6f 74 20 6f 72 69 67 69 6e 61 6c 20 69 6d 61 67 | ###########.#.Plot.original.imag |
68c0 | 65 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 | e.############################## |
68e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
6900 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 | ################..pl.figure(1,.f |
6920 | 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 | igsize=(6.4,.3))..pl.subplot(1,. |
6940 | 32 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 | 2,.1).pl.imshow(I1).pl.axis('off |
6960 | 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 31 27 29 0a 0a 70 6c 2e 73 75 62 70 6c | ').pl.title('Image.1')..pl.subpl |
6980 | 6f 74 28 31 2c 20 32 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 29 0a 70 6c 2e 61 78 69 | ot(1,.2,.2).pl.imshow(I2).pl.axi |
69a0 | 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 32 27 29 0a 0a 0a 23 | s('off').pl.title('Image.2')...# |
69c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
69e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
6a00 | 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 6f 74 20 6f 66 20 | #############.#.Scatter.plot.of. |
6a20 | 63 6f 6c 6f 72 73 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | colors.######################### |
6a40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
6a60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 70 6c 2e 66 69 67 75 72 65 | #####################..pl.figure |
6a80 | 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f | (2,.figsize=(6.4,.3))..pl.subplo |
6aa0 | 74 28 31 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 | t(1,.2,.1).pl.scatter(Xs[:,.0],. |
6ac0 | 58 73 5b 3a 2c 20 32 5d 2c 20 63 3d 58 73 29 0a 70 6c 2e 61 78 69 73 28 5b 30 2c 20 31 2c 20 30 | Xs[:,.2],.c=Xs).pl.axis([0,.1,.0 |
6ae0 | 2c 20 31 5d 29 0a 70 6c 2e 78 6c 61 62 65 6c 28 27 52 65 64 27 29 0a 70 6c 2e 79 6c 61 62 65 6c | ,.1]).pl.xlabel('Red').pl.ylabel |
6b00 | 28 27 42 6c 75 65 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 31 27 29 0a 0a 70 6c | ('Blue').pl.title('Image.1')..pl |
6b20 | 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b | .subplot(1,.2,.2).pl.scatter(Xt[ |
6b40 | 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 32 5d 2c 20 63 3d 58 74 29 0a 70 6c 2e 61 78 69 73 28 5b | :,.0],.Xt[:,.2],.c=Xt).pl.axis([ |
6b60 | 30 2c 20 31 2c 20 30 2c 20 31 5d 29 0a 70 6c 2e 78 6c 61 62 65 6c 28 27 52 65 64 27 29 0a 70 6c | 0,.1,.0,.1]).pl.xlabel('Red').pl |
6b80 | 2e 79 6c 61 62 65 6c 28 27 42 6c 75 65 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 | .ylabel('Blue').pl.title('Image. |
6ba0 | 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 23 23 23 | 2').pl.tight_layout()...######## |
6bc0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
6be0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
6c00 | 23 23 23 23 23 23 0a 23 20 49 6e 73 74 61 6e 74 69 61 74 65 20 74 68 65 20 64 69 66 66 65 72 65 | ######.#.Instantiate.the.differe |
6c20 | 6e 74 20 74 72 61 6e 73 70 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d 73 20 61 6e 64 20 66 69 74 20 | nt.transport.algorithms.and.fit. |
6c40 | 74 68 65 6d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | them.########################### |
6c60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
6c80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23 20 45 4d 44 54 72 61 6e 73 70 | ###################..#.EMDTransp |
6ca0 | 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 73 70 6f 72 74 28 | ort.ot_emd.=.ot.da.EMDTransport( |
6cc0 | 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 0a 0a 23 20 53 69 | ).ot_emd.fit(Xs=Xs,.Xt=Xt)..#.Si |
6ce0 | 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 6f 74 | nkhornTransport.ot_sinkhorn.=.ot |
6d00 | 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 31 | .da.SinkhornTransport(reg_e=1e-1 |
6d20 | 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 29 0a | ).ot_sinkhorn.fit(Xs=Xs,.Xt=Xt). |
6d40 | 0a 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 | .#.prediction.between.images.(us |
6d60 | 69 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 | ing.out.of.sample.prediction.as. |
6d80 | 69 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 | in.[6]).transp_Xs_emd.=.ot_emd.t |
6da0 | 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 65 6d 64 20 3d 20 | ransform(Xs=X1).transp_Xt_emd.=. |
6dc0 | 6f 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 | ot_emd.inverse_transform(Xt=X2). |
6de0 | 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 65 6d 64 2e 74 72 61 | .transp_Xs_sinkhorn.=.ot_emd.tra |
6e00 | 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 68 6f 72 6e | nsform(Xs=X1).transp_Xt_sinkhorn |
6e20 | 20 3d 20 6f 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 | .=.ot_emd.inverse_transform(Xt=X |
6e40 | 32 29 0a 0a 49 31 74 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 74 72 61 6e 73 70 5f 58 | 2)..I1t.=.minmax(mat2im(transp_X |
6e60 | 73 5f 65 6d 64 2c 20 49 31 2e 73 68 61 70 65 29 29 0a 49 32 74 20 3d 20 6d 69 6e 6d 61 78 28 6d | s_emd,.I1.shape)).I2t.=.minmax(m |
6e80 | 61 74 32 69 6d 28 74 72 61 6e 73 70 5f 58 74 5f 65 6d 64 2c 20 49 32 2e 73 68 61 70 65 29 29 0a | at2im(transp_Xt_emd,.I2.shape)). |
6ea0 | 0a 49 31 74 65 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 74 72 61 6e 73 70 5f 58 73 5f | .I1te.=.minmax(mat2im(transp_Xs_ |
6ec0 | 73 69 6e 6b 68 6f 72 6e 2c 20 49 31 2e 73 68 61 70 65 29 29 0a 49 32 74 65 20 3d 20 6d 69 6e 6d | sinkhorn,.I1.shape)).I2te.=.minm |
6ee0 | 61 78 28 6d 61 74 32 69 6d 28 74 72 61 6e 73 70 5f 58 74 5f 73 69 6e 6b 68 6f 72 6e 2c 20 49 32 | ax(mat2im(transp_Xt_sinkhorn,.I2 |
6f00 | 2e 73 68 61 70 65 29 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | .shape))...##################### |
6f20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
6f40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 | #########################.#.Plot |
6f60 | 20 6e 65 77 20 69 6d 61 67 65 73 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | .new.images.#################### |
6f80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
6fa0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 70 6c 2e 66 | ##########################..pl.f |
6fc0 | 69 67 75 72 65 28 33 2c 20 66 69 67 73 69 7a 65 3d 28 38 2c 20 34 29 29 0a 0a 70 6c 2e 73 75 62 | igure(3,.figsize=(8,.4))..pl.sub |
6fe0 | 70 6c 6f 74 28 32 2c 20 33 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 29 0a 70 6c 2e 61 | plot(2,.3,.1).pl.imshow(I1).pl.a |
7000 | 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 31 27 29 0a 0a | xis('off').pl.title('Image.1').. |
7020 | 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 | pl.subplot(2,.3,.2).pl.imshow(I1 |
7040 | 74 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 | t).pl.axis('off').pl.title('Imag |
7060 | 65 20 31 20 41 64 61 70 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 33 29 | e.1.Adapt')..pl.subplot(2,.3,.3) |
7080 | 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 74 65 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a | .pl.imshow(I1te).pl.axis('off'). |
70a0 | 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 31 20 41 64 61 70 74 20 28 72 65 67 29 27 29 0a | pl.title('Image.1.Adapt.(reg)'). |
70c0 | 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 34 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 | .pl.subplot(2,.3,.4).pl.imshow(I |
70e0 | 32 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 | 2).pl.axis('off').pl.title('Imag |
7100 | 65 20 32 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 35 29 0a 70 6c 2e 69 6d | e.2')..pl.subplot(2,.3,.5).pl.im |
7120 | 73 68 6f 77 28 49 32 74 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c | show(I2t).pl.axis('off').pl.titl |
7140 | 65 28 27 49 6d 61 67 65 20 32 20 41 64 61 70 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 | e('Image.2.Adapt')..pl.subplot(2 |
7160 | 2c 20 33 2c 20 36 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 74 65 29 0a 70 6c 2e 61 78 69 73 28 | ,.3,.6).pl.imshow(I2te).pl.axis( |
7180 | 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 32 20 41 64 61 70 74 20 28 | 'off').pl.title('Image.2.Adapt.( |
71a0 | 72 65 67 29 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 68 6f | reg)').pl.tight_layout()..pl.sho |
71c0 | 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 0b 88 21 4b a6 2f 3f c0 12 0d 00 00 12 0d 00 00 0b 00 | w().PK..........!K./?........... |
71e0 | 00 00 70 6c 6f 74 5f 57 44 41 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 | ..plot_WDA.py#.-*-.coding:.utf-8 |
7200 | 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | .-*-.""".======================= |
7220 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 57 61 73 73 65 72 73 74 65 69 6e 20 44 69 73 63 72 69 6d 69 6e | ==========.Wasserstein.Discrimin |
7240 | 61 6e 74 20 41 6e 61 6c 79 73 69 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ant.Analysis.=================== |
7260 | 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 6c | ==============..This.example.ill |
7280 | 75 73 74 72 61 74 65 20 74 68 65 20 75 73 65 20 6f 66 20 57 44 41 20 61 73 20 70 72 6f 70 6f 73 | ustrate.the.use.of.WDA.as.propos |
72a0 | 65 64 20 69 6e 20 5b 31 31 5d 2e 0a 0a 0a 5b 31 31 5d 20 46 6c 61 6d 61 72 79 2c 20 52 2e 2c 20 | ed.in.[11]....[11].Flamary,.R.,. |
72c0 | 43 75 74 75 72 69 2c 20 4d 2e 2c 20 43 6f 75 72 74 79 2c 20 4e 2e 2c 20 26 20 52 61 6b 6f 74 6f | Cuturi,.M.,.Courty,.N.,.&.Rakoto |
72e0 | 6d 61 6d 6f 6e 6a 79 2c 20 41 2e 20 28 32 30 31 36 29 2e 0a 57 61 73 73 65 72 73 74 65 69 6e 20 | mamonjy,.A..(2016)..Wasserstein. |
7300 | 44 69 73 63 72 69 6d 69 6e 61 6e 74 20 41 6e 61 6c 79 73 69 73 2e 0a 0a 22 22 22 0a 0a 23 20 41 | Discriminant.Analysis..."""..#.A |
7320 | 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 |
7340 | 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 |
7360 | 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. |
7380 | 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 0a 66 72 6f 6d 20 6f 74 2e | matplotlib.pylab.as.pl..from.ot. |
73a0 | 64 72 20 69 6d 70 6f 72 74 20 77 64 61 2c 20 66 64 61 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 | dr.import.wda,.fda...########### |
73c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
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 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 23 23 23 23 23 23 23 23 23 23 23 | ###.#.Generate.data.############ |
7420 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7440 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7460 | 23 23 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 6e 20 3d 20 31 30 30 30 20 20 23 20 | ##..#%%.parameters..n.=.1000..#. |
7480 | 6e 62 20 73 61 6d 70 6c 65 73 20 69 6e 20 73 6f 75 72 63 65 20 61 6e 64 20 74 61 72 67 65 74 20 | nb.samples.in.source.and.target. |
74a0 | 64 61 74 61 73 65 74 73 0a 6e 7a 20 3d 20 30 2e 32 0a 0a 23 20 67 65 6e 65 72 61 74 65 20 63 69 | datasets.nz.=.0.2..#.generate.ci |
74c0 | 72 63 6c 65 20 64 61 74 61 73 65 74 0a 74 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 28 | rcle.dataset.t.=.np.random.rand( |
74e0 | 6e 29 20 2a 20 32 20 2a 20 6e 70 2e 70 69 0a 79 73 20 3d 20 6e 70 2e 66 6c 6f 6f 72 28 28 6e 70 | n).*.2.*.np.pi.ys.=.np.floor((np |
7500 | 2e 61 72 61 6e 67 65 28 6e 29 20 2a 20 31 2e 30 20 2f 20 6e 20 2a 20 33 29 29 20 2b 20 31 0a 78 | .arange(n).*.1.0./.n.*.3)).+.1.x |
7520 | 73 20 3d 20 6e 70 2e 63 6f 6e 63 61 74 65 6e 61 74 65 28 0a 20 20 20 20 28 6e 70 2e 63 6f 73 28 | s.=.np.concatenate(.....(np.cos( |
7540 | 74 29 2e 72 65 73 68 61 70 65 28 28 2d 31 2c 20 31 29 29 2c 20 6e 70 2e 73 69 6e 28 74 29 2e 72 | t).reshape((-1,.1)),.np.sin(t).r |
7560 | 65 73 68 61 70 65 28 28 2d 31 2c 20 31 29 29 29 2c 20 31 29 0a 78 73 20 3d 20 78 73 20 2a 20 79 | eshape((-1,.1))),.1).xs.=.xs.*.y |
7580 | 73 2e 72 65 73 68 61 70 65 28 2d 31 2c 20 31 29 20 2b 20 6e 7a 20 2a 20 6e 70 2e 72 61 6e 64 6f | s.reshape(-1,.1).+.nz.*.np.rando |
75a0 | 6d 2e 72 61 6e 64 6e 28 6e 2c 20 32 29 0a 0a 74 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e | m.randn(n,.2)..t.=.np.random.ran |
75c0 | 64 28 6e 29 20 2a 20 32 20 2a 20 6e 70 2e 70 69 0a 79 74 20 3d 20 6e 70 2e 66 6c 6f 6f 72 28 28 | d(n).*.2.*.np.pi.yt.=.np.floor(( |
75e0 | 6e 70 2e 61 72 61 6e 67 65 28 6e 29 20 2a 20 31 2e 30 20 2f 20 6e 20 2a 20 33 29 29 20 2b 20 31 | np.arange(n).*.1.0./.n.*.3)).+.1 |
7600 | 0a 78 74 20 3d 20 6e 70 2e 63 6f 6e 63 61 74 65 6e 61 74 65 28 0a 20 20 20 20 28 6e 70 2e 63 6f | .xt.=.np.concatenate(.....(np.co |
7620 | 73 28 74 29 2e 72 65 73 68 61 70 65 28 28 2d 31 2c 20 31 29 29 2c 20 6e 70 2e 73 69 6e 28 74 29 | s(t).reshape((-1,.1)),.np.sin(t) |
7640 | 2e 72 65 73 68 61 70 65 28 28 2d 31 2c 20 31 29 29 29 2c 20 31 29 0a 78 74 20 3d 20 78 74 20 2a | .reshape((-1,.1))),.1).xt.=.xt.* |
7660 | 20 79 74 2e 72 65 73 68 61 70 65 28 2d 31 2c 20 31 29 20 2b 20 6e 7a 20 2a 20 6e 70 2e 72 61 6e | .yt.reshape(-1,.1).+.nz.*.np.ran |
7680 | 64 6f 6d 2e 72 61 6e 64 6e 28 6e 2c 20 32 29 0a 0a 6e 62 6e 6f 69 73 65 20 3d 20 38 0a 0a 78 73 | dom.randn(n,.2)..nbnoise.=.8..xs |
76a0 | 20 3d 20 6e 70 2e 68 73 74 61 63 6b 28 28 78 73 2c 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 | .=.np.hstack((xs,.np.random.rand |
76c0 | 6e 28 6e 2c 20 6e 62 6e 6f 69 73 65 29 29 29 0a 78 74 20 3d 20 6e 70 2e 68 73 74 61 63 6b 28 28 | n(n,.nbnoise))).xt.=.np.hstack(( |
76e0 | 78 74 2c 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 6e 28 6e 2c 20 6e 62 6e 6f 69 73 65 29 29 | xt,.np.random.randn(n,.nbnoise)) |
7700 | 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 | )..############################# |
7720 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7740 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 64 61 74 61 0a 23 23 | #################.#.Plot.data.## |
7760 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 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 0a 0a 23 25 25 20 70 6c 6f 74 20 73 61 6d 70 6c 65 73 0a 70 | ############..#%%.plot.samples.p |
77c0 | 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 2e 35 29 29 0a | l.figure(1,.figsize=(6.4,.3.5)). |
77e0 | 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 | .pl.subplot(1,.2,.1).pl.scatter( |
7800 | 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 | xt[:,.0],.xt[:,.1],.c=ys,.marker |
7820 | 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 6c | ='+',.label='Source.samples').pl |
7840 | 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 44 69 73 63 72 69 6d | .legend(loc=0).pl.title('Discrim |
7860 | 69 6e 61 6e 74 20 64 69 6d 65 6e 73 69 6f 6e 73 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 | inant.dimensions')..pl.subplot(1 |
7880 | 2c 20 32 2c 20 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 74 5b 3a 2c 20 32 5d 2c 20 78 74 5b | ,.2,.2).pl.scatter(xt[:,.2],.xt[ |
78a0 | 3a 2c 20 33 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 | :,.3],.c=ys,.marker='+',.label=' |
78c0 | 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 63 3d 30 | Source.samples').pl.legend(loc=0 |
78e0 | 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 74 68 65 72 20 64 69 6d 65 6e 73 69 6f 6e 73 27 29 0a 70 | ).pl.title('Other.dimensions').p |
7900 | 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 23 | l.tight_layout()..############## |
7920 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7940 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7960 | 0a 23 20 43 6f 6d 70 75 74 65 20 46 69 73 68 65 72 20 44 69 73 63 72 69 6d 69 6e 61 6e 74 20 41 | .#.Compute.Fisher.Discriminant.A |
7980 | 6e 61 6c 79 73 69 73 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | nalysis.######################## |
79a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
79c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23 25 25 20 43 6f 6d 70 | ######################..#%%.Comp |
79e0 | 75 74 65 20 46 44 41 0a 70 20 3d 20 32 0a 0a 50 66 64 61 2c 20 70 72 6f 6a 66 64 61 20 3d 20 66 | ute.FDA.p.=.2..Pfda,.projfda.=.f |
7a00 | 64 61 28 78 73 2c 20 79 73 2c 20 70 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | da(xs,.ys,.p)..################# |
7a20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7a40 | 23 23 23 23 23 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 | #############################.#. |
7a60 | 43 6f 6d 70 75 74 65 20 57 61 73 73 65 72 73 74 65 69 6e 20 44 69 73 63 72 69 6d 69 6e 61 6e 74 | Compute.Wasserstein.Discriminant |
7a80 | 20 41 6e 61 6c 79 73 69 73 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | .Analysis.###################### |
7aa0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7ac0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23 25 25 20 43 6f | ########################..#%%.Co |
7ae0 | 6d 70 75 74 65 20 57 44 41 0a 70 20 3d 20 32 0a 72 65 67 20 3d 20 31 65 30 0a 6b 20 3d 20 31 30 | mpute.WDA.p.=.2.reg.=.1e0.k.=.10 |
7b00 | 0a 6d 61 78 69 74 65 72 20 3d 20 31 30 30 0a 0a 50 77 64 61 2c 20 70 72 6f 6a 77 64 61 20 3d 20 | .maxiter.=.100..Pwda,.projwda.=. |
7b20 | 77 64 61 28 78 73 2c 20 79 73 2c 20 70 2c 20 72 65 67 2c 20 6b 2c 20 6d 61 78 69 74 65 72 3d 6d | wda(xs,.ys,.p,.reg,.k,.maxiter=m |
7b40 | 61 78 69 74 65 72 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 | axiter)...###################### |
7b60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
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 0a 23 20 50 6c 6f 74 20 | ########################.#.Plot. |
7ba0 | 32 44 20 70 72 6f 6a 65 63 74 69 6f 6e 73 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | 2D.projections.################# |
7bc0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7be0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23 | #############################..# |
7c00 | 25 25 20 70 6c 6f 74 20 73 61 6d 70 6c 65 73 0a 0a 78 73 70 20 3d 20 70 72 6f 6a 66 64 61 28 78 | %%.plot.samples..xsp.=.projfda(x |
7c20 | 73 29 0a 78 74 70 20 3d 20 70 72 6f 6a 66 64 61 28 78 74 29 0a 0a 78 73 70 77 20 3d 20 70 72 6f | s).xtp.=.projfda(xt)..xspw.=.pro |
7c40 | 6a 77 64 61 28 78 73 29 0a 78 74 70 77 20 3d 20 70 72 6f 6a 77 64 61 28 78 74 29 0a 0a 70 6c 2e | jwda(xs).xtpw.=.projwda(xt)..pl. |
7c60 | 66 69 67 75 72 65 28 32 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 31 29 0a 70 | figure(2)..pl.subplot(2,.2,.1).p |
7c80 | 6c 2e 73 63 61 74 74 65 72 28 78 73 70 5b 3a 2c 20 30 5d 2c 20 78 73 70 5b 3a 2c 20 31 5d 2c 20 | l.scatter(xsp[:,.0],.xsp[:,.1],. |
7ca0 | 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 50 72 6f 6a 65 63 74 | c=ys,.marker='+',.label='Project |
7cc0 | 65 64 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c | ed.samples').pl.legend(loc=0).pl |
7ce0 | 2e 74 69 74 6c 65 28 27 50 72 6f 6a 65 63 74 65 64 20 74 72 61 69 6e 69 6e 67 20 73 61 6d 70 6c | .title('Projected.training.sampl |
7d00 | 65 73 20 46 44 41 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 32 29 0a 70 6c | es.FDA')..pl.subplot(2,.2,.2).pl |
7d20 | 2e 73 63 61 74 74 65 72 28 78 74 70 5b 3a 2c 20 30 5d 2c 20 78 74 70 5b 3a 2c 20 31 5d 2c 20 63 | .scatter(xtp[:,.0],.xtp[:,.1],.c |
7d40 | 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 50 72 6f 6a 65 63 74 65 | =ys,.marker='+',.label='Projecte |
7d60 | 64 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e | d.samples').pl.legend(loc=0).pl. |
7d80 | 74 69 74 6c 65 28 27 50 72 6f 6a 65 63 74 65 64 20 74 65 73 74 20 73 61 6d 70 6c 65 73 20 46 44 | title('Projected.test.samples.FD |
7da0 | 41 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 33 29 0a 70 6c 2e 73 63 61 74 | A')..pl.subplot(2,.2,.3).pl.scat |
7dc0 | 74 65 72 28 78 73 70 77 5b 3a 2c 20 30 5d 2c 20 78 73 70 77 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 | ter(xspw[:,.0],.xspw[:,.1],.c=ys |
7de0 | 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 50 72 6f 6a 65 63 74 65 64 20 73 | ,.marker='+',.label='Projected.s |
7e00 | 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 |
7e20 | 6c 65 28 27 50 72 6f 6a 65 63 74 65 64 20 74 72 61 69 6e 69 6e 67 20 73 61 6d 70 6c 65 73 20 57 | le('Projected.training.samples.W |
7e40 | 44 41 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 34 29 0a 70 6c 2e 73 63 61 | DA')..pl.subplot(2,.2,.4).pl.sca |
7e60 | 74 74 65 72 28 78 74 70 77 5b 3a 2c 20 30 5d 2c 20 78 74 70 77 5b 3a 2c 20 31 5d 2c 20 63 3d 79 | tter(xtpw[:,.0],.xtpw[:,.1],.c=y |
7e80 | 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 50 72 6f 6a 65 63 74 65 64 20 | s,.marker='+',.label='Projected. |
7ea0 | 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 | samples').pl.legend(loc=0).pl.ti |
7ec0 | 74 6c 65 28 27 50 72 6f 6a 65 63 74 65 64 20 74 65 73 74 20 73 61 6d 70 6c 65 73 20 57 44 41 27 | tle('Projected.test.samples.WDA' |
7ee0 | 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 | ).pl.tight_layout()..pl.show().P |
7f00 | 4b 03 04 14 00 00 00 00 00 0b 88 21 4b ac f2 52 17 4b 0c 00 00 4b 0c 00 00 13 00 00 00 70 6c 6f | K..........!K..R.K...K.......plo |
7f20 | 74 5f 6f 70 74 69 6d 5f 4f 54 72 65 67 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 | t_optim_OTreg.py#.-*-.coding:.ut |
7f40 | 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.-*-.""".==================== |
7f60 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 65 67 75 6c 61 72 69 7a 65 64 20 4f 54 20 77 69 | ==============.Regularized.OT.wi |
7f80 | 74 68 20 67 65 6e 65 72 69 63 20 73 6f 6c 76 65 72 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | th.generic.solver.============== |
7fa0 | 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 74 65 | ====================..Illustrate |
7fc0 | 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 6f 6c 76 65 72 20 | s.the.use.of.the.generic.solver. |
7fe0 | 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 65 72 2d 64 65 73 | for.regularized.OT.with.user-des |
8000 | 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 20 49 74 20 75 73 | igned.regularization.term..It.us |
8020 | 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 20 69 6e 20 5b 36 | es.Conditional.gradient.as.in.[6 |
8040 | 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 6e 61 6c 20 47 72 | ].and.generalized.Conditional.Gr |
8060 | 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 37 5d 2e 0a 0a 0a | adient.as.proposed.in.[5][7].... |
8080 | 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 20 44 2e 20 54 75 | [5].N..Courty;.R..Flamary;.D..Tu |
80a0 | 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 6d 61 6c 20 54 72 | ia;.A..Rakotomamonjy,.Optimal.Tr |
80c0 | 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 69 6f 6e 2c 20 69 | ansport.for.Domain.Adaptation,.i |
80e0 | 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 74 65 72 6e 20 41 | n.IEEE.Transactions.on.Pattern.A |
8100 | 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 69 67 65 6e 63 65 | nalysis.and.Machine.Intelligence |
8120 | 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 0a 5b 36 5d 20 46 | .,.vol.PP,.no.99,.pp.1-1...[6].F |
8140 | 65 72 72 61 64 61 6e 73 2c 20 53 2e 2c 20 50 61 70 61 64 61 6b 69 73 2c 20 4e 2e 2c 20 50 65 79 | erradans,.S.,.Papadakis,.N.,.Pey |
8160 | 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 30 31 34 29 2e 0a | r..,.G.,.&.Aujol,.J..F..(2014).. |
8180 | 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 61 6c 20 74 72 61 | Regularized.discrete.optimal.tra |
81a0 | 6e 73 70 6f 72 74 2e 20 53 49 41 4d 20 4a 6f 75 72 6e 61 6c 20 6f 6e 20 49 6d 61 67 69 6e 67 20 | nsport..SIAM.Journal.on.Imaging. |
81c0 | 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 0a 0a 5b 37 5d 20 | Sciences,.7(3),.1853-1882...[7]. |
81e0 | 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 2c 20 52 2e 2c 20 | Rakotomamonjy,.A.,.Flamary,.R.,. |
8200 | 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 61 6c 69 7a 65 64 | &.Courty,.N..(2015)..Generalized |
8220 | 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 6c 79 73 69 73 20 | .conditional.gradient:.analysis. |
8240 | 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 74 69 6f 6e 73 2e | of.convergence.and.applications. |
8260 | 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 2e 30 36 35 36 37 | .arXiv.preprint.arXiv:1510.06567 |
8280 | 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 6e 70 0a 69 6d 70 | ....."""..import.numpy.as.np.imp |
82a0 | 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 | ort.matplotlib.pylab.as.pl.impor |
82c0 | 74 20 6f 74 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | t.ot...######################### |
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 0a 23 20 47 65 6e 65 72 61 74 65 | #####################.#.Generate |
8320 | 20 64 61 74 61 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | .data.########################## |
8340 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8360 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23 25 25 20 70 61 72 61 6d 65 | ####################..#%%.parame |
8380 | 74 65 72 73 0a 0a 6e 20 3d 20 31 30 30 20 20 23 20 6e 62 20 62 69 6e 73 0a 0a 23 20 62 69 6e 20 | ters..n.=.100..#.nb.bins..#.bin. |
83a0 | 70 6f 73 69 74 69 6f 6e 73 0a 78 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 2c 20 64 74 79 70 65 | positions.x.=.np.arange(n,.dtype |
83c0 | 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 69 62 | =np.float64)..#.Gaussian.distrib |
83e0 | 75 74 69 6f 6e 73 0a 61 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 31 44 5f 67 61 | utions.a.=.ot.datasets.get_1D_ga |
8400 | 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= |
8420 | 20 73 74 64 0a 62 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 31 44 5f 67 61 75 73 | .std.b.=.ot.datasets.get_1D_gaus |
8440 | 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. |
8460 | 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 |
8480 | 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().. |
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 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 53 6f 6c 76 65 20 45 4d 44 0a 23 23 23 23 23 | ##############.#.Solve.EMD.##### |
8500 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
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 0a 0a 23 25 25 20 45 4d 44 0a 0a 47 30 20 3d 20 6f 74 2e 65 6d 64 28 | #########..#%%.EMD..G0.=.ot.emd( |
8560 | 61 2c 20 62 2c 20 4d 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 33 2c 20 66 69 67 73 69 7a 65 3d 28 | a,.b,.M)..pl.figure(3,.figsize=( |
8580 | 35 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 | 5,.5)).ot.plot.plot1D_mat(a,.b,. |
85a0 | 47 30 2c 20 27 4f 54 20 6d 61 74 72 69 78 20 47 30 27 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 | G0,.'OT.matrix.G0')..########### |
85c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
85e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8600 | 23 23 23 0a 23 20 53 6f 6c 76 65 20 45 4d 44 20 77 69 74 68 20 46 72 6f 62 65 6e 69 75 73 20 6e | ###.#.Solve.EMD.with.Frobenius.n |
8620 | 6f 72 6d 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 | orm.regularization.############# |
8640 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8660 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8680 | 23 0a 0a 23 25 25 20 45 78 61 6d 70 6c 65 20 77 69 74 68 20 46 72 6f 62 65 6e 69 75 73 20 6e 6f | #..#%%.Example.with.Frobenius.no |
86a0 | 72 6d 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 0a 0a 64 65 66 20 66 28 47 29 3a 0a 20 20 | rm.regularization...def.f(G):... |
86c0 | 20 20 72 65 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 | ..return.0.5.*.np.sum(G**2)...de |
86e0 | 66 20 64 66 28 47 29 3a 0a 20 20 20 20 72 65 74 75 72 6e 20 47 0a 0a 0a 72 65 67 20 3d 20 31 65 | f.df(G):.....return.G...reg.=.1e |
8700 | 2d 31 0a 0a 47 6c 32 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 | -1..Gl2.=.ot.optim.cg(a,.b,.M,.r |
8720 | 65 67 2c 20 66 2c 20 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 | eg,.f,.df,.verbose=True)..pl.fig |
8740 | 75 72 65 28 33 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 | ure(3).ot.plot.plot1D_mat(a,.b,. |
8760 | 47 6c 32 2c 20 27 4f 54 20 6d 61 74 72 69 78 20 46 72 6f 62 2e 20 72 65 67 27 29 0a 0a 23 23 23 | Gl2,.'OT.matrix.Frob..reg')..### |
8780 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
87a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
87c0 | 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 53 6f 6c 76 65 20 45 4d 44 20 77 69 74 68 20 65 6e 74 | ###########.#.Solve.EMD.with.ent |
87e0 | 72 6f 70 69 63 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 23 23 23 23 23 23 23 23 23 23 23 | ropic.regularization.########### |
8800 | 23 23 23 23 23 23 23 23 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 0a 0a 23 25 25 20 45 78 61 6d 70 6c 65 20 77 69 74 68 20 65 6e 74 72 6f 70 69 63 20 72 | ###..#%%.Example.with.entropic.r |
8860 | 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 0a 0a 64 65 66 20 66 28 47 29 3a 0a 20 20 20 20 72 65 | egularization...def.f(G):.....re |
8880 | 74 75 72 6e 20 6e 70 2e 73 75 6d 28 47 20 2a 20 6e 70 2e 6c 6f 67 28 47 29 29 0a 0a 0a 64 65 66 | turn.np.sum(G.*.np.log(G))...def |
88a0 | 20 64 66 28 47 29 3a 0a 20 20 20 20 72 65 74 75 72 6e 20 6e 70 2e 6c 6f 67 28 47 29 20 2b 20 31 | .df(G):.....return.np.log(G).+.1 |
88c0 | 2e 0a 0a 0a 72 65 67 20 3d 20 31 65 2d 33 0a 0a 47 65 20 3d 20 6f 74 2e 6f 70 74 69 6d 2e 63 67 | ....reg.=.1e-3..Ge.=.ot.optim.cg |
88e0 | 28 61 2c 20 62 2c 20 4d 2c 20 72 65 67 2c 20 66 2c 20 64 66 2c 20 76 65 72 62 6f 73 65 3d 54 72 | (a,.b,.M,.reg,.f,.df,.verbose=Tr |
8900 | 75 65 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 | ue)..pl.figure(4,.figsize=(5,.5) |
8920 | 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 65 2c 20 27 | ).ot.plot.plot1D_mat(a,.b,.Ge,.' |
8940 | 4f 54 20 6d 61 74 72 69 78 20 45 6e 74 72 6f 70 2e 20 72 65 67 27 29 0a 0a 23 23 23 23 23 23 23 | OT.matrix.Entrop..reg')..####### |
8960 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8980 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
89a0 | 23 23 23 23 23 23 23 0a 23 20 53 6f 6c 76 65 20 45 4d 44 20 77 69 74 68 20 46 72 6f 62 65 6e 69 | #######.#.Solve.EMD.with.Frobeni |
89c0 | 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 74 69 6f | us.norm.+.entropic.regularizatio |
89e0 | 6e 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 | n.############################## |
8a00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8a20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23 25 25 20 45 78 61 6d 70 6c 65 20 77 69 | ################..#%%.Example.wi |
8a40 | 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 20 72 65 67 | th.Frobenius.norm.+.entropic.reg |
8a60 | 75 6c 61 72 69 7a 61 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 | ularization.with.gcg...def.f(G): |
8a80 | 0a 20 20 20 20 72 65 74 75 72 6e 20 30 2e 35 20 2a 20 6e 70 2e 73 75 6d 28 47 2a 2a 32 29 0a 0a | .....return.0.5.*.np.sum(G**2).. |
8aa0 | 0a 64 65 66 20 64 66 28 47 29 3a 0a 20 20 20 20 72 65 74 75 72 6e 20 47 0a 0a 0a 72 65 67 31 20 | .def.df(G):.....return.G...reg1. |
8ac0 | 3d 20 31 65 2d 33 0a 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 | =.1e-3.reg2.=.1e-1..Gel2.=.ot.op |
8ae0 | 74 69 6d 2e 67 63 67 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 | tim.gcg(a,.b,.M,.reg1,.reg2,.f,. |
8b00 | 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 35 2c 20 | df,.verbose=True)..pl.figure(5,. |
8b20 | 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 |
8b40 | 61 74 28 61 2c 20 62 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 | at(a,.b,.Gel2,.'OT.entropic.+.ma |
8b60 | 74 72 69 78 20 46 72 6f 62 2e 20 72 65 67 27 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 | trix.Frob..reg').pl.show().PK... |
8b80 | 00 00 00 00 00 0b 88 21 4b d5 08 34 eb 31 0a 00 00 31 0a 00 00 13 00 00 00 70 6c 6f 74 5f 63 6f | .......!K..4.1...1.......plot_co |
8ba0 | 6d 70 75 74 65 5f 65 6d 64 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 | mpute_emd.py#.-*-.coding:.utf-8. |
8bc0 | 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 0a 50 6c 6f 74 20 6d | -*-.""".=================.Plot.m |
8be0 | 75 6c 74 69 70 6c 65 20 45 4d 44 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 53 | ultiple.EMD.=================..S |
8c00 | 68 6f 77 73 20 68 6f 77 20 74 6f 20 63 6f 6d 70 75 74 65 20 6d 75 6c 74 69 70 6c 65 20 45 4d 44 | hows.how.to.compute.multiple.EMD |
8c20 | 20 61 6e 64 20 53 69 6e 6b 68 6f 72 6e 20 77 69 74 68 20 74 77 6f 20 64 69 66 66 65 72 6e 74 0a | .and.Sinkhorn.with.two.differnt. |
8c40 | 67 72 6f 75 6e 64 20 6d 65 74 72 69 63 73 20 61 6e 64 20 70 6c 6f 74 20 74 68 65 69 72 20 76 61 | ground.metrics.and.plot.their.va |
8c60 | 6c 75 65 73 20 66 6f 72 20 64 69 66 66 65 65 6e 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 2e | lues.for.diffeent.distributions. |
8c80 | 0a 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.< |
8ca0 | 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 |
8cc0 | 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 |
8ce0 | 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 |
8d00 | 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 66 72 6f 6d 20 6f 74 2e 64 61 74 61 73 65 74 73 20 69 6d 70 | l.import.ot.from.ot.datasets.imp |
8d20 | 6f 72 74 20 67 65 74 5f 31 44 5f 67 61 75 73 73 20 61 73 20 67 61 75 73 73 0a 0a 0a 23 23 23 23 | ort.get_1D_gauss.as.gauss...#### |
8d40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8d60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8d80 | 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 23 23 23 23 | ##########.#.Generate.data.##### |
8da0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8dc0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8de0 | 23 23 23 23 23 23 23 23 23 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 |
8e00 | 30 30 20 20 23 20 6e 62 20 62 69 6e 73 0a 6e 5f 74 61 72 67 65 74 20 3d 20 35 30 20 20 23 20 6e | 00..#.nb.bins.n_target.=.50..#.n |
8e20 | 62 20 74 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 0a 23 20 62 69 6e 20 70 | b.target.distributions...#.bin.p |
8e40 | 6f 73 69 74 69 6f 6e 73 0a 78 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 2c 20 64 74 79 70 65 3d | ositions.x.=.np.arange(n,.dtype= |
8e60 | 6e 70 2e 66 6c 6f 61 74 36 34 29 0a 0a 6c 73 74 5f 6d 20 3d 20 6e 70 2e 6c 69 6e 73 70 61 63 65 | np.float64)..lst_m.=.np.linspace |
8e80 | 28 32 30 2c 20 39 30 2c 20 6e 5f 74 61 72 67 65 74 29 0a 0a 23 20 47 61 75 73 73 69 61 6e 20 64 | (20,.90,.n_target)..#.Gaussian.d |
8ea0 | 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,. |
8ec0 | 73 3d 35 29 20 20 23 20 6d 3d 20 6d 65 61 6e 2c 20 73 3d 20 73 74 64 0a 0a 42 20 3d 20 6e 70 2e | s=5)..#.m=.mean,.s=.std..B.=.np. |
8ee0 | 7a 65 72 6f 73 28 28 6e 2c 20 6e 5f 74 61 72 67 65 74 29 29 0a 0a 66 6f 72 20 69 2c 20 6d 20 69 | zeros((n,.n_target))..for.i,.m.i |
8f00 | 6e 20 65 6e 75 6d 65 72 61 74 65 28 6c 73 74 5f 6d 29 3a 0a 20 20 20 20 42 5b 3a 2c 20 69 5d 20 | n.enumerate(lst_m):.....B[:,.i]. |
8f20 | 3d 20 67 61 75 73 73 28 6e 2c 20 6d 3d 6d 2c 20 73 3d 35 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 | =.gauss(n,.m=m,.s=5)..#.loss.mat |
8f40 | 72 69 78 20 61 6e 64 20 6e 6f 72 6d 61 6c 69 7a 61 74 69 6f 6e 0a 4d 20 3d 20 6f 74 2e 64 69 73 | rix.and.normalization.M.=.ot.dis |
8f60 | 74 28 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 2c 20 78 2e 72 65 73 68 61 70 65 28 28 | t(x.reshape((n,.1)),.x.reshape(( |
8f80 | 6e 2c 20 31 29 29 2c 20 27 65 75 63 6c 69 64 65 61 6e 27 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 | n,.1)),.'euclidean').M./=.M.max( |
8fa0 | 29 0a 4d 32 20 3d 20 6f 74 2e 64 69 73 74 28 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 | ).M2.=.ot.dist(x.reshape((n,.1)) |
8fc0 | 2c 20 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 2c 20 27 73 71 65 75 63 6c 69 64 65 61 | ,.x.reshape((n,.1)),.'sqeuclidea |
8fe0 | 6e 27 29 0a 4d 32 20 2f 3d 20 4d 32 2e 6d 61 78 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 | n').M2./=.M2.max()..############ |
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 0a 23 20 50 6c 6f 74 20 64 61 74 61 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ##.#.Plot.data.################# |
9060 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
9080 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23 | #############################..# |
90a0 | 25 25 20 70 6c 6f 74 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 70 6c 2e 66 69 | %%.plot.the.distributions..pl.fi |
90c0 | 67 75 72 65 28 31 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 31 2c 20 31 29 0a 70 6c 2e 70 | gure(1).pl.subplot(2,.1,.1).pl.p |
90e0 | 6c 6f 74 28 78 2c 20 61 2c 20 27 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 64 69 73 | lot(x,.a,.'b',.label='Source.dis |
9100 | 74 72 69 62 75 74 69 6f 6e 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 20 64 69 73 | tribution').pl.title('Source.dis |
9120 | 74 72 69 62 75 74 69 6f 6e 27 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 31 2c 20 32 29 0a | tribution').pl.subplot(2,.1,.2). |
9140 | 70 6c 2e 70 6c 6f 74 28 78 2c 20 42 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 64 69 73 74 | pl.plot(x,.B,.label='Target.dist |
9160 | 72 69 62 75 74 69 6f 6e 73 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 61 72 67 65 74 20 64 69 73 | ributions').pl.title('Target.dis |
9180 | 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 0a | tributions').pl.tight_layout().. |
91a0 | 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 | .############################### |
91c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
91e0 | 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 45 4d 44 20 66 6f | ###############.#.Compute.EMD.fo |
9200 | 72 20 74 68 65 20 64 69 66 66 65 72 65 6e 74 20 6c 6f 73 73 65 73 0a 23 23 23 23 23 23 23 23 23 | r.the.different.losses.######### |
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 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
9260 | 23 23 23 23 23 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 73 74 | #####..#%%.Compute.and.plot.dist |
9280 | 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 6d 64 | ributions.and.loss.matrix..d_emd |
92a0 | 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 63 6f | .=.ot.emd2(a,.B,.M)..#.direct.co |
92c0 | 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 6d 64 | mputation.of.EMD.d_emd2.=.ot.emd |
92e0 | 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 69 6f | 2(a,.B,.M2)..#.direct.computatio |
9300 | 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 75 72 | n.of.EMD.with.loss.M2...pl.figur |
9320 | 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 6c 69 | e(2).pl.plot(d_emd,.label='Eucli |
9340 | 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 65 6c | dean.EMD').pl.plot(d_emd2,.label |
9360 | 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 69 74 | ='Squared.Euclidean.EMD').pl.tit |
9380 | 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 29 0a | le('EMD.distances').pl.legend(). |
93a0 | 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 | .############################### |
93c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
93e0 | 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 |
9400 | 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 23 23 23 | rn.for.the.different.losses.#### |
9420 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
9440 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
9460 | 23 23 23 23 23 23 23 23 23 23 0a 0a 23 25 25 0a 72 65 67 20 3d 20 31 65 2d 32 0a 64 5f 73 69 6e | ##########..#%%.reg.=.1e-2.d_sin |
9480 | 6b 68 6f 72 6e 20 3d 20 6f 74 2e 73 69 6e 6b 68 6f 72 6e 32 28 61 2c 20 42 2c 20 4d 2c 20 72 65 | khorn.=.ot.sinkhorn2(a,.B,.M,.re |
94a0 | 67 29 0a 64 5f 73 69 6e 6b 68 6f 72 6e 32 20 3d 20 6f 74 2e 73 69 6e 6b 68 6f 72 6e 32 28 61 2c | g).d_sinkhorn2.=.ot.sinkhorn2(a, |
94c0 | 20 42 2c 20 4d 32 2c 20 72 65 67 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 29 0a 70 6c 2e 63 6c | .B,.M2,.reg)..pl.figure(2).pl.cl |
94e0 | 66 28 29 0a 70 6c 2e 70 6c 6f 74 28 64 5f 65 6d 64 2c 20 6c 61 62 65 6c 3d 27 45 75 63 6c 69 64 | f().pl.plot(d_emd,.label='Euclid |
9500 | 65 61 6e 20 45 4d 44 27 29 0a 70 6c 2e 70 6c 6f 74 28 64 5f 65 6d 64 32 2c 20 6c 61 62 65 6c 3d | ean.EMD').pl.plot(d_emd2,.label= |
9520 | 27 53 71 75 61 72 65 64 20 45 75 63 6c 69 64 65 61 6e 20 45 4d 44 27 29 0a 70 6c 2e 70 6c 6f 74 | 'Squared.Euclidean.EMD').pl.plot |
9540 | 28 64 5f 73 69 6e 6b 68 6f 72 6e 2c 20 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 45 75 63 6c 69 64 65 | (d_sinkhorn,.'+',.label='Euclide |
9560 | 61 6e 20 53 69 6e 6b 68 6f 72 6e 27 29 0a 70 6c 2e 70 6c 6f 74 28 64 5f 73 69 6e 6b 68 6f 72 6e | an.Sinkhorn').pl.plot(d_sinkhorn |
9580 | 32 2c 20 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 53 71 75 61 72 65 64 20 45 75 63 6c 69 64 65 61 6e | 2,.'+',.label='Squared.Euclidean |
95a0 | 20 53 69 6e 6b 68 6f 72 6e 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 45 4d 44 20 64 69 73 74 61 6e | .Sinkhorn').pl.title('EMD.distan |
95c0 | 63 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 | ces').pl.legend()..pl.show().PK. |
95e0 | 04 14 00 00 00 00 00 0a 88 21 4b 59 66 af ca 10 07 00 00 10 07 00 00 0d 00 00 00 70 6c 6f 74 5f | .........!KYf..............plot_ |
9600 | 4f 54 5f 31 44 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a | OT_1D.py#.-*-.coding:.utf-8.-*-. |
9620 | 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 31 44 20 6f 70 74 69 | """.====================.1D.opti |
9640 | 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | mal.transport.================== |
9660 | 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 68 65 | ==..This.example.illustrates.the |
9680 | 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66 20 45 4d 44 20 61 6e 64 20 53 69 6e 6b 68 6f 72 6e | .computation.of.EMD.and.Sinkhorn |
96a0 | 20 74 72 61 6e 73 70 6f 72 74 20 70 6c 61 6e 73 0a 61 6e 64 20 74 68 65 69 72 20 76 69 73 75 61 | .transport.plans.and.their.visua |
96c0 | 6c 69 7a 61 74 69 6f 6e 2e 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a 20 52 65 6d 69 20 46 | lization..."""..#.Author:.Remi.F |
96e0 | 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 | lamary.<remi.flamary@unice.fr>.# |
9700 | 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 | .#.License:.MIT.License..import. |
9720 | 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 | numpy.as.np.import.matplotlib.py |
9740 | 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 61 74 61 | lab.as.pl.import.ot.from.ot.data |
9760 | 73 65 74 73 20 69 6d 70 6f 72 74 20 67 65 74 5f 31 44 5f 67 61 75 73 73 20 61 73 20 67 61 75 73 | sets.import.get_1D_gauss.as.gaus |
9780 | 73 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | s..############################# |
97a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
97c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 | #################.#.Generate.dat |
97e0 | 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 65 | a.#.-------------...#%%.paramete |
9800 | 72 73 0a 0a 6e 20 3d 20 31 30 30 20 20 23 20 6e 62 20 62 69 6e 73 0a 0a 23 20 62 69 6e 20 70 6f | rs..n.=.100..#.nb.bins..#.bin.po |
9820 | 73 69 74 69 6f 6e 73 0a 78 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 2c 20 64 74 79 70 65 3d 6e | sitions.x.=.np.arange(n,.dtype=n |
9840 | 70 2e 66 6c 6f 61 74 36 34 29 0a 0a 23 20 47 61 75 73 73 69 61 6e 20 64 69 73 74 72 69 62 75 74 | p.float64)..#.Gaussian.distribut |
9860 | 69 6f 6e 73 0a 61 20 3d 20 67 61 75 73 73 28 6e 2c 20 6d 3d 32 30 2c 20 73 3d 35 29 20 20 23 20 | ions.a.=.gauss(n,.m=20,.s=5)..#. |
9880 | 6d 3d 20 6d 65 61 6e 2c 20 73 3d 20 73 74 64 0a 62 20 3d 20 67 61 75 73 73 28 6e 2c 20 6d 3d 36 | m=.mean,.s=.std.b.=.gauss(n,.m=6 |
98a0 | 30 2c 20 73 3d 31 30 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 20 3d 20 6f 74 2e 64 | 0,.s=10)..#.loss.matrix.M.=.ot.d |
98c0 | 69 73 74 28 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 2c 20 78 2e 72 65 73 68 61 70 65 | ist(x.reshape((n,.1)),.x.reshape |
98e0 | 28 28 6e 2c 20 31 29 29 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 29 0a 0a 0a 23 23 23 23 23 23 23 | ((n,.1))).M./=.M.max()...####### |
9900 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
9920 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
9940 | 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 61 6e 64 | #######.#.Plot.distributions.and |
9960 | 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | .loss.matrix.################### |
9980 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23 25 25 20 70 6c 6f 74 20 74 68 65 20 64 | ################..#%%.plot.the.d |
99a0 | 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 | istributions..pl.figure(1,.figsi |
99c0 | 7a 65 3d 28 36 2e 34 2c 20 33 29 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 61 2c 20 27 62 27 2c 20 | ze=(6.4,.3)).pl.plot(x,.a,.'b',. |
99e0 | 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 27 29 0a 70 6c 2e | label='Source.distribution').pl. |
9a00 | 70 6c 6f 74 28 78 2c 20 62 2c 20 27 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 64 69 | plot(x,.b,.'r',.label='Target.di |
9a20 | 73 74 72 69 62 75 74 69 6f 6e 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 29 0a 0a 23 25 25 20 70 6c | stribution').pl.legend()..#%%.pl |
9a40 | 6f 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 61 6e 64 20 6c 6f 73 73 20 6d 61 74 72 69 78 | ot.distributions.and.loss.matrix |
9a60 | 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 29 0a 6f | ..pl.figure(2,.figsize=(5,.5)).o |
9a80 | 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 4d 2c 20 27 43 6f 73 74 | t.plot.plot1D_mat(a,.b,.M,.'Cost |
9aa0 | 20 6d 61 74 72 69 78 20 4d 27 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | .matrix.M')..################### |
9ac0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
9ae0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 53 6f | ###########################.#.So |
9b00 | 6c 76 65 20 45 4d 44 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 | lve.EMD.######################## |
9b20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
9b40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23 25 25 20 45 4d 44 0a | ######################..#%%.EMD. |
9b60 | 0a 47 30 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 29 0a 0a 70 6c 2e 66 69 67 75 72 65 | .G0.=.ot.emd(a,.b,.M)..pl.figure |
9b80 | 28 33 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 | (3,.figsize=(5,.5)).ot.plot.plot |
9ba0 | 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 47 30 2c 20 27 4f 54 20 6d 61 74 72 69 78 20 47 30 27 29 | 1D_mat(a,.b,.G0,.'OT.matrix.G0') |
9bc0 | 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 | ..############################## |
9be0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
9c00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 53 6f 6c 76 65 20 53 69 6e 6b 68 6f 72 | ################.#.Solve.Sinkhor |
9c20 | 6e 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 | n.############################## |
9c40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
9c60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23 25 25 20 53 69 6e 6b 68 6f 72 6e 0a 0a | ################..#%%.Sinkhorn.. |
9c80 | 6c 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 | lambd.=.1e-3.Gs.=.ot.sinkhorn(a, |
9ca0 | 20 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 | .b,.M,.lambd,.verbose=True)..pl. |
9cc0 | 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 6c 6f | figure(4,.figsize=(5,.5)).ot.plo |
9ce0 | 74 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 | t.plot1D_mat(a,.b,.Gs,.'OT.matri |
9d00 | 78 20 53 69 6e 6b 68 6f 72 6e 27 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 | x.Sinkhorn')..pl.show().PK...... |
9d20 | 00 00 0b 88 21 4b d0 88 31 48 54 15 00 00 54 15 00 00 0f 00 00 00 70 6c 6f 74 5f 6f 74 64 61 5f | ....!K..1HT...T.......plot_otda_ |
9d40 | 64 32 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 | d2.py#.-*-.coding:.utf-8.-*-.""" |
9d60 | 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a | .==============================. |
9d80 | 4f 54 20 66 6f 72 20 65 6d 70 69 72 69 63 61 6c 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 3d | OT.for.empirical.distributions.= |
9da0 | 3d 3d 3d 3d 3d 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 | =============================..T |
9dc0 | 68 69 73 20 65 78 61 6d 70 6c 65 20 69 6e 74 72 6f 64 75 63 65 73 20 61 20 64 6f 6d 61 69 6e 20 | his.example.introduces.a.domain. |
9de0 | 61 64 61 70 74 61 74 69 6f 6e 20 69 6e 20 61 20 32 44 20 73 65 74 74 69 6e 67 2e 20 49 74 20 65 | adaptation.in.a.2D.setting..It.e |
9e00 | 78 70 6c 69 63 69 74 73 0a 74 68 65 20 70 72 6f 62 6c 65 6d 20 6f 66 20 64 6f 6d 61 69 6e 20 61 | xplicits.the.problem.of.domain.a |
9e20 | 64 61 70 74 61 74 69 6f 6e 20 61 6e 64 20 69 6e 74 72 6f 64 75 63 65 73 20 73 6f 6d 65 20 6f 70 | daptation.and.introduces.some.op |
9e40 | 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 0a 61 70 70 72 6f 61 63 68 65 73 20 74 6f 20 73 6f | timal.transport.approaches.to.so |
9e60 | 6c 76 65 20 69 74 2e 0a 0a 51 75 61 6e 74 69 74 69 65 73 20 73 75 63 68 20 61 73 20 6f 70 74 69 | lve.it...Quantities.such.as.opti |
9e80 | 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 73 2c 20 67 72 65 61 74 65 72 20 63 6f 75 70 6c 69 6e 67 20 | mal.couplings,.greater.coupling. |
9ea0 | 63 6f 65 66 66 69 63 69 65 6e 74 73 20 61 6e 64 0a 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d | coefficients.and.transported.sam |
9ec0 | 70 6c 65 73 20 61 72 65 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f | ples.are.represented.in.order.to |
9ee0 | 20 67 69 76 65 20 61 20 76 69 73 75 61 6c 20 75 6e 64 65 72 73 74 61 6e 64 69 6e 67 0a 6f 66 20 | .give.a.visual.understanding.of. |
9f00 | 77 68 61 74 20 74 68 65 20 74 72 61 6e 73 70 6f 72 74 20 6d 65 74 68 6f 64 73 20 61 72 65 20 64 | what.the.transport.methods.are.d |
9f20 | 6f 69 6e 67 2e 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 73 3a 20 52 65 6d 69 20 46 6c 61 6d 61 | oing.."""..#.Authors:.Remi.Flama |
9f40 | 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 20 | ry.<remi.flamary@unice.fr>.#.... |
9f60 | 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 68 | ......Stanislas.Chambon.<stan.ch |
9f80 | 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 49 | ambon@gmail.com>.#.#.License:.MI |
9fa0 | 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c | T.License..import.matplotlib.pyl |
9fc0 | 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 | ab.as.pl.import.ot...########### |
9fe0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
a000 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
a020 | 23 23 23 0a 23 20 67 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 23 23 23 23 23 23 23 23 23 23 23 | ###.#.generate.data.############ |
a040 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
a060 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
a080 | 23 23 0a 0a 6e 5f 73 61 6d 70 6c 65 73 5f 73 6f 75 72 63 65 20 3d 20 31 35 30 0a 6e 5f 73 61 6d | ##..n_samples_source.=.150.n_sam |
a0a0 | 70 6c 65 73 5f 74 61 72 67 65 74 20 3d 20 31 35 30 0a 0a 58 73 2c 20 79 73 20 3d 20 6f 74 2e 64 | ples_target.=.150..Xs,.ys.=.ot.d |
a0c0 | 61 74 61 73 65 74 73 2e 67 65 74 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 27 33 67 61 75 73 73 | atasets.get_data_classif('3gauss |
a0e0 | 27 2c 20 6e 5f 73 61 6d 70 6c 65 73 5f 73 6f 75 72 63 65 29 0a 58 74 2c 20 79 74 20 3d 20 6f 74 | ',.n_samples_source).Xt,.yt.=.ot |
a100 | 2e 64 61 74 61 73 65 74 73 2e 67 65 74 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 27 33 67 61 75 | .datasets.get_data_classif('3gau |
a120 | 73 73 32 27 2c 20 6e 5f 73 61 6d 70 6c 65 73 5f 74 61 72 67 65 74 29 0a 0a 23 20 43 6f 73 74 20 | ss2',.n_samples_target)..#.Cost. |
a140 | 6d 61 74 72 69 78 0a 4d 20 3d 20 6f 74 2e 64 69 73 74 28 58 73 2c 20 58 74 2c 20 6d 65 74 72 69 | matrix.M.=.ot.dist(Xs,.Xt,.metri |
a160 | 63 3d 27 73 71 65 75 63 6c 69 64 65 61 6e 27 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 | c='sqeuclidean')...############# |
a180 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
a1a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
a1c0 | 23 0a 23 20 49 6e 73 74 61 6e 74 69 61 74 65 20 74 68 65 20 64 69 66 66 65 72 65 6e 74 20 74 72 | #.#.Instantiate.the.different.tr |
a1e0 | 61 6e 73 70 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d 73 20 61 6e 64 20 66 69 74 20 74 68 65 6d 0a | ansport.algorithms.and.fit.them. |
a200 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
a220 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
a240 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23 20 45 4d 44 20 54 72 61 6e 73 70 6f 72 74 0a | ##############..#.EMD.Transport. |
a260 | 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 0a 6f 74 | ot_emd.=.ot.da.EMDTransport().ot |
a280 | 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 6b 68 6f | _emd.fit(Xs=Xs,.Xt=Xt)..#.Sinkho |
a2a0 | 72 6e 20 54 72 61 6e 73 70 6f 72 74 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 2e 64 61 | rn.Transport.ot_sinkhorn.=.ot.da |
a2c0 | 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 0a 6f | .SinkhornTransport(reg_e=1e-1).o |
a2e0 | 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 23 20 | t_sinkhorn.fit(Xs=Xs,.Xt=Xt)..#. |
a300 | 53 69 6e 6b 68 6f 72 6e 20 54 72 61 6e 73 70 6f 72 74 20 77 69 74 68 20 47 72 6f 75 70 20 6c 61 | Sinkhorn.Transport.with.Group.la |
a320 | 73 73 6f 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 6f 74 5f 6c 70 6c 31 20 3d 20 6f 74 2e | sso.regularization.ot_lpl1.=.ot. |
a340 | 64 61 2e 53 69 6e 6b 68 6f 72 6e 4c 70 6c 31 54 72 61 6e 73 70 6f 72 74 28 72 65 67 5f 65 3d 31 | da.SinkhornLpl1Transport(reg_e=1 |
a360 | 65 2d 31 2c 20 72 65 67 5f 63 6c 3d 31 65 30 29 0a 6f 74 5f 6c 70 6c 31 2e 66 69 74 28 58 73 3d | e-1,.reg_cl=1e0).ot_lpl1.fit(Xs= |
a380 | 58 73 2c 20 79 73 3d 79 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 74 72 61 6e 73 70 6f 72 74 20 73 | Xs,.ys=ys,.Xt=Xt)..#.transport.s |
a3a0 | 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 61 6d 70 6c 65 | ource.samples.onto.target.sample |
a3c0 | 73 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 | s.transp_Xs_emd.=.ot_emd.transfo |
a3e0 | 72 6d 28 58 73 3d 58 73 29 0a 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f | rm(Xs=Xs).transp_Xs_sinkhorn.=.o |
a400 | 74 5f 73 69 6e 6b 68 6f 72 6e 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 74 72 61 6e | t_sinkhorn.transform(Xs=Xs).tran |
a420 | 73 70 5f 58 73 5f 6c 70 6c 31 20 3d 20 6f 74 5f 6c 70 6c 31 2e 74 72 61 6e 73 66 6f 72 6d 28 58 | sp_Xs_lpl1.=.ot_lpl1.transform(X |
a440 | 73 3d 58 73 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | s=Xs)...######################## |
a460 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
a480 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 67 20 31 20 3a | ######################.#.Fig.1.: |
a4a0 | 20 70 6c 6f 74 73 20 73 6f 75 72 63 65 20 61 6e 64 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 | .plots.source.and.target.samples |
a4c0 | 20 2b 20 6d 61 74 72 69 78 20 6f 66 20 70 61 69 72 77 69 73 65 20 64 69 73 74 61 6e 63 65 0a 23 | .+.matrix.of.pairwise.distance.# |
a4e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
a500 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
a520 | 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 | #############..pl.figure(1,.figs |
a540 | 69 7a 65 3d 28 31 30 2c 20 31 30 29 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 31 | ize=(10,.10)).pl.subplot(2,.2,.1 |
a560 | 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 58 73 5b 3a 2c 20 31 5d 2c | ).pl.scatter(Xs[:,.0],.Xs[:,.1], |
a580 | 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 | .c=ys,.marker='+',.label='Source |
a5a0 | 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 |
a5c0 | 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 |
a5e0 | 28 27 53 6f 75 72 63 65 20 20 73 61 6d 70 6c 65 73 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 | ('Source..samples')..pl.subplot( |
a600 | 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 58 74 | 2,.2,.2).pl.scatter(Xt[:,.0],.Xt |
a620 | 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 20 6c 61 62 65 6c 3d | [:,.1],.c=yt,.marker='o',.label= |
a640 | 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 6b 73 28 5b 5d 29 0a | 'Target.samples').pl.xticks([]). |
a660 | 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 | pl.yticks([]).pl.legend(loc=0).p |
a680 | 6c 2e 74 69 74 6c 65 28 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 0a 70 6c 2e 73 75 | l.title('Target.samples')..pl.su |
a6a0 | 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 4d 2c 20 69 6e 74 65 | bplot(2,.2,.3).pl.imshow(M,.inte |
a6c0 | 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b | rpolation='nearest').pl.xticks([ |
a6e0 | 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 61 74 72 69 | ]).pl.yticks([]).pl.title('Matri |
a700 | 78 20 6f 66 20 70 61 69 72 77 69 73 65 20 64 69 73 74 61 6e 63 65 73 27 29 0a 70 6c 2e 74 69 67 | x.of.pairwise.distances').pl.tig |
a720 | 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()...################## |
a740 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
a760 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 | ############################.#.F |
a780 | 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 20 66 | ig.2.:.plots.optimal.couplings.f |
a7a0 | 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 23 23 23 23 23 23 | or.the.different.methods.####### |
a7c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
a7e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
a800 | 23 23 23 23 23 23 23 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 31 | #######..pl.figure(2,.figsize=(1 |
a820 | 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 |
a840 | 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 |
a860 | 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 |
a880 | 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 |
a8a0 | 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 |
a8c0 | 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 |
a8e0 | 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 |
a900 | 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([ |
a920 | 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 |
a940 | 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 |
a960 | 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 |
a980 | 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 |
a9a0 | 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 |
a9c0 | 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 |
a9e0 | 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,. |
aa00 | 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 |
aa20 | 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,.. |
aa40 | 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[: |
aa60 | 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 |
aa80 | 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[:, |
aaa0 | 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', |
aac0 | 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 |
aae0 | 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 |
ab00 | 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 |
ab20 | 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 |
ab40 | 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 |
ab60 | 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,. |
ab80 | 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[ |
aba0 | 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=' |
abc0 | 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[: |
abe0 | 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' |
ac00 | 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 |
ac20 | 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(' |
ac40 | 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 |
ac60 | 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 |
ac80 | 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( |
aca0 | 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 |
acc0 | 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 |
ace0 | 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 |
ad00 | 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 |
ad20 | 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=' |
ad40 | 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 |
ad60 | 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 |
ad80 | 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 |
ada0 | 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 |
adc0 | 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()...###################### |
ade0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
ae00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 67 20 33 | ########################.#.Fig.3 |
ae20 | 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 23 23 23 | .:.plot.transported.samples.#### |
ae40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
ae60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
ae80 | 23 23 23 23 23 23 23 23 23 23 0a 0a 23 20 64 69 73 70 6c 61 79 20 74 72 61 6e 73 70 6f 72 74 65 | ##########..#.display.transporte |
aea0 | 64 20 73 61 6d 70 6c 65 73 0a 70 6c 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 | d.samples.pl.figure(4,.figsize=( |
aec0 | 31 30 2c 20 34 29 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 31 29 0a 70 6c 2e 73 | 10,.4)).pl.subplot(1,.3,.1).pl.s |
aee0 | 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c | catter(Xt[:,.0],.Xt[:,.1],.c=yt, |
af00 | 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 | .marker='o',............label='T |
af20 | 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 30 2e 35 29 0a 70 6c 2e 73 63 | arget.samples',.alpha=0.5).pl.sc |
af40 | 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 | atter(transp_Xs_emd[:,.0],.trans |
af60 | 70 5f 58 73 5f 65 6d 64 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 | p_Xs_emd[:,.1],.c=ys,........... |
af80 | 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 |
afa0 | 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 |
afc0 | 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 |
afe0 | 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 |
b000 | 73 28 5b 5d 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 73 63 | s([])..pl.subplot(1,.3,.2).pl.sc |
b020 | 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,. |
b040 | 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 |
b060 | 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 |
b080 | 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 20 30 5d 2c 20 74 | tter(transp_Xs_sinkhorn[:,.0],.t |
b0a0 | 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 3d 79 73 2c 0a 20 | ransp_Xs_sinkhorn[:,.1],.c=ys,.. |
b0c0 | 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 54 72 61 | ..........marker='+',.label='Tra |
b0e0 | 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 20 73 3d 33 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 72 | nsp.samples',.s=30).pl.title('Tr |
b100 | 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 6e 73 | ansported.samples\nSinkhornTrans |
b120 | 70 6f 72 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 | port').pl.xticks([]).pl.yticks([ |
b140 | 5d 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 73 63 61 74 74 | ])..pl.subplot(1,.3,.3).pl.scatt |
b160 | 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 | er(Xt[:,.0],.Xt[:,.1],.c=yt,.mar |
b180 | 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 | ker='o',............label='Targe |
b1a0 | 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 74 74 65 | t.samples',.alpha=0.5).pl.scatte |
b1c0 | 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 61 6e 73 70 5f 58 | r(transp_Xs_lpl1[:,.0],.transp_X |
b1e0 | 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 20 20 20 20 20 6d | s_lpl1[:,.1],.c=ys,............m |
b200 | 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 | arker='+',.label='Transp.samples |
b220 | 27 2c 20 73 3d 33 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 72 61 6e 73 70 6f 72 74 65 64 20 73 | ',.s=30).pl.title('Transported.s |
b240 | 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 29 0a | amples\nSinkhornLpl1Transport'). |
b260 | 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 0a 70 6c 2e | pl.xticks([]).pl.yticks([])..pl. |
b280 | 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 01 02 14 03 14 | tight_layout().pl.show().PK..... |
b2a0 | 00 00 00 00 00 0b 88 21 4b f7 3c 08 36 45 0f 00 00 45 0f 00 00 15 00 00 00 00 00 00 00 00 00 00 | .......!K.<.6E...E.............. |
b2c0 | 00 b4 81 00 00 00 00 70 6c 6f 74 5f 62 61 72 79 63 65 6e 74 65 72 5f 31 44 2e 70 79 50 4b 01 02 | .......plot_barycenter_1D.pyPK.. |
b2e0 | 14 03 14 00 00 00 00 00 0b 88 21 4b 0a 2e ad 80 b8 10 00 00 b8 10 00 00 14 00 00 00 00 00 00 00 | ..........!K.................... |
b300 | 00 00 00 00 b4 81 78 0f 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 6d 61 70 70 69 6e 67 2e 70 79 50 4b | ......x...plot_otda_mapping.pyPK |
b320 | 01 02 14 03 14 00 00 00 00 00 0b 88 21 4b b7 26 0b b3 8b 11 00 00 8b 11 00 00 14 00 00 00 00 00 | ............!K.&................ |
b340 | 00 00 00 00 00 00 b4 81 62 20 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 63 6c 61 73 73 65 73 2e 70 79 | ........b...plot_otda_classes.py |
b360 | 50 4b 01 02 14 03 14 00 00 00 00 00 0b 88 21 4b 57 2f 82 87 43 0a 00 00 43 0a 00 00 15 00 00 00 | PK............!KW/..C...C....... |
b380 | 00 00 00 00 00 00 00 00 b4 81 1f 32 00 00 70 6c 6f 74 5f 4f 54 5f 32 44 5f 73 61 6d 70 6c 65 73 | ...........2..plot_OT_2D_samples |
b3a0 | 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 0b 88 21 4b 0a f1 8e 4a 3a 14 00 00 3a 14 00 00 13 | .pyPK............!K...J:...:.... |
b3c0 | 00 00 00 00 00 00 00 00 00 00 00 b4 81 95 3c 00 00 70 6c 6f 74 5f 4f 54 5f 4c 31 5f 76 73 5f 4c | ..............<..plot_OT_L1_vs_L |
b3e0 | 32 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 0b 88 21 4b 8e 86 6b 49 44 11 00 00 44 11 00 00 | 2.pyPK............!K..kID...D... |
b400 | 22 00 00 00 00 00 00 00 00 00 00 00 b4 81 00 51 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 6d 61 70 70 | "..............Q..plot_otda_mapp |
b420 | 69 6e 67 5f 63 6f 6c 6f 72 73 5f 69 6d 61 67 65 73 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 | ing_colors_images.pyPK.......... |
b440 | 0b 88 21 4b 77 57 0d 45 09 0f 00 00 09 0f 00 00 19 00 00 00 00 00 00 00 00 00 00 00 b4 81 84 62 | ..!KwW.E.......................b |
b460 | 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 63 6f 6c 6f 72 5f 69 6d 61 67 65 73 2e 70 79 50 4b 01 02 14 | ..plot_otda_color_images.pyPK... |
b480 | 03 14 00 00 00 00 00 0b 88 21 4b a6 2f 3f c0 12 0d 00 00 12 0d 00 00 0b 00 00 00 00 00 00 00 00 | .........!K./?.................. |
b4a0 | 00 00 00 b4 81 c4 71 00 00 70 6c 6f 74 5f 57 44 41 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 | ......q..plot_WDA.pyPK.......... |
b4c0 | 0b 88 21 4b ac f2 52 17 4b 0c 00 00 4b 0c 00 00 13 00 00 00 00 00 00 00 00 00 00 00 b4 81 ff 7e | ..!K..R.K...K..................~ |
b4e0 | 00 00 70 6c 6f 74 5f 6f 70 74 69 6d 5f 4f 54 72 65 67 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 | ..plot_optim_OTreg.pyPK......... |
b500 | 00 0b 88 21 4b d5 08 34 eb 31 0a 00 00 31 0a 00 00 13 00 00 00 00 00 00 00 00 00 00 00 b4 81 7b | ...!K..4.1...1.................{ |
b520 | 8b 00 00 70 6c 6f 74 5f 63 6f 6d 70 75 74 65 5f 65 6d 64 2e 70 79 50 4b 01 02 14 03 14 00 00 00 | ...plot_compute_emd.pyPK........ |
b540 | 00 00 0a 88 21 4b 59 66 af ca 10 07 00 00 10 07 00 00 0d 00 00 00 00 00 00 00 00 00 00 00 b4 81 | ....!KYf........................ |
b560 | dd 95 00 00 70 6c 6f 74 5f 4f 54 5f 31 44 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 0b 88 21 | ....plot_OT_1D.pyPK............! |
b580 | 4b d0 88 31 48 54 15 00 00 54 15 00 00 0f 00 00 00 00 00 00 00 00 00 00 00 b4 81 18 9d 00 00 70 | K..1HT...T.....................p |
b5a0 | 6c 6f 74 5f 6f 74 64 61 5f 64 32 2e 70 79 50 4b 05 06 00 00 00 00 0c 00 0c 00 15 03 00 00 99 b2 | lot_otda_d2.pyPK................ |
b5c0 | 00 00 00 00 | .... |