ofs | hex dump | ascii |
---|
0000 | 50 4b 03 04 14 00 00 00 00 00 90 53 be 4c c6 3b 52 da f3 0a 00 00 f3 0a 00 00 0e 00 00 00 70 6c | PK.........S.L.;R.............pl |
0020 | 6f 74 5f 67 72 6f 6d 6f 76 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 | ot_gromov.py#.-*-.coding:.utf-8. |
0040 | 2d 2a 2d 0d 0a 22 22 22 0d 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | -*-.."""..====================== |
0060 | 3d 3d 3d 3d 0d 0a 47 72 6f 6d 6f 76 2d 57 61 73 73 65 72 73 74 65 69 6e 20 65 78 61 6d 70 6c 65 | ====..Gromov-Wasserstein.example |
0080 | 0d 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 0d 0a | ..==========================.... |
00a0 | 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 73 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73 68 6f 77 | This.example.is.designed.to.show |
00c0 | 20 68 6f 77 20 74 6f 20 75 73 65 20 74 68 65 20 47 72 6f 6d 6f 76 2d 57 61 73 73 65 72 74 73 65 | .how.to.use.the.Gromov-Wassertse |
00e0 | 69 6e 20 64 69 73 74 61 6e 63 65 0d 0a 63 6f 6d 70 75 74 61 74 69 6f 6e 20 69 6e 20 50 4f 54 2e | in.distance..computation.in.POT. |
0100 | 0d 0a 22 22 22 0d 0a 0d 0a 23 20 41 75 74 68 6f 72 3a 20 45 72 77 61 6e 20 56 61 75 74 69 65 72 | .."""....#.Author:.Erwan.Vautier |
0120 | 20 3c 65 72 77 61 6e 2e 76 61 75 74 69 65 72 40 67 6d 61 69 6c 2e 63 6f 6d 3e 0d 0a 23 20 20 20 | .<erwan.vautier@gmail.com>..#... |
0140 | 20 20 20 20 20 20 4e 69 63 6f 6c 61 73 20 43 6f 75 72 74 79 20 3c 6e 63 6f 75 72 74 79 40 69 72 | ......Nicolas.Courty.<ncourty@ir |
0160 | 69 73 61 2e 66 72 3e 0d 0a 23 0d 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e | isa.fr>..#..#.License:.MIT.Licen |
0180 | 73 65 0d 0a 0d 0a 69 6d 70 6f 72 74 20 73 63 69 70 79 20 61 73 20 73 70 0d 0a 69 6d 70 6f 72 74 | se....import.scipy.as.sp..import |
01a0 | 20 6e 75 6d 70 79 20 61 73 20 6e 70 0d 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e | .numpy.as.np..import.matplotlib. |
01c0 | 70 79 6c 61 62 20 61 73 20 70 6c 0d 0a 66 72 6f 6d 20 6d 70 6c 5f 74 6f 6f 6c 6b 69 74 73 2e 6d | pylab.as.pl..from.mpl_toolkits.m |
01e0 | 70 6c 6f 74 33 64 20 69 6d 70 6f 72 74 20 41 78 65 73 33 44 20 20 23 20 6e 6f 71 61 0d 0a 69 6d | plot3d.import.Axes3D..#.noqa..im |
0200 | 70 6f 72 74 20 6f 74 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | port.ot....##################### |
0220 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
0240 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 23 0d 0a 23 20 53 | ########################..#..#.S |
0260 | 61 6d 70 6c 65 20 74 77 6f 20 47 61 75 73 73 69 61 6e 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 | ample.two.Gaussian.distributions |
0280 | 20 28 32 44 20 61 6e 64 20 33 44 29 0d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | .(2D.and.3D)..#.---------------- |
02a0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 | -----------------------------..# |
02c0 | 0d 0a 23 20 54 68 65 20 47 72 6f 6d 6f 76 2d 57 61 73 73 65 72 73 74 65 69 6e 20 64 69 73 74 61 | ..#.The.Gromov-Wasserstein.dista |
02e0 | 6e 63 65 20 61 6c 6c 6f 77 73 20 74 6f 20 63 6f 6d 70 75 74 65 20 64 69 73 74 61 6e 63 65 73 20 | nce.allows.to.compute.distances. |
0300 | 77 69 74 68 20 73 61 6d 70 6c 65 73 20 74 68 61 74 0d 0a 23 20 64 6f 20 6e 6f 74 20 62 65 6c 6f | with.samples.that..#.do.not.belo |
0320 | 6e 67 20 74 6f 20 74 68 65 20 73 61 6d 65 20 6d 65 74 72 69 63 20 73 70 61 63 65 2e 20 46 6f 72 | ng.to.the.same.metric.space..For |
0340 | 20 64 65 6d 6f 6e 73 74 72 61 74 69 6f 6e 20 70 75 72 70 6f 73 65 2c 20 77 65 20 73 61 6d 70 6c | .demonstration.purpose,.we.sampl |
0360 | 65 0d 0a 23 20 74 77 6f 20 47 61 75 73 73 69 61 6e 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 | e..#.two.Gaussian.distributions. |
0380 | 69 6e 20 32 2d 20 61 6e 64 20 33 2d 64 69 6d 65 6e 73 69 6f 6e 61 6c 20 73 70 61 63 65 73 2e 0d | in.2-.and.3-dimensional.spaces.. |
03a0 | 0a 0d 0a 0d 0a 6e 5f 73 61 6d 70 6c 65 73 20 3d 20 33 30 20 20 23 20 6e 62 20 73 61 6d 70 6c 65 | .....n_samples.=.30..#.nb.sample |
03c0 | 73 0d 0a 0d 0a 6d 75 5f 73 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 30 2c 20 30 5d 29 0d 0a 63 6f | s....mu_s.=.np.array([0,.0])..co |
03e0 | 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 5d 5d 29 | v_s.=.np.array([[1,.0],.[0,.1]]) |
0400 | 0d 0a 0d 0a 6d 75 5f 74 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 34 2c 20 34 2c 20 34 5d 29 0d 0a | ....mu_t.=.np.array([4,.4,.4]).. |
0420 | 63 6f 76 5f 74 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 5b 31 2c 20 30 2c 20 30 5d 2c 20 5b 30 2c | cov_t.=.np.array([[1,.0,.0],.[0, |
0440 | 20 31 2c 20 30 5d 2c 20 5b 30 2c 20 30 2c 20 31 5d 5d 29 0d 0a 0d 0a 0d 0a 78 73 20 3d 20 6f 74 | .1,.0],.[0,.0,.1]])......xs.=.ot |
0460 | 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 32 44 5f 73 61 6d 70 6c 65 73 5f 67 61 75 73 73 28 | .datasets.make_2D_samples_gauss( |
0480 | 6e 5f 73 61 6d 70 6c 65 73 2c 20 6d 75 5f 73 2c 20 63 6f 76 5f 73 29 0d 0a 50 20 3d 20 73 70 2e | n_samples,.mu_s,.cov_s)..P.=.sp. |
04a0 | 6c 69 6e 61 6c 67 2e 73 71 72 74 6d 28 63 6f 76 5f 74 29 0d 0a 78 74 20 3d 20 6e 70 2e 72 61 6e | linalg.sqrtm(cov_t)..xt.=.np.ran |
04c0 | 64 6f 6d 2e 72 61 6e 64 6e 28 6e 5f 73 61 6d 70 6c 65 73 2c 20 33 29 2e 64 6f 74 28 50 29 20 2b | dom.randn(n_samples,.3).dot(P).+ |
04e0 | 20 6d 75 5f 74 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | .mu_t....####################### |
0500 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
0520 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 23 0d 0a 23 20 50 6c 6f | ######################..#..#.Plo |
0540 | 74 74 69 6e 67 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0d 0a 23 20 2d 2d 2d 2d 2d | tting.the.distributions..#.----- |
0560 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 0d 0a 66 69 67 20 3d | ---------------------......fig.= |
0580 | 20 70 6c 2e 66 69 67 75 72 65 28 29 0d 0a 61 78 31 20 3d 20 66 69 67 2e 61 64 64 5f 73 75 62 70 | .pl.figure()..ax1.=.fig.add_subp |
05a0 | 6c 6f 74 28 31 32 31 29 0d 0a 61 78 31 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b | lot(121)..ax1.plot(xs[:,.0],.xs[ |
05c0 | 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 70 6c | :,.1],.'+b',.label='Source.sampl |
05e0 | 65 73 27 29 0d 0a 61 78 32 20 3d 20 66 69 67 2e 61 64 64 5f 73 75 62 70 6c 6f 74 28 31 32 32 2c | es')..ax2.=.fig.add_subplot(122, |
0600 | 20 70 72 6f 6a 65 63 74 69 6f 6e 3d 27 33 64 27 29 0d 0a 61 78 32 2e 73 63 61 74 74 65 72 28 78 | .projection='3d')..ax2.scatter(x |
0620 | 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 78 74 5b 3a 2c 20 32 5d 2c 20 63 6f 6c | t[:,.0],.xt[:,.1],.xt[:,.2],.col |
0640 | 6f 72 3d 27 72 27 29 0d 0a 70 6c 2e 73 68 6f 77 28 29 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 | or='r')..pl.show()....########## |
0660 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
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 0d 0a 23 0d 0a 23 20 43 6f 6d 70 75 74 65 20 64 69 73 74 61 6e 63 65 20 6b 65 72 6e 65 | ###..#..#.Compute.distance.kerne |
06c0 | 6c 73 2c 20 6e 6f 72 6d 61 6c 69 7a 65 20 74 68 65 6d 20 61 6e 64 20 74 68 65 6e 20 64 69 73 70 | ls,.normalize.them.and.then.disp |
06e0 | 6c 61 79 0d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | lay..#.------------------------- |
0700 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
0720 | 0d 0a 0d 0a 0d 0a 43 31 20 3d 20 73 70 2e 73 70 61 74 69 61 6c 2e 64 69 73 74 61 6e 63 65 2e 63 | ......C1.=.sp.spatial.distance.c |
0740 | 64 69 73 74 28 78 73 2c 20 78 73 29 0d 0a 43 32 20 3d 20 73 70 2e 73 70 61 74 69 61 6c 2e 64 69 | dist(xs,.xs)..C2.=.sp.spatial.di |
0760 | 73 74 61 6e 63 65 2e 63 64 69 73 74 28 78 74 2c 20 78 74 29 0d 0a 0d 0a 43 31 20 2f 3d 20 43 31 | stance.cdist(xt,.xt)....C1./=.C1 |
0780 | 2e 6d 61 78 28 29 0d 0a 43 32 20 2f 3d 20 43 32 2e 6d 61 78 28 29 0d 0a 0d 0a 70 6c 2e 66 69 67 | .max()..C2./=.C2.max()....pl.fig |
07a0 | 75 72 65 28 29 0d 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 32 31 29 0d 0a 70 6c 2e 69 6d 73 68 6f | ure()..pl.subplot(121)..pl.imsho |
07c0 | 77 28 43 31 29 0d 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 32 32 29 0d 0a 70 6c 2e 69 6d 73 68 6f | w(C1)..pl.subplot(122)..pl.imsho |
07e0 | 77 28 43 32 29 0d 0a 70 6c 2e 73 68 6f 77 28 29 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 | w(C2)..pl.show()....############ |
0800 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
0820 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
0840 | 23 0d 0a 23 0d 0a 23 20 43 6f 6d 70 75 74 65 20 47 72 6f 6d 6f 76 2d 57 61 73 73 65 72 73 74 65 | #..#..#.Compute.Gromov-Wasserste |
0860 | 69 6e 20 70 6c 61 6e 73 20 61 6e 64 20 64 69 73 74 61 6e 63 65 0d 0a 23 20 2d 2d 2d 2d 2d 2d 2d | in.plans.and.distance..#.------- |
0880 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
08a0 | 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 70 20 3d 20 6f 74 2e 75 6e 69 66 28 6e 5f 73 61 6d 70 6c 65 73 29 | ------....p.=.ot.unif(n_samples) |
08c0 | 0d 0a 71 20 3d 20 6f 74 2e 75 6e 69 66 28 6e 5f 73 61 6d 70 6c 65 73 29 0d 0a 0d 0a 67 77 30 2c | ..q.=.ot.unif(n_samples)....gw0, |
08e0 | 20 6c 6f 67 30 20 3d 20 6f 74 2e 67 72 6f 6d 6f 76 2e 67 72 6f 6d 6f 76 5f 77 61 73 73 65 72 73 | .log0.=.ot.gromov.gromov_wassers |
0900 | 74 65 69 6e 28 0d 0a 20 20 20 20 43 31 2c 20 43 32 2c 20 70 2c 20 71 2c 20 27 73 71 75 61 72 65 | tein(......C1,.C2,.p,.q,.'square |
0920 | 5f 6c 6f 73 73 27 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 2c 20 6c 6f 67 3d 54 72 75 65 29 0d | _loss',.verbose=True,.log=True). |
0940 | 0a 0d 0a 67 77 2c 20 6c 6f 67 20 3d 20 6f 74 2e 67 72 6f 6d 6f 76 2e 65 6e 74 72 6f 70 69 63 5f | ...gw,.log.=.ot.gromov.entropic_ |
0960 | 67 72 6f 6d 6f 76 5f 77 61 73 73 65 72 73 74 65 69 6e 28 0d 0a 20 20 20 20 43 31 2c 20 43 32 2c | gromov_wasserstein(......C1,.C2, |
0980 | 20 70 2c 20 71 2c 20 27 73 71 75 61 72 65 5f 6c 6f 73 73 27 2c 20 65 70 73 69 6c 6f 6e 3d 35 65 | .p,.q,.'square_loss',.epsilon=5e |
09a0 | 2d 34 2c 20 6c 6f 67 3d 54 72 75 65 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0d 0a 0d 0a 0d | -4,.log=True,.verbose=True)..... |
09c0 | 0a 70 72 69 6e 74 28 27 47 72 6f 6d 6f 76 2d 57 61 73 73 65 72 73 74 65 69 6e 20 64 69 73 74 61 | .print('Gromov-Wasserstein.dista |
09e0 | 6e 63 65 73 3a 20 27 20 2b 20 73 74 72 28 6c 6f 67 30 5b 27 67 77 5f 64 69 73 74 27 5d 29 29 0d | nces:.'.+.str(log0['gw_dist'])). |
0a00 | 0a 70 72 69 6e 74 28 27 45 6e 74 72 6f 70 69 63 20 47 72 6f 6d 6f 76 2d 57 61 73 73 65 72 73 74 | .print('Entropic.Gromov-Wasserst |
0a20 | 65 69 6e 20 64 69 73 74 61 6e 63 65 73 3a 20 27 20 2b 20 73 74 72 28 6c 6f 67 5b 27 67 77 5f 64 | ein.distances:.'.+.str(log['gw_d |
0a40 | 69 73 74 27 5d 29 29 0d 0a 0d 0a 0d 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 28 31 30 2c 20 35 | ist']))......pl.figure(1,.(10,.5 |
0a60 | 29 29 0d 0a 0d 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0d 0a 70 6c 2e 69 6d | ))....pl.subplot(1,.2,.1)..pl.im |
0a80 | 73 68 6f 77 28 67 77 30 2c 20 63 6d 61 70 3d 27 6a 65 74 27 29 0d 0a 70 6c 2e 74 69 74 6c 65 28 | show(gw0,.cmap='jet')..pl.title( |
0aa0 | 27 47 72 6f 6d 6f 76 20 57 61 73 73 65 72 73 74 65 69 6e 27 29 0d 0a 0d 0a 70 6c 2e 73 75 62 70 | 'Gromov.Wasserstein')....pl.subp |
0ac0 | 6c 6f 74 28 31 2c 20 32 2c 20 32 29 0d 0a 70 6c 2e 69 6d 73 68 6f 77 28 67 77 2c 20 63 6d 61 70 | lot(1,.2,.2)..pl.imshow(gw,.cmap |
0ae0 | 3d 27 6a 65 74 27 29 0d 0a 70 6c 2e 74 69 74 6c 65 28 27 45 6e 74 72 6f 70 69 63 20 47 72 6f 6d | ='jet')..pl.title('Entropic.Grom |
0b00 | 6f 76 20 57 61 73 73 65 72 73 74 65 69 6e 27 29 0d 0a 0d 0a 70 6c 2e 73 68 6f 77 28 29 0d 0a 50 | ov.Wasserstein')....pl.show()..P |
0b20 | 4b 03 04 14 00 00 00 00 00 91 53 be 4c a4 4f 47 3f 0c 0c 00 00 0c 0c 00 00 0b 00 00 00 70 6c 6f | K.........S.L.OG?............plo |
0b40 | 74 5f 57 44 41 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a | t_WDA.py#.-*-.coding:.utf-8.-*-. |
0b60 | 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | """.============================ |
0b80 | 3d 3d 3d 3d 3d 0a 57 61 73 73 65 72 73 74 65 69 6e 20 44 69 73 63 72 69 6d 69 6e 61 6e 74 20 41 | =====.Wasserstein.Discriminant.A |
0ba0 | 6e 61 6c 79 73 69 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | nalysis.======================== |
0bc0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 6c 6c 75 73 74 72 61 | =========..This.example.illustra |
0be0 | 74 65 20 74 68 65 20 75 73 65 20 6f 66 20 57 44 41 20 61 73 20 70 72 6f 70 6f 73 65 64 20 69 6e | te.the.use.of.WDA.as.proposed.in |
0c00 | 20 5b 31 31 5d 2e 0a 0a 0a 5b 31 31 5d 20 46 6c 61 6d 61 72 79 2c 20 52 2e 2c 20 43 75 74 75 72 | .[11]....[11].Flamary,.R.,.Cutur |
0c20 | 69 2c 20 4d 2e 2c 20 43 6f 75 72 74 79 2c 20 4e 2e 2c 20 26 20 52 61 6b 6f 74 6f 6d 61 6d 6f 6e | i,.M.,.Courty,.N.,.&.Rakotomamon |
0c40 | 6a 79 2c 20 41 2e 20 28 32 30 31 36 29 2e 0a 57 61 73 73 65 72 73 74 65 69 6e 20 44 69 73 63 72 | jy,.A..(2016)..Wasserstein.Discr |
0c60 | 69 6d 69 6e 61 6e 74 20 41 6e 61 6c 79 73 69 73 2e 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 | iminant.Analysis..."""..#.Author |
0c80 | 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 | :.Remi.Flamary.<remi.flamary@uni |
0ca0 | 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 0a | ce.fr>.#.#.License:.MIT.License. |
0cc0 | 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c | .import.numpy.as.np.import.matpl |
0ce0 | 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 0a 66 72 6f 6d 20 6f 74 2e 64 72 20 69 6d | otlib.pylab.as.pl..from.ot.dr.im |
0d00 | 70 6f 72 74 20 77 64 61 2c 20 66 64 61 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | port.wda,.fda...################ |
0d20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
0d40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 | ##############################.# |
0d60 | 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a | .Generate.data.#.-------------.. |
0d80 | 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 6e 20 3d 20 31 30 30 30 20 20 23 20 6e 62 20 73 | #%%.parameters..n.=.1000..#.nb.s |
0da0 | 61 6d 70 6c 65 73 20 69 6e 20 73 6f 75 72 63 65 20 61 6e 64 20 74 61 72 67 65 74 20 64 61 74 61 | amples.in.source.and.target.data |
0dc0 | 73 65 74 73 0a 6e 7a 20 3d 20 30 2e 32 0a 0a 23 20 67 65 6e 65 72 61 74 65 20 63 69 72 63 6c 65 | sets.nz.=.0.2..#.generate.circle |
0de0 | 20 64 61 74 61 73 65 74 0a 74 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 28 6e 29 20 2a | .dataset.t.=.np.random.rand(n).* |
0e00 | 20 32 20 2a 20 6e 70 2e 70 69 0a 79 73 20 3d 20 6e 70 2e 66 6c 6f 6f 72 28 28 6e 70 2e 61 72 61 | .2.*.np.pi.ys.=.np.floor((np.ara |
0e20 | 6e 67 65 28 6e 29 20 2a 20 31 2e 30 20 2f 20 6e 20 2a 20 33 29 29 20 2b 20 31 0a 78 73 20 3d 20 | nge(n).*.1.0./.n.*.3)).+.1.xs.=. |
0e40 | 6e 70 2e 63 6f 6e 63 61 74 65 6e 61 74 65 28 0a 20 20 20 20 28 6e 70 2e 63 6f 73 28 74 29 2e 72 | np.concatenate(.....(np.cos(t).r |
0e60 | 65 73 68 61 70 65 28 28 2d 31 2c 20 31 29 29 2c 20 6e 70 2e 73 69 6e 28 74 29 2e 72 65 73 68 61 | eshape((-1,.1)),.np.sin(t).resha |
0e80 | 70 65 28 28 2d 31 2c 20 31 29 29 29 2c 20 31 29 0a 78 73 20 3d 20 78 73 20 2a 20 79 73 2e 72 65 | pe((-1,.1))),.1).xs.=.xs.*.ys.re |
0ea0 | 73 68 61 70 65 28 2d 31 2c 20 31 29 20 2b 20 6e 7a 20 2a 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 | shape(-1,.1).+.nz.*.np.random.ra |
0ec0 | 6e 64 6e 28 6e 2c 20 32 29 0a 0a 74 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 28 6e 29 | ndn(n,.2)..t.=.np.random.rand(n) |
0ee0 | 20 2a 20 32 20 2a 20 6e 70 2e 70 69 0a 79 74 20 3d 20 6e 70 2e 66 6c 6f 6f 72 28 28 6e 70 2e 61 | .*.2.*.np.pi.yt.=.np.floor((np.a |
0f00 | 72 61 6e 67 65 28 6e 29 20 2a 20 31 2e 30 20 2f 20 6e 20 2a 20 33 29 29 20 2b 20 31 0a 78 74 20 | range(n).*.1.0./.n.*.3)).+.1.xt. |
0f20 | 3d 20 6e 70 2e 63 6f 6e 63 61 74 65 6e 61 74 65 28 0a 20 20 20 20 28 6e 70 2e 63 6f 73 28 74 29 | =.np.concatenate(.....(np.cos(t) |
0f40 | 2e 72 65 73 68 61 70 65 28 28 2d 31 2c 20 31 29 29 2c 20 6e 70 2e 73 69 6e 28 74 29 2e 72 65 73 | .reshape((-1,.1)),.np.sin(t).res |
0f60 | 68 61 70 65 28 28 2d 31 2c 20 31 29 29 29 2c 20 31 29 0a 78 74 20 3d 20 78 74 20 2a 20 79 74 2e | hape((-1,.1))),.1).xt.=.xt.*.yt. |
0f80 | 72 65 73 68 61 70 65 28 2d 31 2c 20 31 29 20 2b 20 6e 7a 20 2a 20 6e 70 2e 72 61 6e 64 6f 6d 2e | reshape(-1,.1).+.nz.*.np.random. |
0fa0 | 72 61 6e 64 6e 28 6e 2c 20 32 29 0a 0a 6e 62 6e 6f 69 73 65 20 3d 20 38 0a 0a 78 73 20 3d 20 6e | randn(n,.2)..nbnoise.=.8..xs.=.n |
0fc0 | 70 2e 68 73 74 61 63 6b 28 28 78 73 2c 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 6e 28 6e 2c | p.hstack((xs,.np.random.randn(n, |
0fe0 | 20 6e 62 6e 6f 69 73 65 29 29 29 0a 78 74 20 3d 20 6e 70 2e 68 73 74 61 63 6b 28 28 78 74 2c 20 | .nbnoise))).xt.=.np.hstack((xt,. |
1000 | 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 6e 28 6e 2c 20 6e 62 6e 6f 69 73 65 29 29 29 0a 0a 23 | np.random.randn(n,.nbnoise)))..# |
1020 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
1040 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
1060 | 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 64 61 74 61 0a 23 20 2d 2d 2d 2d | #############.#.Plot.data.#.---- |
1080 | 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 6c 6f 74 20 73 61 6d 70 6c 65 73 0a 70 6c 2e 66 69 67 75 72 | -----..#%%.plot.samples.pl.figur |
10a0 | 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 2e 35 29 29 0a 0a 70 6c 2e 73 75 62 | e(1,.figsize=(6.4,.3.5))..pl.sub |
10c0 | 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 74 5b 3a 2c 20 30 | plot(1,.2,.1).pl.scatter(xt[:,.0 |
10e0 | 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c | ],.xt[:,.1],.c=ys,.marker='+',.l |
1100 | 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 | abel='Source.samples').pl.legend |
1120 | 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 44 69 73 63 72 69 6d 69 6e 61 6e 74 20 64 | (loc=0).pl.title('Discriminant.d |
1140 | 69 6d 65 6e 73 69 6f 6e 73 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 32 29 | imensions')..pl.subplot(1,.2,.2) |
1160 | 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 74 5b 3a 2c 20 32 5d 2c 20 78 74 5b 3a 2c 20 33 5d 2c 20 | .pl.scatter(xt[:,.2],.xt[:,.3],. |
1180 | 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 20 | c=ys,.marker='+',.label='Source. |
11a0 | 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 |
11c0 | 74 6c 65 28 27 4f 74 68 65 72 20 64 69 6d 65 6e 73 69 6f 6e 73 27 29 0a 70 6c 2e 74 69 67 68 74 | tle('Other.dimensions').pl.tight |
11e0 | 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 23 | _layout()..##################### |
1200 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
1220 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 43 6f 6d 70 | #########################.#.Comp |
1240 | 75 74 65 20 46 69 73 68 65 72 20 44 69 73 63 72 69 6d 69 6e 61 6e 74 20 41 6e 61 6c 79 73 69 73 | ute.Fisher.Discriminant.Analysis |
1260 | 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | .#.----------------------------- |
1280 | 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 43 6f 6d 70 75 74 65 20 46 44 41 0a 70 20 3d 20 32 0a 0a | -------..#%%.Compute.FDA.p.=.2.. |
12a0 | 50 66 64 61 2c 20 70 72 6f 6a 66 64 61 20 3d 20 66 64 61 28 78 73 2c 20 79 73 2c 20 70 29 0a 0a | Pfda,.projfda.=.fda(xs,.ys,.p).. |
12c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
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 0a 23 20 43 6f 6d 70 75 74 65 20 57 61 73 73 65 72 73 | ##############.#.Compute.Wassers |
1320 | 74 65 69 6e 20 44 69 73 63 72 69 6d 69 6e 61 6e 74 20 41 6e 61 6c 79 73 69 73 0a 23 20 2d 2d 2d | tein.Discriminant.Analysis.#.--- |
1340 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
1360 | 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 43 6f 6d 70 75 74 65 20 57 44 41 0a 70 20 3d 20 32 0a 72 65 | ------..#%%.Compute.WDA.p.=.2.re |
1380 | 67 20 3d 20 31 65 30 0a 6b 20 3d 20 31 30 0a 6d 61 78 69 74 65 72 20 3d 20 31 30 30 0a 0a 50 77 | g.=.1e0.k.=.10.maxiter.=.100..Pw |
13a0 | 64 61 2c 20 70 72 6f 6a 77 64 61 20 3d 20 77 64 61 28 78 73 2c 20 79 73 2c 20 70 2c 20 72 65 67 | da,.projwda.=.wda(xs,.ys,.p,.reg |
13c0 | 2c 20 6b 2c 20 6d 61 78 69 74 65 72 3d 6d 61 78 69 74 65 72 29 0a 0a 0a 23 23 23 23 23 23 23 23 | ,.k,.maxiter=maxiter)...######## |
13e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
1400 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
1420 | 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 32 44 20 70 72 6f 6a 65 63 74 69 6f 6e 73 0a 23 20 2d | ######.#.Plot.2D.projections.#.- |
1440 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 6c 6f 74 20 73 61 6d | ------------------..#%%.plot.sam |
1460 | 70 6c 65 73 0a 0a 78 73 70 20 3d 20 70 72 6f 6a 66 64 61 28 78 73 29 0a 78 74 70 20 3d 20 70 72 | ples..xsp.=.projfda(xs).xtp.=.pr |
1480 | 6f 6a 66 64 61 28 78 74 29 0a 0a 78 73 70 77 20 3d 20 70 72 6f 6a 77 64 61 28 78 73 29 0a 78 74 | ojfda(xt)..xspw.=.projwda(xs).xt |
14a0 | 70 77 20 3d 20 70 72 6f 6a 77 64 61 28 78 74 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 29 0a 0a | pw.=.projwda(xt)..pl.figure(2).. |
14c0 | 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 | pl.subplot(2,.2,.1).pl.scatter(x |
14e0 | 73 70 5b 3a 2c 20 30 5d 2c 20 78 73 70 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 | sp[:,.0],.xsp[:,.1],.c=ys,.marke |
1500 | 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 50 72 6f 6a 65 63 74 65 64 20 73 61 6d 70 6c 65 73 27 | r='+',.label='Projected.samples' |
1520 | 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 50 72 6f | ).pl.legend(loc=0).pl.title('Pro |
1540 | 6a 65 63 74 65 64 20 74 72 61 69 6e 69 6e 67 20 73 61 6d 70 6c 65 73 20 46 44 41 27 29 0a 0a 70 | jected.training.samples.FDA')..p |
1560 | 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 74 | l.subplot(2,.2,.2).pl.scatter(xt |
1580 | 70 5b 3a 2c 20 30 5d 2c 20 78 74 70 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 | p[:,.0],.xtp[:,.1],.c=ys,.marker |
15a0 | 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 50 72 6f 6a 65 63 74 65 64 20 73 61 6d 70 6c 65 73 27 29 | ='+',.label='Projected.samples') |
15c0 | 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 50 72 6f 6a | .pl.legend(loc=0).pl.title('Proj |
15e0 | 65 63 74 65 64 20 74 65 73 74 20 73 61 6d 70 6c 65 73 20 46 44 41 27 29 0a 0a 70 6c 2e 73 75 62 | ected.test.samples.FDA')..pl.sub |
1600 | 70 6c 6f 74 28 32 2c 20 32 2c 20 33 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 73 70 77 5b 3a 2c | plot(2,.2,.3).pl.scatter(xspw[:, |
1620 | 20 30 5d 2c 20 78 73 70 77 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b | .0],.xspw[:,.1],.c=ys,.marker='+ |
1640 | 27 2c 20 6c 61 62 65 6c 3d 27 50 72 6f 6a 65 63 74 65 64 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c | ',.label='Projected.samples').pl |
1660 | 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 50 72 6f 6a 65 63 74 | .legend(loc=0).pl.title('Project |
1680 | 65 64 20 74 72 61 69 6e 69 6e 67 20 73 61 6d 70 6c 65 73 20 57 44 41 27 29 0a 0a 70 6c 2e 73 75 | ed.training.samples.WDA')..pl.su |
16a0 | 62 70 6c 6f 74 28 32 2c 20 32 2c 20 34 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 78 74 70 77 5b 3a | bplot(2,.2,.4).pl.scatter(xtpw[: |
16c0 | 2c 20 30 5d 2c 20 78 74 70 77 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 | ,.0],.xtpw[:,.1],.c=ys,.marker=' |
16e0 | 2b 27 2c 20 6c 61 62 65 6c 3d 27 50 72 6f 6a 65 63 74 65 64 20 73 61 6d 70 6c 65 73 27 29 0a 70 | +',.label='Projected.samples').p |
1700 | 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 50 72 6f 6a 65 63 | l.legend(loc=0).pl.title('Projec |
1720 | 74 65 64 20 74 65 73 74 20 73 61 6d 70 6c 65 73 20 57 44 41 27 29 0a 70 6c 2e 74 69 67 68 74 5f | ted.test.samples.WDA').pl.tight_ |
1740 | 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 97 53 | layout()..pl.show().PK.........S |
1760 | be 4c e5 d4 47 7d 9d 1c 00 00 9d 1c 00 00 19 00 00 00 70 6c 6f 74 5f 67 72 6f 6d 6f 76 5f 62 61 | .L..G}............plot_gromov_ba |
1780 | 72 79 63 65 6e 74 65 72 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d | rycenter.py#.-*-.coding:.utf-8.- |
17a0 | 2a 2d 0d 0a 22 22 22 0d 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | *-.."""..======================= |
17c0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 47 72 6f 6d 6f 76 2d 57 61 73 73 65 72 73 74 65 | ==============..Gromov-Wasserste |
17e0 | 69 6e 20 42 61 72 79 63 65 6e 74 65 72 20 65 78 61 6d 70 6c 65 0d 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d | in.Barycenter.example..========= |
1800 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 0d 0a | ============================.... |
1820 | 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 73 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73 68 6f 77 | This.example.is.designed.to.show |
1840 | 20 68 6f 77 20 74 6f 20 75 73 65 20 74 68 65 20 47 72 6f 6d 6f 76 2d 57 61 73 73 65 72 73 74 65 | .how.to.use.the.Gromov-Wasserste |
1860 | 69 6e 20 64 69 73 74 61 6e 63 65 0d 0a 63 6f 6d 70 75 74 61 74 69 6f 6e 20 69 6e 20 50 4f 54 2e | in.distance..computation.in.POT. |
1880 | 0d 0a 22 22 22 0d 0a 0d 0a 23 20 41 75 74 68 6f 72 3a 20 45 72 77 61 6e 20 56 61 75 74 69 65 72 | .."""....#.Author:.Erwan.Vautier |
18a0 | 20 3c 65 72 77 61 6e 2e 76 61 75 74 69 65 72 40 67 6d 61 69 6c 2e 63 6f 6d 3e 0d 0a 23 20 20 20 | .<erwan.vautier@gmail.com>..#... |
18c0 | 20 20 20 20 20 20 4e 69 63 6f 6c 61 73 20 43 6f 75 72 74 79 20 3c 6e 63 6f 75 72 74 79 40 69 72 | ......Nicolas.Courty.<ncourty@ir |
18e0 | 69 73 61 2e 66 72 3e 0d 0a 23 0d 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e | isa.fr>..#..#.License:.MIT.Licen |
1900 | 73 65 0d 0a 0d 0a 0d 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0d 0a 69 6d 70 6f | se......import.numpy.as.np..impo |
1920 | 72 74 20 73 63 69 70 79 20 61 73 20 73 70 0d 0a 0d 0a 69 6d 70 6f 72 74 20 73 63 69 70 79 2e 6e | rt.scipy.as.sp....import.scipy.n |
1940 | 64 69 6d 61 67 65 20 61 73 20 73 70 69 0d 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 | dimage.as.spi..import.matplotlib |
1960 | 2e 70 79 6c 61 62 20 61 73 20 70 6c 0d 0a 66 72 6f 6d 20 73 6b 6c 65 61 72 6e 20 69 6d 70 6f 72 | .pylab.as.pl..from.sklearn.impor |
1980 | 74 20 6d 61 6e 69 66 6f 6c 64 0d 0a 66 72 6f 6d 20 73 6b 6c 65 61 72 6e 2e 64 65 63 6f 6d 70 6f | t.manifold..from.sklearn.decompo |
19a0 | 73 69 74 69 6f 6e 20 69 6d 70 6f 72 74 20 50 43 41 0d 0a 0d 0a 69 6d 70 6f 72 74 20 6f 74 0d 0a | sition.import.PCA....import.ot.. |
19c0 | 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ..############################## |
19e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
1a00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 23 20 53 6d 61 63 6f 66 20 4d 44 53 0d 0a | ################..#.Smacof.MDS.. |
1a20 | 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 23 0d 0a 23 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e | #.----------..#..#.This.function |
1a40 | 20 61 6c 6c 6f 77 73 20 74 6f 20 66 69 6e 64 20 61 6e 20 65 6d 62 65 64 64 69 6e 67 20 6f 66 20 | .allows.to.find.an.embedding.of. |
1a60 | 70 6f 69 6e 74 73 20 67 69 76 65 6e 20 61 20 64 69 73 73 69 6d 69 6c 61 72 69 74 79 20 6d 61 74 | points.given.a.dissimilarity.mat |
1a80 | 72 69 78 0d 0a 23 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 67 69 76 65 6e 20 62 79 20 74 68 65 | rix..#.that.will.be.given.by.the |
1aa0 | 20 6f 75 74 70 75 74 20 6f 66 20 74 68 65 20 61 6c 67 6f 72 69 74 68 6d 0d 0a 0d 0a 0d 0a 64 65 | .output.of.the.algorithm......de |
1ac0 | 66 20 73 6d 61 63 6f 66 5f 6d 64 73 28 43 2c 20 64 69 6d 2c 20 6d 61 78 5f 69 74 65 72 3d 33 30 | f.smacof_mds(C,.dim,.max_iter=30 |
1ae0 | 30 30 2c 20 65 70 73 3d 31 65 2d 39 29 3a 0d 0a 20 20 20 20 22 22 22 0d 0a 20 20 20 20 52 65 74 | 00,.eps=1e-9):......"""......Ret |
1b00 | 75 72 6e 73 20 61 6e 20 69 6e 74 65 72 70 6f 6c 61 74 65 64 20 70 6f 69 6e 74 20 63 6c 6f 75 64 | urns.an.interpolated.point.cloud |
1b20 | 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 64 69 73 73 69 6d 69 6c 61 72 69 74 79 20 6d 61 74 | .following.the.dissimilarity.mat |
1b40 | 72 69 78 20 43 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 4d 41 43 4f 46 20 6d 75 6c 74 69 64 69 6d | rix.C......using.SMACOF.multidim |
1b60 | 65 6e 73 69 6f 6e 61 6c 20 73 63 61 6c 69 6e 67 20 28 4d 44 53 29 20 69 6e 20 73 70 65 63 69 66 | ensional.scaling.(MDS).in.specif |
1b80 | 69 63 20 64 69 6d 65 6e 73 69 6f 6e 6e 65 64 0d 0a 20 20 20 20 74 61 72 67 65 74 20 73 70 61 63 | ic.dimensionned......target.spac |
1ba0 | 65 0d 0a 0d 0a 20 20 20 20 50 61 72 61 6d 65 74 65 72 73 0d 0a 20 20 20 20 2d 2d 2d 2d 2d 2d 2d | e........Parameters......------- |
1bc0 | 2d 2d 2d 0d 0a 20 20 20 20 43 20 3a 20 6e 64 61 72 72 61 79 2c 20 73 68 61 70 65 20 28 6e 73 2c | ---......C.:.ndarray,.shape.(ns, |
1be0 | 20 6e 73 29 0d 0a 20 20 20 20 20 20 20 20 64 69 73 73 69 6d 69 6c 61 72 69 74 79 20 6d 61 74 72 | .ns)..........dissimilarity.matr |
1c00 | 69 78 0d 0a 20 20 20 20 64 69 6d 20 3a 20 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 64 69 6d | ix......dim.:.int............dim |
1c20 | 65 6e 73 69 6f 6e 20 6f 66 20 74 68 65 20 74 61 72 67 65 74 65 64 20 73 70 61 63 65 0d 0a 20 20 | ension.of.the.targeted.space.... |
1c40 | 20 20 6d 61 78 5f 69 74 65 72 20 3a 20 20 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 4d 61 78 69 6d | ..max_iter.:..int..........Maxim |
1c60 | 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 53 | um.number.of.iterations.of.the.S |
1c80 | 4d 41 43 4f 46 20 61 6c 67 6f 72 69 74 68 6d 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 75 6e | MACOF.algorithm.for.a.single.run |
1ca0 | 0d 0a 20 20 20 20 65 70 73 20 3a 20 66 6c 6f 61 74 0d 0a 20 20 20 20 20 20 20 20 72 65 6c 61 74 | ......eps.:.float..........relat |
1cc0 | 69 76 65 20 74 6f 6c 65 72 61 6e 63 65 20 77 2e 72 2e 74 20 73 74 72 65 73 73 20 74 6f 20 64 65 | ive.tolerance.w.r.t.stress.to.de |
1ce0 | 63 6c 61 72 65 20 63 6f 6e 76 65 72 67 65 0d 0a 0d 0a 20 20 20 20 52 65 74 75 72 6e 73 0d 0a 20 | clare.converge........Returns... |
1d00 | 20 20 20 2d 2d 2d 2d 2d 2d 2d 0d 0a 20 20 20 20 6e 70 6f 73 20 3a 20 6e 64 61 72 72 61 79 2c 20 | ...-------......npos.:.ndarray,. |
1d20 | 73 68 61 70 65 20 28 52 2c 20 64 69 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 45 6d 62 65 64 | shape.(R,.dim).............Embed |
1d40 | 64 65 64 20 63 6f 6f 72 64 69 6e 61 74 65 73 20 6f 66 20 74 68 65 20 69 6e 74 65 72 70 6f 6c 61 | ded.coordinates.of.the.interpola |
1d60 | 74 65 64 20 70 6f 69 6e 74 20 63 6c 6f 75 64 20 28 64 65 66 69 6e 65 64 20 77 69 74 68 0d 0a 20 | ted.point.cloud.(defined.with... |
1d80 | 20 20 20 20 20 20 20 20 20 20 6f 6e 65 20 69 73 6f 6d 65 74 72 79 29 0d 0a 20 20 20 20 22 22 22 | ..........one.isometry)......""" |
1da0 | 0d 0a 0d 0a 20 20 20 20 72 6e 67 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 52 61 6e 64 6f 6d 53 74 | ........rng.=.np.random.RandomSt |
1dc0 | 61 74 65 28 73 65 65 64 3d 33 29 0d 0a 0d 0a 20 20 20 20 6d 64 73 20 3d 20 6d 61 6e 69 66 6f 6c | ate(seed=3)........mds.=.manifol |
1de0 | 64 2e 4d 44 53 28 0d 0a 20 20 20 20 20 20 20 20 64 69 6d 2c 0d 0a 20 20 20 20 20 20 20 20 6d 61 | d.MDS(..........dim,..........ma |
1e00 | 78 5f 69 74 65 72 3d 6d 61 78 5f 69 74 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 65 70 73 3d 31 65 | x_iter=max_iter,..........eps=1e |
1e20 | 2d 39 2c 0d 0a 20 20 20 20 20 20 20 20 64 69 73 73 69 6d 69 6c 61 72 69 74 79 3d 27 70 72 65 63 | -9,..........dissimilarity='prec |
1e40 | 6f 6d 70 75 74 65 64 27 2c 0d 0a 20 20 20 20 20 20 20 20 6e 5f 69 6e 69 74 3d 31 29 0d 0a 20 20 | omputed',..........n_init=1).... |
1e60 | 20 20 70 6f 73 20 3d 20 6d 64 73 2e 66 69 74 28 43 29 2e 65 6d 62 65 64 64 69 6e 67 5f 0d 0a 0d | ..pos.=.mds.fit(C).embedding_... |
1e80 | 0a 20 20 20 20 6e 6d 64 73 20 3d 20 6d 61 6e 69 66 6f 6c 64 2e 4d 44 53 28 0d 0a 20 20 20 20 20 | .....nmds.=.manifold.MDS(....... |
1ea0 | 20 20 20 32 2c 0d 0a 20 20 20 20 20 20 20 20 6d 61 78 5f 69 74 65 72 3d 6d 61 78 5f 69 74 65 72 | ...2,..........max_iter=max_iter |
1ec0 | 2c 0d 0a 20 20 20 20 20 20 20 20 65 70 73 3d 31 65 2d 39 2c 0d 0a 20 20 20 20 20 20 20 20 64 69 | ,..........eps=1e-9,..........di |
1ee0 | 73 73 69 6d 69 6c 61 72 69 74 79 3d 22 70 72 65 63 6f 6d 70 75 74 65 64 22 2c 0d 0a 20 20 20 20 | ssimilarity="precomputed",...... |
1f00 | 20 20 20 20 72 61 6e 64 6f 6d 5f 73 74 61 74 65 3d 72 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 6e | ....random_state=rng,..........n |
1f20 | 5f 69 6e 69 74 3d 31 29 0d 0a 20 20 20 20 6e 70 6f 73 20 3d 20 6e 6d 64 73 2e 66 69 74 5f 74 72 | _init=1)......npos.=.nmds.fit_tr |
1f40 | 61 6e 73 66 6f 72 6d 28 43 2c 20 69 6e 69 74 3d 70 6f 73 29 0d 0a 0d 0a 20 20 20 20 72 65 74 75 | ansform(C,.init=pos)........retu |
1f60 | 72 6e 20 6e 70 6f 73 0d 0a 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | rn.npos......################### |
1f80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
1fa0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 23 20 44 | ###########################..#.D |
1fc0 | 61 74 61 20 70 72 65 70 61 72 61 74 69 6f 6e 0d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | ata.preparation..#.------------- |
1fe0 | 2d 2d 2d 0d 0a 23 0d 0a 23 20 54 68 65 20 66 6f 75 72 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 | ---..#..#.The.four.distributions |
2000 | 20 61 72 65 20 63 6f 6e 73 74 72 75 63 74 65 64 20 66 72 6f 6d 20 34 20 73 69 6d 70 6c 65 20 69 | .are.constructed.from.4.simple.i |
2020 | 6d 61 67 65 73 0d 0a 0d 0a 0d 0a 64 65 66 20 69 6d 32 6d 61 74 28 49 29 3a 0d 0a 20 20 20 20 22 | mages......def.im2mat(I):......" |
2040 | 22 22 43 6f 6e 76 65 72 74 73 20 61 6e 64 20 69 6d 61 67 65 20 74 6f 20 6d 61 74 72 69 78 20 28 | ""Converts.and.image.to.matrix.( |
2060 | 6f 6e 65 20 70 69 78 65 6c 20 70 65 72 20 6c 69 6e 65 29 22 22 22 0d 0a 20 20 20 20 72 65 74 75 | one.pixel.per.line)"""......retu |
2080 | 72 6e 20 49 2e 72 65 73 68 61 70 65 28 28 49 2e 73 68 61 70 65 5b 30 5d 20 2a 20 49 2e 73 68 61 | rn.I.reshape((I.shape[0].*.I.sha |
20a0 | 70 65 5b 31 5d 2c 20 49 2e 73 68 61 70 65 5b 32 5d 29 29 0d 0a 0d 0a 0d 0a 73 71 75 61 72 65 20 | pe[1],.I.shape[2]))......square. |
20c0 | 3d 20 73 70 69 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 73 71 75 61 72 65 2e 70 6e 67 | =.spi.imread('../data/square.png |
20e0 | 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 5b 3a 2c 20 3a 2c 20 32 5d 20 2f | ').astype(np.float64)[:,.:,.2]./ |
2100 | 20 32 35 36 0d 0a 63 72 6f 73 73 20 3d 20 73 70 69 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 | .256..cross.=.spi.imread('../dat |
2120 | 61 2f 63 72 6f 73 73 2e 70 6e 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 | a/cross.png').astype(np.float64) |
2140 | 5b 3a 2c 20 3a 2c 20 32 5d 20 2f 20 32 35 36 0d 0a 74 72 69 61 6e 67 6c 65 20 3d 20 73 70 69 2e | [:,.:,.2]./.256..triangle.=.spi. |
2160 | 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 74 72 69 61 6e 67 6c 65 2e 70 6e 67 27 29 2e 61 | imread('../data/triangle.png').a |
2180 | 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 5b 3a 2c 20 3a 2c 20 32 5d 20 2f 20 32 35 36 | stype(np.float64)[:,.:,.2]./.256 |
21a0 | 0d 0a 73 74 61 72 20 3d 20 73 70 69 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 73 74 61 | ..star.=.spi.imread('../data/sta |
21c0 | 72 2e 70 6e 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 5b 3a 2c 20 3a 2c | r.png').astype(np.float64)[:,.:, |
21e0 | 20 32 5d 20 2f 20 32 35 36 0d 0a 0d 0a 73 68 61 70 65 73 20 3d 20 5b 73 71 75 61 72 65 2c 20 63 | .2]./.256....shapes.=.[square,.c |
2200 | 72 6f 73 73 2c 20 74 72 69 61 6e 67 6c 65 2c 20 73 74 61 72 5d 0d 0a 0d 0a 53 20 3d 20 34 0d 0a | ross,.triangle,.star]....S.=.4.. |
2220 | 78 73 20 3d 20 5b 5b 5d 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 53 29 5d 0d 0a 0d 0a 0d | xs.=.[[].for.i.in.range(S)]..... |
2240 | 0a 66 6f 72 20 6e 62 20 69 6e 20 72 61 6e 67 65 28 34 29 3a 0d 0a 20 20 20 20 66 6f 72 20 69 20 | .for.nb.in.range(4):......for.i. |
2260 | 69 6e 20 72 61 6e 67 65 28 38 29 3a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 20 6a 20 69 6e 20 72 | in.range(8):..........for.j.in.r |
2280 | 61 6e 67 65 28 38 29 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 73 68 61 70 65 73 5b | ange(8):..............if.shapes[ |
22a0 | 6e 62 5d 5b 69 2c 20 6a 5d 20 3c 20 30 2e 39 35 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | nb][i,.j].<.0.95:............... |
22c0 | 20 20 20 78 73 5b 6e 62 5d 2e 61 70 70 65 6e 64 28 5b 6a 2c 20 38 20 2d 20 69 5d 29 0d 0a 0d 0a | ...xs[nb].append([j,.8.-.i]).... |
22e0 | 78 73 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 6e 70 2e 61 72 72 61 79 28 78 73 5b 30 5d 29 2c 20 | xs.=.np.array([np.array(xs[0]),. |
2300 | 6e 70 2e 61 72 72 61 79 28 78 73 5b 31 5d 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | np.array(xs[1]),................ |
2320 | 20 6e 70 2e 61 72 72 61 79 28 78 73 5b 32 5d 29 2c 20 6e 70 2e 61 72 72 61 79 28 78 73 5b 33 5d | .np.array(xs[2]),.np.array(xs[3] |
2340 | 29 5d 29 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | )])....######################### |
2360 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
2380 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 23 20 42 61 72 79 63 65 6e | #####################..#.Barycen |
23a0 | 74 65 72 20 63 6f 6d 70 75 74 61 74 69 6f 6e 0d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | ter.computation..#.------------- |
23c0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 0d 0a 6e 73 20 3d 20 5b 6c 65 6e 28 78 73 5b 73 5d 29 20 | ---------......ns.=.[len(xs[s]). |
23e0 | 66 6f 72 20 73 20 69 6e 20 72 61 6e 67 65 28 53 29 5d 0d 0a 6e 5f 73 61 6d 70 6c 65 73 20 3d 20 | for.s.in.range(S)]..n_samples.=. |
2400 | 33 30 0d 0a 0d 0a 22 22 22 43 6f 6d 70 75 74 65 20 61 6c 6c 20 64 69 73 74 61 6e 63 65 73 20 6d | 30...."""Compute.all.distances.m |
2420 | 61 74 72 69 63 65 73 20 66 6f 72 20 74 68 65 20 66 6f 75 72 20 73 68 61 70 65 73 22 22 22 0d 0a | atrices.for.the.four.shapes""".. |
2440 | 43 73 20 3d 20 5b 73 70 2e 73 70 61 74 69 61 6c 2e 64 69 73 74 61 6e 63 65 2e 63 64 69 73 74 28 | Cs.=.[sp.spatial.distance.cdist( |
2460 | 78 73 5b 73 5d 2c 20 78 73 5b 73 5d 29 20 66 6f 72 20 73 20 69 6e 20 72 61 6e 67 65 28 53 29 5d | xs[s],.xs[s]).for.s.in.range(S)] |
2480 | 0d 0a 43 73 20 3d 20 5b 63 73 20 2f 20 63 73 2e 6d 61 78 28 29 20 66 6f 72 20 63 73 20 69 6e 20 | ..Cs.=.[cs./.cs.max().for.cs.in. |
24a0 | 43 73 5d 0d 0a 0d 0a 70 73 20 3d 20 5b 6f 74 2e 75 6e 69 66 28 6e 73 5b 73 5d 29 20 66 6f 72 20 | Cs]....ps.=.[ot.unif(ns[s]).for. |
24c0 | 73 20 69 6e 20 72 61 6e 67 65 28 53 29 5d 0d 0a 70 20 3d 20 6f 74 2e 75 6e 69 66 28 6e 5f 73 61 | s.in.range(S)]..p.=.ot.unif(n_sa |
24e0 | 6d 70 6c 65 73 29 0d 0a 0d 0a 0d 0a 6c 61 6d 62 64 61 73 74 20 3d 20 5b 5b 66 6c 6f 61 74 28 69 | mples)......lambdast.=.[[float(i |
2500 | 29 20 2f 20 33 2c 20 66 6c 6f 61 74 28 33 20 2d 20 69 29 20 2f 20 33 5d 20 66 6f 72 20 69 20 69 | )./.3,.float(3.-.i)./.3].for.i.i |
2520 | 6e 20 5b 31 2c 20 32 5d 5d 0d 0a 0d 0a 43 74 30 31 20 3d 20 5b 30 20 66 6f 72 20 69 20 69 6e 20 | n.[1,.2]]....Ct01.=.[0.for.i.in. |
2540 | 72 61 6e 67 65 28 32 29 5d 0d 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 32 29 3a 0d 0a 20 | range(2)]..for.i.in.range(2):... |
2560 | 20 20 20 43 74 30 31 5b 69 5d 20 3d 20 6f 74 2e 67 72 6f 6d 6f 76 2e 67 72 6f 6d 6f 76 5f 62 61 | ...Ct01[i].=.ot.gromov.gromov_ba |
2580 | 72 79 63 65 6e 74 65 72 73 28 6e 5f 73 61 6d 70 6c 65 73 2c 20 5b 43 73 5b 30 5d 2c 20 43 73 5b | rycenters(n_samples,.[Cs[0],.Cs[ |
25a0 | 31 5d 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | 1]],............................ |
25c0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 70 73 5b 30 5d 2c 20 70 73 5b 31 5d 0d 0a | .................[ps[0],.ps[1].. |
25e0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
2600 | 20 20 20 20 20 20 20 20 20 20 20 20 5d 2c 20 70 2c 20 6c 61 6d 62 64 61 73 74 5b 69 5d 2c 20 27 | ............],.p,.lambdast[i],.' |
2620 | 73 71 75 61 72 65 5f 6c 6f 73 73 27 2c 20 20 23 20 35 65 2d 34 2c 0d 0a 20 20 20 20 20 20 20 20 | square_loss',..#.5e-4,.......... |
2640 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
2660 | 20 20 20 6d 61 78 5f 69 74 65 72 3d 31 30 30 2c 20 74 6f 6c 3d 31 65 2d 33 29 0d 0a 0d 0a 43 74 | ...max_iter=100,.tol=1e-3)....Ct |
2680 | 30 32 20 3d 20 5b 30 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 32 29 5d 0d 0a 66 6f 72 20 | 02.=.[0.for.i.in.range(2)]..for. |
26a0 | 69 20 69 6e 20 72 61 6e 67 65 28 32 29 3a 0d 0a 20 20 20 20 43 74 30 32 5b 69 5d 20 3d 20 6f 74 | i.in.range(2):......Ct02[i].=.ot |
26c0 | 2e 67 72 6f 6d 6f 76 2e 67 72 6f 6d 6f 76 5f 62 61 72 79 63 65 6e 74 65 72 73 28 6e 5f 73 61 6d | .gromov.gromov_barycenters(n_sam |
26e0 | 70 6c 65 73 2c 20 5b 43 73 5b 30 5d 2c 20 43 73 5b 32 5d 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 | ples,.[Cs[0],.Cs[2]],........... |
2700 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
2720 | 20 20 5b 70 73 5b 30 5d 2c 20 70 73 5b 32 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ..[ps[0],.ps[2]................. |
2740 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5d 2c 20 | .............................],. |
2760 | 70 2c 20 6c 61 6d 62 64 61 73 74 5b 69 5d 2c 20 27 73 71 75 61 72 65 5f 6c 6f 73 73 27 2c 20 20 | p,.lambdast[i],.'square_loss',.. |
2780 | 23 20 35 65 2d 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | #.5e-4,......................... |
27a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 78 5f 69 74 65 72 3d 31 30 30 | ....................max_iter=100 |
27c0 | 2c 20 74 6f 6c 3d 31 65 2d 33 29 0d 0a 0d 0a 43 74 31 33 20 3d 20 5b 30 20 66 6f 72 20 69 20 69 | ,.tol=1e-3)....Ct13.=.[0.for.i.i |
27e0 | 6e 20 72 61 6e 67 65 28 32 29 5d 0d 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 32 29 3a 0d | n.range(2)]..for.i.in.range(2):. |
2800 | 0a 20 20 20 20 43 74 31 33 5b 69 5d 20 3d 20 6f 74 2e 67 72 6f 6d 6f 76 2e 67 72 6f 6d 6f 76 5f | .....Ct13[i].=.ot.gromov.gromov_ |
2820 | 62 61 72 79 63 65 6e 74 65 72 73 28 6e 5f 73 61 6d 70 6c 65 73 2c 20 5b 43 73 5b 31 5d 2c 20 43 | barycenters(n_samples,.[Cs[1],.C |
2840 | 73 5b 33 5d 5d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | s[3]],.......................... |
2860 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 70 73 5b 31 5d 2c 20 70 73 5b 33 5d | ...................[ps[1],.ps[3] |
2880 | 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
28a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5d 2c 20 70 2c 20 6c 61 6d 62 64 61 73 74 5b 69 5d 2c | ..............],.p,.lambdast[i], |
28c0 | 20 27 73 71 75 61 72 65 5f 6c 6f 73 73 27 2c 20 20 23 20 35 65 2d 34 2c 0d 0a 20 20 20 20 20 20 | .'square_loss',..#.5e-4,........ |
28e0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
2900 | 20 20 20 20 20 6d 61 78 5f 69 74 65 72 3d 31 30 30 2c 20 74 6f 6c 3d 31 65 2d 33 29 0d 0a 0d 0a | .....max_iter=100,.tol=1e-3).... |
2920 | 43 74 32 33 20 3d 20 5b 30 20 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 32 29 5d 0d 0a 66 6f | Ct23.=.[0.for.i.in.range(2)]..fo |
2940 | 72 20 69 20 69 6e 20 72 61 6e 67 65 28 32 29 3a 0d 0a 20 20 20 20 43 74 32 33 5b 69 5d 20 3d 20 | r.i.in.range(2):......Ct23[i].=. |
2960 | 6f 74 2e 67 72 6f 6d 6f 76 2e 67 72 6f 6d 6f 76 5f 62 61 72 79 63 65 6e 74 65 72 73 28 6e 5f 73 | ot.gromov.gromov_barycenters(n_s |
2980 | 61 6d 70 6c 65 73 2c 20 5b 43 73 5b 32 5d 2c 20 43 73 5b 33 5d 5d 2c 0d 0a 20 20 20 20 20 20 20 | amples,.[Cs[2],.Cs[3]],......... |
29a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
29c0 | 20 20 20 20 5b 70 73 5b 32 5d 2c 20 70 73 5b 33 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | ....[ps[2],.ps[3]............... |
29e0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5d | ...............................] |
2a00 | 2c 20 70 2c 20 6c 61 6d 62 64 61 73 74 5b 69 5d 2c 20 27 73 71 75 61 72 65 5f 6c 6f 73 73 27 2c | ,.p,.lambdast[i],.'square_loss', |
2a20 | 20 20 23 20 35 65 2d 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ..#.5e-4,....................... |
2a40 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 78 5f 69 74 65 72 3d 31 | ......................max_iter=1 |
2a60 | 30 30 2c 20 74 6f 6c 3d 31 65 2d 33 29 0d 0a 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 | 00,.tol=1e-3)......############# |
2a80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
2aa0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
2ac0 | 23 0d 0a 23 20 56 69 73 75 61 6c 69 7a 61 74 69 6f 6e 0d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | #..#.Visualization..#.---------- |
2ae0 | 2d 2d 2d 0d 0a 23 0d 0a 23 20 54 68 65 20 50 43 41 20 68 65 6c 70 73 20 69 6e 20 67 65 74 74 69 | ---..#..#.The.PCA.helps.in.getti |
2b00 | 6e 67 20 63 6f 6e 73 69 73 74 65 6e 63 79 20 62 65 74 77 65 65 6e 20 74 68 65 20 72 6f 74 61 74 | ng.consistency.between.the.rotat |
2b20 | 69 6f 6e 73 0d 0a 0d 0a 0d 0a 63 6c 66 20 3d 20 50 43 41 28 6e 5f 63 6f 6d 70 6f 6e 65 6e 74 73 | ions......clf.=.PCA(n_components |
2b40 | 3d 32 29 0d 0a 6e 70 6f 73 20 3d 20 5b 30 2c 20 30 2c 20 30 2c 20 30 5d 0d 0a 6e 70 6f 73 20 3d | =2)..npos.=.[0,.0,.0,.0]..npos.= |
2b60 | 20 5b 73 6d 61 63 6f 66 5f 6d 64 73 28 43 73 5b 73 5d 2c 20 32 29 20 66 6f 72 20 73 20 69 6e 20 | .[smacof_mds(Cs[s],.2).for.s.in. |
2b80 | 72 61 6e 67 65 28 53 29 5d 0d 0a 0d 0a 6e 70 6f 73 74 30 31 20 3d 20 5b 30 2c 20 30 5d 0d 0a 6e | range(S)]....npost01.=.[0,.0]..n |
2ba0 | 70 6f 73 74 30 31 20 3d 20 5b 73 6d 61 63 6f 66 5f 6d 64 73 28 43 74 30 31 5b 73 5d 2c 20 32 29 | post01.=.[smacof_mds(Ct01[s],.2) |
2bc0 | 20 66 6f 72 20 73 20 69 6e 20 72 61 6e 67 65 28 32 29 5d 0d 0a 6e 70 6f 73 74 30 31 20 3d 20 5b | .for.s.in.range(2)]..npost01.=.[ |
2be0 | 63 6c 66 2e 66 69 74 5f 74 72 61 6e 73 66 6f 72 6d 28 6e 70 6f 73 74 30 31 5b 73 5d 29 20 66 6f | clf.fit_transform(npost01[s]).fo |
2c00 | 72 20 73 20 69 6e 20 72 61 6e 67 65 28 32 29 5d 0d 0a 0d 0a 6e 70 6f 73 74 30 32 20 3d 20 5b 30 | r.s.in.range(2)]....npost02.=.[0 |
2c20 | 2c 20 30 5d 0d 0a 6e 70 6f 73 74 30 32 20 3d 20 5b 73 6d 61 63 6f 66 5f 6d 64 73 28 43 74 30 32 | ,.0]..npost02.=.[smacof_mds(Ct02 |
2c40 | 5b 73 5d 2c 20 32 29 20 66 6f 72 20 73 20 69 6e 20 72 61 6e 67 65 28 32 29 5d 0d 0a 6e 70 6f 73 | [s],.2).for.s.in.range(2)]..npos |
2c60 | 74 30 32 20 3d 20 5b 63 6c 66 2e 66 69 74 5f 74 72 61 6e 73 66 6f 72 6d 28 6e 70 6f 73 74 30 32 | t02.=.[clf.fit_transform(npost02 |
2c80 | 5b 73 5d 29 20 66 6f 72 20 73 20 69 6e 20 72 61 6e 67 65 28 32 29 5d 0d 0a 0d 0a 6e 70 6f 73 74 | [s]).for.s.in.range(2)]....npost |
2ca0 | 31 33 20 3d 20 5b 30 2c 20 30 5d 0d 0a 6e 70 6f 73 74 31 33 20 3d 20 5b 73 6d 61 63 6f 66 5f 6d | 13.=.[0,.0]..npost13.=.[smacof_m |
2cc0 | 64 73 28 43 74 31 33 5b 73 5d 2c 20 32 29 20 66 6f 72 20 73 20 69 6e 20 72 61 6e 67 65 28 32 29 | ds(Ct13[s],.2).for.s.in.range(2) |
2ce0 | 5d 0d 0a 6e 70 6f 73 74 31 33 20 3d 20 5b 63 6c 66 2e 66 69 74 5f 74 72 61 6e 73 66 6f 72 6d 28 | ]..npost13.=.[clf.fit_transform( |
2d00 | 6e 70 6f 73 74 31 33 5b 73 5d 29 20 66 6f 72 20 73 20 69 6e 20 72 61 6e 67 65 28 32 29 5d 0d 0a | npost13[s]).for.s.in.range(2)].. |
2d20 | 0d 0a 6e 70 6f 73 74 32 33 20 3d 20 5b 30 2c 20 30 5d 0d 0a 6e 70 6f 73 74 32 33 20 3d 20 5b 73 | ..npost23.=.[0,.0]..npost23.=.[s |
2d40 | 6d 61 63 6f 66 5f 6d 64 73 28 43 74 32 33 5b 73 5d 2c 20 32 29 20 66 6f 72 20 73 20 69 6e 20 72 | macof_mds(Ct23[s],.2).for.s.in.r |
2d60 | 61 6e 67 65 28 32 29 5d 0d 0a 6e 70 6f 73 74 32 33 20 3d 20 5b 63 6c 66 2e 66 69 74 5f 74 72 61 | ange(2)]..npost23.=.[clf.fit_tra |
2d80 | 6e 73 66 6f 72 6d 28 6e 70 6f 73 74 32 33 5b 73 5d 29 20 66 6f 72 20 73 20 69 6e 20 72 61 6e 67 | nsform(npost23[s]).for.s.in.rang |
2da0 | 65 28 32 29 5d 0d 0a 0d 0a 0d 0a 66 69 67 20 3d 20 70 6c 2e 66 69 67 75 72 65 28 66 69 67 73 69 | e(2)]......fig.=.pl.figure(figsi |
2dc0 | 7a 65 3d 28 31 30 2c 20 31 30 29 29 0d 0a 0d 0a 61 78 31 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 | ze=(10,.10))....ax1.=.pl.subplot |
2de0 | 32 67 72 69 64 28 28 34 2c 20 34 29 2c 20 28 30 2c 20 30 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 | 2grid((4,.4),.(0,.0))..pl.xlim(( |
2e00 | 2d 31 2c 20 31 29 29 0d 0a 70 6c 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 31 2e 73 | -1,.1))..pl.ylim((-1,.1))..ax1.s |
2e20 | 63 61 74 74 65 72 28 6e 70 6f 73 5b 30 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 5b 30 5d 5b 3a 2c | catter(npos[0][:,.0],.npos[0][:, |
2e40 | 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 72 27 29 0d 0a 0d 0a 61 78 32 20 3d 20 70 6c 2e 73 75 62 70 | .1],.color='r')....ax2.=.pl.subp |
2e60 | 6c 6f 74 32 67 72 69 64 28 28 34 2c 20 34 29 2c 20 28 30 2c 20 31 29 29 0d 0a 70 6c 2e 78 6c 69 | lot2grid((4,.4),.(0,.1))..pl.xli |
2e80 | 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 70 6c 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 | m((-1,.1))..pl.ylim((-1,.1))..ax |
2ea0 | 32 2e 73 63 61 74 74 65 72 28 6e 70 6f 73 74 30 31 5b 31 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 | 2.scatter(npost01[1][:,.0],.npos |
2ec0 | 74 30 31 5b 31 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 62 27 29 0d 0a 0d 0a 61 78 33 20 | t01[1][:,.1],.color='b')....ax3. |
2ee0 | 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 32 67 72 69 64 28 28 34 2c 20 34 29 2c 20 28 30 2c 20 32 29 | =.pl.subplot2grid((4,.4),.(0,.2) |
2f00 | 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 70 6c 2e 79 6c 69 6d 28 28 2d 31 | )..pl.xlim((-1,.1))..pl.ylim((-1 |
2f20 | 2c 20 31 29 29 0d 0a 61 78 33 2e 73 63 61 74 74 65 72 28 6e 70 6f 73 74 30 31 5b 30 5d 5b 3a 2c | ,.1))..ax3.scatter(npost01[0][:, |
2f40 | 20 30 5d 2c 20 6e 70 6f 73 74 30 31 5b 30 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 62 27 | .0],.npost01[0][:,.1],.color='b' |
2f60 | 29 0d 0a 0d 0a 61 78 34 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 32 67 72 69 64 28 28 34 2c 20 34 | )....ax4.=.pl.subplot2grid((4,.4 |
2f80 | 29 2c 20 28 30 2c 20 33 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 70 6c | ),.(0,.3))..pl.xlim((-1,.1))..pl |
2fa0 | 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 34 2e 73 63 61 74 74 65 72 28 6e 70 6f 73 | .ylim((-1,.1))..ax4.scatter(npos |
2fc0 | 5b 31 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 5b 31 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d | [1][:,.0],.npos[1][:,.1],.color= |
2fe0 | 27 72 27 29 0d 0a 0d 0a 61 78 35 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 32 67 72 69 64 28 28 34 | 'r')....ax5.=.pl.subplot2grid((4 |
3000 | 2c 20 34 29 2c 20 28 31 2c 20 30 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d | ,.4),.(1,.0))..pl.xlim((-1,.1)). |
3020 | 0a 70 6c 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 35 2e 73 63 61 74 74 65 72 28 6e | .pl.ylim((-1,.1))..ax5.scatter(n |
3040 | 70 6f 73 74 30 32 5b 31 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 74 30 32 5b 31 5d 5b 3a 2c 20 31 | post02[1][:,.0],.npost02[1][:,.1 |
3060 | 5d 2c 20 63 6f 6c 6f 72 3d 27 62 27 29 0d 0a 0d 0a 61 78 36 20 3d 20 70 6c 2e 73 75 62 70 6c 6f | ],.color='b')....ax6.=.pl.subplo |
3080 | 74 32 67 72 69 64 28 28 34 2c 20 34 29 2c 20 28 31 2c 20 33 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 | t2grid((4,.4),.(1,.3))..pl.xlim( |
30a0 | 28 2d 31 2c 20 31 29 29 0d 0a 70 6c 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 36 2e | (-1,.1))..pl.ylim((-1,.1))..ax6. |
30c0 | 73 63 61 74 74 65 72 28 6e 70 6f 73 74 31 33 5b 31 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 74 31 | scatter(npost13[1][:,.0],.npost1 |
30e0 | 33 5b 31 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 62 27 29 0d 0a 0d 0a 61 78 37 20 3d 20 | 3[1][:,.1],.color='b')....ax7.=. |
3100 | 70 6c 2e 73 75 62 70 6c 6f 74 32 67 72 69 64 28 28 34 2c 20 34 29 2c 20 28 32 2c 20 30 29 29 0d | pl.subplot2grid((4,.4),.(2,.0)). |
3120 | 0a 70 6c 2e 78 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 70 6c 2e 79 6c 69 6d 28 28 2d 31 2c 20 | .pl.xlim((-1,.1))..pl.ylim((-1,. |
3140 | 31 29 29 0d 0a 61 78 37 2e 73 63 61 74 74 65 72 28 6e 70 6f 73 74 30 32 5b 30 5d 5b 3a 2c 20 30 | 1))..ax7.scatter(npost02[0][:,.0 |
3160 | 5d 2c 20 6e 70 6f 73 74 30 32 5b 30 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 62 27 29 0d | ],.npost02[0][:,.1],.color='b'). |
3180 | 0a 0d 0a 61 78 38 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 32 67 72 69 64 28 28 34 2c 20 34 29 2c | ...ax8.=.pl.subplot2grid((4,.4), |
31a0 | 20 28 32 2c 20 33 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 70 6c 2e 79 | .(2,.3))..pl.xlim((-1,.1))..pl.y |
31c0 | 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 38 2e 73 63 61 74 74 65 72 28 6e 70 6f 73 74 31 | lim((-1,.1))..ax8.scatter(npost1 |
31e0 | 33 5b 30 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 74 31 33 5b 30 5d 5b 3a 2c 20 31 5d 2c 20 63 6f | 3[0][:,.0],.npost13[0][:,.1],.co |
3200 | 6c 6f 72 3d 27 62 27 29 0d 0a 0d 0a 61 78 39 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 32 67 72 69 | lor='b')....ax9.=.pl.subplot2gri |
3220 | 64 28 28 34 2c 20 34 29 2c 20 28 33 2c 20 30 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 2d 31 2c 20 | d((4,.4),.(3,.0))..pl.xlim((-1,. |
3240 | 31 29 29 0d 0a 70 6c 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 39 2e 73 63 61 74 74 | 1))..pl.ylim((-1,.1))..ax9.scatt |
3260 | 65 72 28 6e 70 6f 73 5b 32 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 5b 32 5d 5b 3a 2c 20 31 5d 2c | er(npos[2][:,.0],.npos[2][:,.1], |
3280 | 20 63 6f 6c 6f 72 3d 27 72 27 29 0d 0a 0d 0a 61 78 31 30 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 | .color='r')....ax10.=.pl.subplot |
32a0 | 32 67 72 69 64 28 28 34 2c 20 34 29 2c 20 28 33 2c 20 31 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 | 2grid((4,.4),.(3,.1))..pl.xlim(( |
32c0 | 2d 31 2c 20 31 29 29 0d 0a 70 6c 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 31 30 2e | -1,.1))..pl.ylim((-1,.1))..ax10. |
32e0 | 73 63 61 74 74 65 72 28 6e 70 6f 73 74 32 33 5b 31 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 74 32 | scatter(npost23[1][:,.0],.npost2 |
3300 | 33 5b 31 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 62 27 29 0d 0a 0d 0a 61 78 31 31 20 3d | 3[1][:,.1],.color='b')....ax11.= |
3320 | 20 70 6c 2e 73 75 62 70 6c 6f 74 32 67 72 69 64 28 28 34 2c 20 34 29 2c 20 28 33 2c 20 32 29 29 | .pl.subplot2grid((4,.4),.(3,.2)) |
3340 | 0d 0a 70 6c 2e 78 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 70 6c 2e 79 6c 69 6d 28 28 2d 31 2c | ..pl.xlim((-1,.1))..pl.ylim((-1, |
3360 | 20 31 29 29 0d 0a 61 78 31 31 2e 73 63 61 74 74 65 72 28 6e 70 6f 73 74 32 33 5b 30 5d 5b 3a 2c | .1))..ax11.scatter(npost23[0][:, |
3380 | 20 30 5d 2c 20 6e 70 6f 73 74 32 33 5b 30 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f 72 3d 27 62 27 | .0],.npost23[0][:,.1],.color='b' |
33a0 | 29 0d 0a 0d 0a 61 78 31 32 20 3d 20 70 6c 2e 73 75 62 70 6c 6f 74 32 67 72 69 64 28 28 34 2c 20 | )....ax12.=.pl.subplot2grid((4,. |
33c0 | 34 29 2c 20 28 33 2c 20 33 29 29 0d 0a 70 6c 2e 78 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 70 | 4),.(3,.3))..pl.xlim((-1,.1))..p |
33e0 | 6c 2e 79 6c 69 6d 28 28 2d 31 2c 20 31 29 29 0d 0a 61 78 31 32 2e 73 63 61 74 74 65 72 28 6e 70 | l.ylim((-1,.1))..ax12.scatter(np |
3400 | 6f 73 5b 33 5d 5b 3a 2c 20 30 5d 2c 20 6e 70 6f 73 5b 33 5d 5b 3a 2c 20 31 5d 2c 20 63 6f 6c 6f | os[3][:,.0],.npos[3][:,.1],.colo |
3420 | 72 3d 27 72 27 29 0d 0a 50 4b 03 04 14 00 00 00 00 00 90 53 be 4c b8 cd f6 1b 7e 0b 00 00 7e 0b | r='r')..PK.........S.L....~...~. |
3440 | 00 00 13 00 00 00 70 6c 6f 74 5f 6f 70 74 69 6d 5f 4f 54 72 65 67 2e 70 79 23 20 2d 2a 2d 20 63 | ......plot_optim_OTreg.py#.-*-.c |
3460 | 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | oding:.utf-8.-*-.""".=========== |
3480 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 65 67 75 6c 61 72 69 | =======================.Regulari |
34a0 | 7a 65 64 20 4f 54 20 77 69 74 68 20 67 65 6e 65 72 69 63 20 73 6f 6c 76 65 72 0a 3d 3d 3d 3d 3d | zed.OT.with.generic.solver.===== |
34c0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 49 | =============================..I |
34e0 | 6c 6c 75 73 74 72 61 74 65 73 20 74 68 65 20 75 73 65 20 6f 66 20 74 68 65 20 67 65 6e 65 72 69 | llustrates.the.use.of.the.generi |
3500 | 63 20 73 6f 6c 76 65 72 20 66 6f 72 20 72 65 67 75 6c 61 72 69 7a 65 64 20 4f 54 20 77 69 74 68 | c.solver.for.regularized.OT.with |
3520 | 0a 75 73 65 72 2d 64 65 73 69 67 6e 65 64 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 20 74 65 | .user-designed.regularization.te |
3540 | 72 6d 2e 20 49 74 20 75 73 65 73 20 43 6f 6e 64 69 74 69 6f 6e 61 6c 20 67 72 61 64 69 65 6e 74 | rm..It.uses.Conditional.gradient |
3560 | 20 61 73 20 69 6e 20 5b 36 5d 20 61 6e 64 0a 67 65 6e 65 72 61 6c 69 7a 65 64 20 43 6f 6e 64 69 | .as.in.[6].and.generalized.Condi |
3580 | 74 69 6f 6e 61 6c 20 47 72 61 64 69 65 6e 74 20 61 73 20 70 72 6f 70 6f 73 65 64 20 69 6e 20 5b | tional.Gradient.as.proposed.in.[ |
35a0 | 35 5d 5b 37 5d 2e 0a 0a 0a 5b 35 5d 20 4e 2e 20 43 6f 75 72 74 79 3b 20 52 2e 20 46 6c 61 6d 61 | 5][7]....[5].N..Courty;.R..Flama |
35c0 | 72 79 3b 20 44 2e 20 54 75 69 61 3b 20 41 2e 20 52 61 6b 6f 74 6f 6d 61 6d 6f 6e 6a 79 2c 20 4f | ry;.D..Tuia;.A..Rakotomamonjy,.O |
35e0 | 70 74 69 6d 61 6c 20 54 72 61 6e 73 70 6f 72 74 20 66 6f 72 0a 44 6f 6d 61 69 6e 20 41 64 61 70 | ptimal.Transport.for.Domain.Adap |
3600 | 74 61 74 69 6f 6e 2c 20 69 6e 20 49 45 45 45 20 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 6f 6e 20 | tation,.in.IEEE.Transactions.on. |
3620 | 50 61 74 74 65 72 6e 20 41 6e 61 6c 79 73 69 73 20 61 6e 64 20 4d 61 63 68 69 6e 65 0a 49 6e 74 | Pattern.Analysis.and.Machine.Int |
3640 | 65 6c 6c 69 67 65 6e 63 65 20 2c 20 76 6f 6c 2e 50 50 2c 20 6e 6f 2e 39 39 2c 20 70 70 2e 31 2d | elligence.,.vol.PP,.no.99,.pp.1- |
3660 | 31 2e 0a 0a 5b 36 5d 20 46 65 72 72 61 64 61 6e 73 2c 20 53 2e 2c 20 50 61 70 61 64 61 6b 69 73 | 1...[6].Ferradans,.S.,.Papadakis |
3680 | 2c 20 4e 2e 2c 20 50 65 79 72 c3 a9 2c 20 47 2e 2c 20 26 20 41 75 6a 6f 6c 2c 20 4a 2e 20 46 2e | ,.N.,.Peyr..,.G.,.&.Aujol,.J..F. |
36a0 | 20 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 | .(2014)..Regularized.discrete.op |
36c0 | 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 2e 20 53 49 41 4d 20 4a 6f 75 72 6e 61 6c 20 6f 6e | timal.transport..SIAM.Journal.on |
36e0 | 20 49 6d 61 67 69 6e 67 20 53 63 69 65 6e 63 65 73 2c 0a 37 28 33 29 2c 20 31 38 35 33 2d 31 38 | .Imaging.Sciences,.7(3),.1853-18 |
3700 | 38 32 2e 0a 0a 5b 37 5d 20 52 61 6b 6f 74 6f 6d 61 6d 6f 6e 6a 79 2c 20 41 2e 2c 20 46 6c 61 6d | 82...[7].Rakotomamonjy,.A.,.Flam |
3720 | 61 72 79 2c 20 52 2e 2c 20 26 20 43 6f 75 72 74 79 2c 20 4e 2e 20 28 32 30 31 35 29 2e 20 47 65 | ary,.R.,.&.Courty,.N..(2015)..Ge |
3740 | 6e 65 72 61 6c 69 7a 65 64 0a 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 67 72 61 64 69 65 6e 74 3a 20 | neralized.conditional.gradient:. |
3760 | 61 6e 61 6c 79 73 69 73 20 6f 66 20 63 6f 6e 76 65 72 67 65 6e 63 65 20 61 6e 64 20 61 70 70 6c | analysis.of.convergence.and.appl |
3780 | 69 63 61 74 69 6f 6e 73 2e 0a 61 72 58 69 76 20 70 72 65 70 72 69 6e 74 20 61 72 58 69 76 3a 31 | ications..arXiv.preprint.arXiv:1 |
37a0 | 35 31 30 2e 30 36 35 36 37 2e 0a 0a 0a 0a 22 22 22 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 | 510.06567....."""..import.numpy. |
37c0 | 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 | as.np.import.matplotlib.pylab.as |
37e0 | 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 69 6d 70 6f 72 74 20 6f 74 2e 70 6c 6f 74 0a 0a 23 23 | .pl.import.ot.import.ot.plot..## |
3800 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
3820 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
3840 | 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d | ############.#.Generate.data.#.- |
3860 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 6e 20 | ------------..#%%.parameters..n. |
3880 | 3d 20 31 30 30 20 20 23 20 6e 62 20 62 69 6e 73 0a 0a 23 20 62 69 6e 20 70 6f 73 69 74 69 6f 6e | =.100..#.nb.bins..#.bin.position |
38a0 | 73 0a 78 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 2c 20 64 74 79 70 65 3d 6e 70 2e 66 6c 6f 61 | s.x.=.np.arange(n,.dtype=np.floa |
38c0 | 74 36 34 29 0a 0a 23 20 47 61 75 73 73 69 61 6e 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 61 | t64)..#.Gaussian.distributions.a |
38e0 | 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 31 44 5f 67 61 75 73 73 28 6e 2c 20 | .=.ot.datasets.make_1D_gauss(n,. |
3900 | 6d 3d 32 30 2c 20 73 3d 35 29 20 20 23 20 6d 3d 20 6d 65 61 6e 2c 20 73 3d 20 73 74 64 0a 62 20 | m=20,.s=5)..#.m=.mean,.s=.std.b. |
3920 | 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 31 44 5f 67 61 75 73 73 28 6e 2c 20 6d | =.ot.datasets.make_1D_gauss(n,.m |
3940 | 3d 36 30 2c 20 73 3d 31 30 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 20 3d 20 6f 74 | =60,.s=10)..#.loss.matrix.M.=.ot |
3960 | 2e 64 69 73 74 28 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 2c 20 78 2e 72 65 73 68 61 | .dist(x.reshape((n,.1)),.x.resha |
3980 | 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 23 23 23 23 23 23 | pe((n,.1))).M./=.M.max()..###### |
39a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
39c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
39e0 | 23 23 23 23 23 23 23 23 0a 23 20 53 6f 6c 76 65 20 45 4d 44 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d | ########.#.Solve.EMD.#.--------- |
3a00 | 0a 0a 23 25 25 20 45 4d 44 0a 0a 47 30 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 29 0a | ..#%%.EMD..G0.=.ot.emd(a,.b,.M). |
3a20 | 0a 70 6c 2e 66 69 67 75 72 65 28 33 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 29 0a 6f 74 | .pl.figure(3,.figsize=(5,.5)).ot |
3a40 | 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 47 30 2c 20 27 4f 54 20 6d | .plot.plot1D_mat(a,.b,.G0,.'OT.m |
3a60 | 61 74 72 69 78 20 47 30 27 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | atrix.G0')..#################### |
3a80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
3aa0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 53 6f 6c | ##########################.#.Sol |
3ac0 | 76 65 20 45 4d 44 20 77 69 74 68 20 46 72 6f 62 65 6e 69 75 73 20 6e 6f 72 6d 20 72 65 67 75 6c | ve.EMD.with.Frobenius.norm.regul |
3ae0 | 61 72 69 7a 61 74 69 6f 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | arization.#.-------------------- |
3b00 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 45 78 | ------------------------..#%%.Ex |
3b20 | 61 6d 70 6c 65 20 77 69 74 68 20 46 72 6f 62 65 6e 69 75 73 20 6e 6f 72 6d 20 72 65 67 75 6c 61 | ample.with.Frobenius.norm.regula |
3b40 | 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 74 75 72 6e 20 | rization...def.f(G):.....return. |
3b60 | 30 2e 35 20 2a 20 6e 70 2e 73 75 6d 28 47 2a 2a 32 29 0a 0a 0a 64 65 66 20 64 66 28 47 29 3a 0a | 0.5.*.np.sum(G**2)...def.df(G):. |
3b80 | 20 20 20 20 72 65 74 75 72 6e 20 47 0a 0a 0a 72 65 67 20 3d 20 31 65 2d 31 0a 0a 47 6c 32 20 3d | ....return.G...reg.=.1e-1..Gl2.= |
3ba0 | 20 6f 74 2e 6f 70 74 69 6d 2e 63 67 28 61 2c 20 62 2c 20 4d 2c 20 72 65 67 2c 20 66 2c 20 64 66 | .ot.optim.cg(a,.b,.M,.reg,.f,.df |
3bc0 | 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 33 29 0a 6f 74 | ,.verbose=True)..pl.figure(3).ot |
3be0 | 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 47 6c 32 2c 20 27 4f 54 20 | .plot.plot1D_mat(a,.b,.Gl2,.'OT. |
3c00 | 6d 61 74 72 69 78 20 46 72 6f 62 2e 20 72 65 67 27 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 | matrix.Frob..reg')..############ |
3c20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
3c40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
3c60 | 23 23 0a 23 20 53 6f 6c 76 65 20 45 4d 44 20 77 69 74 68 20 65 6e 74 72 6f 70 69 63 20 72 65 67 | ##.#.Solve.EMD.with.entropic.reg |
3c80 | 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | ularization.#.------------------ |
3ca0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 45 78 61 6d 70 6c | --------------------..#%%.Exampl |
3cc0 | 65 20 77 69 74 68 20 65 6e 74 72 6f 70 69 63 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 0a | e.with.entropic.regularization.. |
3ce0 | 0a 64 65 66 20 66 28 47 29 3a 0a 20 20 20 20 72 65 74 75 72 6e 20 6e 70 2e 73 75 6d 28 47 20 2a | .def.f(G):.....return.np.sum(G.* |
3d00 | 20 6e 70 2e 6c 6f 67 28 47 29 29 0a 0a 0a 64 65 66 20 64 66 28 47 29 3a 0a 20 20 20 20 72 65 74 | .np.log(G))...def.df(G):.....ret |
3d20 | 75 72 6e 20 6e 70 2e 6c 6f 67 28 47 29 20 2b 20 31 2e 0a 0a 0a 72 65 67 20 3d 20 31 65 2d 33 0a | urn.np.log(G).+.1....reg.=.1e-3. |
3d40 | 0a 47 65 20 3d 20 6f 74 2e 6f 70 74 69 6d 2e 63 67 28 61 2c 20 62 2c 20 4d 2c 20 72 65 67 2c 20 | .Ge.=.ot.optim.cg(a,.b,.M,.reg,. |
3d60 | 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 75 72 65 28 | f,.df,.verbose=True)..pl.figure( |
3d80 | 34 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 | 4,.figsize=(5,.5)).ot.plot.plot1 |
3da0 | 44 5f 6d 61 74 28 61 2c 20 62 2c 20 47 65 2c 20 27 4f 54 20 6d 61 74 72 69 78 20 45 6e 74 72 6f | D_mat(a,.b,.Ge,.'OT.matrix.Entro |
3dc0 | 70 2e 20 72 65 67 27 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | p..reg')..###################### |
3de0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
3e00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 53 6f 6c 76 65 | ########################.#.Solve |
3e20 | 20 45 4d 44 20 77 69 74 68 20 46 72 6f 62 65 6e 69 75 73 20 6e 6f 72 6d 20 2b 20 65 6e 74 72 6f | .EMD.with.Frobenius.norm.+.entro |
3e40 | 70 69 63 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | pic.regularization.#.----------- |
3e60 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
3e80 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 45 78 61 6d 70 6c 65 20 77 69 74 68 20 46 | ------------..#%%.Example.with.F |
3ea0 | 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 75 6c 61 72 | robenius.norm.+.entropic.regular |
3ec0 | 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 0a 20 20 20 | ization.with.gcg...def.f(G):.... |
3ee0 | 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 66 | .return.0.5.*.np.sum(G**2)...def |
3f00 | 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 3d 20 31 65 | .df(G):.....return.G...reg1.=.1e |
3f20 | 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 74 69 6d 2e | -3.reg2.=.1e-1..Gel2.=.ot.optim. |
3f40 | 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 64 66 2c 20 | gcg(a,.b,.M,.reg1,.reg2,.f,.df,. |
3f60 | 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 66 69 67 73 | verbose=True)..pl.figure(5,.figs |
3f80 | 69 7a 65 3d 28 35 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 | ize=(5,.5)).ot.plot.plot1D_mat(a |
3fa0 | 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 74 72 69 78 | ,.b,.Gel2,.'OT.entropic.+.matrix |
3fc0 | 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 00 00 00 00 | .Frob..reg').pl.show().PK....... |
3fe0 | 00 92 53 be 4c 39 06 7c 60 0c 15 00 00 0c 15 00 00 0f 00 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 64 | ..S.L9.|`............plot_otda_d |
4000 | 32 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a | 2.py#.-*-.coding:.utf-8.-*-.""". |
4020 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
4040 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4f 54 20 66 6f 72 20 64 6f 6d 61 69 | ===================.OT.for.domai |
4060 | 6e 20 61 64 61 70 74 61 74 69 6f 6e 20 6f 6e 20 65 6d 70 69 72 69 63 61 6c 20 64 69 73 74 72 69 | n.adaptation.on.empirical.distri |
4080 | 62 75 74 69 6f 6e 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | butions.======================== |
40a0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 | ===========================..Thi |
40c0 | 73 20 65 78 61 6d 70 6c 65 20 69 6e 74 72 6f 64 75 63 65 73 20 61 20 64 6f 6d 61 69 6e 20 61 64 | s.example.introduces.a.domain.ad |
40e0 | 61 70 74 61 74 69 6f 6e 20 69 6e 20 61 20 32 44 20 73 65 74 74 69 6e 67 2e 20 49 74 20 65 78 70 | aptation.in.a.2D.setting..It.exp |
4100 | 6c 69 63 69 74 73 0a 74 68 65 20 70 72 6f 62 6c 65 6d 20 6f 66 20 64 6f 6d 61 69 6e 20 61 64 61 | licits.the.problem.of.domain.ada |
4120 | 70 74 61 74 69 6f 6e 20 61 6e 64 20 69 6e 74 72 6f 64 75 63 65 73 20 73 6f 6d 65 20 6f 70 74 69 | ptation.and.introduces.some.opti |
4140 | 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 0a 61 70 70 72 6f 61 63 68 65 73 20 74 6f 20 73 6f 6c 76 | mal.transport.approaches.to.solv |
4160 | 65 20 69 74 2e 0a 0a 51 75 61 6e 74 69 74 69 65 73 20 73 75 63 68 20 61 73 20 6f 70 74 69 6d 61 | e.it...Quantities.such.as.optima |
4180 | 6c 20 63 6f 75 70 6c 69 6e 67 73 2c 20 67 72 65 61 74 65 72 20 63 6f 75 70 6c 69 6e 67 20 63 6f | l.couplings,.greater.coupling.co |
41a0 | 65 66 66 69 63 69 65 6e 74 73 20 61 6e 64 0a 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c | efficients.and.transported.sampl |
41c0 | 65 73 20 61 72 65 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 67 | es.are.represented.in.order.to.g |
41e0 | 69 76 65 20 61 20 76 69 73 75 61 6c 20 75 6e 64 65 72 73 74 61 6e 64 69 6e 67 0a 6f 66 20 77 68 | ive.a.visual.understanding.of.wh |
4200 | 61 74 20 74 68 65 20 74 72 61 6e 73 70 6f 72 74 20 6d 65 74 68 6f 64 73 20 61 72 65 20 64 6f 69 | at.the.transport.methods.are.doi |
4220 | 6e 67 2e 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 73 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 | ng.."""..#.Authors:.Remi.Flamary |
4240 | 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 20 20 20 20 20 20 | .<remi.flamary@unice.fr>.#...... |
4260 | 20 20 20 20 53 74 61 6e 69 73 6c 61 73 20 43 68 61 6d 62 6f 6e 20 3c 73 74 61 6e 2e 63 68 61 6d | ....Stanislas.Chambon.<stan.cham |
4280 | 62 6f 6e 40 67 6d 61 69 6c 2e 63 6f 6d 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 | bon@gmail.com>.#.#.License:.MIT. |
42a0 | 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 | License..import.matplotlib.pylab |
42c0 | 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 69 6d 70 6f 72 74 20 6f 74 2e 70 6c 6f 74 0a | .as.pl.import.ot.import.ot.plot. |
42e0 | 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 | .############################### |
4300 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
4320 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 67 65 6e 65 72 61 74 65 20 64 61 74 61 0a | ###############.#.generate.data. |
4340 | 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 6e 5f 73 61 6d 70 6c 65 73 5f 73 6f 75 72 63 | #.-------------..n_samples_sourc |
4360 | 65 20 3d 20 31 35 30 0a 6e 5f 73 61 6d 70 6c 65 73 5f 74 61 72 67 65 74 20 3d 20 31 35 30 0a 0a | e.=.150.n_samples_target.=.150.. |
4380 | 58 73 2c 20 79 73 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 61 5f 63 | Xs,.ys.=.ot.datasets.make_data_c |
43a0 | 6c 61 73 73 69 66 28 27 33 67 61 75 73 73 27 2c 20 6e 5f 73 61 6d 70 6c 65 73 5f 73 6f 75 72 63 | lassif('3gauss',.n_samples_sourc |
43c0 | 65 29 0a 58 74 2c 20 79 74 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 | e).Xt,.yt.=.ot.datasets.make_dat |
43e0 | 61 5f 63 6c 61 73 73 69 66 28 27 33 67 61 75 73 73 32 27 2c 20 6e 5f 73 61 6d 70 6c 65 73 5f 74 | a_classif('3gauss2',.n_samples_t |
4400 | 61 72 67 65 74 29 0a 0a 23 20 43 6f 73 74 20 6d 61 74 72 69 78 0a 4d 20 3d 20 6f 74 2e 64 69 73 | arget)..#.Cost.matrix.M.=.ot.dis |
4420 | 74 28 58 73 2c 20 58 74 2c 20 6d 65 74 72 69 63 3d 27 73 71 65 75 63 6c 69 64 65 61 6e 27 29 0a | t(Xs,.Xt,.metric='sqeuclidean'). |
4440 | 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 | ..############################## |
4460 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
4480 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 49 6e 73 74 61 6e 74 69 61 74 65 20 74 | ################.#.Instantiate.t |
44a0 | 68 65 20 64 69 66 66 65 72 65 6e 74 20 74 72 61 6e 73 70 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d | he.different.transport.algorithm |
44c0 | 73 20 61 6e 64 20 66 69 74 20 74 68 65 6d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | s.and.fit.them.#.--------------- |
44e0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
4500 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 20 45 4d 44 20 54 72 61 6e 73 70 6f 72 74 0a 6f 74 | ------------..#.EMD.Transport.ot |
4520 | 5f 65 6d 64 20 3d 20 6f 74 2e 64 61 2e 45 4d 44 54 72 61 6e 73 70 6f 72 74 28 29 0a 6f 74 5f 65 | _emd.=.ot.da.EMDTransport().ot_e |
4540 | 6d 64 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 53 69 6e 6b 68 6f 72 6e | md.fit(Xs=Xs,.Xt=Xt)..#.Sinkhorn |
4560 | 20 54 72 61 6e 73 70 6f 72 74 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 2e 64 61 2e 53 | .Transport.ot_sinkhorn.=.ot.da.S |
4580 | 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 28 72 65 67 5f 65 3d 31 65 2d 31 29 0a 6f 74 5f | inkhornTransport(reg_e=1e-1).ot_ |
45a0 | 73 69 6e 6b 68 6f 72 6e 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 53 69 | sinkhorn.fit(Xs=Xs,.Xt=Xt)..#.Si |
45c0 | 6e 6b 68 6f 72 6e 20 54 72 61 6e 73 70 6f 72 74 20 77 69 74 68 20 47 72 6f 75 70 20 6c 61 73 73 | nkhorn.Transport.with.Group.lass |
45e0 | 6f 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 6f 74 5f 6c 70 6c 31 20 3d 20 6f 74 2e 64 61 | o.regularization.ot_lpl1.=.ot.da |
4600 | 2e 53 69 6e 6b 68 6f 72 6e 4c 70 6c 31 54 72 61 6e 73 70 6f 72 74 28 72 65 67 5f 65 3d 31 65 2d | .SinkhornLpl1Transport(reg_e=1e- |
4620 | 31 2c 20 72 65 67 5f 63 6c 3d 31 65 30 29 0a 6f 74 5f 6c 70 6c 31 2e 66 69 74 28 58 73 3d 58 73 | 1,.reg_cl=1e0).ot_lpl1.fit(Xs=Xs |
4640 | 2c 20 79 73 3d 79 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 74 72 61 6e 73 70 6f 72 74 20 73 6f 75 | ,.ys=ys,.Xt=Xt)..#.transport.sou |
4660 | 72 63 65 20 73 61 6d 70 6c 65 73 20 6f 6e 74 6f 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 0a | rce.samples.onto.target.samples. |
4680 | 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 20 3d 20 6f 74 5f 65 6d 64 2e 74 72 61 6e 73 66 6f 72 6d | transp_Xs_emd.=.ot_emd.transform |
46a0 | 28 58 73 3d 58 73 29 0a 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 5f | (Xs=Xs).transp_Xs_sinkhorn.=.ot_ |
46c0 | 73 69 6e 6b 68 6f 72 6e 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 74 72 61 6e 73 70 | sinkhorn.transform(Xs=Xs).transp |
46e0 | 5f 58 73 5f 6c 70 6c 31 20 3d 20 6f 74 5f 6c 70 6c 31 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d | _Xs_lpl1.=.ot_lpl1.transform(Xs= |
4700 | 58 73 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | Xs)...########################## |
4720 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
4740 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 67 20 31 20 3a 20 70 | ####################.#.Fig.1.:.p |
4760 | 6c 6f 74 73 20 73 6f 75 72 63 65 20 61 6e 64 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 20 2b | lots.source.and.target.samples.+ |
4780 | 20 6d 61 74 72 69 78 20 6f 66 20 70 61 69 72 77 69 73 65 20 64 69 73 74 61 6e 63 65 0a 23 20 2d | .matrix.of.pairwise.distance.#.- |
47a0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
47c0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
47e0 | 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 31 30 2c 20 | ----..pl.figure(1,.figsize=(10,. |
4800 | 31 30 29 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 63 61 74 | 10)).pl.subplot(2,.2,.1).pl.scat |
4820 | 74 65 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 58 73 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 | ter(Xs[:,.0],.Xs[:,.1],.c=ys,.ma |
4840 | 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 | rker='+',.label='Source.samples' |
4860 | 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c | ).pl.xticks([]).pl.yticks([]).pl |
4880 | 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 20 | .legend(loc=0).pl.title('Source. |
48a0 | 20 73 61 6d 70 6c 65 73 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 32 29 0a | .samples')..pl.subplot(2,.2,.2). |
48c0 | 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 | pl.scatter(Xt[:,.0],.Xt[:,.1],.c |
48e0 | 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 | =yt,.marker='o',.label='Target.s |
4900 | 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 | amples').pl.xticks([]).pl.yticks |
4920 | 28 5b 5d 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 | ([]).pl.legend(loc=0).pl.title(' |
4940 | 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 | Target.samples')..pl.subplot(2,. |
4960 | 32 2c 20 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 4d 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e | 2,.3).pl.imshow(M,.interpolation |
4980 | 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 | ='nearest').pl.xticks([]).pl.yti |
49a0 | 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4d 61 74 72 69 78 20 6f 66 20 70 61 69 72 | cks([]).pl.title('Matrix.of.pair |
49c0 | 77 69 73 65 20 64 69 73 74 61 6e 63 65 73 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 | wise.distances').pl.tight_layout |
49e0 | 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ()...########################### |
4a00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
4a20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 67 20 32 20 3a 20 70 6c | ###################.#.Fig.2.:.pl |
4a40 | 6f 74 73 20 6f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 73 20 66 6f 72 20 74 68 65 20 64 69 | ots.optimal.couplings.for.the.di |
4a60 | 66 66 65 72 65 6e 74 20 6d 65 74 68 6f 64 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | fferent.methods.#.-------------- |
4a80 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
4aa0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 | -----------.pl.figure(2,.figsize |
4ac0 | 3d 28 31 30 2c 20 36 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 31 29 0a 70 | =(10,.6))..pl.subplot(2,.3,.1).p |
4ae0 | 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 65 6d 64 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 69 6e 74 65 72 | l.imshow(ot_emd.coupling_,.inter |
4b00 | 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d | polation='nearest').pl.xticks([] |
4b20 | 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 70 74 69 6d 61 | ).pl.yticks([]).pl.title('Optima |
4b40 | 6c 20 63 6f 75 70 6c 69 6e 67 5c 6e 45 4d 44 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 | l.coupling\nEMDTransport')..pl.s |
4b60 | 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 73 69 6e | ubplot(2,.3,.2).pl.imshow(ot_sin |
4b80 | 6b 68 6f 72 6e 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 | khorn.coupling_,.interpolation=' |
4ba0 | 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b | nearest').pl.xticks([]).pl.ytick |
4bc0 | 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 |
4be0 | 5c 6e 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f | \nSinkhornTransport')..pl.subplo |
4c00 | 74 28 32 2c 20 33 2c 20 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 6c 70 6c 31 2e 63 6f 75 | t(2,.3,.3).pl.imshow(ot_lpl1.cou |
4c20 | 70 6c 69 6e 67 5f 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 | pling_,.interpolation='nearest') |
4c40 | 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. |
4c60 | 74 69 74 6c 65 28 27 4f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 5c 6e 53 69 6e 6b 68 6f 72 | title('Optimal.coupling\nSinkhor |
4c80 | 6e 4c 70 6c 31 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 | nLpl1Transport')..pl.subplot(2,. |
4ca0 | 33 2c 20 34 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 | 3,.4).ot.plot.plot2D_samples_mat |
4cc0 | 28 58 73 2c 20 58 74 2c 20 6f 74 5f 65 6d 64 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 63 3d 5b 2e 35 | (Xs,.Xt,.ot_emd.coupling_,.c=[.5 |
4ce0 | 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 |
4d00 | 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 |
4d20 | 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 |
4d40 | 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=' |
4d60 | 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 |
4d80 | 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 |
4da0 | 28 27 4d 61 69 6e 20 63 6f 75 70 6c 69 6e 67 20 63 6f 65 66 66 69 63 69 65 6e 74 73 5c 6e 45 4d | ('Main.coupling.coefficients\nEM |
4dc0 | 44 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 35 | DTransport')..pl.subplot(2,.3,.5 |
4de0 | 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 58 73 2c | ).ot.plot.plot2D_samples_mat(Xs, |
4e00 | 20 58 74 2c 20 6f 74 5f 73 69 6e 6b 68 6f 72 6e 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 63 3d 5b 2e | .Xt,.ot_sinkhorn.coupling_,.c=[. |
4e20 | 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 | 5,..5,.1]).pl.scatter(Xs[:,.0],. |
4e40 | 58 73 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 | Xs[:,.1],.c=ys,.marker='+',.labe |
4e60 | 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 | l='Source.samples').pl.scatter(X |
4e80 | 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d | t[:,.0],.Xt[:,.1],.c=yt,.marker= |
4ea0 | 27 6f 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e | 'o',.label='Target.samples').pl. |
4ec0 | 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c | xticks([]).pl.yticks([]).pl.titl |
4ee0 | 65 28 27 4d 61 69 6e 20 63 6f 75 70 6c 69 6e 67 20 63 6f 65 66 66 69 63 69 65 6e 74 73 5c 6e 53 | e('Main.coupling.coefficients\nS |
4f00 | 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 |
4f20 | 2c 20 33 2c 20 36 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d | ,.3,.6).ot.plot.plot2D_samples_m |
4f40 | 61 74 28 58 73 2c 20 58 74 2c 20 6f 74 5f 6c 70 6c 31 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 63 3d | at(Xs,.Xt,.ot_lpl1.coupling_,.c= |
4f60 | 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 73 5b 3a 2c 20 30 5d | [.5,..5,.1]).pl.scatter(Xs[:,.0] |
4f80 | 2c 20 58 73 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 | ,.Xs[:,.1],.c=ys,.marker='+',.la |
4fa0 | 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 73 63 61 74 74 65 72 | bel='Source.samples').pl.scatter |
4fc0 | 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 | (Xt[:,.0],.Xt[:,.1],.c=yt,.marke |
4fe0 | 72 3d 27 6f 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 | r='o',.label='Target.samples').p |
5000 | 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 |
5020 | 74 6c 65 28 27 4d 61 69 6e 20 63 6f 75 70 6c 69 6e 67 20 63 6f 65 66 66 69 63 69 65 6e 74 73 5c | tle('Main.coupling.coefficients\ |
5040 | 6e 53 69 6e 6b 68 6f 72 6e 4c 70 6c 31 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 6c 2e 74 69 67 68 | nSinkhornLpl1Transport').pl.tigh |
5060 | 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | t_layout()...################### |
5080 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
50a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 | ###########################.#.Fi |
50c0 | 67 20 33 20 3a 20 70 6c 6f 74 20 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 0a 23 | g.3.:.plot.transported.samples.# |
50e0 | 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | .------------------------------- |
5100 | 2d 0a 0a 23 20 64 69 73 70 6c 61 79 20 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 | -..#.display.transported.samples |
5120 | 0a 70 6c 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 31 30 2c 20 34 29 29 0a 70 | .pl.figure(4,.figsize=(10,.4)).p |
5140 | 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 | l.subplot(1,.3,.1).pl.scatter(Xt |
5160 | 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=' |
5180 | 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d | o',............label='Target.sam |
51a0 | 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 30 2e 35 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 | ples',.alpha=0.5).pl.scatter(tra |
51c0 | 6e 73 70 5f 58 73 5f 65 6d 64 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 5b | nsp_Xs_emd[:,.0],.transp_Xs_emd[ |
51e0 | 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 | :,.1],.c=ys,............marker=' |
5200 | 2b 27 2c 20 6c 61 62 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 20 73 3d 33 30 | +',.label='Transp.samples',.s=30 |
5220 | 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 5c | ).pl.title('Transported.samples\ |
5240 | 6e 45 6d 64 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 | nEmdTransport').pl.legend(loc=0) |
5260 | 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 0a 70 6c | .pl.xticks([]).pl.yticks([])..pl |
5280 | 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b | .subplot(1,.3,.2).pl.scatter(Xt[ |
52a0 | 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f | :,.0],.Xt[:,.1],.c=yt,.marker='o |
52c0 | 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 | ',............label='Target.samp |
52e0 | 6c 65 73 27 2c 20 61 6c 70 68 61 3d 30 2e 35 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e | les',.alpha=0.5).pl.scatter(tran |
5300 | 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f | sp_Xs_sinkhorn[:,.0],.transp_Xs_ |
5320 | 73 69 6e 6b 68 6f 72 6e 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 | sinkhorn[:,.1],.c=ys,........... |
5340 | 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 |
5360 | 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 |
5380 | 20 73 61 6d 70 6c 65 73 5c 6e 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 6c | .samples\nSinkhornTransport').pl |
53a0 | 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 0a 70 6c 2e 73 75 | .xticks([]).pl.yticks([])..pl.su |
53c0 | 62 70 6c 6f 74 28 31 2c 20 33 2c 20 33 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 | bplot(1,.3,.3).pl.scatter(Xt[:,. |
53e0 | 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a | 0],.Xt[:,.1],.c=yt,.marker='o',. |
5400 | 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 | ...........label='Target.samples |
5420 | 27 2c 20 61 6c 70 68 61 3d 30 2e 35 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f | ',.alpha=0.5).pl.scatter(transp_ |
5440 | 58 73 5f 6c 70 6c 31 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 6c 70 6c 31 5b 3a 2c | Xs_lpl1[:,.0],.transp_Xs_lpl1[:, |
5460 | 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b 27 | .1],.c=ys,............marker='+' |
5480 | 2c 20 6c 61 62 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 20 73 3d 33 30 29 0a | ,.label='Transp.samples',.s=30). |
54a0 | 70 6c 2e 74 69 74 6c 65 28 27 54 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 5c 6e 53 | pl.title('Transported.samples\nS |
54c0 | 69 6e 6b 68 6f 72 6e 4c 70 6c 31 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 | inkhornLpl1Transport').pl.xticks |
54e0 | 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 | ([]).pl.yticks([])..pl.tight_lay |
5500 | 6f 75 74 28 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 92 53 be 4c 71 12 | out().pl.show().PK.........S.Lq. |
5520 | 0d cb 23 12 00 00 23 12 00 00 1c 00 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 73 65 6d 69 5f 73 75 70 | ..#...#.......plot_otda_semi_sup |
5540 | 65 72 76 69 73 65 64 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a | ervised.py#.-*-.coding:.utf-8.-* |
5560 | 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 | -.""".========================== |
5580 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4f 54 44 41 20 75 6e 73 75 70 65 72 76 | ==================.OTDA.unsuperv |
55a0 | 69 73 65 64 20 76 73 20 73 65 6d 69 2d 73 75 70 65 72 76 69 73 65 64 20 73 65 74 74 69 6e 67 0a | ised.vs.semi-supervised.setting. |
55c0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
55e0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 6e 74 72 6f | ============..This.example.intro |
5600 | 64 75 63 65 73 20 61 20 73 65 6d 69 20 73 75 70 65 72 76 69 73 65 64 20 64 6f 6d 61 69 6e 20 61 | duces.a.semi.supervised.domain.a |
5620 | 64 61 70 74 61 74 69 6f 6e 20 69 6e 20 61 20 32 44 20 73 65 74 74 69 6e 67 2e 0a 49 74 20 65 78 | daptation.in.a.2D.setting..It.ex |
5640 | 70 6c 69 63 69 74 73 20 74 68 65 20 70 72 6f 62 6c 65 6d 20 6f 66 20 73 65 6d 69 20 73 75 70 65 | plicits.the.problem.of.semi.supe |
5660 | 72 76 69 73 65 64 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 20 61 6e 64 20 69 6e 74 | rvised.domain.adaptation.and.int |
5680 | 72 6f 64 75 63 65 73 0a 73 6f 6d 65 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 20 61 | roduces.some.optimal.transport.a |
56a0 | 70 70 72 6f 61 63 68 65 73 20 74 6f 20 73 6f 6c 76 65 20 69 74 2e 0a 0a 51 75 61 6e 74 69 74 69 | pproaches.to.solve.it...Quantiti |
56c0 | 65 73 20 73 75 63 68 20 61 73 20 6f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 73 2c 20 67 72 | es.such.as.optimal.couplings,.gr |
56e0 | 65 61 74 65 72 20 63 6f 75 70 6c 69 6e 67 20 63 6f 65 66 66 69 63 69 65 6e 74 73 20 61 6e 64 0a | eater.coupling.coefficients.and. |
5700 | 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 20 61 72 65 20 72 65 70 72 65 73 65 6e | transported.samples.are.represen |
5720 | 74 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 67 69 76 65 20 61 20 76 69 73 75 61 6c 20 75 6e | ted.in.order.to.give.a.visual.un |
5740 | 64 65 72 73 74 61 6e 64 69 6e 67 0a 6f 66 20 77 68 61 74 20 74 68 65 20 74 72 61 6e 73 70 6f 72 | derstanding.of.what.the.transpor |
5760 | 74 20 6d 65 74 68 6f 64 73 20 61 72 65 20 64 6f 69 6e 67 2e 0a 22 22 22 0a 0a 23 20 41 75 74 68 | t.methods.are.doing.."""..#.Auth |
5780 | 6f 72 73 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 | ors:.Remi.Flamary.<remi.flamary@ |
57a0 | 75 6e 69 63 65 2e 66 72 3e 0a 23 20 20 20 20 20 20 20 20 20 20 53 74 61 6e 69 73 6c 61 73 20 43 | unice.fr>.#..........Stanislas.C |
57c0 | 68 61 6d 62 6f 6e 20 3c 73 74 61 6e 2e 63 68 61 6d 62 6f 6e 40 67 6d 61 69 6c 2e 63 6f 6d 3e 0a | hambon.<stan.chambon@gmail.com>. |
57e0 | 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 | #.#.License:.MIT.License..import |
5800 | 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f | .matplotlib.pylab.as.pl.import.o |
5820 | 74 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | t...############################ |
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 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 | ##################.#.Generate.da |
5880 | 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 6e 5f 73 61 6d 70 6c 65 73 5f 73 6f | ta.#.-------------..n_samples_so |
58a0 | 75 72 63 65 20 3d 20 31 35 30 0a 6e 5f 73 61 6d 70 6c 65 73 5f 74 61 72 67 65 74 20 3d 20 31 35 | urce.=.150.n_samples_target.=.15 |
58c0 | 30 0a 0a 58 73 2c 20 79 73 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 | 0..Xs,.ys.=.ot.datasets.make_dat |
58e0 | 61 5f 63 6c 61 73 73 69 66 28 27 33 67 61 75 73 73 27 2c 20 6e 5f 73 61 6d 70 6c 65 73 5f 73 6f | a_classif('3gauss',.n_samples_so |
5900 | 75 72 63 65 29 0a 58 74 2c 20 79 74 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f | urce).Xt,.yt.=.ot.datasets.make_ |
5920 | 64 61 74 61 5f 63 6c 61 73 73 69 66 28 27 33 67 61 75 73 73 32 27 2c 20 6e 5f 73 61 6d 70 6c 65 | data_classif('3gauss2',.n_sample |
5940 | 73 5f 74 61 72 67 65 74 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | s_target)...#################### |
5960 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
5980 | 23 23 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 54 72 61 | ##########################.#.Tra |
59a0 | 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 72 67 65 | nsport.source.samples.onto.targe |
59c0 | 74 20 73 61 6d 70 6c 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | t.samples.#.-------------------- |
59e0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 20 75 6e 73 | ------------------------...#.uns |
5a00 | 75 70 65 72 76 69 73 65 64 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 0a 6f 74 5f 73 | upervised.domain.adaptation.ot_s |
5a20 | 69 6e 6b 68 6f 72 6e 5f 75 6e 20 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 | inkhorn_un.=.ot.da.SinkhornTrans |
5a40 | 70 6f 72 74 28 72 65 67 5f 65 3d 31 65 2d 31 29 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f 75 6e 2e | port(reg_e=1e-1).ot_sinkhorn_un. |
5a60 | 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 69 6e 6b | fit(Xs=Xs,.Xt=Xt).transp_Xs_sink |
5a80 | 68 6f 72 6e 5f 75 6e 20 3d 20 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f 75 6e 2e 74 72 61 6e 73 66 6f | horn_un.=.ot_sinkhorn_un.transfo |
5aa0 | 72 6d 28 58 73 3d 58 73 29 0a 0a 23 20 73 65 6d 69 2d 73 75 70 65 72 76 69 73 65 64 20 64 6f 6d | rm(Xs=Xs)..#.semi-supervised.dom |
5ac0 | 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f 73 65 6d 69 20 | ain.adaptation.ot_sinkhorn_semi. |
5ae0 | 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 28 72 65 67 5f 65 3d | =.ot.da.SinkhornTransport(reg_e= |
5b00 | 31 65 2d 31 29 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f 73 65 6d 69 2e 66 69 74 28 58 73 3d 58 73 | 1e-1).ot_sinkhorn_semi.fit(Xs=Xs |
5b20 | 2c 20 58 74 3d 58 74 2c 20 79 73 3d 79 73 2c 20 79 74 3d 79 74 29 0a 74 72 61 6e 73 70 5f 58 73 | ,.Xt=Xt,.ys=ys,.yt=yt).transp_Xs |
5b40 | 5f 73 69 6e 6b 68 6f 72 6e 5f 73 65 6d 69 20 3d 20 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f 73 65 6d | _sinkhorn_semi.=.ot_sinkhorn_sem |
5b60 | 69 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 0a 23 20 73 65 6d 69 20 73 75 70 65 72 | i.transform(Xs=Xs)..#.semi.super |
5b80 | 76 69 73 65 64 20 44 41 20 75 73 65 73 20 61 76 61 69 6c 61 62 6c 65 20 6c 61 62 61 6c 65 64 20 | vised.DA.uses.available.labaled. |
5ba0 | 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 20 63 6f 73 | target.samples.to.modify.the.cos |
5bc0 | 74 0a 23 20 6d 61 74 72 69 78 20 69 6e 76 6f 6c 76 65 64 20 69 6e 20 74 68 65 20 4f 54 20 70 72 | t.#.matrix.involved.in.the.OT.pr |
5be0 | 6f 62 6c 65 6d 2e 20 54 68 65 20 63 6f 73 74 20 6f 66 20 74 72 61 6e 73 70 6f 72 74 69 6e 67 20 | oblem..The.cost.of.transporting. |
5c00 | 61 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 0a 23 20 6f 66 20 63 6c 61 73 73 20 41 20 6f 6e 74 | a.source.sample.#.of.class.A.ont |
5c20 | 6f 20 61 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 20 6f 66 20 63 6c 61 73 73 20 42 20 21 3d 20 | o.a.target.sample.of.class.B.!=. |
5c40 | 41 20 69 73 20 73 65 74 20 74 6f 20 69 6e 66 69 6e 69 74 65 2c 20 6f 72 20 61 0a 23 20 76 65 72 | A.is.set.to.infinite,.or.a.#.ver |
5c60 | 79 20 6c 61 72 67 65 20 76 61 6c 75 65 0a 0a 23 20 6e 6f 74 65 20 74 68 61 74 20 69 6e 20 74 68 | y.large.value..#.note.that.in.th |
5c80 | 65 20 70 72 65 73 65 6e 74 20 63 61 73 65 20 77 65 20 63 6f 6e 73 69 64 65 72 20 74 68 61 74 20 | e.present.case.we.consider.that. |
5ca0 | 61 6c 6c 20 74 68 65 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 20 61 72 65 0a 23 20 6c 61 62 | all.the.target.samples.are.#.lab |
5cc0 | 65 6c 65 64 2e 20 46 6f 72 20 64 61 69 6c 79 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 2c 20 73 6f | eled..For.daily.applications,.so |
5ce0 | 6d 65 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 20 6d 69 67 68 74 20 6e 6f 74 20 68 61 76 65 20 | me.target.sample.might.not.have. |
5d00 | 6c 61 62 65 6c 73 2c 0a 23 20 69 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20 65 6c 65 6d 65 | labels,.#.in.this.case.the.eleme |
5d20 | 6e 74 20 6f 66 20 79 74 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65 73 65 20 | nt.of.yt.corresponding.to.these. |
5d40 | 73 61 6d 70 6c 65 73 20 73 68 6f 75 6c 64 20 62 65 0a 23 20 66 69 6c 6c 65 64 20 77 69 74 68 20 | samples.should.be.#.filled.with. |
5d60 | 2d 31 2e 0a 0a 23 20 57 61 72 6e 69 6e 67 3a 20 77 65 20 72 65 63 61 6c 6c 20 74 68 61 74 20 2d | -1...#.Warning:.we.recall.that.- |
5d80 | 31 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 61 73 20 61 20 63 6c 61 73 73 20 6c 61 62 65 | 1.cannot.be.used.as.a.class.labe |
5da0 | 6c 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | l...############################ |
5dc0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
5de0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 67 20 31 20 3a 20 70 6c 6f | ##################.#.Fig.1.:.plo |
5e00 | 74 73 20 73 6f 75 72 63 65 20 61 6e 64 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 20 2b 20 6d | ts.source.and.target.samples.+.m |
5e20 | 61 74 72 69 78 20 6f 66 20 70 61 69 72 77 69 73 65 20 64 69 73 74 61 6e 63 65 0a 23 20 2d 2d 2d | atrix.of.pairwise.distance.#.--- |
5e40 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
5e60 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
5e80 | 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 31 30 2c 20 31 30 | --..pl.figure(1,.figsize=(10,.10 |
5ea0 | 29 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 63 61 74 74 65 | )).pl.subplot(2,.2,.1).pl.scatte |
5ec0 | 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 58 73 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 72 6b | r(Xs[:,.0],.Xs[:,.1],.c=ys,.mark |
5ee0 | 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a | er='+',.label='Source.samples'). |
5f00 | 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 6c | pl.xticks([]).pl.yticks([]).pl.l |
5f20 | 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 73 | egend(loc=0).pl.title('Source..s |
5f40 | 61 6d 70 6c 65 73 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 32 29 0a 70 6c | amples')..pl.subplot(2,.2,.2).pl |
5f60 | 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 |
5f80 | 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 6d | t,.marker='o',.label='Target.sam |
5fa0 | 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 5b | ples').pl.xticks([]).pl.yticks([ |
5fc0 | 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 61 | ]).pl.legend(loc=0).pl.title('Ta |
5fe0 | 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c | rget.samples')..pl.subplot(2,.2, |
6000 | 20 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f 75 6e 2e 63 6f 73 | .3).pl.imshow(ot_sinkhorn_un.cos |
6020 | 74 5f 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e | t_,.interpolation='nearest').pl. |
6040 | 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c | xticks([]).pl.yticks([]).pl.titl |
6060 | 65 28 27 43 6f 73 74 20 6d 61 74 72 69 78 20 2d 20 75 6e 73 75 70 65 72 76 69 73 65 64 20 44 41 | e('Cost.matrix.-.unsupervised.DA |
6080 | 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 34 29 0a 70 6c 2e 69 6d 73 68 6f | ')..pl.subplot(2,.2,.4).pl.imsho |
60a0 | 77 28 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f 73 65 6d 69 2e 63 6f 73 74 5f 2c 20 69 6e 74 65 72 70 | w(ot_sinkhorn_semi.cost_,.interp |
60c0 | 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 | olation='nearest').pl.xticks([]) |
60e0 | 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 43 6f 73 74 20 6d 61 | .pl.yticks([]).pl.title('Cost.ma |
6100 | 74 72 69 78 20 2d 20 73 65 6d 69 73 75 70 65 72 76 69 73 65 64 20 44 41 27 29 0a 0a 70 6c 2e 74 | trix.-.semisupervised.DA')..pl.t |
6120 | 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 23 20 74 68 65 20 6f 70 74 69 6d 61 6c 20 63 6f 75 | ight_layout()..#.the.optimal.cou |
6140 | 70 6c 69 6e 67 20 69 6e 20 74 68 65 20 73 65 6d 69 2d 73 75 70 65 72 76 69 73 65 64 20 44 41 20 | pling.in.the.semi-supervised.DA. |
6160 | 63 61 73 65 20 77 69 6c 6c 20 65 78 68 69 62 69 74 20 22 20 73 68 61 70 65 0a 23 20 73 69 6d 69 | case.will.exhibit.".shape.#.simi |
6180 | 6c 61 72 22 20 74 6f 20 74 68 65 20 63 6f 73 74 20 6d 61 74 72 69 78 2c 20 28 62 6c 6f 63 6b 20 | lar".to.the.cost.matrix,.(block. |
61a0 | 64 69 61 67 6f 6e 61 6c 20 6d 61 74 72 69 78 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 | diagonal.matrix)...############# |
61c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
61e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
6200 | 23 0a 23 20 46 69 67 20 32 20 3a 20 70 6c 6f 74 73 20 6f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 | #.#.Fig.2.:.plots.optimal.coupli |
6220 | 6e 67 73 20 66 6f 72 20 74 68 65 20 64 69 66 66 65 72 65 6e 74 20 6d 65 74 68 6f 64 73 0a 23 20 | ngs.for.the.different.methods.#. |
6240 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
6260 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 | -------------------------..pl.fi |
6280 | 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 38 2c 20 34 29 29 0a 0a 70 6c 2e 73 75 62 70 | gure(2,.figsize=(8,.4))..pl.subp |
62a0 | 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 73 69 6e 6b 68 6f | lot(1,.2,.1).pl.imshow(ot_sinkho |
62c0 | 72 6e 5f 75 6e 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 | rn_un.coupling_,.interpolation=' |
62e0 | 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b | nearest').pl.xticks([]).pl.ytick |
6300 | 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 |
6320 | 5c 6e 55 6e 73 75 70 65 72 76 69 73 65 64 20 44 41 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 | \nUnsupervised.DA')..pl.subplot( |
6340 | 31 2c 20 32 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 73 69 6e 6b 68 6f 72 6e 5f 73 | 1,.2,.2).pl.imshow(ot_sinkhorn_s |
6360 | 65 6d 69 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 | emi.coupling_,.interpolation='ne |
6380 | 61 72 65 73 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 | arest').pl.xticks([]).pl.yticks( |
63a0 | 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 5c 6e | []).pl.title('Optimal.coupling\n |
63c0 | 53 65 6d 69 2d 73 75 70 65 72 76 69 73 65 64 20 44 41 27 29 0a 0a 70 6c 2e 74 69 67 68 74 5f 6c | Semi-supervised.DA')..pl.tight_l |
63e0 | 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()...###################### |
6400 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
6420 | 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 |
6440 | 20 3a 20 70 6c 6f 74 20 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 0a 23 20 2d 2d | .:.plot.transported.samples.#.-- |
6460 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a | ------------------------------.. |
6480 | 23 20 64 69 73 70 6c 61 79 20 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 0a 70 6c | #.display.transported.samples.pl |
64a0 | 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 38 2c 20 34 29 29 0a 70 6c 2e 73 75 | .figure(4,.figsize=(8,.4)).pl.su |
64c0 | 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 | bplot(1,.2,.1).pl.scatter(Xt[:,. |
64e0 | 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a | 0],.Xt[:,.1],.c=yt,.marker='o',. |
6500 | 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 | ...........label='Target.samples |
6520 | 27 2c 20 61 6c 70 68 61 3d 30 2e 35 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f | ',.alpha=0.5).pl.scatter(transp_ |
6540 | 58 73 5f 73 69 6e 6b 68 6f 72 6e 5f 75 6e 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f | Xs_sinkhorn_un[:,.0],.transp_Xs_ |
6560 | 73 69 6e 6b 68 6f 72 6e 5f 75 6e 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 | sinkhorn_un[:,.1],.c=ys,........ |
6580 | 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 61 | ....marker='+',.label='Transp.sa |
65a0 | 6d 70 6c 65 73 27 2c 20 73 3d 33 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 72 61 6e 73 70 6f 72 | mples',.s=30).pl.title('Transpor |
65c0 | 74 65 64 20 73 61 6d 70 6c 65 73 5c 6e 45 6d 64 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 6c 2e 6c | ted.samples\nEmdTransport').pl.l |
65e0 | 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 | egend(loc=0).pl.xticks([]).pl.yt |
6600 | 69 63 6b 73 28 5b 5d 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 32 29 0a 70 6c | icks([])..pl.subplot(1,.2,.2).pl |
6620 | 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 |
6640 | 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= |
6660 | 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 30 2e 35 29 0a 70 6c 2e | 'Target.samples',.alpha=0.5).pl. |
6680 | 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 5f 73 65 6d 69 5b | scatter(transp_Xs_sinkhorn_semi[ |
66a0 | 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 5f 73 65 6d 69 5b 3a | :,.0],.transp_Xs_sinkhorn_semi[: |
66c0 | 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='+ |
66e0 | 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) |
6700 | 0a 70 6c 2e 74 69 74 6c 65 28 27 54 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 5c 6e | .pl.title('Transported.samples\n |
6720 | 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d | SinkhornTransport').pl.xticks([] |
6740 | 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 | ).pl.yticks([])..pl.tight_layout |
6760 | 28 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 90 53 be 4c 0b 5c 2a af a2 | ().pl.show().PK.........S.L.\*.. |
6780 | 06 00 00 a2 06 00 00 0d 00 00 00 70 6c 6f 74 5f 4f 54 5f 31 44 2e 70 79 23 20 2d 2a 2d 20 63 6f | ...........plot_OT_1D.py#.-*-.co |
67a0 | 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ding:.utf-8.-*-.""".============ |
67c0 | 3d 3d 3d 3d 3d 3d 3d 3d 0a 31 44 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 0a 3d 3d | ========.1D.optimal.transport.== |
67e0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 | ==================..This.example |
6800 | 20 69 6c 6c 75 73 74 72 61 74 65 73 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66 20 | .illustrates.the.computation.of. |
6820 | 45 4d 44 20 61 6e 64 20 53 69 6e 6b 68 6f 72 6e 20 74 72 61 6e 73 70 6f 72 74 20 70 6c 61 6e 73 | EMD.and.Sinkhorn.transport.plans |
6840 | 0a 61 6e 64 20 74 68 65 69 72 20 76 69 73 75 61 6c 69 7a 61 74 69 6f 6e 2e 0a 0a 22 22 22 0a 0a | .and.their.visualization...""".. |
6860 | 23 20 41 75 74 68 6f 72 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 | #.Author:.Remi.Flamary.<remi.fla |
6880 | 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 | mary@unice.fr>.#.#.License:.MIT. |
68a0 | 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f | License..import.numpy.as.np.impo |
68c0 | 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 | rt.matplotlib.pylab.as.pl.import |
68e0 | 20 6f 74 0a 69 6d 70 6f 72 74 20 6f 74 2e 70 6c 6f 74 0a 66 72 6f 6d 20 6f 74 2e 64 61 74 61 73 | .ot.import.ot.plot.from.ot.datas |
6900 | 65 74 73 20 69 6d 70 6f 72 74 20 6d 61 6b 65 5f 31 44 5f 67 61 75 73 73 20 61 73 20 67 61 75 73 | ets.import.make_1D_gauss.as.gaus |
6920 | 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..############################# |
6940 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
6960 | 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 |
6980 | 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 |
69a0 | 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 |
69c0 | 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 |
69e0 | 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 |
6a00 | 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)..#. |
6a20 | 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 |
6a40 | 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 |
6a60 | 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 |
6a80 | 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()...####### |
6aa0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
6ac0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
6ae0 | 23 23 23 23 23 23 23 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 |
6b00 | 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | .loss.matrix.#.----------------- |
6b20 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 6c 6f 74 20 74 68 65 20 | -----------------..#%%.plot.the. |
6b40 | 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 | distributions..pl.figure(1,.figs |
6b60 | 69 7a 65 3d 28 36 2e 34 2c 20 33 29 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 61 2c 20 27 62 27 2c | ize=(6.4,.3)).pl.plot(x,.a,.'b', |
6b80 | 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 27 29 0a 70 6c | .label='Source.distribution').pl |
6ba0 | 2e 70 6c 6f 74 28 78 2c 20 62 2c 20 27 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 64 | .plot(x,.b,.'r',.label='Target.d |
6bc0 | 69 73 74 72 69 62 75 74 69 6f 6e 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 29 0a 0a 23 25 25 20 70 | istribution').pl.legend()..#%%.p |
6be0 | 6c 6f 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 61 6e 64 20 6c 6f 73 73 20 6d 61 74 72 69 | lot.distributions.and.loss.matri |
6c00 | 78 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 29 0a | x..pl.figure(2,.figsize=(5,.5)). |
6c20 | 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 4d 2c 20 27 43 6f 73 | ot.plot.plot1D_mat(a,.b,.M,.'Cos |
6c40 | 74 20 6d 61 74 72 69 78 20 4d 27 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | t.matrix.M')..################## |
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 23 23 23 23 23 23 23 23 23 0a 23 20 53 | ############################.#.S |
6ca0 | 6f 6c 76 65 20 45 4d 44 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 25 25 20 45 4d 44 0a 0a | olve.EMD.#.---------...#%%.EMD.. |
6cc0 | 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 28 | G0.=.ot.emd(a,.b,.M)..pl.figure( |
6ce0 | 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 31 | 3,.figsize=(5,.5)).ot.plot.plot1 |
6d00 | 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 0a | D_mat(a,.b,.G0,.'OT.matrix.G0'). |
6d20 | 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 | .############################### |
6d40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
6d60 | 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 6e | ###############.#.Solve.Sinkhorn |
6d80 | 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 25 25 20 53 69 6e 6b 68 6f 72 6e | .#.--------------...#%%.Sinkhorn |
6da0 | 0a 0a 6c 61 6d 62 64 20 3d 20 31 65 2d 33 0a 47 73 20 3d 20 6f 74 2e 73 69 6e 6b 68 6f 72 6e 28 | ..lambd.=.1e-3.Gs.=.ot.sinkhorn( |
6dc0 | 61 2c 20 62 2c 20 4d 2c 20 6c 61 6d 62 64 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 0a 70 | a,.b,.M,.lambd,.verbose=True)..p |
6de0 | 6c 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 29 0a 6f 74 2e 70 | l.figure(4,.figsize=(5,.5)).ot.p |
6e00 | 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 47 73 2c 20 27 4f 54 20 6d 61 74 | lot.plot1D_mat(a,.b,.Gs,.'OT.mat |
6e20 | 72 69 78 20 53 69 6e 6b 68 6f 72 6e 27 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 | rix.Sinkhorn')..pl.show().PK.... |
6e40 | 00 00 00 00 92 53 be 4c 1c cd f5 95 28 0d 00 00 28 0d 00 00 15 00 00 00 70 6c 6f 74 5f 62 61 72 | .....S.L....(...(.......plot_bar |
6e60 | 79 63 65 6e 74 65 72 5f 31 44 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 | ycenter_1D.py#.-*-.coding:.utf-8 |
6e80 | 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 | .-*-.""".======================= |
6ea0 | 3d 3d 3d 3d 3d 3d 3d 0a 31 44 20 57 61 73 73 65 72 73 74 65 69 6e 20 62 61 72 79 63 65 6e 74 65 | =======.1D.Wasserstein.barycente |
6ec0 | 72 20 64 65 6d 6f 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | r.demo.========================= |
6ee0 | 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 6c 6c 75 73 74 72 61 74 65 73 20 | =====..This.example.illustrates. |
6f00 | 74 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66 20 72 65 67 75 6c 61 72 69 7a 65 64 20 57 | the.computation.of.regularized.W |
6f20 | 61 73 73 65 72 73 79 65 69 6e 20 42 61 72 79 63 65 6e 74 65 72 0a 61 73 20 70 72 6f 70 6f 73 65 | assersyein.Barycenter.as.propose |
6f40 | 64 20 69 6e 20 5b 33 5d 2e 0a 0a 0a 5b 33 5d 20 42 65 6e 61 6d 6f 75 2c 20 4a 2e 20 44 2e 2c 20 | d.in.[3]....[3].Benamou,.J..D.,. |
6f60 | 43 61 72 6c 69 65 72 2c 20 47 2e 2c 20 43 75 74 75 72 69 2c 20 4d 2e 2c 20 4e 65 6e 6e 61 2c 20 | Carlier,.G.,.Cuturi,.M.,.Nenna,. |
6f80 | 4c 2e 2c 20 26 20 50 65 79 72 c3 a9 2c 20 47 2e 20 28 32 30 31 35 29 2e 0a 49 74 65 72 61 74 69 | L.,.&.Peyr..,.G..(2015)..Iterati |
6fa0 | 76 65 20 42 72 65 67 6d 61 6e 20 70 72 6f 6a 65 63 74 69 6f 6e 73 20 66 6f 72 20 72 65 67 75 6c | ve.Bregman.projections.for.regul |
6fc0 | 61 72 69 7a 65 64 20 74 72 61 6e 73 70 6f 72 74 61 74 69 6f 6e 20 70 72 6f 62 6c 65 6d 73 0a 53 | arized.transportation.problems.S |
6fe0 | 49 41 4d 20 4a 6f 75 72 6e 61 6c 20 6f 6e 20 53 63 69 65 6e 74 69 66 69 63 20 43 6f 6d 70 75 74 | IAM.Journal.on.Scientific.Comput |
7000 | 69 6e 67 2c 20 33 37 28 32 29 2c 20 41 31 31 31 31 2d 41 31 31 33 38 2e 0a 0a 22 22 22 0a 0a 23 | ing,.37(2),.A1111-A1138..."""..# |
7020 | 20 41 75 74 68 6f 72 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d | .Author:.Remi.Flamary.<remi.flam |
7040 | 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c | ary@unice.fr>.#.#.License:.MIT.L |
7060 | 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 | icense..import.numpy.as.np.impor |
7080 | 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 | t.matplotlib.pylab.as.pl.import. |
70a0 | 6f 74 0a 23 20 6e 65 63 65 73 73 61 72 79 20 66 6f 72 20 33 64 20 70 6c 6f 74 20 65 76 65 6e 20 | ot.#.necessary.for.3d.plot.even. |
70c0 | 69 66 20 6e 6f 74 20 75 73 65 64 0a 66 72 6f 6d 20 6d 70 6c 5f 74 6f 6f 6c 6b 69 74 73 2e 6d 70 | if.not.used.from.mpl_toolkits.mp |
70e0 | 6c 6f 74 33 64 20 69 6d 70 6f 72 74 20 41 78 65 73 33 44 20 20 23 20 6e 6f 71 61 0a 66 72 6f 6d | lot3d.import.Axes3D..#.noqa.from |
7100 | 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 63 6f 6c 6c 65 63 74 69 6f 6e 73 20 69 6d 70 6f 72 74 20 50 | .matplotlib.collections.import.P |
7120 | 6f 6c 79 43 6f 6c 6c 65 63 74 69 6f 6e 0a 0a 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 | olyCollection..#.#.Generate.data |
7140 | 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 | .#.-------------..#%%.parameters |
7160 | 0a 0a 6e 20 3d 20 31 30 30 20 20 23 20 6e 62 20 62 69 6e 73 0a 0a 23 20 62 69 6e 20 70 6f 73 69 | ..n.=.100..#.nb.bins..#.bin.posi |
7180 | 74 69 6f 6e 73 0a 78 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 2c 20 64 74 79 70 65 3d 6e 70 2e | tions.x.=.np.arange(n,.dtype=np. |
71a0 | 66 6c 6f 61 74 36 34 29 0a 0a 23 20 47 61 75 73 73 69 61 6e 20 64 69 73 74 72 69 62 75 74 69 6f | float64)..#.Gaussian.distributio |
71c0 | 6e 73 0a 61 31 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 31 44 5f 67 61 75 73 | ns.a1.=.ot.datasets.make_1D_gaus |
71e0 | 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 20 73 | s(n,.m=20,.s=5)..#.m=.mean,.s=.s |
7200 | 74 64 0a 61 32 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 31 44 5f 67 61 75 73 | td.a2.=.ot.datasets.make_1D_gaus |
7220 | 73 28 6e 2c 20 6d 3d 36 30 2c 20 73 3d 38 29 0a 0a 23 20 63 72 65 61 74 69 6e 67 20 6d 61 74 72 | s(n,.m=60,.s=8)..#.creating.matr |
7240 | 69 78 20 41 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61 6c 6c 20 64 69 73 74 72 69 62 75 74 69 6f 6e | ix.A.containing.all.distribution |
7260 | 73 0a 41 20 3d 20 6e 70 2e 76 73 74 61 63 6b 28 28 61 31 2c 20 61 32 29 29 2e 54 0a 6e 5f 64 69 | s.A.=.np.vstack((a1,.a2)).T.n_di |
7280 | 73 74 72 69 62 75 74 69 6f 6e 73 20 3d 20 41 2e 73 68 61 70 65 5b 31 5d 0a 0a 23 20 6c 6f 73 73 | stributions.=.A.shape[1]..#.loss |
72a0 | 20 6d 61 74 72 69 78 20 2b 20 6e 6f 72 6d 61 6c 69 7a 61 74 69 6f 6e 0a 4d 20 3d 20 6f 74 2e 75 | .matrix.+.normalization.M.=.ot.u |
72c0 | 74 69 6c 73 2e 64 69 73 74 30 28 6e 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 29 0a 0a 23 0a 23 20 | tils.dist0(n).M./=.M.max()..#.#. |
72e0 | 50 6c 6f 74 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 6c 6f 74 20 | Plot.data.#.---------..#%%.plot. |
7300 | 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,. |
7320 | 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 |
7340 | 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 |
7360 | 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 |
7380 | 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 0a 23 20 42 61 72 79 | ns').pl.tight_layout()..#.#.Bary |
73a0 | 63 65 6e 74 65 72 20 63 6f 6d 70 75 74 61 74 69 6f 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | center.computation.#.----------- |
73c0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 62 61 72 79 63 65 6e 74 65 72 20 63 6f 6d 70 | -----------..#%%.barycenter.comp |
73e0 | 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 70 68 61 | utation..alpha.=.0.2..#.0<=alpha |
7400 | 3c 3d 31 0a 77 65 69 67 68 74 73 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 31 20 2d 20 61 6c 70 68 | <=1.weights.=.np.array([1.-.alph |
7420 | 61 2c 20 61 6c 70 68 61 5d 29 0a 0a 23 20 6c 32 62 61 72 79 0a 62 61 72 79 5f 6c 32 20 3d 20 41 | a,.alpha])..#.l2bary.bary_l2.=.A |
7440 | 2e 64 6f 74 28 77 65 69 67 68 74 73 29 0a 0a 23 20 77 61 73 73 65 72 73 74 65 69 6e 0a 72 65 67 | .dot(weights)..#.wasserstein.reg |
7460 | 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 6e 2e 62 | .=.1e-3.bary_wass.=.ot.bregman.b |
7480 | 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 0a 0a 70 | arycenter(A,.M,.reg,.weights)..p |
74a0 | 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( |
74c0 | 32 2c 20 31 2c 20 31 29 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6e 5f 64 69 73 74 72 69 | 2,.1,.1).for.i.in.range(n_distri |
74e0 | 62 75 74 69 6f 6e 73 29 3a 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 2c 20 41 5b 3a 2c 20 69 5d | butions):.....pl.plot(x,.A[:,.i] |
7500 | 29 0a 70 6c 2e 74 69 74 6c 65 28 27 44 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 70 6c 2e | ).pl.title('Distributions')..pl. |
7520 | 73 75 62 70 6c 6f 74 28 32 2c 20 31 2c 20 32 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 61 72 79 | subplot(2,.1,.2).pl.plot(x,.bary |
7540 | 5f 6c 32 2c 20 27 72 27 2c 20 6c 61 62 65 6c 3d 27 6c 32 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c | _l2,.'r',.label='l2').pl.plot(x, |
7560 | 20 62 61 72 79 5f 77 61 73 73 2c 20 27 67 27 2c 20 6c 61 62 65 6c 3d 27 57 61 73 73 65 72 73 74 | .bary_wass,.'g',.label='Wasserst |
7580 | 65 69 6e 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 29 0a 70 6c 2e 74 69 74 6c 65 28 27 42 61 72 79 | ein').pl.legend().pl.title('Bary |
75a0 | 63 65 6e 74 65 72 73 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 23 0a 23 | centers').pl.tight_layout()..#.# |
75c0 | 20 42 61 72 79 63 65 6e 74 72 69 63 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 0a 23 20 2d 2d 2d | .Barycentric.interpolation.#.--- |
75e0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 62 61 72 79 | ----------------------..#%%.bary |
7600 | 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 20 3d 20 | center.interpolation..n_alpha.=. |
7620 | 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 2c 20 31 | 11.alpha_list.=.np.linspace(0,.1 |
7640 | 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 28 6e 2c | ,.n_alpha)...B_l2.=.np.zeros((n, |
7660 | 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 42 5f 6c | .n_alpha))..B_wass.=.np.copy(B_l |
7680 | 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 29 3a 0a | 2)..for.i.in.range(0,.n_alpha):. |
76a0 | 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 20 77 65 | ....alpha.=.alpha_list[i].....we |
76c0 | 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 61 6c 70 | ights.=.np.array([1.-.alpha,.alp |
76e0 | 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 65 69 67 | ha]).....B_l2[:,.i].=.A.dot(weig |
7700 | 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 65 67 6d | hts).....B_wass[:,.i].=.ot.bregm |
7720 | 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 68 74 73 | an.barycenter(A,.M,.reg,.weights |
7740 | 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 2e 66 69 | )..#%%.plot.interpolation..pl.fi |
7760 | 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 70 28 27 | gure(3)..cmap.=.pl.cm.get_cmap(' |
7780 | 76 69 72 69 64 69 73 27 29 0a 76 65 72 74 73 20 3d 20 5b 5d 0a 7a 73 20 3d 20 61 6c 70 68 61 5f | viridis').verts.=.[].zs.=.alpha_ |
77a0 | 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 29 3a 0a | list.for.i,.z.in.enumerate(zs):. |
77c0 | 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 2e 61 70 | ....ys.=.B_l2[:,.i].....verts.ap |
77e0 | 70 65 6e 64 28 6c 69 73 74 28 7a 69 70 28 78 2c 20 79 73 29 29 29 0a 0a 61 78 20 3d 20 70 6c 2e | pend(list(zip(x,.ys)))..ax.=.pl. |
7800 | 67 63 66 28 29 2e 67 63 61 28 70 72 6f 6a 65 63 74 69 6f 6e 3d 27 33 64 27 29 0a 0a 70 6f 6c 79 | gcf().gca(projection='3d')..poly |
7820 | 20 3d 20 50 6f 6c 79 43 6f 6c 6c 65 63 74 69 6f 6e 28 76 65 72 74 73 2c 20 66 61 63 65 63 6f 6c | .=.PolyCollection(verts,.facecol |
7840 | 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 69 73 74 | ors=[cmap(a).for.a.in.alpha_list |
7860 | 5d 29 0a 70 6f 6c 79 2e 73 65 74 5f 61 6c 70 68 61 28 30 2e 37 29 0a 61 78 2e 61 64 64 5f 63 6f | ]).poly.set_alpha(0.7).ax.add_co |
7880 | 6c 6c 65 63 74 69 6f 6e 33 64 28 70 6f 6c 79 2c 20 7a 73 3d 7a 73 2c 20 7a 64 69 72 3d 27 79 27 | llection3d(poly,.zs=zs,.zdir='y' |
78a0 | 29 0a 61 78 2e 73 65 74 5f 78 6c 61 62 65 6c 28 27 78 27 29 0a 61 78 2e 73 65 74 5f 78 6c 69 6d | ).ax.set_xlabel('x').ax.set_xlim |
78c0 | 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 70 68 61 | 3d(0,.n).ax.set_ylabel('$\\alpha |
78e0 | 24 27 29 0a 61 78 2e 73 65 74 5f 79 6c 69 6d 33 64 28 30 2c 20 31 29 0a 61 78 2e 73 65 74 5f 7a | $').ax.set_ylim3d(0,.1).ax.set_z |
7900 | 6c 61 62 65 6c 28 27 27 29 0a 61 78 2e 73 65 74 5f 7a 6c 69 6d 33 64 28 30 2c 20 42 5f 6c 32 2e | label('').ax.set_zlim3d(0,.B_l2. |
7920 | 6d 61 78 28 29 20 2a 20 31 2e 30 31 29 0a 70 6c 2e 74 69 74 6c 65 28 27 42 61 72 79 63 65 6e 74 | max().*.1.01).pl.title('Barycent |
7940 | 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 2e 74 69 | er.interpolation.with.l2').pl.ti |
7960 | 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 61 70 20 | ght_layout()..pl.figure(4).cmap. |
7980 | 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 65 72 74 | =.pl.cm.get_cmap('viridis').vert |
79a0 | 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 20 7a 20 | s.=.[].zs.=.alpha_list.for.i,.z. |
79c0 | 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 77 61 73 | in.enumerate(zs):.....ys.=.B_was |
79e0 | 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 28 7a 69 | s[:,.i].....verts.append(list(zi |
7a00 | 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 28 70 72 | p(x,.ys)))..ax.=.pl.gcf().gca(pr |
7a20 | 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 6c 6c 65 | ojection='3d')..poly.=.PolyColle |
7a40 | 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 28 61 29 | ction(verts,.facecolors=[cmap(a) |
7a60 | 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 65 74 5f | .for.a.in.alpha_list]).poly.set_ |
7a80 | 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 64 28 70 | alpha(0.7).ax.add_collection3d(p |
7aa0 | 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 78 6c 61 | oly,.zs=zs,.zdir='y').ax.set_xla |
7ac0 | 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 61 78 2e | bel('x').ax.set_xlim3d(0,.n).ax. |
7ae0 | 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 74 5f 79 | set_ylabel('$\\alpha$').ax.set_y |
7b00 | 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 0a 61 78 | lim3d(0,.1).ax.set_zlabel('').ax |
7b20 | 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 2e 30 31 | .set_zlim3d(0,.B_l2.max().*.1.01 |
7b40 | 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 6f 6c 61 | ).pl.title('Barycenter.interpola |
7b60 | 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 67 68 74 | tion.with.Wasserstein').pl.tight |
7b80 | 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 92 | _layout()..pl.show().PK......... |
7ba0 | 53 be 4c b0 31 70 de ee 10 00 00 ee 10 00 00 14 00 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 63 6c 61 | S.L.1p.............plot_otda_cla |
7bc0 | 73 73 65 73 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 | sses.py#.-*-.coding:.utf-8.-*-." |
7be0 | 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4f 54 20 66 | "".========================.OT.f |
7c00 | 6f 72 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | or.domain.adaptation.=========== |
7c20 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 6e 74 72 | =============..This.example.intr |
7c40 | 6f 64 75 63 65 73 20 61 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 20 69 6e 20 61 20 | oduces.a.domain.adaptation.in.a. |
7c60 | 32 44 20 73 65 74 74 69 6e 67 20 61 6e 64 20 74 68 65 20 34 20 4f 54 44 41 0a 61 70 70 72 6f 61 | 2D.setting.and.the.4.OTDA.approa |
7c80 | 63 68 65 73 20 63 75 72 72 65 6e 74 6c 79 20 73 75 70 70 6f 72 74 65 64 20 69 6e 20 50 4f 54 2e | ches.currently.supported.in.POT. |
7ca0 | 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 73 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c | .."""..#.Authors:.Remi.Flamary.< |
7cc0 | 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 20 20 20 20 20 20 20 20 | remi.flamary@unice.fr>.#........ |
7ce0 | 20 20 53 74 61 6e 69 73 6c 61 73 20 43 68 61 6d 62 6f 6e 20 3c 73 74 61 6e 2e 63 68 61 6d 62 6f | ..Stanislas.Chambon.<stan.chambo |
7d00 | 6e 40 67 6d 61 69 6c 2e 63 6f 6d 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 | n@gmail.com>.#.#.License:.MIT.Li |
7d20 | 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 | cense..import.matplotlib.pylab.a |
7d40 | 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | s.pl.import.ot...############### |
7d60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7d80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a | ###############################. |
7da0 | 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a | #.Generate.data.#.-------------. |
7dc0 | 0a 6e 5f 73 6f 75 72 63 65 5f 73 61 6d 70 6c 65 73 20 3d 20 31 35 30 0a 6e 5f 74 61 72 67 65 74 | .n_source_samples.=.150.n_target |
7de0 | 5f 73 61 6d 70 6c 65 73 20 3d 20 31 35 30 0a 0a 58 73 2c 20 79 73 20 3d 20 6f 74 2e 64 61 74 61 | _samples.=.150..Xs,.ys.=.ot.data |
7e00 | 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 27 33 67 61 75 73 73 27 2c | sets.make_data_classif('3gauss', |
7e20 | 20 6e 5f 73 6f 75 72 63 65 5f 73 61 6d 70 6c 65 73 29 0a 58 74 2c 20 79 74 20 3d 20 6f 74 2e 64 | .n_source_samples).Xt,.yt.=.ot.d |
7e40 | 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 27 33 67 61 75 73 | atasets.make_data_classif('3gaus |
7e60 | 73 32 27 2c 20 6e 5f 74 61 72 67 65 74 5f 73 61 6d 70 6c 65 73 29 0a 0a 0a 23 23 23 23 23 23 23 | s2',.n_target_samples)...####### |
7e80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7ea0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7ec0 | 23 23 23 23 23 23 23 0a 23 20 49 6e 73 74 61 6e 74 69 61 74 65 20 74 68 65 20 64 69 66 66 65 72 | #######.#.Instantiate.the.differ |
7ee0 | 65 6e 74 20 74 72 61 6e 73 70 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d 73 20 61 6e 64 20 66 69 74 | ent.transport.algorithms.and.fit |
7f00 | 20 74 68 65 6d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | .them.#.------------------------ |
7f20 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
7f40 | 2d 2d 2d 0a 0a 23 20 45 4d 44 20 54 72 61 6e 73 70 6f 72 74 0a 6f 74 5f 65 6d 64 20 3d 20 6f 74 | ---..#.EMD.Transport.ot_emd.=.ot |
7f60 | 2e 64 61 2e 45 4d 44 54 72 61 6e 73 70 6f 72 74 28 29 0a 6f 74 5f 65 6d 64 2e 66 69 74 28 58 73 | .da.EMDTransport().ot_emd.fit(Xs |
7f80 | 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 72 | =Xs,.Xt=Xt)..#.Sinkhorn.Transpor |
7fa0 | 74 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b 68 6f 72 6e 54 72 | t.ot_sinkhorn.=.ot.da.SinkhornTr |
7fc0 | 61 6e 73 70 6f 72 74 28 72 65 67 5f 65 3d 31 65 2d 31 29 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 2e | ansport(reg_e=1e-1).ot_sinkhorn. |
7fe0 | 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 53 69 6e 6b 68 6f 72 6e 20 54 72 | fit(Xs=Xs,.Xt=Xt)..#.Sinkhorn.Tr |
8000 | 61 6e 73 70 6f 72 74 20 77 69 74 68 20 47 72 6f 75 70 20 6c 61 73 73 6f 20 72 65 67 75 6c 61 72 | ansport.with.Group.lasso.regular |
8020 | 69 7a 61 74 69 6f 6e 0a 6f 74 5f 6c 70 6c 31 20 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b 68 6f 72 6e | ization.ot_lpl1.=.ot.da.Sinkhorn |
8040 | 4c 70 6c 31 54 72 61 6e 73 70 6f 72 74 28 72 65 67 5f 65 3d 31 65 2d 31 2c 20 72 65 67 5f 63 6c | Lpl1Transport(reg_e=1e-1,.reg_cl |
8060 | 3d 31 65 30 29 0a 6f 74 5f 6c 70 6c 31 2e 66 69 74 28 58 73 3d 58 73 2c 20 79 73 3d 79 73 2c 20 | =1e0).ot_lpl1.fit(Xs=Xs,.ys=ys,. |
8080 | 58 74 3d 58 74 29 0a 0a 23 20 53 69 6e 6b 68 6f 72 6e 20 54 72 61 6e 73 70 6f 72 74 20 77 69 74 | Xt=Xt)..#.Sinkhorn.Transport.wit |
80a0 | 68 20 47 72 6f 75 70 20 6c 61 73 73 6f 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 20 6c 31 6c | h.Group.lasso.regularization.l1l |
80c0 | 32 0a 6f 74 5f 6c 31 6c 32 20 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b 68 6f 72 6e 4c 31 6c 32 54 72 | 2.ot_l1l2.=.ot.da.SinkhornL1l2Tr |
80e0 | 61 6e 73 70 6f 72 74 28 72 65 67 5f 65 3d 31 65 2d 31 2c 20 72 65 67 5f 63 6c 3d 32 65 30 2c 20 | ansport(reg_e=1e-1,.reg_cl=2e0,. |
8100 | 6d 61 78 5f 69 74 65 72 3d 32 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | max_iter=20,.................... |
8120 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 | ...................verbose=True) |
8140 | 0a 6f 74 5f 6c 31 6c 32 2e 66 69 74 28 58 73 3d 58 73 2c 20 79 73 3d 79 73 2c 20 58 74 3d 58 74 | .ot_l1l2.fit(Xs=Xs,.ys=ys,.Xt=Xt |
8160 | 29 0a 0a 23 20 74 72 61 6e 73 70 6f 72 74 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 20 6f 6e | )..#.transport.source.samples.on |
8180 | 74 6f 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 0a 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 20 | to.target.samples.transp_Xs_emd. |
81a0 | 3d 20 6f 74 5f 65 6d 64 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 74 72 61 6e 73 70 | =.ot_emd.transform(Xs=Xs).transp |
81c0 | 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 5f 73 69 6e 6b 68 6f 72 6e 2e 74 72 61 6e 73 | _Xs_sinkhorn.=.ot_sinkhorn.trans |
81e0 | 66 6f 72 6d 28 58 73 3d 58 73 29 0a 74 72 61 6e 73 70 5f 58 73 5f 6c 70 6c 31 20 3d 20 6f 74 5f | form(Xs=Xs).transp_Xs_lpl1.=.ot_ |
8200 | 6c 70 6c 31 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 74 72 61 6e 73 70 5f 58 73 5f | lpl1.transform(Xs=Xs).transp_Xs_ |
8220 | 6c 31 6c 32 20 3d 20 6f 74 5f 6c 31 6c 32 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a | l1l2.=.ot_l1l2.transform(Xs=Xs). |
8240 | 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 | ..############################## |
8260 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8280 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 67 20 31 20 3a 20 70 6c 6f 74 73 | ################.#.Fig.1.:.plots |
82a0 | 20 73 6f 75 72 63 65 20 61 6e 64 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 0a 23 20 2d 2d 2d | .source.and.target.samples.#.--- |
82c0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
82e0 | 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 31 30 2c 20 | ----..pl.figure(1,.figsize=(10,. |
8300 | 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 |
8320 | 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 |
8340 | 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') |
8360 | 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. |
8380 | 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.. |
83a0 | 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 |
83c0 | 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= |
83e0 | 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 |
8400 | 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( |
8420 | 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 |
8440 | 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( |
8460 | 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 | )...############################ |
8480 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
84a0 | 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 |
84c0 | 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 |
84e0 | 74 65 64 20 73 61 6d 70 6c 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | ted.samples.#.------------------ |
8500 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
8520 | 2d 2d 2d 2d 0a 0a 70 61 72 61 6d 5f 69 6d 67 20 3d 20 7b 27 69 6e 74 65 72 70 6f 6c 61 74 69 6f | ----..param_img.=.{'interpolatio |
8540 | 6e 27 3a 20 27 6e 65 61 72 65 73 74 27 7d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 | n':.'nearest'}..pl.figure(2,.fig |
8560 | 73 69 7a 65 3d 28 31 35 2c 20 38 29 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 34 2c 20 31 | size=(15,.8)).pl.subplot(2,.4,.1 |
8580 | 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 65 6d 64 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 2a 2a | ).pl.imshow(ot_emd.coupling_,.** |
85a0 | 70 61 72 61 6d 5f 69 6d 67 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 | param_img).pl.xticks([]).pl.ytic |
85c0 | 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e | ks([]).pl.title('Optimal.couplin |
85e0 | 67 5c 6e 45 4d 44 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c | g\nEMDTransport')..pl.subplot(2, |
8600 | 20 34 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 73 69 6e 6b 68 6f 72 6e 2e 63 6f 75 | .4,.2).pl.imshow(ot_sinkhorn.cou |
8620 | 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([ |
8640 | 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 |
8660 | 61 6c 20 63 6f 75 70 6c 69 6e 67 5c 6e 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 27 29 | al.coupling\nSinkhornTransport') |
8680 | 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 34 2c 20 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 | ..pl.subplot(2,.4,.3).pl.imshow( |
86a0 | 6f 74 5f 6c 70 6c 31 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 2a 2a 70 61 72 61 6d 5f 69 6d 67 29 0a | ot_lpl1.coupling_,.**param_img). |
86c0 | 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 | pl.xticks([]).pl.yticks([]).pl.t |
86e0 | 69 74 6c 65 28 27 4f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 5c 6e 53 69 6e 6b 68 6f 72 6e | itle('Optimal.coupling\nSinkhorn |
8700 | 4c 70 6c 31 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 34 | Lpl1Transport')..pl.subplot(2,.4 |
8720 | 2c 20 34 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 6c 31 6c 32 2e 63 6f 75 70 6c 69 6e 67 5f | ,.4).pl.imshow(ot_l1l2.coupling_ |
8740 | 2c 20 2a 2a 70 61 72 61 6d 5f 69 6d 67 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e | ,.**param_img).pl.xticks([]).pl. |
8760 | 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 70 74 69 6d 61 6c 20 63 6f 75 | yticks([]).pl.title('Optimal.cou |
8780 | 70 6c 69 6e 67 5c 6e 53 69 6e 6b 68 6f 72 6e 4c 31 6c 32 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a | pling\nSinkhornL1l2Transport').. |
87a0 | 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 34 2c 20 35 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 | pl.subplot(2,.4,.5).pl.scatter(X |
87c0 | 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d | t[:,.0],.Xt[:,.1],.c=yt,.marker= |
87e0 | 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 20 73 61 | 'o',............label='Target.sa |
8800 | 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 30 2e 33 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 | mples',.alpha=0.3).pl.scatter(tr |
8820 | 61 6e 73 70 5f 58 73 5f 65 6d 64 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 | ansp_Xs_emd[:,.0],.transp_Xs_emd |
8840 | 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d | [:,.1],.c=ys,............marker= |
8860 | 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 20 73 3d 33 | '+',.label='Transp.samples',.s=3 |
8880 | 30 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 | 0).pl.xticks([]).pl.yticks([]).p |
88a0 | 6c 2e 74 69 74 6c 65 28 27 54 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 5c 6e 45 6d | l.title('Transported.samples\nEm |
88c0 | 64 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 22 6c 6f 77 65 | dTransport').pl.legend(loc="lowe |
88e0 | 72 20 6c 65 66 74 22 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 34 2c 20 36 29 0a 70 6c | r.left")..pl.subplot(2,.4,.6).pl |
8900 | 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 |
8920 | 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= |
8940 | 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. |
8960 | 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 5b 3a 2c 20 30 5d | scatter(transp_Xs_sinkhorn[:,.0] |
8980 | 2c 20 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 | ,.transp_Xs_sinkhorn[:,.1],.c=ys |
89a0 | 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 | ,............marker='+',.label=' |
89c0 | 54 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 20 73 3d 33 30 29 0a 70 6c 2e 78 74 69 63 6b 73 | Transp.samples',.s=30).pl.xticks |
89e0 | 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 54 72 61 | ([]).pl.yticks([]).pl.title('Tra |
8a00 | 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 70 | nsported.samples\nSinkhornTransp |
8a20 | 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 34 2c 20 37 29 0a 70 6c 2e 73 63 | ort')..pl.subplot(2,.4,.7).pl.sc |
8a40 | 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,. |
8a60 | 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 |
8a80 | 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 73 63 61 | rget.samples',.alpha=0.3).pl.sca |
8aa0 | 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 6c 70 6c 31 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 | tter(transp_Xs_lpl1[:,.0],.trans |
8ac0 | 70 5f 58 73 5f 6c 70 6c 31 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 | p_Xs_lpl1[:,.1],.c=ys,.......... |
8ae0 | 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 70 | ..marker='+',.label='Transp.samp |
8b00 | 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 69 | les',.s=30).pl.xticks([]).pl.yti |
8b20 | 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 61 | cks([]).pl.title('Transported.sa |
8b40 | 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 0a | mples\nSinkhornLpl1Transport').. |
8b60 | 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 34 2c 20 38 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 | pl.subplot(2,.4,.8).pl.scatter(X |
8b80 | 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d | t[:,.0],.Xt[:,.1],.c=yt,.marker= |
8ba0 | 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 20 73 61 | 'o',............label='Target.sa |
8bc0 | 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 30 2e 33 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 | mples',.alpha=0.3).pl.scatter(tr |
8be0 | 61 6e 73 70 5f 58 73 5f 6c 31 6c 32 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 6c 31 | ansp_Xs_l1l2[:,.0],.transp_Xs_l1 |
8c00 | 6c 32 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 | l2[:,.1],.c=ys,............marke |
8c20 | 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 20 73 | r='+',.label='Transp.samples',.s |
8c40 | 3d 33 30 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 | =30).pl.xticks([]).pl.yticks([]) |
8c60 | 0a 70 6c 2e 74 69 74 6c 65 28 27 54 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 5c 6e | .pl.title('Transported.samples\n |
8c80 | 53 69 6e 6b 68 6f 72 6e 4c 31 6c 32 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 6c 2e 74 69 67 68 74 | SinkhornL1l2Transport').pl.tight |
8ca0 | 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 92 | _layout()..pl.show().PK......... |
8cc0 | 53 be 4c 1a d1 23 82 4f 10 00 00 4f 10 00 00 22 00 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 6d 61 70 | S.L..#.O...O..."...plot_otda_map |
8ce0 | 70 69 6e 67 5f 63 6f 6c 6f 72 73 5f 69 6d 61 67 65 73 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e | ping_colors_images.py#.-*-.codin |
8d00 | 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | g:.utf-8.-*-.""".=============== |
8d20 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
8d40 | 3d 3d 3d 3d 3d 3d 0a 4f 54 20 66 6f 72 20 69 6d 61 67 65 20 63 6f 6c 6f 72 20 61 64 61 70 74 61 | ======.OT.for.image.color.adapta |
8d60 | 74 69 6f 6e 20 77 69 74 68 20 6d 61 70 70 69 6e 67 20 65 73 74 69 6d 61 74 69 6f 6e 0a 3d 3d 3d | tion.with.mapping.estimation.=== |
8d80 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
8da0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 4f 54 20 66 6f 72 20 64 6f 6d 61 69 | ==================..OT.for.domai |
8dc0 | 6e 20 61 64 61 70 74 61 74 69 6f 6e 20 77 69 74 68 20 69 6d 61 67 65 20 63 6f 6c 6f 72 20 61 64 | n.adaptation.with.image.color.ad |
8de0 | 61 70 74 61 74 69 6f 6e 20 5b 36 5d 20 77 69 74 68 20 6d 61 70 70 69 6e 67 0a 65 73 74 69 6d 61 | aptation.[6].with.mapping.estima |
8e00 | 74 69 6f 6e 20 5b 38 5d 2e 0a 0a 5b 36 5d 20 46 65 72 72 61 64 61 6e 73 2c 20 53 2e 2c 20 50 61 | tion.[8]...[6].Ferradans,.S.,.Pa |
8e20 | 70 61 64 61 6b 69 73 2c 20 4e 2e 2c 20 50 65 79 72 65 2c 20 47 2e 2c 20 26 20 41 75 6a 6f 6c 2c | padakis,.N.,.Peyre,.G.,.&.Aujol, |
8e40 | 20 4a 2e 20 46 2e 20 28 32 30 31 34 29 2e 20 52 65 67 75 6c 61 72 69 7a 65 64 0a 20 20 20 20 64 | .J..F..(2014)..Regularized.....d |
8e60 | 69 73 63 72 65 74 65 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 2e 20 53 49 41 4d 20 | iscrete.optimal.transport..SIAM. |
8e80 | 4a 6f 75 72 6e 61 6c 20 6f 6e 20 49 6d 61 67 69 6e 67 20 53 63 69 65 6e 63 65 73 2c 20 37 28 33 | Journal.on.Imaging.Sciences,.7(3 |
8ea0 | 29 2c 0a 20 20 20 20 31 38 35 33 2d 31 38 38 32 2e 0a 5b 38 5d 20 4d 2e 20 50 65 72 72 6f 74 2c | ),.....1853-1882..[8].M..Perrot, |
8ec0 | 20 4e 2e 20 43 6f 75 72 74 79 2c 20 52 2e 20 46 6c 61 6d 61 72 79 2c 20 41 2e 20 48 61 62 72 61 | .N..Courty,.R..Flamary,.A..Habra |
8ee0 | 72 64 2c 20 22 4d 61 70 70 69 6e 67 20 65 73 74 69 6d 61 74 69 6f 6e 20 66 6f 72 0a 20 20 20 20 | rd,."Mapping.estimation.for..... |
8f00 | 64 69 73 63 72 65 74 65 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 22 2c 20 4e 65 75 | discrete.optimal.transport",.Neu |
8f20 | 72 61 6c 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 50 72 6f 63 65 73 73 69 6e 67 20 53 79 73 74 65 | ral.Information.Processing.Syste |
8f40 | 6d 73 20 28 4e 49 50 53 29 2c 0a 20 20 20 20 32 30 31 36 2e 0a 0a 22 22 22 0a 0a 23 20 41 75 74 | ms.(NIPS),.....2016..."""..#.Aut |
8f60 | 68 6f 72 73 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 | hors:.Remi.Flamary.<remi.flamary |
8f80 | 40 75 6e 69 63 65 2e 66 72 3e 0a 23 20 20 20 20 20 20 20 20 20 20 53 74 61 6e 69 73 6c 61 73 20 | @unice.fr>.#..........Stanislas. |
8fa0 | 43 68 61 6d 62 6f 6e 20 3c 73 74 61 6e 2e 63 68 61 6d 62 6f 6e 40 67 6d 61 69 6c 2e 63 6f 6d 3e | Chambon.<stan.chambon@gmail.com> |
8fc0 | 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 | .#.#.License:.MIT.License..impor |
8fe0 | 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 66 72 6f 6d 20 73 63 69 70 79 20 69 6d 70 6f 72 74 20 | t.numpy.as.np.from.scipy.import. |
9000 | 6e 64 69 6d 61 67 65 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 | ndimage.import.matplotlib.pylab. |
9020 | 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 0a 72 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 52 | as.pl.import.ot..r.=.np.random.R |
9040 | 61 6e 64 6f 6d 53 74 61 74 65 28 34 32 29 0a 0a 0a 64 65 66 20 69 6d 32 6d 61 74 28 49 29 3a 0a | andomState(42)...def.im2mat(I):. |
9060 | 20 20 20 20 22 22 22 43 6f 6e 76 65 72 74 73 20 61 6e 64 20 69 6d 61 67 65 20 74 6f 20 6d 61 74 | ...."""Converts.and.image.to.mat |
9080 | 72 69 78 20 28 6f 6e 65 20 70 69 78 65 6c 20 70 65 72 20 6c 69 6e 65 29 22 22 22 0a 20 20 20 20 | rix.(one.pixel.per.line)"""..... |
90a0 | 72 65 74 75 72 6e 20 49 2e 72 65 73 68 61 70 65 28 28 49 2e 73 68 61 70 65 5b 30 5d 20 2a 20 49 | return.I.reshape((I.shape[0].*.I |
90c0 | 2e 73 68 61 70 65 5b 31 5d 2c 20 49 2e 73 68 61 70 65 5b 32 5d 29 29 0a 0a 0a 64 65 66 20 6d 61 | .shape[1],.I.shape[2]))...def.ma |
90e0 | 74 32 69 6d 28 58 2c 20 73 68 61 70 65 29 3a 0a 20 20 20 20 22 22 22 43 6f 6e 76 65 72 74 73 20 | t2im(X,.shape):....."""Converts. |
9100 | 62 61 63 6b 20 61 20 6d 61 74 72 69 78 20 74 6f 20 61 6e 20 69 6d 61 67 65 22 22 22 0a 20 20 20 | back.a.matrix.to.an.image""".... |
9120 | 20 72 65 74 75 72 6e 20 58 2e 72 65 73 68 61 70 65 28 73 68 61 70 65 29 0a 0a 0a 64 65 66 20 6d | .return.X.reshape(shape)...def.m |
9140 | 69 6e 6d 61 78 28 49 29 3a 0a 20 20 20 20 72 65 74 75 72 6e 20 6e 70 2e 63 6c 69 70 28 49 2c 20 | inmax(I):.....return.np.clip(I,. |
9160 | 30 2c 20 31 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | 0,.1)...######################## |
9180 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
91a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 47 65 6e 65 72 61 74 | ######################.#.Generat |
91c0 | 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 20 4c 6f 61 64 69 6e | e.data.#.-------------..#.Loadin |
91e0 | 67 20 69 6d 61 67 65 73 0a 49 31 20 3d 20 6e 64 69 6d 61 67 65 2e 69 6d 72 65 61 64 28 27 2e 2e | g.images.I1.=.ndimage.imread('.. |
9200 | 2f 64 61 74 61 2f 6f 63 65 61 6e 5f 64 61 79 2e 6a 70 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e | /data/ocean_day.jpg').astype(np. |
9220 | 66 6c 6f 61 74 36 34 29 20 2f 20 32 35 36 0a 49 32 20 3d 20 6e 64 69 6d 61 67 65 2e 69 6d 72 65 | float64)./.256.I2.=.ndimage.imre |
9240 | 61 64 28 27 2e 2e 2f 64 61 74 61 2f 6f 63 65 61 6e 5f 73 75 6e 73 65 74 2e 6a 70 67 27 29 2e 61 | ad('../data/ocean_sunset.jpg').a |
9260 | 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 20 2f 20 32 35 36 0a 0a 0a 58 31 20 3d 20 69 | stype(np.float64)./.256...X1.=.i |
9280 | 6d 32 6d 61 74 28 49 31 29 0a 58 32 20 3d 20 69 6d 32 6d 61 74 28 49 32 29 0a 0a 23 20 74 72 61 | m2mat(I1).X2.=.im2mat(I2)..#.tra |
92a0 | 69 6e 69 6e 67 20 73 61 6d 70 6c 65 73 0a 6e 62 20 3d 20 31 30 30 30 0a 69 64 78 31 20 3d 20 72 | ining.samples.nb.=.1000.idx1.=.r |
92c0 | 2e 72 61 6e 64 69 6e 74 28 58 31 2e 73 68 61 70 65 5b 30 5d 2c 20 73 69 7a 65 3d 28 6e 62 2c 29 | .randint(X1.shape[0],.size=(nb,) |
92e0 | 29 0a 69 64 78 32 20 3d 20 72 2e 72 61 6e 64 69 6e 74 28 58 32 2e 73 68 61 70 65 5b 30 5d 2c 20 | ).idx2.=.r.randint(X2.shape[0],. |
9300 | 73 69 7a 65 3d 28 6e 62 2c 29 29 0a 0a 58 73 20 3d 20 58 31 5b 69 64 78 31 2c 20 3a 5d 0a 58 74 | size=(nb,))..Xs.=.X1[idx1,.:].Xt |
9320 | 20 3d 20 58 32 5b 69 64 78 32 2c 20 3a 5d 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | .=.X2[idx2,.:]...############### |
9340 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
9360 | 23 23 23 23 23 23 23 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 | ###############################. |
9380 | 23 20 44 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 20 66 6f 72 20 70 69 78 65 6c 20 64 69 | #.Domain.adaptation.for.pixel.di |
93a0 | 73 74 72 69 62 75 74 69 6f 6e 20 74 72 61 6e 73 66 65 72 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | stribution.transfer.#.---------- |
93c0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
93e0 | 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 20 45 4d 44 54 72 61 6e 73 70 6f 72 74 0a 6f 74 5f 65 6d 64 20 3d | -------..#.EMDTransport.ot_emd.= |
9400 | 20 6f 74 2e 64 61 2e 45 4d 44 54 72 61 6e 73 70 6f 72 74 28 29 0a 6f 74 5f 65 6d 64 2e 66 69 74 | .ot.da.EMDTransport().ot_emd.fit |
9420 | 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 64 20 3d 20 6f | (Xs=Xs,.Xt=Xt).transp_Xs_emd.=.o |
9440 | 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 65 5f 65 6d 64 | t_emd.transform(Xs=X1).Image_emd |
9460 | 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 2c 20 | .=.minmax(mat2im(transp_Xs_emd,. |
9480 | 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 70 6f 72 74 0a | I1.shape))..#.SinkhornTransport. |
94a0 | 6f 74 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b 68 6f 72 6e 54 72 61 6e | ot_sinkhorn.=.ot.da.SinkhornTran |
94c0 | 73 70 6f 72 74 28 72 65 67 5f 65 3d 31 65 2d 31 29 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 2e 66 69 | sport(reg_e=1e-1).ot_sinkhorn.fi |
94e0 | 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 69 6e 6b 68 6f | t(Xs=Xs,.Xt=Xt).transp_Xs_sinkho |
9500 | 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 29 0a 49 6d 61 | rn.=.ot_emd.transform(Xs=X1).Ima |
9520 | 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 28 74 72 61 6e | ge_sinkhorn.=.minmax(mat2im(tran |
9540 | 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 0a 6f 74 5f 6d | sp_Xs_sinkhorn,.I1.shape))..ot_m |
9560 | 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 6e 67 54 72 61 | apping_linear.=.ot.da.MappingTra |
9580 | 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 38 2c 20 62 69 | nsport(.....mu=1e0,.eta=1e-8,.bi |
95a0 | 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 73 65 3d 54 72 | as=True,.max_iter=20,.verbose=Tr |
95c0 | 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 73 3d 58 73 2c | ue).ot_mapping_linear.fit(Xs=Xs, |
95e0 | 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 6c 69 6e 65 61 | .Xt=Xt)..X1tl.=.ot_mapping_linea |
9600 | 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 70 70 69 6e 67 | r.transform(Xs=X1).Image_mapping |
9620 | 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 6c 2c 20 49 31 | _linear.=.minmax(mat2im(X1tl,.I1 |
9640 | 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 61 6e 20 3d 20 | .shape))..ot_mapping_gaussian.=. |
9660 | 6f 74 2e 64 61 2e 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 28 0a 20 20 20 20 6d 75 3d 31 | ot.da.MappingTransport(.....mu=1 |
9680 | 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 3d 46 61 6c 73 | e0,.eta=1e-2,.sigma=1,.bias=Fals |
96a0 | 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 65 29 0a 6f 74 | e,.max_iter=10,.verbose=True).ot |
96c0 | 5f 6d 61 70 70 69 6e 67 5f 67 61 75 73 73 69 61 6e 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d | _mapping_gaussian.fit(Xs=Xs,.Xt= |
96e0 | 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 73 69 61 6e 2e | Xt)..X1tn.=.ot_mapping_gaussian. |
9700 | 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 20 65 73 74 69 | transform(Xs=X1)..#.use.the.esti |
9720 | 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 5f 67 61 75 73 | mated.mapping.Image_mapping_gaus |
9740 | 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 49 31 2e 73 68 | sian.=.minmax(mat2im(X1tn,.I1.sh |
9760 | 61 70 65 29 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ape))...######################## |
9780 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
97a0 | 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 6f 72 | ######################.#.Plot.or |
97c0 | 69 67 69 6e 61 6c 20 69 6d 61 67 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | iginal.images.#.---------------- |
97e0 | 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c | ----..pl.figure(1,.figsize=(6.4, |
9800 | 20 33 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 69 6d 73 68 | .3)).pl.subplot(1,.2,.1).pl.imsh |
9820 | 6f 77 28 49 31 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 | ow(I1).pl.axis('off').pl.title(' |
9840 | 49 6d 61 67 65 20 31 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 32 29 0a 70 | Image.1')..pl.subplot(1,.2,.2).p |
9860 | 6c 2e 69 6d 73 68 6f 77 28 49 32 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 | l.imshow(I2).pl.axis('off').pl.t |
9880 | 69 74 6c 65 28 27 49 6d 61 67 65 20 32 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 | itle('Image.2').pl.tight_layout( |
98a0 | 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 | )...############################ |
98c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
98e0 | 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 70 69 78 65 6c 20 | ##################.#.Plot.pixel. |
9900 | 76 61 6c 75 65 73 20 64 69 73 74 72 69 62 75 74 69 6f 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | values.distribution.#.---------- |
9920 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 | --------------------..pl.figure( |
9940 | 32 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 35 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 | 2,.figsize=(6.4,.5))..pl.subplot |
9960 | 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 58 | (1,.2,.1).pl.scatter(Xs[:,.0],.X |
9980 | 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 2c | s[:,.2],.c=Xs).pl.axis([0,.1,.0, |
99a0 | 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 28 | .1]).pl.xlabel('Red').pl.ylabel( |
99c0 | 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 2e | 'Blue').pl.title('Image.1')..pl. |
99e0 | 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 3a | subplot(1,.2,.2).pl.scatter(Xt[: |
9a00 | 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 30 | ,.0],.Xt[:,.2],.c=Xt).pl.axis([0 |
9a20 | 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 2e | ,.1,.0,.1]).pl.xlabel('Red').pl. |
9a40 | 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 32 | ylabel('Blue').pl.title('Image.2 |
9a60 | 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 23 | ').pl.tight_layout()...######### |
9a80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
9aa0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
9ac0 | 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 69 6d 61 67 65 73 0a | #####.#.Plot.transformed.images. |
9ae0 | 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 | #.-----------------------..pl.fi |
9b00 | 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 |
9b20 | 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 |
9b40 | 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 |
9b60 | 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). |
9b80 | 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') |
9ba0 | 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( |
9bc0 | 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 |
9be0 | 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 |
9c00 | 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 |
9c20 | 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 |
9c40 | 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, |
9c60 | 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 |
9c80 | 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 |
9ca0 | 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 |
9cc0 | 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 |
9ce0 | 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 |
9d00 | 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 |
9d20 | 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 |
9d40 | 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 92 53 be 4c 6f 6c 58 5b 88 13 00 00 88 13 00 00 13 00 | w().PK.........S.LolX[.......... |
9d60 | 00 00 70 6c 6f 74 5f 4f 54 5f 4c 31 5f 76 73 5f 4c 32 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e | ..plot_OT_L1_vs_L2.py#.-*-.codin |
9d80 | 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | g:.utf-8.-*-.""".=============== |
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 0a 32 44 20 4f | ===========================.2D.O |
9dc0 | 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 20 66 6f 72 20 64 69 66 66 65 72 65 6e 74 20 6d | ptimal.transport.for.different.m |
9de0 | 65 74 72 69 63 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | etrics.========================= |
9e00 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 32 44 20 4f 54 20 6f 6e 20 65 6d 70 69 | =================..2D.OT.on.empi |
9e20 | 72 69 63 61 6c 20 64 69 73 74 72 69 62 75 74 69 6f 20 20 77 69 74 68 20 64 69 66 66 65 72 65 6e | rical.distributio..with.differen |
9e40 | 74 20 67 6f 75 6e 64 20 6d 65 74 72 69 63 2e 0a 0a 53 74 6f 6c 65 20 74 68 65 20 66 69 67 75 72 | t.gound.metric...Stole.the.figur |
9e60 | 65 20 69 64 65 61 20 66 72 6f 6d 20 46 69 67 2e 20 31 20 61 6e 64 20 32 20 69 6e 0a 68 74 74 70 | e.idea.from.Fig..1.and.2.in.http |
9e80 | 73 3a 2f 2f 61 72 78 69 76 2e 6f 72 67 2f 70 64 66 2f 31 37 30 36 2e 30 37 36 35 30 2e 70 64 66 | s://arxiv.org/pdf/1706.07650.pdf |
9ea0 | 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.< |
9ec0 | 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 |
9ee0 | 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 |
9f00 | 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 |
9f20 | 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 69 6d 70 6f 72 74 20 6f 74 2e 70 6c 6f 74 0a 0a 23 23 23 23 | l.import.ot.import.ot.plot..#### |
9f40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
9f60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
9f80 | 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 72 6d | ##########.#.Dataset.1.:.uniform |
9fa0 | 20 73 61 6d 70 6c 69 6e 67 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | .sampling.#.-------------------- |
9fc0 | 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 6e 20 3d 20 32 30 20 20 23 20 6e 62 20 73 61 6d 70 6c 65 73 0a 78 | --------..n.=.20..#.nb.samples.x |
9fe0 | 73 20 3d 20 6e 70 2e 7a 65 72 6f 73 28 28 6e 2c 20 32 29 29 0a 78 73 5b 3a 2c 20 30 5d 20 3d 20 | s.=.np.zeros((n,.2)).xs[:,.0].=. |
a000 | 6e 70 2e 61 72 61 6e 67 65 28 6e 29 20 2b 20 31 0a 78 73 5b 3a 2c 20 31 5d 20 3d 20 28 6e 70 2e | np.arange(n).+.1.xs[:,.1].=.(np. |
a020 | 61 72 61 6e 67 65 28 6e 29 20 2b 20 31 29 20 2a 20 2d 30 2e 30 30 31 20 20 23 20 74 6f 20 6d 61 | arange(n).+.1).*.-0.001..#.to.ma |
a040 | 6b 65 20 69 74 20 73 74 72 69 63 74 6c 79 20 63 6f 6e 76 65 78 2e 2e 2e 0a 0a 78 74 20 3d 20 6e | ke.it.strictly.convex.....xt.=.n |
a060 | 70 2e 7a 65 72 6f 73 28 28 6e 2c 20 32 29 29 0a 78 74 5b 3a 2c 20 31 5d 20 3d 20 6e 70 2e 61 72 | p.zeros((n,.2)).xt[:,.1].=.np.ar |
a080 | 61 6e 67 65 28 6e 29 20 2b 20 31 0a 0a 61 2c 20 62 20 3d 20 6f 74 2e 75 6e 69 66 28 6e 29 2c 20 | ange(n).+.1..a,.b.=.ot.unif(n),. |
a0a0 | 6f 74 2e 75 6e 69 66 28 6e 29 20 20 23 20 75 6e 69 66 6f 72 6d 20 64 69 73 74 72 69 62 75 74 69 | ot.unif(n)..#.uniform.distributi |
a0c0 | 6f 6e 20 6f 6e 20 73 61 6d 70 6c 65 73 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 31 20 | on.on.samples..#.loss.matrix.M1. |
a0e0 | 3d 20 6f 74 2e 64 69 73 74 28 78 73 2c 20 78 74 2c 20 6d 65 74 72 69 63 3d 27 65 75 63 6c 69 64 | =.ot.dist(xs,.xt,.metric='euclid |
a100 | 65 61 6e 27 29 0a 4d 31 20 2f 3d 20 4d 31 2e 6d 61 78 28 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 | ean').M1./=.M1.max()..#.loss.mat |
a120 | 72 69 78 0a 4d 32 20 3d 20 6f 74 2e 64 69 73 74 28 78 73 2c 20 78 74 2c 20 6d 65 74 72 69 63 3d | rix.M2.=.ot.dist(xs,.xt,.metric= |
a140 | 27 73 71 65 75 63 6c 69 64 65 61 6e 27 29 0a 4d 32 20 2f 3d 20 4d 32 2e 6d 61 78 28 29 0a 0a 23 | 'sqeuclidean').M2./=.M2.max()..# |
a160 | 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 70 20 3d 20 6e 70 2e 73 71 72 74 28 6f 74 2e 64 69 73 | .loss.matrix.Mp.=.np.sqrt(ot.dis |
a180 | 74 28 78 73 2c 20 78 74 2c 20 6d 65 74 72 69 63 3d 27 65 75 63 6c 69 64 65 61 6e 27 29 29 0a 4d | t(xs,.xt,.metric='euclidean')).M |
a1a0 | 70 20 2f 3d 20 4d 70 2e 6d 61 78 28 29 0a 0a 23 20 44 61 74 61 0a 70 6c 2e 66 69 67 75 72 65 28 | p./=.Mp.max()..#.Data.pl.figure( |
a1c0 | 31 2c 20 66 69 67 73 69 7a 65 3d 28 37 2c 20 33 29 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 2e 70 | 1,.figsize=(7,.3)).pl.clf().pl.p |
a1e0 | 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 |
a200 | 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 |
a220 | 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 |
a240 | 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 61 78 69 73 28 27 65 71 75 61 6c 27 29 | arget.samples').pl.axis('equal') |
a260 | 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 |
a280 | 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 0a 23 20 43 6f 73 74 20 6d 61 74 72 69 63 65 73 0a 70 | tributions')...#.Cost.matrices.p |
a2a0 | 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 37 2c 20 33 29 29 0a 0a 70 6c 2e | l.figure(2,.figsize=(7,.3))..pl. |
a2c0 | 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 4d 31 2c 20 69 | subplot(1,.3,.1).pl.imshow(M1,.i |
a2e0 | 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 65 | nterpolation='nearest').pl.title |
a300 | 28 27 45 75 63 6c 69 64 65 61 6e 20 63 6f 73 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 | ('Euclidean.cost')..pl.subplot(1 |
a320 | 2c 20 33 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 4d 32 2c 20 69 6e 74 65 72 70 6f 6c 61 74 | ,.3,.2).pl.imshow(M2,.interpolat |
a340 | 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 71 75 61 72 65 64 | ion='nearest').pl.title('Squared |
a360 | 20 45 75 63 6c 69 64 65 61 6e 20 63 6f 73 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c | .Euclidean.cost')..pl.subplot(1, |
a380 | 20 33 2c 20 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 4d 70 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 | .3,.3).pl.imshow(Mp,.interpolati |
a3a0 | 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 71 72 74 20 45 75 63 | on='nearest').pl.title('Sqrt.Euc |
a3c0 | 6c 69 64 65 61 6e 20 63 6f 73 74 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a | lidean.cost').pl.tight_layout(). |
a3e0 | 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 | .############################### |
a400 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
a420 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 44 61 74 61 73 65 74 20 31 20 3a 20 50 6c | ###############.#.Dataset.1.:.Pl |
a440 | 6f 74 20 4f 54 20 4d 61 74 72 69 63 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | ot.OT.Matrices.#.--------------- |
a460 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 25 25 20 45 4d 44 0a 47 31 20 3d 20 6f 74 2e | -------------...#%%.EMD.G1.=.ot. |
a480 | 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 2c 20 | emd(a,.b,.M1).G2.=.ot.emd(a,.b,. |
a4a0 | 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 54 20 | M2).Gp.=.ot.emd(a,.b,.Mp)..#.OT. |
a4c0 | 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 28 37 | matrices.pl.figure(3,.figsize=(7 |
a4e0 | 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 70 6c | ,.3))..pl.subplot(1,.3,.1).ot.pl |
a500 | 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 78 73 2c 20 78 74 2c 20 47 31 | ot.plot2D_samples_mat(xs,.xt,.G1 |
a520 | 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 | ,.c=[.5,..5,.1]).pl.plot(xs[:,.0 |
a540 | 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 | ],.xs[:,.1],.'+b',.label='Source |
a560 | 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b | .samples').pl.plot(xt[:,.0],.xt[ |
a580 | 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c | :,.1],.'xr',.label='Target.sampl |
a5a0 | 65 73 27 29 0a 70 6c 2e 61 78 69 73 28 27 65 71 75 61 6c 27 29 0a 23 20 70 6c 2e 6c 65 67 65 6e | es').pl.axis('equal').#.pl.legen |
a5c0 | 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 6e 27 | d(loc=0).pl.title('OT.Euclidean' |
a5e0 | 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 2e 70 | )..pl.subplot(1,.3,.2).ot.plot.p |
a600 | 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 63 3d | lot2D_samples_mat(xs,.xt,.G2,.c= |
a620 | 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 |
a640 | 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 |
a660 | 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 |
a680 | 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') |
a6a0 | 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 |
a6c0 | 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 69 64 | c=0).pl.title('OT.squared.Euclid |
a6e0 | 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 70 6c | ean')..pl.subplot(1,.3,.3).ot.pl |
a700 | 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 78 73 2c 20 78 74 2c 20 47 70 | ot.plot2D_samples_mat(xs,.xt,.Gp |
a720 | 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 | ,.c=[.5,..5,.1]).pl.plot(xs[:,.0 |
a740 | 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 | ],.xs[:,.1],.'+b',.label='Source |
a760 | 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b | .samples').pl.plot(xt[:,.0],.xt[ |
a780 | 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c | :,.1],.'xr',.label='Target.sampl |
a7a0 | 65 73 27 29 0a 70 6c 2e 61 78 69 73 28 27 65 71 75 61 6c 27 29 0a 23 20 70 6c 2e 6c 65 67 65 6e | es').pl.axis('equal').#.pl.legen |
a7c0 | 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 6c 69 | d(loc=0).pl.title('OT.sqrt.Eucli |
a7e0 | 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 68 6f | dean').pl.tight_layout()..pl.sho |
a800 | 77 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | w()...########################## |
a820 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
a840 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 44 61 74 61 73 65 74 20 32 | ####################.#.Dataset.2 |
a860 | 20 3a 20 50 61 72 74 69 61 6c 20 63 69 72 63 6c 65 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | .:.Partial.circle.#.------------ |
a880 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 6e 20 3d 20 35 30 20 20 23 20 6e 62 20 73 61 6d | --------------..n.=.50..#.nb.sam |
a8a0 | 70 6c 65 73 0a 78 74 6f 74 20 3d 20 6e 70 2e 7a 65 72 6f 73 28 28 6e 20 2b 20 31 2c 20 32 29 29 | ples.xtot.=.np.zeros((n.+.1,.2)) |
a8c0 | 0a 78 74 6f 74 5b 3a 2c 20 30 5d 20 3d 20 6e 70 2e 63 6f 73 28 0a 20 20 20 20 28 6e 70 2e 61 72 | .xtot[:,.0].=.np.cos(.....(np.ar |
a8e0 | 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 20 2b 20 | ange(n.+.1).+.1.0).*.0.9./.(n.+. |
a900 | 32 29 20 2a 20 32 20 2a 20 6e 70 2e 70 69 29 0a 78 74 6f 74 5b 3a 2c 20 31 5d 20 3d 20 6e 70 2e | 2).*.2.*.np.pi).xtot[:,.1].=.np. |
a920 | 73 69 6e 28 0a 20 20 20 20 28 6e 70 2e 61 72 61 6e 67 65 28 6e 20 2b 20 31 29 20 2b 20 31 2e 30 | sin(.....(np.arange(n.+.1).+.1.0 |
a940 | 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 70 69 29 0a 0a | ).*.0.9./.(n.+.2).*.2.*.np.pi).. |
a960 | 78 73 20 3d 20 78 74 6f 74 5b 3a 6e 2c 20 3a 5d 0a 78 74 20 3d 20 78 74 6f 74 5b 31 3a 2c 20 3a | xs.=.xtot[:n,.:].xt.=.xtot[1:,.: |
a980 | 5d 0a 0a 61 2c 20 62 20 3d 20 6f 74 2e 75 6e 69 66 28 6e 29 2c 20 6f 74 2e 75 6e 69 66 28 6e 29 | ]..a,.b.=.ot.unif(n),.ot.unif(n) |
a9a0 | 20 20 23 20 75 6e 69 66 6f 72 6d 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6f 6e 20 73 61 6d 70 | ..#.uniform.distribution.on.samp |
a9c0 | 6c 65 73 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 31 20 3d 20 6f 74 2e 64 69 73 74 28 | les..#.loss.matrix.M1.=.ot.dist( |
a9e0 | 78 73 2c 20 78 74 2c 20 6d 65 74 72 69 63 3d 27 65 75 63 6c 69 64 65 61 6e 27 29 0a 4d 31 20 2f | xs,.xt,.metric='euclidean').M1./ |
aa00 | 3d 20 4d 31 2e 6d 61 78 28 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 32 20 3d 20 6f | =.M1.max()..#.loss.matrix.M2.=.o |
aa20 | 74 2e 64 69 73 74 28 78 73 2c 20 78 74 2c 20 6d 65 74 72 69 63 3d 27 73 71 65 75 63 6c 69 64 65 | t.dist(xs,.xt,.metric='sqeuclide |
aa40 | 61 6e 27 29 0a 4d 32 20 2f 3d 20 4d 32 2e 6d 61 78 28 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 | an').M2./=.M2.max()..#.loss.matr |
aa60 | 69 78 0a 4d 70 20 3d 20 6e 70 2e 73 71 72 74 28 6f 74 2e 64 69 73 74 28 78 73 2c 20 78 74 2c 20 | ix.Mp.=.np.sqrt(ot.dist(xs,.xt,. |
aa80 | 6d 65 74 72 69 63 3d 27 65 75 63 6c 69 64 65 61 6e 27 29 29 0a 4d 70 20 2f 3d 20 4d 70 2e 6d 61 | metric='euclidean')).Mp./=.Mp.ma |
aaa0 | 78 28 29 0a 0a 0a 23 20 44 61 74 61 0a 70 6c 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a | x()...#.Data.pl.figure(4,.figsiz |
aac0 | 65 3d 28 37 2c 20 33 29 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c | e=(7,.3)).pl.clf().pl.plot(xs[:, |
aae0 | 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 |
ab00 | 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 |
ab20 | 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 |
ab40 | 70 6c 65 73 27 29 0a 70 6c 2e 61 78 69 73 28 27 65 71 75 61 6c 27 29 0a 70 6c 2e 74 69 74 6c 65 | ples').pl.axis('equal').pl.title |
ab60 | 28 27 53 6f 75 72 63 65 20 61 6e 64 20 74 72 61 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e | ('Source.and.traget.distribution |
ab80 | 73 27 29 0a 0a 0a 23 20 43 6f 73 74 20 6d 61 74 72 69 63 65 73 0a 70 6c 2e 66 69 67 75 72 65 28 | s')...#.Cost.matrices.pl.figure( |
aba0 | 35 2c 20 66 69 67 73 69 7a 65 3d 28 37 2c 20 33 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 | 5,.figsize=(7,.3))..pl.subplot(1 |
abc0 | 2c 20 33 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 4d 31 2c 20 69 6e 74 65 72 70 6f 6c 61 74 | ,.3,.1).pl.imshow(M1,.interpolat |
abe0 | 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 45 75 63 6c 69 64 65 | ion='nearest').pl.title('Euclide |
ac00 | 61 6e 20 63 6f 73 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 32 29 0a 70 | an.cost')..pl.subplot(1,.3,.2).p |
ac20 | 6c 2e 69 6d 73 68 6f 77 28 4d 32 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 | l.imshow(M2,.interpolation='near |
ac40 | 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 71 75 61 72 65 64 20 45 75 63 6c 69 64 65 61 | est').pl.title('Squared.Euclidea |
ac60 | 6e 20 63 6f 73 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 33 29 0a 70 6c | n.cost')..pl.subplot(1,.3,.3).pl |
ac80 | 2e 69 6d 73 68 6f 77 28 4d 70 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 | .imshow(Mp,.interpolation='neare |
aca0 | 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 71 72 74 20 45 75 63 6c 69 64 65 61 6e 20 63 6f | st').pl.title('Sqrt.Euclidean.co |
acc0 | 73 74 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 | st').pl.tight_layout()..######## |
ace0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
ad00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
ad20 | 23 23 23 23 23 23 0a 23 20 44 61 74 61 73 65 74 20 32 20 3a 20 50 6c 6f 74 20 20 4f 54 20 4d 61 | ######.#.Dataset.2.:.Plot..OT.Ma |
ad40 | 74 72 69 63 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | trices.#.----------------------- |
ad60 | 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 25 25 20 45 4d 44 0a 47 31 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 | ------...#%%.EMD.G1.=.ot.emd(a,. |
ad80 | 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 47 70 20 | b,.M1).G2.=.ot.emd(a,.b,.M2).Gp. |
ada0 | 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 69 63 65 | =.ot.emd(a,.b,.Mp)..#.OT.matrice |
adc0 | 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 29 0a 0a | s.pl.figure(6,.figsize=(7,.3)).. |
ade0 | 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 6c 6f 74 | pl.subplot(1,.3,.1).ot.plot.plot |
ae00 | 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 5b 2e 35 | 2D_samples_mat(xs,.xt,.G1,.c=[.5 |
ae20 | 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 73 5b 3a | ,..5,.1]).pl.plot(xs[:,.0],.xs[: |
ae40 | 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 70 6c 65 | ,.1],.'+b',.label='Source.sample |
ae60 | 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 5d 2c 20 | s').pl.plot(xt[:,.0],.xt[:,.1],. |
ae80 | 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 0a 70 6c | 'xr',.label='Target.samples').pl |
aea0 | 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 63 3d 30 | .axis('equal').#.pl.legend(loc=0 |
aec0 | 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 6c 2e 73 | ).pl.title('OT.Euclidean')..pl.s |
aee0 | 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 44 5f 73 | ubplot(1,.3,.2).ot.plot.plot2D_s |
af00 | 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 20 2e 35 | amples_mat(xs,.xt,.G2,.c=[.5,..5 |
af20 | 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 20 31 5d | ,.1]).pl.plot(xs[:,.0],.xs[:,.1] |
af40 | 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 0a | ,.'+b',.label='Source.samples'). |
af60 | 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 27 | pl.plot(xt[:,.0],.xt[:,.1],.'xr' |
af80 | 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 69 | ,.label='Target.samples').pl.axi |
afa0 | 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 0a 70 6c | s('equal').#.pl.legend(loc=0).pl |
afc0 | 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 29 0a 0a | .title('OT.squared.Euclidean').. |
afe0 | 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 6c 6f 74 | pl.subplot(1,.3,.3).ot.plot.plot |
b000 | 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 5b 2e 35 | 2D_samples_mat(xs,.xt,.Gp,.c=[.5 |
b020 | 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 73 5b 3a | ,..5,.1]).pl.plot(xs[:,.0],.xs[: |
b040 | 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 70 6c 65 | ,.1],.'+b',.label='Source.sample |
b060 | 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 5d 2c 20 | s').pl.plot(xt[:,.0],.xt[:,.1],. |
b080 | 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 0a 70 6c | 'xr',.label='Target.samples').pl |
b0a0 | 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 63 3d 30 | .axis('equal').#.pl.legend(loc=0 |
b0c0 | 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 27 29 0a | ).pl.title('OT.sqrt.Euclidean'). |
b0e0 | 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 4b 03 | pl.tight_layout()..pl.show().PK. |
b100 | 04 14 00 00 00 00 00 92 53 be 4c a6 16 4e 83 2e 17 00 00 2e 17 00 00 21 00 00 00 70 6c 6f 74 5f | ........S.L..N.........!...plot_ |
b120 | 62 61 72 79 63 65 6e 74 65 72 5f 6c 70 5f 76 73 5f 65 6e 74 72 6f 70 69 63 2e 70 79 23 20 2d 2a | barycenter_lp_vs_entropic.py#.-* |
b140 | 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d | -.coding:.utf-8.-*-.""".======== |
b160 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
b180 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
b1a0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 31 44 20 57 61 73 73 65 72 73 74 65 69 6e 20 62 61 72 79 63 65 6e | =========.1D.Wasserstein.barycen |
b1c0 | 74 65 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 62 65 74 77 65 65 6e 20 65 78 61 63 74 20 4c 50 20 | ter.comparison.between.exact.LP. |
b1e0 | 61 6e 64 20 65 6e 74 72 6f 70 69 63 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 3d 3d 3d 3d | and.entropic.regularization.==== |
b200 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
b220 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
b240 | 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 75 | =============..This.example.illu |
b260 | 73 74 72 61 74 65 73 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66 20 72 65 67 75 6c | strates.the.computation.of.regul |
b280 | 61 72 69 7a 65 64 20 57 61 73 73 65 72 73 74 65 69 6e 20 42 61 72 79 63 65 6e 74 65 72 0a 61 73 | arized.Wasserstein.Barycenter.as |
b2a0 | 20 70 72 6f 70 6f 73 65 64 20 69 6e 20 5b 33 5d 20 61 6e 64 20 65 78 61 63 74 20 4c 50 20 62 61 | .proposed.in.[3].and.exact.LP.ba |
b2c0 | 72 79 63 65 6e 74 65 72 73 20 75 73 69 6e 67 20 73 74 61 6e 64 61 72 64 20 4c 50 20 73 6f 6c 76 | rycenters.using.standard.LP.solv |
b2e0 | 65 72 2e 0a 0a 49 74 20 72 65 70 72 6f 64 75 63 65 73 20 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 | er...It.reproduces.approximately |
b300 | 20 46 69 67 75 72 65 20 33 2e 31 20 61 6e 64 20 33 2e 32 20 66 72 6f 6d 20 74 68 65 20 66 6f 6c | .Figure.3.1.and.3.2.from.the.fol |
b320 | 6c 6f 77 69 6e 67 20 70 61 70 65 72 3a 0a 43 75 74 75 72 69 2c 20 4d 2e 2c 20 26 20 50 65 79 72 | lowing.paper:.Cuturi,.M.,.&.Peyr |
b340 | c3 a9 2c 20 47 2e 20 28 32 30 31 36 29 2e 20 41 20 73 6d 6f 6f 74 68 65 64 20 64 75 61 6c 20 61 | ..,.G..(2016)..A.smoothed.dual.a |
b360 | 70 70 72 6f 61 63 68 20 66 6f 72 20 76 61 72 69 61 74 69 6f 6e 61 6c 0a 57 61 73 73 65 72 73 74 | pproach.for.variational.Wasserst |
b380 | 65 69 6e 20 70 72 6f 62 6c 65 6d 73 2e 20 53 49 41 4d 20 4a 6f 75 72 6e 61 6c 20 6f 6e 20 49 6d | ein.problems..SIAM.Journal.on.Im |
b3a0 | 61 67 69 6e 67 20 53 63 69 65 6e 63 65 73 2c 20 39 28 31 29 2c 20 33 32 30 2d 33 34 33 2e 0a 0a | aging.Sciences,.9(1),.320-343... |
b3c0 | 5b 33 5d 20 42 65 6e 61 6d 6f 75 2c 20 4a 2e 20 44 2e 2c 20 43 61 72 6c 69 65 72 2c 20 47 2e 2c | [3].Benamou,.J..D.,.Carlier,.G., |
b3e0 | 20 43 75 74 75 72 69 2c 20 4d 2e 2c 20 4e 65 6e 6e 61 2c 20 4c 2e 2c 20 26 20 50 65 79 72 c3 a9 | .Cuturi,.M.,.Nenna,.L.,.&.Peyr.. |
b400 | 2c 20 47 2e 20 28 32 30 31 35 29 2e 0a 49 74 65 72 61 74 69 76 65 20 42 72 65 67 6d 61 6e 20 70 | ,.G..(2015)..Iterative.Bregman.p |
b420 | 72 6f 6a 65 63 74 69 6f 6e 73 20 66 6f 72 20 72 65 67 75 6c 61 72 69 7a 65 64 20 74 72 61 6e 73 | rojections.for.regularized.trans |
b440 | 70 6f 72 74 61 74 69 6f 6e 20 70 72 6f 62 6c 65 6d 73 0a 53 49 41 4d 20 4a 6f 75 72 6e 61 6c 20 | portation.problems.SIAM.Journal. |
b460 | 6f 6e 20 53 63 69 65 6e 74 69 66 69 63 20 43 6f 6d 70 75 74 69 6e 67 2c 20 33 37 28 32 29 2c 20 | on.Scientific.Computing,.37(2),. |
b480 | 41 31 31 31 31 2d 41 31 31 33 38 2e 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a 20 52 65 6d | A1111-A1138..."""..#.Author:.Rem |
b4a0 | 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 | i.Flamary.<remi.flamary@unice.fr |
b4c0 | 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f | >.#.#.License:.MIT.License..impo |
b4e0 | 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 | rt.numpy.as.np.import.matplotlib |
b500 | 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 23 20 6e 65 63 65 73 73 61 | .pylab.as.pl.import.ot.#.necessa |
b520 | 72 79 20 66 6f 72 20 33 64 20 70 6c 6f 74 20 65 76 65 6e 20 69 66 20 6e 6f 74 20 75 73 65 64 0a | ry.for.3d.plot.even.if.not.used. |
b540 | 66 72 6f 6d 20 6d 70 6c 5f 74 6f 6f 6c 6b 69 74 73 2e 6d 70 6c 6f 74 33 64 20 69 6d 70 6f 72 74 | from.mpl_toolkits.mplot3d.import |
b560 | 20 41 78 65 73 33 44 20 20 23 20 6e 6f 71 61 0a 66 72 6f 6d 20 6d 61 74 70 6c 6f 74 6c 69 62 2e | .Axes3D..#.noqa.from.matplotlib. |
b580 | 63 6f 6c 6c 65 63 74 69 6f 6e 73 20 69 6d 70 6f 72 74 20 50 6f 6c 79 43 6f 6c 6c 65 63 74 69 6f | collections.import.PolyCollectio |
b5a0 | 6e 20 20 23 20 6e 6f 71 61 0a 0a 23 69 6d 70 6f 72 74 20 6f 74 2e 6c 70 2e 63 76 78 20 61 73 20 | n..#.noqa..#import.ot.lp.cvx.as. |
b5c0 | 63 76 78 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 | cvx..########################### |
b5e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
b600 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 47 61 75 73 73 69 61 6e 20 44 | ###################.#.Gaussian.D |
b620 | 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 | ata.#.-------------..#%%.paramet |
b640 | 65 72 73 0a 0a 70 72 6f 62 6c 65 6d 73 20 3d 20 5b 5d 0a 0a 6e 20 3d 20 31 30 30 20 20 23 20 6e | ers..problems.=.[]..n.=.100..#.n |
b660 | 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 |
b680 | 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 |
b6a0 | 75 73 73 69 61 6e 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 23 20 47 61 75 73 73 69 61 6e 20 | ussian.distributions.#.Gaussian. |
b6c0 | 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 61 31 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d | distributions.a1.=.ot.datasets.m |
b6e0 | 61 6b 65 5f 31 44 5f 67 61 75 73 73 28 6e 2c 20 6d 3d 32 30 2c 20 73 3d 35 29 20 20 23 20 6d 3d | ake_1D_gauss(n,.m=20,.s=5)..#.m= |
b700 | 20 6d 65 61 6e 2c 20 73 3d 20 73 74 64 0a 61 32 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d | .mean,.s=.std.a2.=.ot.datasets.m |
b720 | 61 6b 65 5f 31 44 5f 67 61 75 73 73 28 6e 2c 20 6d 3d 36 30 2c 20 73 3d 38 29 0a 0a 23 20 63 72 | ake_1D_gauss(n,.m=60,.s=8)..#.cr |
b740 | 65 61 74 69 6e 67 20 6d 61 74 72 69 78 20 41 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61 6c 6c 20 64 | eating.matrix.A.containing.all.d |
b760 | 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 41 20 3d 20 6e 70 2e 76 73 74 61 63 6b 28 28 61 31 2c 20 | istributions.A.=.np.vstack((a1,. |
b780 | 61 32 29 29 2e 54 0a 6e 5f 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 3d 20 41 2e 73 68 61 70 65 | a2)).T.n_distributions.=.A.shape |
b7a0 | 5b 31 5d 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 20 2b 20 6e 6f 72 6d 61 6c 69 7a 61 74 69 | [1]..#.loss.matrix.+.normalizati |
b7c0 | 6f 6e 0a 4d 20 3d 20 6f 74 2e 75 74 69 6c 73 2e 64 69 73 74 30 28 6e 29 0a 4d 20 2f 3d 20 4d 2e | on.M.=.ot.utils.dist0(n).M./=.M. |
b7e0 | 6d 61 78 28 29 0a 0a 0a 23 25 25 20 70 6c 6f 74 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f | max()...#%%.plot.the.distributio |
b800 | 6e 73 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 | ns..pl.figure(1,.figsize=(6.4,.3 |
b820 | 29 29 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6e 5f 64 69 73 74 72 69 62 75 74 69 6f 6e | )).for.i.in.range(n_distribution |
b840 | 73 29 3a 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 2c 20 41 5b 3a 2c 20 69 5d 29 0a 70 6c 2e 74 | s):.....pl.plot(x,.A[:,.i]).pl.t |
b860 | 69 74 6c 65 28 27 44 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c | itle('Distributions').pl.tight_l |
b880 | 61 79 6f 75 74 28 29 0a 0a 23 25 25 20 62 61 72 79 63 65 6e 74 65 72 20 63 6f 6d 70 75 74 61 74 | ayout()..#%%.barycenter.computat |
b8a0 | 69 6f 6e 0a 0a 61 6c 70 68 61 20 3d 20 30 2e 35 20 20 23 20 30 3c 3d 61 6c 70 68 61 3c 3d 31 0a | ion..alpha.=.0.5..#.0<=alpha<=1. |
b8c0 | 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 61 | weights.=.np.array([1.-.alpha,.a |
b8e0 | 6c 70 68 61 5d 29 0a 0a 23 20 6c 32 62 61 72 79 0a 62 61 72 79 5f 6c 32 20 3d 20 41 2e 64 6f 74 | lpha])..#.l2bary.bary_l2.=.A.dot |
b900 | 28 77 65 69 67 68 74 73 29 0a 0a 23 20 77 61 73 73 65 72 73 74 65 69 6e 0a 72 65 67 20 3d 20 31 | (weights)..#.wasserstein.reg.=.1 |
b920 | 65 2d 33 0a 6f 74 2e 74 69 63 28 29 0a 62 61 72 79 5f 77 61 73 73 20 3d 20 6f 74 2e 62 72 65 67 | e-3.ot.tic().bary_wass.=.ot.breg |
b940 | 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 68 74 | man.barycenter(A,.M,.reg,.weight |
b960 | 73 29 0a 6f 74 2e 74 6f 63 28 29 0a 0a 0a 6f 74 2e 74 69 63 28 29 0a 62 61 72 79 5f 77 61 73 73 | s).ot.toc()...ot.tic().bary_wass |
b980 | 32 20 3d 20 6f 74 2e 6c 70 2e 62 61 72 79 63 65 6e 74 65 72 28 41 2c 20 4d 2c 20 77 65 69 67 68 | 2.=.ot.lp.barycenter(A,.M,.weigh |
b9a0 | 74 73 2c 20 73 6f 6c 76 65 72 3d 27 69 6e 74 65 72 69 6f 72 2d 70 6f 69 6e 74 27 2c 20 76 65 72 | ts,.solver='interior-point',.ver |
b9c0 | 62 6f 73 65 3d 54 72 75 65 29 0a 6f 74 2e 74 6f 63 28 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 | bose=True).ot.toc()..pl.figure(2 |
b9e0 | 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 31 2c 20 31 29 0a 66 | ).pl.clf().pl.subplot(2,.1,.1).f |
ba00 | 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6e 5f 64 69 73 74 72 69 62 75 74 69 6f 6e 73 29 3a 0a | or.i.in.range(n_distributions):. |
ba20 | 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 2c 20 41 5b 3a 2c 20 69 5d 29 0a 70 6c 2e 74 69 74 6c 65 | ....pl.plot(x,.A[:,.i]).pl.title |
ba40 | 28 27 44 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c | ('Distributions')..pl.subplot(2, |
ba60 | 20 31 2c 20 32 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 61 72 79 5f 6c 32 2c 20 27 72 27 2c 20 | .1,.2).pl.plot(x,.bary_l2,.'r',. |
ba80 | 6c 61 62 65 6c 3d 27 6c 32 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 61 72 79 5f 77 61 73 73 | label='l2').pl.plot(x,.bary_wass |
baa0 | 2c 20 27 67 27 2c 20 6c 61 62 65 6c 3d 27 52 65 67 20 57 61 73 73 65 72 73 74 65 69 6e 27 29 0a | ,.'g',.label='Reg.Wasserstein'). |
bac0 | 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 61 72 79 5f 77 61 73 73 32 2c 20 27 62 27 2c 20 6c 61 62 65 | pl.plot(x,.bary_wass2,.'b',.labe |
bae0 | 6c 3d 27 4c 50 20 57 61 73 73 65 72 73 74 65 69 6e 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 29 0a | l='LP.Wasserstein').pl.legend(). |
bb00 | 70 6c 2e 74 69 74 6c 65 28 27 42 61 72 79 63 65 6e 74 65 72 73 27 29 0a 70 6c 2e 74 69 67 68 74 | pl.title('Barycenters').pl.tight |
bb20 | 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 72 6f 62 6c 65 6d 73 2e 61 70 70 65 6e 64 28 5b 41 2c 20 5b | _layout()..problems.append([A,.[ |
bb40 | 62 61 72 79 5f 6c 32 2c 20 62 61 72 79 5f 77 61 73 73 2c 20 62 61 72 79 5f 77 61 73 73 32 5d 5d | bary_l2,.bary_wass,.bary_wass2]] |
bb60 | 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 | )..############################# |
bb80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
bba0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 44 69 72 61 63 20 44 61 74 61 0a 23 | #################.#.Dirac.Data.# |
bbc0 | 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 61 31 20 | .----------..#%%.parameters..a1. |
bbe0 | 3d 20 31 2e 30 20 2a 20 28 78 20 3e 20 31 30 29 20 2a 20 28 78 20 3c 20 35 30 29 0a 61 32 20 3d | =.1.0.*.(x.>.10).*.(x.<.50).a2.= |
bc00 | 20 31 2e 30 20 2a 20 28 78 20 3e 20 36 30 29 20 2a 20 28 78 20 3c 20 38 30 29 0a 0a 61 31 20 2f | .1.0.*.(x.>.60).*.(x.<.80)..a1./ |
bc20 | 3d 20 61 31 2e 73 75 6d 28 29 0a 61 32 20 2f 3d 20 61 32 2e 73 75 6d 28 29 0a 0a 23 20 63 72 65 | =.a1.sum().a2./=.a2.sum()..#.cre |
bc40 | 61 74 69 6e 67 20 6d 61 74 72 69 78 20 41 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61 6c 6c 20 64 69 | ating.matrix.A.containing.all.di |
bc60 | 73 74 72 69 62 75 74 69 6f 6e 73 0a 41 20 3d 20 6e 70 2e 76 73 74 61 63 6b 28 28 61 31 2c 20 61 | stributions.A.=.np.vstack((a1,.a |
bc80 | 32 29 29 2e 54 0a 6e 5f 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 3d 20 41 2e 73 68 61 70 65 5b | 2)).T.n_distributions.=.A.shape[ |
bca0 | 31 5d 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 20 2b 20 6e 6f 72 6d 61 6c 69 7a 61 74 69 6f | 1]..#.loss.matrix.+.normalizatio |
bcc0 | 6e 0a 4d 20 3d 20 6f 74 2e 75 74 69 6c 73 2e 64 69 73 74 30 28 6e 29 0a 4d 20 2f 3d 20 4d 2e 6d | n.M.=.ot.utils.dist0(n).M./=.M.m |
bce0 | 61 78 28 29 0a 0a 0a 23 25 25 20 70 6c 6f 74 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e | ax()...#%%.plot.the.distribution |
bd00 | 73 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 29 | s..pl.figure(1,.figsize=(6.4,.3) |
bd20 | 29 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6e 5f 64 69 73 74 72 69 62 75 74 69 6f 6e 73 | ).for.i.in.range(n_distributions |
bd40 | 29 3a 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 2c 20 41 5b 3a 2c 20 69 5d 29 0a 70 6c 2e 74 69 | ):.....pl.plot(x,.A[:,.i]).pl.ti |
bd60 | 74 6c 65 28 27 44 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 | tle('Distributions').pl.tight_la |
bd80 | 79 6f 75 74 28 29 0a 0a 0a 23 25 25 20 62 61 72 79 63 65 6e 74 65 72 20 63 6f 6d 70 75 74 61 74 | yout()...#%%.barycenter.computat |
bda0 | 69 6f 6e 0a 0a 61 6c 70 68 61 20 3d 20 30 2e 35 20 20 23 20 30 3c 3d 61 6c 70 68 61 3c 3d 31 0a | ion..alpha.=.0.5..#.0<=alpha<=1. |
bdc0 | 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 61 | weights.=.np.array([1.-.alpha,.a |
bde0 | 6c 70 68 61 5d 29 0a 0a 23 20 6c 32 62 61 72 79 0a 62 61 72 79 5f 6c 32 20 3d 20 41 2e 64 6f 74 | lpha])..#.l2bary.bary_l2.=.A.dot |
be00 | 28 77 65 69 67 68 74 73 29 0a 0a 23 20 77 61 73 73 65 72 73 74 65 69 6e 0a 72 65 67 20 3d 20 31 | (weights)..#.wasserstein.reg.=.1 |
be20 | 65 2d 33 0a 6f 74 2e 74 69 63 28 29 0a 62 61 72 79 5f 77 61 73 73 20 3d 20 6f 74 2e 62 72 65 67 | e-3.ot.tic().bary_wass.=.ot.breg |
be40 | 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 68 74 | man.barycenter(A,.M,.reg,.weight |
be60 | 73 29 0a 6f 74 2e 74 6f 63 28 29 0a 0a 0a 6f 74 2e 74 69 63 28 29 0a 62 61 72 79 5f 77 61 73 73 | s).ot.toc()...ot.tic().bary_wass |
be80 | 32 20 3d 20 6f 74 2e 6c 70 2e 62 61 72 79 63 65 6e 74 65 72 28 41 2c 20 4d 2c 20 77 65 69 67 68 | 2.=.ot.lp.barycenter(A,.M,.weigh |
bea0 | 74 73 2c 20 73 6f 6c 76 65 72 3d 27 69 6e 74 65 72 69 6f 72 2d 70 6f 69 6e 74 27 2c 20 76 65 72 | ts,.solver='interior-point',.ver |
bec0 | 62 6f 73 65 3d 54 72 75 65 29 0a 6f 74 2e 74 6f 63 28 29 0a 0a 0a 70 72 6f 62 6c 65 6d 73 2e 61 | bose=True).ot.toc()...problems.a |
bee0 | 70 70 65 6e 64 28 5b 41 2c 20 5b 62 61 72 79 5f 6c 32 2c 20 62 61 72 79 5f 77 61 73 73 2c 20 62 | ppend([A,.[bary_l2,.bary_wass,.b |
bf00 | 61 72 79 5f 77 61 73 73 32 5d 5d 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 29 0a 70 6c 2e 63 6c | ary_wass2]])..pl.figure(2).pl.cl |
bf20 | 66 28 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 31 2c 20 31 29 0a 66 6f 72 20 69 20 69 6e | f().pl.subplot(2,.1,.1).for.i.in |
bf40 | 20 72 61 6e 67 65 28 6e 5f 64 69 73 74 72 69 62 75 74 69 6f 6e 73 29 3a 0a 20 20 20 20 70 6c 2e | .range(n_distributions):.....pl. |
bf60 | 70 6c 6f 74 28 78 2c 20 41 5b 3a 2c 20 69 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 44 69 73 74 72 | plot(x,.A[:,.i]).pl.title('Distr |
bf80 | 69 62 75 74 69 6f 6e 73 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 31 2c 20 32 29 0a | ibutions')..pl.subplot(2,.1,.2). |
bfa0 | 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 61 72 79 5f 6c 32 2c 20 27 72 27 2c 20 6c 61 62 65 6c 3d 27 | pl.plot(x,.bary_l2,.'r',.label=' |
bfc0 | 6c 32 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 61 72 79 5f 77 61 73 73 2c 20 27 67 27 2c 20 | l2').pl.plot(x,.bary_wass,.'g',. |
bfe0 | 6c 61 62 65 6c 3d 27 52 65 67 20 57 61 73 73 65 72 73 74 65 69 6e 27 29 0a 70 6c 2e 70 6c 6f 74 | label='Reg.Wasserstein').pl.plot |
c000 | 28 78 2c 20 62 61 72 79 5f 77 61 73 73 32 2c 20 27 62 27 2c 20 6c 61 62 65 6c 3d 27 4c 50 20 57 | (x,.bary_wass2,.'b',.label='LP.W |
c020 | 61 73 73 65 72 73 74 65 69 6e 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 29 0a 70 6c 2e 74 69 74 6c | asserstein').pl.legend().pl.titl |
c040 | 65 28 27 42 61 72 79 63 65 6e 74 65 72 73 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 | e('Barycenters').pl.tight_layout |
c060 | 28 29 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 61 31 20 3d 20 6e 70 2e 7a 65 72 6f | ()..#%%.parameters..a1.=.np.zero |
c080 | 73 28 6e 29 0a 61 32 20 3d 20 6e 70 2e 7a 65 72 6f 73 28 6e 29 0a 0a 61 31 5b 31 30 5d 20 3d 20 | s(n).a2.=.np.zeros(n)..a1[10].=. |
c0a0 | 2e 32 35 0a 61 31 5b 32 30 5d 20 3d 20 2e 35 0a 61 31 5b 33 30 5d 20 3d 20 2e 32 35 0a 61 32 5b | .25.a1[20].=..5.a1[30].=..25.a2[ |
c0c0 | 38 30 5d 20 3d 20 31 0a 0a 0a 61 31 20 2f 3d 20 61 31 2e 73 75 6d 28 29 0a 61 32 20 2f 3d 20 61 | 80].=.1...a1./=.a1.sum().a2./=.a |
c0e0 | 32 2e 73 75 6d 28 29 0a 0a 23 20 63 72 65 61 74 69 6e 67 20 6d 61 74 72 69 78 20 41 20 63 6f 6e | 2.sum()..#.creating.matrix.A.con |
c100 | 74 61 69 6e 69 6e 67 20 61 6c 6c 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 41 20 3d 20 6e 70 | taining.all.distributions.A.=.np |
c120 | 2e 76 73 74 61 63 6b 28 28 61 31 2c 20 61 32 29 29 2e 54 0a 6e 5f 64 69 73 74 72 69 62 75 74 69 | .vstack((a1,.a2)).T.n_distributi |
c140 | 6f 6e 73 20 3d 20 41 2e 73 68 61 70 65 5b 31 5d 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 20 | ons.=.A.shape[1]..#.loss.matrix. |
c160 | 2b 20 6e 6f 72 6d 61 6c 69 7a 61 74 69 6f 6e 0a 4d 20 3d 20 6f 74 2e 75 74 69 6c 73 2e 64 69 73 | +.normalization.M.=.ot.utils.dis |
c180 | 74 30 28 6e 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 29 0a 0a 0a 23 25 25 20 70 6c 6f 74 20 74 68 | t0(n).M./=.M.max()...#%%.plot.th |
c1a0 | 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 | e.distributions..pl.figure(1,.fi |
c1c0 | 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 29 29 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6e | gsize=(6.4,.3)).for.i.in.range(n |
c1e0 | 5f 64 69 73 74 72 69 62 75 74 69 6f 6e 73 29 3a 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 2c 20 | _distributions):.....pl.plot(x,. |
c200 | 41 5b 3a 2c 20 69 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 44 69 73 74 72 69 62 75 74 69 6f 6e 73 | A[:,.i]).pl.title('Distributions |
c220 | 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 0a 23 25 25 20 62 61 72 79 63 | ').pl.tight_layout()...#%%.baryc |
c240 | 65 6e 74 65 72 20 63 6f 6d 70 75 74 61 74 69 6f 6e 0a 0a 61 6c 70 68 61 20 3d 20 30 2e 35 20 20 | enter.computation..alpha.=.0.5.. |
c260 | 23 20 30 3c 3d 61 6c 70 68 61 3c 3d 31 0a 77 65 69 67 68 74 73 20 3d 20 6e 70 2e 61 72 72 61 79 | #.0<=alpha<=1.weights.=.np.array |
c280 | 28 5b 31 20 2d 20 61 6c 70 68 61 2c 20 61 6c 70 68 61 5d 29 0a 0a 23 20 6c 32 62 61 72 79 0a 62 | ([1.-.alpha,.alpha])..#.l2bary.b |
c2a0 | 61 72 79 5f 6c 32 20 3d 20 41 2e 64 6f 74 28 77 65 69 67 68 74 73 29 0a 0a 23 20 77 61 73 73 65 | ary_l2.=.A.dot(weights)..#.wasse |
c2c0 | 72 73 74 65 69 6e 0a 72 65 67 20 3d 20 31 65 2d 33 0a 6f 74 2e 74 69 63 28 29 0a 62 61 72 79 5f | rstein.reg.=.1e-3.ot.tic().bary_ |
c2e0 | 77 61 73 73 20 3d 20 6f 74 2e 62 72 65 67 6d 61 6e 2e 62 61 72 79 63 65 6e 74 65 72 28 41 2c 20 | wass.=.ot.bregman.barycenter(A,. |
c300 | 4d 2c 20 72 65 67 2c 20 77 65 69 67 68 74 73 29 0a 6f 74 2e 74 6f 63 28 29 0a 0a 0a 6f 74 2e 74 | M,.reg,.weights).ot.toc()...ot.t |
c320 | 69 63 28 29 0a 62 61 72 79 5f 77 61 73 73 32 20 3d 20 6f 74 2e 6c 70 2e 62 61 72 79 63 65 6e 74 | ic().bary_wass2.=.ot.lp.barycent |
c340 | 65 72 28 41 2c 20 4d 2c 20 77 65 69 67 68 74 73 2c 20 73 6f 6c 76 65 72 3d 27 69 6e 74 65 72 69 | er(A,.M,.weights,.solver='interi |
c360 | 6f 72 2d 70 6f 69 6e 74 27 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 6f 74 2e 74 6f 63 28 | or-point',.verbose=True).ot.toc( |
c380 | 29 0a 0a 0a 70 72 6f 62 6c 65 6d 73 2e 61 70 70 65 6e 64 28 5b 41 2c 20 5b 62 61 72 79 5f 6c 32 | )...problems.append([A,.[bary_l2 |
c3a0 | 2c 20 62 61 72 79 5f 77 61 73 73 2c 20 62 61 72 79 5f 77 61 73 73 32 5d 5d 29 0a 0a 70 6c 2e 66 | ,.bary_wass,.bary_wass2]])..pl.f |
c3c0 | 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 32 2c 20 | igure(2).pl.clf().pl.subplot(2,. |
c3e0 | 31 2c 20 31 29 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6e 5f 64 69 73 74 72 69 62 75 74 | 1,.1).for.i.in.range(n_distribut |
c400 | 69 6f 6e 73 29 3a 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 2c 20 41 5b 3a 2c 20 69 5d 29 0a 70 | ions):.....pl.plot(x,.A[:,.i]).p |
c420 | 6c 2e 74 69 74 6c 65 28 27 44 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 70 6c 2e 73 75 62 | l.title('Distributions')..pl.sub |
c440 | 70 6c 6f 74 28 32 2c 20 31 2c 20 32 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 61 72 79 5f 6c 32 | plot(2,.1,.2).pl.plot(x,.bary_l2 |
c460 | 2c 20 27 72 27 2c 20 6c 61 62 65 6c 3d 27 6c 32 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 61 | ,.'r',.label='l2').pl.plot(x,.ba |
c480 | 72 79 5f 77 61 73 73 2c 20 27 67 27 2c 20 6c 61 62 65 6c 3d 27 52 65 67 20 57 61 73 73 65 72 73 | ry_wass,.'g',.label='Reg.Wassers |
c4a0 | 74 65 69 6e 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 61 72 79 5f 77 61 73 73 32 2c 20 27 62 | tein').pl.plot(x,.bary_wass2,.'b |
c4c0 | 27 2c 20 6c 61 62 65 6c 3d 27 4c 50 20 57 61 73 73 65 72 73 74 65 69 6e 27 29 0a 70 6c 2e 6c 65 | ',.label='LP.Wasserstein').pl.le |
c4e0 | 67 65 6e 64 28 29 0a 70 6c 2e 74 69 74 6c 65 28 27 42 61 72 79 63 65 6e 74 65 72 73 27 29 0a 70 | gend().pl.title('Barycenters').p |
c500 | 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 | l.tight_layout()...############# |
c520 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
c540 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
c560 | 23 0a 23 20 46 69 6e 61 6c 20 66 69 67 75 72 65 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a | #.#.Final.figure.#.------------. |
c580 | 23 0a 0a 23 25 25 20 70 6c 6f 74 0a 0a 6e 62 6d 20 3d 20 6c 65 6e 28 70 72 6f 62 6c 65 6d 73 29 | #..#%%.plot..nbm.=.len(problems) |
c5a0 | 0a 6e 62 6d 32 20 3d 20 28 6e 62 6d 20 2f 2f 20 32 29 0a 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 | .nbm2.=.(nbm.//.2)...pl.figure(2 |
c5c0 | 2c 20 28 32 30 2c 20 36 29 29 0a 70 6c 2e 63 6c 66 28 29 0a 0a 66 6f 72 20 69 20 69 6e 20 72 61 | ,.(20,.6)).pl.clf()..for.i.in.ra |
c5e0 | 6e 67 65 28 6e 62 6d 29 3a 0a 0a 20 20 20 20 41 20 3d 20 70 72 6f 62 6c 65 6d 73 5b 69 5d 5b 30 | nge(nbm):......A.=.problems[i][0 |
c600 | 5d 0a 20 20 20 20 62 61 72 79 5f 6c 32 20 3d 20 70 72 6f 62 6c 65 6d 73 5b 69 5d 5b 31 5d 5b 30 | ].....bary_l2.=.problems[i][1][0 |
c620 | 5d 0a 20 20 20 20 62 61 72 79 5f 77 61 73 73 20 3d 20 70 72 6f 62 6c 65 6d 73 5b 69 5d 5b 31 5d | ].....bary_wass.=.problems[i][1] |
c640 | 5b 31 5d 0a 20 20 20 20 62 61 72 79 5f 77 61 73 73 32 20 3d 20 70 72 6f 62 6c 65 6d 73 5b 69 5d | [1].....bary_wass2.=.problems[i] |
c660 | 5b 31 5d 5b 32 5d 0a 0a 20 20 20 20 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 6e 62 6d 2c 20 31 | [1][2]......pl.subplot(2,.nbm,.1 |
c680 | 20 2b 20 69 29 0a 20 20 20 20 66 6f 72 20 6a 20 69 6e 20 72 61 6e 67 65 28 6e 5f 64 69 73 74 72 | .+.i).....for.j.in.range(n_distr |
c6a0 | 69 62 75 74 69 6f 6e 73 29 3a 0a 20 20 20 20 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 2c 20 41 5b | ibutions):.........pl.plot(x,.A[ |
c6c0 | 3a 2c 20 6a 5d 29 0a 20 20 20 20 69 66 20 69 20 3d 3d 20 6e 62 6d 32 3a 0a 20 20 20 20 20 20 20 | :,.j]).....if.i.==.nbm2:........ |
c6e0 | 20 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 20 20 20 20 70 | .pl.title('Distributions').....p |
c700 | 6c 2e 78 74 69 63 6b 73 28 28 29 29 0a 20 20 20 20 70 6c 2e 79 74 69 63 6b 73 28 28 29 29 0a 0a | l.xticks(()).....pl.yticks(()).. |
c720 | 20 20 20 20 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 6e 62 6d 2c 20 31 20 2b 20 69 20 2b 20 6e | ....pl.subplot(2,.nbm,.1.+.i.+.n |
c740 | 62 6d 29 0a 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 61 72 79 5f 6c 32 2c 20 27 72 27 | bm)......pl.plot(x,.bary_l2,.'r' |
c760 | 2c 20 6c 61 62 65 6c 3d 27 4c 32 20 28 45 75 63 6c 69 64 65 61 6e 29 27 29 0a 20 20 20 20 70 6c | ,.label='L2.(Euclidean)').....pl |
c780 | 2e 70 6c 6f 74 28 78 2c 20 62 61 72 79 5f 77 61 73 73 2c 20 27 67 27 2c 20 6c 61 62 65 6c 3d 27 | .plot(x,.bary_wass,.'g',.label=' |
c7a0 | 52 65 67 20 57 61 73 73 65 72 73 74 65 69 6e 27 29 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 2c | Reg.Wasserstein').....pl.plot(x, |
c7c0 | 20 62 61 72 79 5f 77 61 73 73 32 2c 20 27 62 27 2c 20 6c 61 62 65 6c 3d 27 4c 50 20 57 61 73 73 | .bary_wass2,.'b',.label='LP.Wass |
c7e0 | 65 72 73 74 65 69 6e 27 29 0a 20 20 20 20 69 66 20 69 20 3d 3d 20 6e 62 6d 20 2d 20 31 3a 0a 20 | erstein').....if.i.==.nbm.-.1:.. |
c800 | 20 20 20 20 20 20 20 70 6c 2e 6c 65 67 65 6e 64 28 29 0a 20 20 20 20 69 66 20 69 20 3d 3d 20 6e | .......pl.legend().....if.i.==.n |
c820 | 62 6d 32 3a 0a 20 20 20 20 20 20 20 20 70 6c 2e 74 69 74 6c 65 28 27 42 61 72 79 63 65 6e 74 65 | bm2:.........pl.title('Barycente |
c840 | 72 73 27 29 0a 0a 20 20 20 20 70 6c 2e 78 74 69 63 6b 73 28 28 29 29 0a 20 20 20 20 70 6c 2e 79 | rs')......pl.xticks(()).....pl.y |
c860 | 74 69 63 6b 73 28 28 29 29 0a 50 4b 03 04 14 00 00 00 00 00 90 53 be 4c bf 4a 09 ec 55 09 00 00 | ticks(()).PK.........S.L.J..U... |
c880 | 55 09 00 00 15 00 00 00 70 6c 6f 74 5f 4f 54 5f 32 44 5f 73 61 6d 70 6c 65 73 2e 70 79 23 20 2d | U.......plot_OT_2D_samples.py#.- |
c8a0 | 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d | *-.coding:.utf-8.-*-.""".======= |
c8c0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
c8e0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 32 44 20 4f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f | =============.2D.Optimal.transpo |
c900 | 72 74 20 62 65 74 77 65 65 6e 20 65 6d 70 69 72 69 63 61 6c 20 64 69 73 74 72 69 62 75 74 69 6f | rt.between.empirical.distributio |
c920 | 6e 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ns.============================= |
c940 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 49 6c 6c 75 73 74 72 | =======================..Illustr |
c960 | 61 74 69 6f 6e 20 6f 66 20 32 44 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 20 62 65 | ation.of.2D.optimal.transport.be |
c980 | 74 77 65 65 6e 20 64 69 73 63 72 69 62 75 74 69 6f 6e 73 20 74 68 61 74 20 61 72 65 20 77 65 69 | tween.discributions.that.are.wei |
c9a0 | 67 68 74 65 64 0a 73 75 6d 20 6f 66 20 64 69 72 61 63 73 2e 20 54 68 65 20 4f 54 20 6d 61 74 72 | ghted.sum.of.diracs..The.OT.matr |
c9c0 | 69 78 20 69 73 20 70 6c 6f 74 74 65 64 20 77 69 74 68 20 74 68 65 20 73 61 6d 70 6c 65 73 2e 0a | ix.is.plotted.with.the.samples.. |
c9e0 | 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 | ."""..#.Author:.Remi.Flamary.<re |
ca00 | 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 | mi.flamary@unice.fr>.#.#.License |
ca20 | 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e | :.MIT.License..import.numpy.as.n |
ca40 | 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a | p.import.matplotlib.pylab.as.pl. |
ca60 | 69 6d 70 6f 72 74 20 6f 74 0a 69 6d 70 6f 72 74 20 6f 74 2e 70 6c 6f 74 0a 0a 23 23 23 23 23 23 | import.ot.import.ot.plot..###### |
ca80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
caa0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
cac0 | 23 23 23 23 23 23 23 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d | ########.#.Generate.data.#.----- |
cae0 | 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 20 61 6e 64 20 64 61 74 | --------..#%%.parameters.and.dat |
cb00 | 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 73 61 6d 70 6c | a.generation..n.=.50..#.nb.sampl |
cb20 | 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 0a 63 6f 76 5f | es..mu_s.=.np.array([0,.0]).cov_ |
cb40 | 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 5d 5d 29 0a 0a | s.=.np.array([[1,.0],.[0,.1]]).. |
cb60 | 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 5f 74 20 3d 20 | mu_t.=.np.array([4,.4]).cov_t.=. |
cb80 | 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 5d 5d 29 0a 0a | np.array([[1,.-.8],.[-.8,.1]]).. |
cba0 | 78 73 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 32 44 5f 73 61 6d 70 6c 65 73 | xs.=.ot.datasets.make_2D_samples |
cbc0 | 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 6f 74 2e 64 | _gauss(n,.mu_s,.cov_s).xt.=.ot.d |
cbe0 | 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 32 44 5f 73 61 6d 70 6c 65 73 5f 67 61 75 73 73 28 6e 2c | atasets.make_2D_samples_gauss(n, |
cc00 | 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 28 28 6e | .mu_t,.cov_t)..a,.b.=.np.ones((n |
cc20 | 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 20 75 6e | ,))./.n,.np.ones((n,))./.n..#.un |
cc40 | 69 66 6f 72 6d 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6f 6e 20 73 61 6d 70 6c 65 73 0a 0a 23 | iform.distribution.on.samples..# |
cc60 | 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 78 74 29 | .loss.matrix.M.=.ot.dist(xs,.xt) |
cc80 | 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 23 23 23 | .M./=.M.max()..################# |
cca0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
ccc0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 | #############################.#. |
cce0 | 50 6c 6f 74 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 6c 6f 74 20 | Plot.data.#.---------..#%%.plot. |
cd00 | 73 61 6d 70 6c 65 73 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 | samples..pl.figure(1).pl.plot(xs |
cd20 | 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 | [:,.0],.xs[:,.1],.'+b',.label='S |
cd40 | 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d | ource.samples').pl.plot(xt[:,.0] |
cd60 | 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 | ,.xt[:,.1],.'xr',.label='Target. |
cd80 | 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 |
cda0 | 74 6c 65 28 27 53 6f 75 72 63 65 20 61 6e 64 20 74 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 | tle('Source.and.target.distribut |
cdc0 | 69 6f 6e 73 27 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 4d | ions')..pl.figure(2).pl.imshow(M |
cde0 | 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 74 69 | ,.interpolation='nearest').pl.ti |
ce00 | 74 6c 65 28 27 43 6f 73 74 20 6d 61 74 72 69 78 20 4d 27 29 0a 0a 23 23 23 23 23 23 23 23 23 23 | tle('Cost.matrix.M')..########## |
ce20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
ce40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
ce60 | 23 23 23 23 0a 23 20 43 6f 6d 70 75 74 65 20 45 4d 44 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | ####.#.Compute.EMD.#.----------- |
ce80 | 0a 0a 23 25 25 20 45 4d 44 0a 0a 47 30 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 29 0a | ..#%%.EMD..G0.=.ot.emd(a,.b,.M). |
cea0 | 0a 70 6c 2e 66 69 67 75 72 65 28 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 47 30 2c 20 69 6e 74 65 | .pl.figure(3).pl.imshow(G0,.inte |
cec0 | 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f | rpolation='nearest').pl.title('O |
cee0 | 54 20 6d 61 74 72 69 78 20 47 30 27 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 34 29 0a 6f 74 2e 70 | T.matrix.G0')..pl.figure(4).ot.p |
cf00 | 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 78 73 2c 20 78 74 2c 20 47 | lot.plot2D_samples_mat(xs,.xt,.G |
cf20 | 30 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 | 0,.c=[.5,..5,.1]).pl.plot(xs[:,. |
cf40 | 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 | 0],.xs[:,.1],.'+b',.label='Sourc |
cf60 | 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 | e.samples').pl.plot(xt[:,.0],.xt |
cf80 | 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 | [:,.1],.'xr',.label='Target.samp |
cfa0 | 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 | les').pl.legend(loc=0).pl.title( |
cfc0 | 27 4f 54 20 6d 61 74 72 69 78 20 77 69 74 68 20 73 61 6d 70 6c 65 73 27 29 0a 0a 0a 23 23 23 23 | 'OT.matrix.with.samples')...#### |
cfe0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
d000 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
d020 | 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 72 6e 0a 23 20 | ##########.#.Compute.Sinkhorn.#. |
d040 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 73 69 6e 6b 68 6f 72 6e 0a 0a | ----------------..#%%.sinkhorn.. |
d060 | 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 20 6f 74 | #.reg.term.lambd.=.1e-3..Gs.=.ot |
d080 | 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 2e 66 69 | .sinkhorn(a,.b,.M,.lambd)..pl.fi |
d0a0 | 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 6c 61 74 | gure(5).pl.imshow(Gs,.interpolat |
d0c0 | 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 6d 61 74 72 | ion='nearest').pl.title('OT.matr |
d0e0 | 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 74 2e 70 | ix.sinkhorn')..pl.figure(6).ot.p |
d100 | 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 78 73 2c 20 78 74 2c 20 47 | lot.plot2D_samples_mat(xs,.xt,.G |
d120 | 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 28 78 73 | s,.color=[.5,..5,.1]).pl.plot(xs |
d140 | 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 | [:,.0],.xs[:,.1],.'+b',.label='S |
d160 | 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d | ource.samples').pl.plot(xt[:,.0] |
d180 | 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 | ,.xt[:,.1],.'xr',.label='Target. |
d1a0 | 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 |
d1c0 | 74 6c 65 28 27 4f 54 20 6d 61 74 72 69 78 20 53 69 6e 6b 68 6f 72 6e 20 77 69 74 68 20 73 61 6d | tle('OT.matrix.Sinkhorn.with.sam |
d1e0 | 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 90 53 be 4c | ples')..pl.show().PK.........S.L |
d200 | 0e e0 72 82 97 0b 00 00 97 0b 00 00 1b 00 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 6c 69 6e 65 61 72 | ..r.............plot_otda_linear |
d220 | 5f 6d 61 70 70 69 6e 67 2e 70 79 23 21 2f 75 73 72 2f 62 69 6e 2f 65 6e 76 20 70 79 74 68 6f 6e | _mapping.py#!/usr/bin/env.python |
d240 | 33 0a 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d | 3.#.-*-.coding:.utf-8.-*-.""".== |
d260 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4c 69 6e 65 61 | ==========================.Linea |
d280 | 72 20 4f 54 20 6d 61 70 70 69 6e 67 20 65 73 74 69 6d 61 74 69 6f 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d | r.OT.mapping.estimation.======== |
d2a0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 0a 22 22 22 0a 0a 23 20 41 75 | ====================..."""..#.Au |
d2c0 | 74 68 6f 72 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 | thor:.Remi.Flamary.<remi.flamary |
d2e0 | 40 75 6e 69 63 65 2e 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 | @unice.fr>.#.#.License:.MIT.Lice |
d300 | 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 70 | nse..import.numpy.as.np.import.p |
d320 | 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 0a 23 23 23 23 23 23 23 23 23 23 | ylab.as.pl.import.ot..########## |
d340 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
d360 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
d380 | 23 23 23 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d | ####.#.Generate.data.#.--------- |
d3a0 | 2d 2d 2d 2d 0a 0a 6e 20 3d 20 31 30 30 30 0a 64 20 3d 20 32 0a 73 69 67 6d 61 20 3d 20 2e 31 0a | ----..n.=.1000.d.=.2.sigma.=..1. |
d3c0 | 0a 23 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 0a 61 6e 67 6c 65 73 20 3d 20 6e 70 2e 72 61 | .#.source.samples.angles.=.np.ra |
d3e0 | 6e 64 6f 6d 2e 72 61 6e 64 28 6e 2c 20 31 29 20 2a 20 32 20 2a 20 6e 70 2e 70 69 0a 78 73 20 3d | ndom.rand(n,.1).*.2.*.np.pi.xs.= |
d400 | 20 6e 70 2e 63 6f 6e 63 61 74 65 6e 61 74 65 28 28 6e 70 2e 73 69 6e 28 61 6e 67 6c 65 73 29 2c | .np.concatenate((np.sin(angles), |
d420 | 20 6e 70 2e 63 6f 73 28 61 6e 67 6c 65 73 29 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .np.cos(angles)),............... |
d440 | 20 20 20 20 20 20 61 78 69 73 3d 31 29 20 2b 20 73 69 67 6d 61 20 2a 20 6e 70 2e 72 61 6e 64 6f | ......axis=1).+.sigma.*.np.rando |
d460 | 6d 2e 72 61 6e 64 6e 28 6e 2c 20 32 29 0a 78 73 5b 3a 6e 20 2f 2f 20 32 2c 20 31 5d 20 2b 3d 20 | m.randn(n,.2).xs[:n.//.2,.1].+=. |
d480 | 32 0a 0a 0a 23 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 0a 61 6e 67 6c 65 74 20 3d 20 6e 70 | 2...#.target.samples.anglet.=.np |
d4a0 | 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 28 6e 2c 20 31 29 20 2a 20 32 20 2a 20 6e 70 2e 70 69 0a 78 | .random.rand(n,.1).*.2.*.np.pi.x |
d4c0 | 74 20 3d 20 6e 70 2e 63 6f 6e 63 61 74 65 6e 61 74 65 28 28 6e 70 2e 73 69 6e 28 61 6e 67 6c 65 | t.=.np.concatenate((np.sin(angle |
d4e0 | 74 29 2c 20 6e 70 2e 63 6f 73 28 61 6e 67 6c 65 74 29 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 | t),.np.cos(anglet)),............ |
d500 | 20 20 20 20 20 20 20 20 20 61 78 69 73 3d 31 29 20 2b 20 73 69 67 6d 61 20 2a 20 6e 70 2e 72 61 | .........axis=1).+.sigma.*.np.ra |
d520 | 6e 64 6f 6d 2e 72 61 6e 64 6e 28 6e 2c 20 32 29 0a 78 74 5b 3a 6e 20 2f 2f 20 32 2c 20 31 5d 20 | ndom.randn(n,.2).xt[:n.//.2,.1]. |
d540 | 2b 3d 20 32 0a 0a 0a 41 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 5b 31 2e 35 2c 20 2e 37 5d 2c 20 | +=.2...A.=.np.array([[1.5,..7],. |
d560 | 5b 2e 37 2c 20 31 2e 35 5d 5d 29 0a 62 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 5b 34 2c 20 32 5d | [.7,.1.5]]).b.=.np.array([[4,.2] |
d580 | 5d 29 0a 78 74 20 3d 20 78 74 2e 64 6f 74 28 41 29 20 2b 20 62 0a 0a 23 23 23 23 23 23 23 23 23 | ]).xt.=.xt.dot(A).+.b..######### |
d5a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
d5c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
d5e0 | 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 | #####.#.Plot.data.#.---------..p |
d600 | 6c 2e 66 69 67 75 72 65 28 31 2c 20 28 35 2c 20 35 29 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a | l.figure(1,.(5,.5)).pl.plot(xs[: |
d620 | 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b | ,.0],.xs[:,.1],.'+').pl.plot(xt[ |
d640 | 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 6f 27 29 0a 0a 0a 23 23 23 23 23 23 23 23 | :,.0],.xt[:,.1],.'o')...######## |
d660 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
d680 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
d6a0 | 23 23 23 23 23 23 0a 23 20 45 73 74 69 6d 61 74 65 20 6c 69 6e 65 61 72 20 6d 61 70 70 69 6e 67 | ######.#.Estimate.linear.mapping |
d6c0 | 20 61 6e 64 20 74 72 61 6e 73 70 6f 72 74 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | .and.transport.#.--------------- |
d6e0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 41 65 2c 20 62 65 20 3d | ----------------------..Ae,.be.= |
d700 | 20 6f 74 2e 64 61 2e 4f 54 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 28 78 73 2c 20 78 74 29 | .ot.da.OT_mapping_linear(xs,.xt) |
d720 | 0a 0a 78 73 74 20 3d 20 78 73 2e 64 6f 74 28 41 65 29 20 2b 20 62 65 0a 0a 0a 23 23 23 23 23 23 | ..xst.=.xs.dot(Ae).+.be...###### |
d740 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
d760 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
d780 | 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 | ########.#.Plot.transported.samp |
d7a0 | 6c 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a | les.#.------------------------.. |
d7c0 | 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 28 35 2c 20 35 29 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c | pl.figure(1,.(5,.5)).pl.clf().pl |
d7e0 | 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 27 29 0a 70 | .plot(xs[:,.0],.xs[:,.1],.'+').p |
d800 | 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 6f 27 29 0a | l.plot(xt[:,.0],.xt[:,.1],.'o'). |
d820 | 70 6c 2e 70 6c 6f 74 28 78 73 74 5b 3a 2c 20 30 5d 2c 20 78 73 74 5b 3a 2c 20 31 5d 2c 20 27 2b | pl.plot(xst[:,.0],.xst[:,.1],.'+ |
d840 | 27 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ')..pl.show()..################# |
d860 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
d880 | 23 23 23 23 23 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 | #############################.#. |
d8a0 | 4c 6f 61 64 20 69 6d 61 67 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | Load.image.data.#.-------------- |
d8c0 | 2d 0a 0a 0a 64 65 66 20 69 6d 32 6d 61 74 28 49 29 3a 0a 20 20 20 20 22 22 22 43 6f 6e 76 65 72 | -...def.im2mat(I):....."""Conver |
d8e0 | 74 73 20 61 6e 64 20 69 6d 61 67 65 20 74 6f 20 6d 61 74 72 69 78 20 28 6f 6e 65 20 70 69 78 65 | ts.and.image.to.matrix.(one.pixe |
d900 | 6c 20 70 65 72 20 6c 69 6e 65 29 22 22 22 0a 20 20 20 20 72 65 74 75 72 6e 20 49 2e 72 65 73 68 | l.per.line)""".....return.I.resh |
d920 | 61 70 65 28 28 49 2e 73 68 61 70 65 5b 30 5d 20 2a 20 49 2e 73 68 61 70 65 5b 31 5d 2c 20 49 2e | ape((I.shape[0].*.I.shape[1],.I. |
d940 | 73 68 61 70 65 5b 32 5d 29 29 0a 0a 0a 64 65 66 20 6d 61 74 32 69 6d 28 58 2c 20 73 68 61 70 65 | shape[2]))...def.mat2im(X,.shape |
d960 | 29 3a 0a 20 20 20 20 22 22 22 43 6f 6e 76 65 72 74 73 20 62 61 63 6b 20 61 20 6d 61 74 72 69 78 | ):....."""Converts.back.a.matrix |
d980 | 20 74 6f 20 61 6e 20 69 6d 61 67 65 22 22 22 0a 20 20 20 20 72 65 74 75 72 6e 20 58 2e 72 65 73 | .to.an.image""".....return.X.res |
d9a0 | 68 61 70 65 28 73 68 61 70 65 29 0a 0a 0a 64 65 66 20 6d 69 6e 6d 61 78 28 49 29 3a 0a 20 20 20 | hape(shape)...def.minmax(I):.... |
d9c0 | 20 72 65 74 75 72 6e 20 6e 70 2e 63 6c 69 70 28 49 2c 20 30 2c 20 31 29 0a 0a 0a 23 20 4c 6f 61 | .return.np.clip(I,.0,.1)...#.Loa |
d9e0 | 64 69 6e 67 20 69 6d 61 67 65 73 0a 49 31 20 3d 20 70 6c 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 | ding.images.I1.=.pl.imread('../d |
da00 | 61 74 61 2f 6f 63 65 61 6e 5f 64 61 79 2e 6a 70 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c | ata/ocean_day.jpg').astype(np.fl |
da20 | 6f 61 74 36 34 29 20 2f 20 32 35 36 0a 49 32 20 3d 20 70 6c 2e 69 6d 72 65 61 64 28 27 2e 2e 2f | oat64)./.256.I2.=.pl.imread('../ |
da40 | 64 61 74 61 2f 6f 63 65 61 6e 5f 73 75 6e 73 65 74 2e 6a 70 67 27 29 2e 61 73 74 79 70 65 28 6e | data/ocean_sunset.jpg').astype(n |
da60 | 70 2e 66 6c 6f 61 74 36 34 29 20 2f 20 32 35 36 0a 0a 0a 58 31 20 3d 20 69 6d 32 6d 61 74 28 49 | p.float64)./.256...X1.=.im2mat(I |
da80 | 31 29 0a 58 32 20 3d 20 69 6d 32 6d 61 74 28 49 32 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 | 1).X2.=.im2mat(I2)..############ |
daa0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
dac0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
dae0 | 23 23 0a 23 20 45 73 74 69 6d 61 74 65 20 6d 61 70 70 69 6e 67 20 61 6e 64 20 61 64 61 70 74 0a | ##.#.Estimate.mapping.and.adapt. |
db00 | 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a | #.----------------------------.. |
db20 | 6d 61 70 70 69 6e 67 20 3d 20 6f 74 2e 64 61 2e 4c 69 6e 65 61 72 54 72 61 6e 73 70 6f 72 74 28 | mapping.=.ot.da.LinearTransport( |
db40 | 29 0a 0a 6d 61 70 70 69 6e 67 2e 66 69 74 28 58 73 3d 58 31 2c 20 58 74 3d 58 32 29 0a 0a 0a 78 | )..mapping.fit(Xs=X1,.Xt=X2)...x |
db60 | 73 74 20 3d 20 6d 61 70 70 69 6e 67 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 31 29 0a 78 74 | st.=.mapping.transform(Xs=X1).xt |
db80 | 73 20 3d 20 6d 61 70 70 69 6e 67 2e 69 6e 76 65 72 73 65 5f 74 72 61 6e 73 66 6f 72 6d 28 58 74 | s.=.mapping.inverse_transform(Xt |
dba0 | 3d 58 32 29 0a 0a 49 31 74 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 78 73 74 2c 20 49 | =X2)..I1t.=.minmax(mat2im(xst,.I |
dbc0 | 31 2e 73 68 61 70 65 29 29 0a 49 32 74 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 78 74 | 1.shape)).I2t.=.minmax(mat2im(xt |
dbe0 | 73 2c 20 49 32 2e 73 68 61 70 65 29 29 0a 0a 23 20 25 25 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 | s,.I2.shape))..#.%%...########## |
dc00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
dc20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
dc40 | 23 23 23 23 0a 23 20 50 6c 6f 74 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 69 6d 61 67 65 73 0a 23 | ####.#.Plot.transformed.images.# |
dc60 | 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 | .-----------------------..pl.fig |
dc80 | 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 31 30 2c 20 37 29 29 0a 0a 70 6c 2e 73 75 62 70 | ure(2,.figsize=(10,.7))..pl.subp |
dca0 | 6c 6f 74 28 32 2c 20 32 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 29 0a 70 6c 2e 61 78 | lot(2,.2,.1).pl.imshow(I1).pl.ax |
dcc0 | 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 2e | is('off').pl.title('Im..1')..pl. |
dce0 | 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 29 0a 70 | subplot(2,.2,.2).pl.imshow(I2).p |
dd00 | 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 0a | l.axis('off').pl.title('Im..2'). |
dd20 | 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 | .pl.subplot(2,.2,.3).pl.imshow(I |
dd40 | 31 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 4d 61 70 | 1t).pl.axis('off').pl.title('Map |
dd60 | 70 69 6e 67 20 49 6d 2e 20 31 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 34 | ping.Im..1')..pl.subplot(2,.2,.4 |
dd80 | 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 74 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a | ).pl.imshow(I2t).pl.axis('off'). |
dda0 | 70 6c 2e 74 69 74 6c 65 28 27 49 6e 76 65 72 73 65 20 6d 61 70 70 69 6e 67 20 49 6d 2e 20 32 27 | pl.title('Inverse.mapping.Im..2' |
ddc0 | 29 0a 50 4b 03 04 14 00 00 00 00 00 92 53 be 4c cd ad d9 82 f4 0f 00 00 f4 0f 00 00 14 00 00 00 | ).PK.........S.L................ |
dde0 | 70 6c 6f 74 5f 6f 74 64 61 5f 6d 61 70 70 69 6e 67 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 | plot_otda_mapping.py#.-*-.coding |
de00 | 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.-*-.""".================ |
de20 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4f 54 20 6d | ===========================.OT.m |
de40 | 61 70 70 69 6e 67 20 65 73 74 69 6d 61 74 69 6f 6e 20 66 6f 72 20 64 6f 6d 61 69 6e 20 61 64 61 | apping.estimation.for.domain.ada |
de60 | 70 74 61 74 69 6f 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ptation.======================== |
de80 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c | ===================..This.exampl |
dea0 | 65 20 70 72 65 73 65 6e 74 73 20 68 6f 77 20 74 6f 20 75 73 65 20 4d 61 70 70 69 6e 67 54 72 61 | e.presents.how.to.use.MappingTra |
dec0 | 6e 73 70 6f 72 74 20 74 6f 20 65 73 74 69 6d 61 74 65 20 61 74 20 74 68 65 20 73 61 6d 65 0a 74 | nsport.to.estimate.at.the.same.t |
dee0 | 69 6d 65 20 62 6f 74 68 20 74 68 65 20 63 6f 75 70 6c 69 6e 67 20 74 72 61 6e 73 70 6f 72 74 20 | ime.both.the.coupling.transport. |
df00 | 61 6e 64 20 61 70 70 72 6f 78 69 6d 61 74 65 20 74 68 65 20 74 72 61 6e 73 70 6f 72 74 20 6d 61 | and.approximate.the.transport.ma |
df20 | 70 20 77 69 74 68 20 65 69 74 68 65 72 0a 61 20 6c 69 6e 65 61 72 20 6f 72 20 61 20 6b 65 72 6e | p.with.either.a.linear.or.a.kern |
df40 | 65 6c 69 7a 65 64 20 6d 61 70 70 69 6e 67 20 61 73 20 69 6e 74 72 6f 64 75 63 65 64 20 69 6e 20 | elized.mapping.as.introduced.in. |
df60 | 5b 38 5d 2e 0a 0a 5b 38 5d 20 4d 2e 20 50 65 72 72 6f 74 2c 20 4e 2e 20 43 6f 75 72 74 79 2c 20 | [8]...[8].M..Perrot,.N..Courty,. |
df80 | 52 2e 20 46 6c 61 6d 61 72 79 2c 20 41 2e 20 48 61 62 72 61 72 64 2c 0a 20 20 20 20 22 4d 61 70 | R..Flamary,.A..Habrard,....."Map |
dfa0 | 70 69 6e 67 20 65 73 74 69 6d 61 74 69 6f 6e 20 66 6f 72 20 64 69 73 63 72 65 74 65 20 6f 70 74 | ping.estimation.for.discrete.opt |
dfc0 | 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 22 2c 0a 20 20 20 20 4e 65 75 72 61 6c 20 49 6e 66 6f | imal.transport",.....Neural.Info |
dfe0 | 72 6d 61 74 69 6f 6e 20 50 72 6f 63 65 73 73 69 6e 67 20 53 79 73 74 65 6d 73 20 28 4e 49 50 53 | rmation.Processing.Systems.(NIPS |
e000 | 29 2c 20 32 30 31 36 2e 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 73 3a 20 52 65 6d 69 20 46 6c | ),.2016.."""..#.Authors:.Remi.Fl |
e020 | 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 20 | amary.<remi.flamary@unice.fr>.#. |
e040 | 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 20 3c 73 74 61 6e | .........Stanislas.Chambon.<stan |
e060 | 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 63 65 6e 73 65 3a | .chambon@gmail.com>.#.#.License: |
e080 | 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 |
e0a0 | 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 |
e0c0 | 6d 70 6f 72 74 20 6f 74 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | mport.ot...##################### |
e0e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
e100 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 47 65 6e 65 | #########################.#.Gene |
e120 | 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 6e 5f 73 6f 75 | rate.data.#.-------------..n_sou |
e140 | 72 63 65 5f 73 61 6d 70 6c 65 73 20 3d 20 31 30 30 0a 6e 5f 74 61 72 67 65 74 5f 73 61 6d 70 6c | rce_samples.=.100.n_target_sampl |
e160 | 65 73 20 3d 20 31 30 30 0a 74 68 65 74 61 20 3d 20 32 20 2a 20 6e 70 2e 70 69 20 2f 20 32 30 0a | es.=.100.theta.=.2.*.np.pi./.20. |
e180 | 6e 6f 69 73 65 5f 6c 65 76 65 6c 20 3d 20 30 2e 31 0a 0a 58 73 2c 20 79 73 20 3d 20 6f 74 2e 64 | noise_level.=.0.1..Xs,.ys.=.ot.d |
e1a0 | 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 0a 20 20 20 20 27 | atasets.make_data_classif(.....' |
e1c0 | 67 61 75 73 73 72 6f 74 27 2c 20 6e 5f 73 6f 75 72 63 65 5f 73 61 6d 70 6c 65 73 2c 20 6e 7a 3d | gaussrot',.n_source_samples,.nz= |
e1e0 | 6e 6f 69 73 65 5f 6c 65 76 65 6c 29 0a 58 73 5f 6e 65 77 2c 20 5f 20 3d 20 6f 74 2e 64 61 74 61 | noise_level).Xs_new,._.=.ot.data |
e200 | 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 0a 20 20 20 20 27 67 61 75 | sets.make_data_classif(.....'gau |
e220 | 73 73 72 6f 74 27 2c 20 6e 5f 73 6f 75 72 63 65 5f 73 61 6d 70 6c 65 73 2c 20 6e 7a 3d 6e 6f 69 | ssrot',.n_source_samples,.nz=noi |
e240 | 73 65 5f 6c 65 76 65 6c 29 0a 58 74 2c 20 79 74 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d | se_level).Xt,.yt.=.ot.datasets.m |
e260 | 61 6b 65 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 0a 20 20 20 20 27 67 61 75 73 73 72 6f 74 27 | ake_data_classif(.....'gaussrot' |
e280 | 2c 20 6e 5f 74 61 72 67 65 74 5f 73 61 6d 70 6c 65 73 2c 20 74 68 65 74 61 3d 74 68 65 74 61 2c | ,.n_target_samples,.theta=theta, |
e2a0 | 20 6e 7a 3d 6e 6f 69 73 65 5f 6c 65 76 65 6c 29 0a 0a 23 20 6f 6e 65 20 6f 66 20 74 68 65 20 74 | .nz=noise_level)..#.one.of.the.t |
e2c0 | 61 72 67 65 74 20 6d 6f 64 65 20 63 68 61 6e 67 65 73 20 69 74 73 20 76 61 72 69 61 6e 63 65 20 | arget.mode.changes.its.variance. |
e2e0 | 28 6e 6f 20 6c 69 6e 65 61 72 20 6d 61 70 70 69 6e 67 29 0a 58 74 5b 79 74 20 3d 3d 20 32 5d 20 | (no.linear.mapping).Xt[yt.==.2]. |
e300 | 2a 3d 20 33 0a 58 74 20 3d 20 58 74 20 2b 20 34 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | *=.3.Xt.=.Xt.+.4..############## |
e320 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
e340 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
e360 | 0a 23 20 50 6c 6f 74 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 | .#.Plot.data.#.---------..pl.fig |
e380 | 75 72 65 28 31 2c 20 28 31 30 2c 20 35 29 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 2e 73 63 61 74 | ure(1,.(10,.5)).pl.clf().pl.scat |
e3a0 | 74 65 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 58 73 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d 61 | ter(Xs[:,.0],.Xs[:,.1],.c=ys,.ma |
e3c0 | 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 | rker='+',.label='Source.samples' |
e3e0 | 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c | ).pl.scatter(Xt[:,.0],.Xt[:,.1], |
e400 | 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 | .c=yt,.marker='o',.label='Target |
e420 | 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 | .samples').pl.legend(loc=0).pl.t |
e440 | 69 74 6c 65 28 27 53 6f 75 72 63 65 20 61 6e 64 20 74 61 72 67 65 74 20 64 69 73 74 72 69 62 75 | itle('Source.and.target.distribu |
e460 | 74 69 6f 6e 73 27 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | tions')...###################### |
e480 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
e4a0 | 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 49 6e 73 74 61 | ########################.#.Insta |
e4c0 | 6e 74 69 61 74 65 20 74 68 65 20 64 69 66 66 65 72 65 6e 74 20 74 72 61 6e 73 70 6f 72 74 20 61 | ntiate.the.different.transport.a |
e4e0 | 6c 67 6f 72 69 74 68 6d 73 20 61 6e 64 20 66 69 74 20 74 68 65 6d 0a 23 20 2d 2d 2d 2d 2d 2d 2d | lgorithms.and.fit.them.#.------- |
e500 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
e520 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 20 4d 61 70 70 69 6e 67 54 | --------------------..#.MappingT |
e540 | 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 6c 0a 6f 74 5f 6d | ransport.with.linear.kernel.ot_m |
e560 | 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 6e 67 54 72 61 | apping_linear.=.ot.da.MappingTra |
e580 | 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 22 2c 20 6d 75 3d | nsport(.....kernel="linear",.mu= |
e5a0 | 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 20 20 20 20 6d 61 | 1e0,.eta=1e-8,.bias=True,.....ma |
e5c0 | 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 6f 74 5f 6d 61 70 | x_iter=20,.verbose=True)..ot_map |
e5e0 | 70 69 6e 67 5f 6c 69 6e 65 61 72 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 23 | ping_linear.fit(Xs=Xs,.Xt=Xt)..# |
e600 | 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 65 73 2c 20 74 72 | .for.original.source.samples,.tr |
e620 | 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 63 20 6d 61 70 70 | ansform.applies.barycentric.mapp |
e640 | 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 6d 61 70 70 69 6e | ing.transp_Xs_linear.=.ot_mappin |
e660 | 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 0a 23 20 66 6f 72 | g_linear.transform(Xs=Xs)..#.for |
e680 | 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 6f 72 | .out.of.source.samples,.transfor |
e6a0 | 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 6e 67 0a 74 72 61 | m.applies.the.linear.mapping.tra |
e6c0 | 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 70 69 6e 67 5f 6c | nsp_Xs_linear_new.=.ot_mapping_l |
e6e0 | 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 0a 0a 0a 23 20 4d | inear.transform(Xs=Xs_new)...#.M |
e700 | 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 69 61 6e 20 6b 65 | appingTransport.with.gaussian.ke |
e720 | 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 20 6f 74 2e 64 61 | rnel.ot_mapping_gaussian.=.ot.da |
e740 | 2e 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 28 0a 20 20 20 20 6b 65 72 6e 65 6c 3d 22 67 | .MappingTransport(.....kernel="g |
e760 | 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 31 2c 20 62 69 61 | aussian",.eta=1e-5,.mu=1e-1,.bia |
e780 | 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 74 65 72 3d 31 30 | s=True,.sigma=1,.....max_iter=10 |
e7a0 | 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 67 61 75 73 73 | ,.verbose=True).ot_mapping_gauss |
e7c0 | 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 6f 72 20 6f 72 69 | ian.fit(Xs=Xs,.Xt=Xt)..#.for.ori |
e7e0 | 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 73 66 6f 72 6d 20 | ginal.source.samples,.transform. |
e800 | 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 67 0a 74 72 61 6e | applies.barycentric.mapping.tran |
e820 | 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 67 5f 67 61 75 73 | sp_Xs_gaussian.=.ot_mapping_gaus |
e840 | 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 6f 72 20 6f 75 74 | sian.transform(Xs=Xs)..#.for.out |
e860 | 20 6f 66 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 2c 20 74 72 61 6e 73 66 6f 72 6d 20 61 70 | .of.source.samples,.transform.ap |
e880 | 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 0a 74 72 61 6e 73 | plies.the.gaussian.mapping.trans |
e8a0 | 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 70 69 6e 67 5f 67 | p_Xs_gaussian_new.=.ot_mapping_g |
e8c0 | 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 77 29 0a 0a 0a 23 | aussian.transform(Xs=Xs_new)...# |
e8e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
e900 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
e920 | 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 70 6f 72 74 65 64 | #############.#.Plot.transported |
e940 | 20 73 61 6d 70 6c 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | .samples.#.--------------------- |
e960 | 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 2e 73 75 | ---..pl.figure(2).pl.clf().pl.su |
e980 | 62 70 6c 6f 74 28 32 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 | bplot(2,.2,.1).pl.scatter(Xt[:,. |
e9a0 | 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a | 0],.Xt[:,.1],.c=yt,.marker='o',. |
e9c0 | 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 | ...........label='Target.samples |
e9e0 | 27 2c 20 61 6c 70 68 61 3d 2e 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 | ',.alpha=.2).pl.scatter(transp_X |
ea00 | 73 5f 6c 69 6e 65 61 72 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 6c 69 6e 65 61 72 | s_linear[:,.0],.transp_Xs_linear |
ea20 | 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 0a 20 20 20 20 20 20 | [:,.1],.c=ys,.marker='+',....... |
ea40 | 20 20 20 20 20 6c 61 62 65 6c 3d 27 4d 61 70 70 65 64 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 | .....label='Mapped.source.sample |
ea60 | 73 27 29 0a 70 6c 2e 74 69 74 6c 65 28 22 42 61 72 79 2e 20 6d 61 70 70 69 6e 67 20 28 6c 69 6e | s').pl.title("Bary..mapping.(lin |
ea80 | 65 61 72 29 22 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 0a 70 6c 2e 73 75 62 70 | ear)").pl.legend(loc=0)..pl.subp |
eaa0 | 6c 6f 74 28 32 2c 20 32 2c 20 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d | lot(2,.2,.2).pl.scatter(Xt[:,.0] |
eac0 | 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 | ,.Xt[:,.1],.c=yt,.marker='o',... |
eae0 | 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c | .........label='Target.samples', |
eb00 | 20 61 6c 70 68 61 3d 2e 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f | .alpha=.2).pl.scatter(transp_Xs_ |
eb20 | 6c 69 6e 65 61 72 5f 6e 65 77 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 6c 69 6e 65 | linear_new[:,.0],.transp_Xs_line |
eb40 | 61 72 5f 6e 65 77 5b 3a 2c 20 31 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 63 3d 79 73 2c 20 6d | ar_new[:,.1],............c=ys,.m |
eb60 | 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 4c 65 61 72 6e 65 64 20 6d 61 70 70 69 6e | arker='+',.label='Learned.mappin |
eb80 | 67 27 29 0a 70 6c 2e 74 69 74 6c 65 28 22 45 73 74 69 6d 2e 20 6d 61 70 70 69 6e 67 20 28 6c 69 | g').pl.title("Estim..mapping.(li |
eba0 | 6e 65 61 72 29 22 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 33 29 0a 70 6c 2e | near)")..pl.subplot(2,.2,.3).pl. |
ebc0 | 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 | scatter(Xt[:,.0],.Xt[:,.1],.c=yt |
ebe0 | 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 | ,.marker='o',............label=' |
ec00 | 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 2e 32 29 0a 70 6c 2e 73 63 | Target.samples',.alpha=.2).pl.sc |
ec20 | 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 67 61 75 73 73 69 61 6e 5b 3a 2c 20 30 5d 2c 20 | atter(transp_Xs_gaussian[:,.0],. |
ec40 | 74 72 61 6e 73 70 5f 58 73 5f 67 61 75 73 73 69 61 6e 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a | transp_Xs_gaussian[:,.1],.c=ys,. |
ec60 | 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 62 61 | ...........marker='+',.label='ba |
ec80 | 72 79 63 65 6e 74 72 69 63 20 6d 61 70 70 69 6e 67 27 29 0a 70 6c 2e 74 69 74 6c 65 28 22 42 61 | rycentric.mapping').pl.title("Ba |
eca0 | 72 79 2e 20 6d 61 70 70 69 6e 67 20 28 6b 65 72 6e 65 6c 29 22 29 0a 0a 70 6c 2e 73 75 62 70 6c | ry..mapping.(kernel)")..pl.subpl |
ecc0 | 6f 74 28 32 2c 20 32 2c 20 34 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c | ot(2,.2,.4).pl.scatter(Xt[:,.0], |
ece0 | 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 | .Xt[:,.1],.c=yt,.marker='o',.... |
ed00 | 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 | ........label='Target.samples',. |
ed20 | 61 6c 70 68 61 3d 2e 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 67 | alpha=.2).pl.scatter(transp_Xs_g |
ed40 | 61 75 73 73 69 61 6e 5f 6e 65 77 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 67 61 75 | aussian_new[:,.0],.transp_Xs_gau |
ed60 | 73 73 69 61 6e 5f 6e 65 77 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 | ssian_new[:,.1],.c=ys,.......... |
ed80 | 20 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 4c 65 61 72 6e 65 64 20 6d 61 70 | ..marker='+',.label='Learned.map |
eda0 | 70 69 6e 67 27 29 0a 70 6c 2e 74 69 74 6c 65 28 22 45 73 74 69 6d 2e 20 6d 61 70 70 69 6e 67 20 | ping').pl.title("Estim..mapping. |
edc0 | 28 6b 65 72 6e 65 6c 29 22 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c | (kernel)").pl.tight_layout()..pl |
ede0 | 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 90 53 be 4c 7a 2e b5 2b 65 09 00 00 65 09 | .show().PK.........S.Lz..+e...e. |
ee00 | 00 00 13 00 00 00 70 6c 6f 74 5f 63 6f 6d 70 75 74 65 5f 65 6d 64 2e 70 79 23 20 2d 2a 2d 20 63 | ......plot_compute_emd.py#.-*-.c |
ee20 | 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | oding:.utf-8.-*-.""".=========== |
ee40 | 3d 3d 3d 3d 3d 3d 0a 50 6c 6f 74 20 6d 75 6c 74 69 70 6c 65 20 45 4d 44 0a 3d 3d 3d 3d 3d 3d 3d | ======.Plot.multiple.EMD.======= |
ee60 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 53 68 6f 77 73 20 68 6f 77 20 74 6f 20 63 6f 6d 70 75 74 65 | ==========..Shows.how.to.compute |
ee80 | 20 6d 75 6c 74 69 70 6c 65 20 45 4d 44 20 61 6e 64 20 53 69 6e 6b 68 6f 72 6e 20 77 69 74 68 20 | .multiple.EMD.and.Sinkhorn.with. |
eea0 | 74 77 6f 20 64 69 66 66 65 72 6e 74 0a 67 72 6f 75 6e 64 20 6d 65 74 72 69 63 73 20 61 6e 64 20 | two.differnt.ground.metrics.and. |
eec0 | 70 6c 6f 74 20 74 68 65 69 72 20 76 61 6c 75 65 73 20 66 6f 72 20 64 69 66 66 65 65 6e 74 20 64 | plot.their.values.for.diffeent.d |
eee0 | 69 73 74 72 69 62 75 74 69 6f 6e 73 2e 0a 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a 20 52 | istributions...."""..#.Author:.R |
ef00 | 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. |
ef20 | 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d | fr>.#.#.License:.MIT.License..im |
ef40 | 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c | port.numpy.as.np.import.matplotl |
ef60 | 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 66 72 6f 6d 20 6f 74 | ib.pylab.as.pl.import.ot.from.ot |
ef80 | 2e 64 61 74 61 73 65 74 73 20 69 6d 70 6f 72 74 20 6d 61 6b 65 5f 31 44 5f 67 61 75 73 73 20 61 | .datasets.import.make_1D_gauss.a |
efa0 | 73 20 67 61 75 73 73 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | s.gauss...###################### |
efc0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
efe0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 47 65 6e 65 72 | ########################.#.Gener |
f000 | 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 61 | ate.data.#.-------------..#%%.pa |
f020 | 72 61 6d 65 74 65 72 73 0a 0a 6e 20 3d 20 31 30 30 20 20 23 20 6e 62 20 62 69 6e 73 0a 6e 5f 74 | rameters..n.=.100..#.nb.bins.n_t |
f040 | 61 72 67 65 74 20 3d 20 35 30 20 20 23 20 6e 62 20 74 61 72 67 65 74 20 64 69 73 74 72 69 62 75 | arget.=.50..#.nb.target.distribu |
f060 | 74 69 6f 6e 73 0a 0a 0a 23 20 62 69 6e 20 70 6f 73 69 74 69 6f 6e 73 0a 78 20 3d 20 6e 70 2e 61 | tions...#.bin.positions.x.=.np.a |
f080 | 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 6c 73 74 5f | range(n,.dtype=np.float64)..lst_ |
f0a0 | 6d 20 3d 20 6e 70 2e 6c 69 6e 73 70 61 63 65 28 32 30 2c 20 39 30 2c 20 6e 5f 74 61 72 67 65 74 | m.=.np.linspace(20,.90,.n_target |
f0c0 | 29 0a 0a 23 20 47 61 75 73 73 69 61 6e 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 61 20 3d 20 | )..#.Gaussian.distributions.a.=. |
f0e0 | 67 61 75 73 73 28 6e 2c 20 6d 3d 32 30 2c 20 73 3d 35 29 20 20 23 20 6d 3d 20 6d 65 61 6e 2c 20 | gauss(n,.m=20,.s=5)..#.m=.mean,. |
f100 | 73 3d 20 73 74 64 0a 0a 42 20 3d 20 6e 70 2e 7a 65 72 6f 73 28 28 6e 2c 20 6e 5f 74 61 72 67 65 | s=.std..B.=.np.zeros((n,.n_targe |
f120 | 74 29 29 0a 0a 66 6f 72 20 69 2c 20 6d 20 69 6e 20 65 6e 75 6d 65 72 61 74 65 28 6c 73 74 5f 6d | t))..for.i,.m.in.enumerate(lst_m |
f140 | 29 3a 0a 20 20 20 20 42 5b 3a 2c 20 69 5d 20 3d 20 67 61 75 73 73 28 6e 2c 20 6d 3d 6d 2c 20 73 | ):.....B[:,.i].=.gauss(n,.m=m,.s |
f160 | 3d 35 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 20 61 6e 64 20 6e 6f 72 6d 61 6c 69 7a 61 | =5)..#.loss.matrix.and.normaliza |
f180 | 74 69 6f 6e 0a 4d 20 3d 20 6f 74 2e 64 69 73 74 28 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 | tion.M.=.ot.dist(x.reshape((n,.1 |
f1a0 | 29 29 2c 20 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 2c 20 27 65 75 63 6c 69 64 65 61 | )),.x.reshape((n,.1)),.'euclidea |
f1c0 | 6e 27 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 29 0a 4d 32 20 3d 20 6f 74 2e 64 69 73 74 28 78 2e | n').M./=.M.max().M2.=.ot.dist(x. |
f1e0 | 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 2c 20 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 | reshape((n,.1)),.x.reshape((n,.1 |
f200 | 29 29 2c 20 27 73 71 65 75 63 6c 69 64 65 61 6e 27 29 0a 4d 32 20 2f 3d 20 4d 32 2e 6d 61 78 28 | )),.'sqeuclidean').M2./=.M2.max( |
f220 | 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 | )..############################# |
f240 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f260 | 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 20 | #################.#.Plot.data.#. |
f280 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 6c 6f 74 20 74 68 65 20 64 69 73 74 72 69 62 75 | ---------..#%%.plot.the.distribu |
f2a0 | 74 69 6f 6e 73 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 | tions..pl.figure(1).pl.subplot(2 |
f2c0 | 2c 20 31 2c 20 31 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 61 2c 20 27 62 27 2c 20 6c 61 62 65 6c | ,.1,.1).pl.plot(x,.a,.'b',.label |
f2e0 | 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 74 69 74 6c 65 | ='Source.distribution').pl.title |
f300 | 28 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 73 75 62 70 6c | ('Source.distribution').pl.subpl |
f320 | 6f 74 28 32 2c 20 31 2c 20 32 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 42 2c 20 6c 61 62 65 6c 3d | ot(2,.1,.2).pl.plot(x,.B,.label= |
f340 | 27 54 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 70 6c 2e 74 69 74 6c 65 | 'Target.distributions').pl.title |
f360 | 28 27 54 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 70 6c 2e 74 69 67 68 | ('Target.distributions').pl.tigh |
f380 | 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | t_layout()...################### |
f3a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f3c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 43 6f | ###########################.#.Co |
f3e0 | 6d 70 75 74 65 20 45 4d 44 20 66 6f 72 20 74 68 65 20 64 69 66 66 65 72 65 6e 74 20 6c 6f 73 73 | mpute.EMD.for.the.different.loss |
f400 | 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | es.#.--------------------------- |
f420 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 43 6f 6d 70 75 74 65 20 61 6e 64 20 70 6c 6f 74 20 | ---------..#%%.Compute.and.plot. |
f440 | 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 61 6e 64 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 0a 64 | distributions.and.loss.matrix..d |
f460 | 5f 65 6d 64 20 3d 20 6f 74 2e 65 6d 64 32 28 61 2c 20 42 2c 20 4d 29 20 20 23 20 64 69 72 65 63 | _emd.=.ot.emd2(a,.B,.M)..#.direc |
f480 | 74 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66 20 45 4d 44 0a 64 5f 65 6d 64 32 20 3d 20 6f 74 | t.computation.of.EMD.d_emd2.=.ot |
f4a0 | 2e 65 6d 64 32 28 61 2c 20 42 2c 20 4d 32 29 20 20 23 20 64 69 72 65 63 74 20 63 6f 6d 70 75 74 | .emd2(a,.B,.M2)..#.direct.comput |
f4c0 | 61 74 69 6f 6e 20 6f 66 20 45 4d 44 20 77 69 74 68 20 6c 6f 73 73 20 4d 32 0a 0a 0a 70 6c 2e 66 | ation.of.EMD.with.loss.M2...pl.f |
f4e0 | 69 67 75 72 65 28 32 29 0a 70 6c 2e 70 6c 6f 74 28 64 5f 65 6d 64 2c 20 6c 61 62 65 6c 3d 27 45 | igure(2).pl.plot(d_emd,.label='E |
f500 | 75 63 6c 69 64 65 61 6e 20 45 4d 44 27 29 0a 70 6c 2e 70 6c 6f 74 28 64 5f 65 6d 64 32 2c 20 6c | uclidean.EMD').pl.plot(d_emd2,.l |
f520 | 61 62 65 6c 3d 27 53 71 75 61 72 65 64 20 45 75 63 6c 69 64 65 61 6e 20 45 4d 44 27 29 0a 70 6c | abel='Squared.Euclidean.EMD').pl |
f540 | 2e 74 69 74 6c 65 28 27 45 4d 44 20 64 69 73 74 61 6e 63 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e | .title('EMD.distances').pl.legen |
f560 | 64 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | d()..########################### |
f580 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f5a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 43 6f 6d 70 75 74 65 20 53 69 | ###################.#.Compute.Si |
f5c0 | 6e 6b 68 6f 72 6e 20 66 6f 72 20 74 68 65 20 64 69 66 66 65 72 65 6e 74 20 6c 6f 73 73 65 73 0a | nkhorn.for.the.different.losses. |
f5e0 | 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | #.------------------------------ |
f600 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 0a 72 65 67 20 3d 20 31 65 2d 32 0a 64 5f 73 69 | -----------..#%%.reg.=.1e-2.d_si |
f620 | 6e 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 | nkhorn.=.ot.sinkhorn2(a,.B,.M,.r |
f640 | 65 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 | eg).d_sinkhorn2.=.ot.sinkhorn2(a |
f660 | 2c 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 | ,.B,.M2,.reg)..pl.figure(2).pl.c |
f680 | 6c 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 | lf().pl.plot(d_emd,.label='Eucli |
f6a0 | 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 |
f6c0 | 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 70 6c 6f | ='Squared.Euclidean.EMD').pl.plo |
f6e0 | 74 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 | t(d_sinkhorn,.'+',.label='Euclid |
f700 | 65 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 | ean.Sinkhorn').pl.plot(d_sinkhor |
f720 | 6e 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 | n2,.'+',.label='Squared.Euclidea |
f740 | 6e 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 | n.Sinkhorn').pl.title('EMD.dista |
f760 | 6e 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 | nces').pl.legend()..pl.show().PK |
f780 | 03 04 14 00 00 00 00 00 92 53 be 4c 99 da 74 4f 0d 0e 00 00 0d 0e 00 00 19 00 00 00 70 6c 6f 74 | .........S.L..tO............plot |
f7a0 | 5f 6f 74 64 61 5f 63 6f 6c 6f 72 5f 69 6d 61 67 65 73 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e | _otda_color_images.py#.-*-.codin |
f7c0 | 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | g:.utf-8.-*-.""".=============== |
f7e0 | 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 6f 6c 6f | ==============.OT.for.image.colo |
f800 | 72 20 61 64 61 70 74 61 74 69 6f 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | r.adaptation.=================== |
f820 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 70 72 65 73 65 6e 74 | ==========..This.example.present |
f840 | 73 20 61 20 77 61 79 20 6f 66 20 74 72 61 6e 73 66 65 72 72 69 6e 67 20 63 6f 6c 6f 72 73 20 62 | s.a.way.of.transferring.colors.b |
f860 | 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 6d 61 6c 20 54 72 | etween.two.image.with.Optimal.Tr |
f880 | 61 6e 73 70 6f 72 74 20 61 73 20 69 6e 74 72 6f 64 75 63 65 64 20 69 6e 20 5b 36 5d 0a 0a 5b 36 | ansport.as.introduced.in.[6]..[6 |
f8a0 | 5d 20 46 65 72 72 61 64 61 6e 73 2c 20 53 2e 2c 20 50 61 70 61 64 61 6b 69 73 2c 20 4e 2e 2c 20 | ].Ferradans,.S.,.Papadakis,.N.,. |
f8c0 | 50 65 79 72 65 2c 20 47 2e 2c 20 26 20 41 75 6a 6f 6c 2c 20 4a 2e 20 46 2e 20 28 32 30 31 34 29 | Peyre,.G.,.&.Aujol,.J..F..(2014) |
f8e0 | 2e 0a 52 65 67 75 6c 61 72 69 7a 65 64 20 64 69 73 63 72 65 74 65 20 6f 70 74 69 6d 61 6c 20 74 | ..Regularized.discrete.optimal.t |
f900 | 72 61 6e 73 70 6f 72 74 2e 0a 53 49 41 4d 20 4a 6f 75 72 6e 61 6c 20 6f 6e 20 49 6d 61 67 69 6e | ransport..SIAM.Journal.on.Imagin |
f920 | 67 20 53 63 69 65 6e 63 65 73 2c 20 37 28 33 29 2c 20 31 38 35 33 2d 31 38 38 32 2e 0a 22 22 22 | g.Sciences,.7(3),.1853-1882..""" |
f940 | 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 69 2e | ..#.Authors:.Remi.Flamary.<remi. |
f960 | 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 74 61 | flamary@unice.fr>.#..........Sta |
f980 | 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 6d 61 | nislas.Chambon.<stan.chambon@gma |
f9a0 | 69 6c 2e 63 6f 6d 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 | il.com>.#.#.License:.MIT.License |
f9c0 | 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 69 70 79 20 | ..import.numpy.as.np.from.scipy. |
f9e0 | 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 74 6c 69 62 | import.ndimage.import.matplotlib |
fa00 | 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 0a 0a 72 20 3d 20 6e 70 2e | .pylab.as.pl.import.ot...r.=.np. |
fa20 | 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 69 6d 32 | random.RandomState(42)...def.im2 |
fa40 | 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 6d 61 67 | mat(I):....."""Converts.and.imag |
fa60 | 65 20 74 6f 20 6d 61 74 72 69 78 20 28 6f 6e 65 20 70 69 78 65 6c 20 70 65 72 20 6c 69 6e 65 29 | e.to.matrix.(one.pixel.per.line) |
fa80 | 22 22 22 0a 20 20 20 20 72 65 74 75 72 6e 20 49 2e 72 65 73 68 61 70 65 28 28 49 2e 73 68 61 70 | """.....return.I.reshape((I.shap |
faa0 | 65 5b 30 5d 20 2a 20 49 2e 73 68 61 70 65 5b 31 5d 2c 20 49 2e 73 68 61 70 65 5b 32 5d 29 29 0a | e[0].*.I.shape[1],.I.shape[2])). |
fac0 | 0a 0a 64 65 66 20 6d 61 74 32 69 6d 28 58 2c 20 73 68 61 70 65 29 3a 0a 20 20 20 20 22 22 22 43 | ..def.mat2im(X,.shape):....."""C |
fae0 | 6f 6e 76 65 72 74 73 20 62 61 63 6b 20 61 20 6d 61 74 72 69 78 20 74 6f 20 61 6e 20 69 6d 61 67 | onverts.back.a.matrix.to.an.imag |
fb00 | 65 22 22 22 0a 20 20 20 20 72 65 74 75 72 6e 20 58 2e 72 65 73 68 61 70 65 28 73 68 61 70 65 29 | e""".....return.X.reshape(shape) |
fb20 | 0a 0a 0a 64 65 66 20 6d 69 6e 6d 61 78 28 49 29 3a 0a 20 20 20 20 72 65 74 75 72 6e 20 6e 70 2e | ...def.minmax(I):.....return.np. |
fb40 | 63 6c 69 70 28 49 2c 20 30 2c 20 31 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | clip(I,.0,.1)...################ |
fb60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
fb80 | 23 23 23 23 23 23 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 | ##############################.# |
fba0 | 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a | .Generate.data.#.-------------.. |
fbc0 | 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 69 6d | #.Loading.images.I1.=.ndimage.im |
fbe0 | 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 61 73 | read('../data/ocean_day.jpg').as |
fc00 | 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 69 6d | type(np.float64)./.256.I2.=.ndim |
fc20 | 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 65 74 | age.imread('../data/ocean_sunset |
fc40 | 2e 6a 70 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 20 2f 20 32 35 36 0a | .jpg').astype(np.float64)./.256. |
fc60 | 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 49 32 29 | .X1.=.im2mat(I1).X2.=.im2mat(I2) |
fc80 | 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 30 0a 69 | ..#.training.samples.nb.=.1000.i |
fca0 | 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 73 69 7a | dx1.=.r.randint(X1.shape[0],.siz |
fcc0 | 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 73 68 61 | e=(nb,)).idx2.=.r.randint(X2.sha |
fce0 | 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 64 78 31 | pe[0],.size=(nb,))..Xs.=.X1[idx1 |
fd00 | 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 23 23 23 | ,.:].Xt.=.X2[idx2,.:]...######## |
fd20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
fd40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
fd60 | 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 6f 72 69 67 69 6e 61 6c 20 69 6d 61 67 65 0a 23 20 2d | ######.#.Plot.original.image.#.- |
fd80 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c | ------------------..pl.figure(1, |
fda0 | 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 74 28 31 | .figsize=(6.4,.3))..pl.subplot(1 |
fdc0 | 2c 20 32 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 29 0a 70 6c 2e 61 78 69 73 28 27 6f | ,.2,.1).pl.imshow(I1).pl.axis('o |
fde0 | 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 31 27 29 0a 0a 70 6c 2e 73 75 62 | ff').pl.title('Image.1')..pl.sub |
fe00 | 70 6c 6f 74 28 31 2c 20 32 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 29 0a 70 6c 2e 61 | plot(1,.2,.2).pl.imshow(I2).pl.a |
fe20 | 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 32 27 29 0a 0a | xis('off').pl.title('Image.2').. |
fe40 | 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 | .############################### |
fe60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
fe80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 53 63 61 74 74 65 72 20 70 6c 6f 74 20 6f | ###############.#.Scatter.plot.o |
fea0 | 66 20 63 6f 6c 6f 72 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | f.colors.#.--------------------- |
fec0 | 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 29 | -..pl.figure(2,.figsize=(6.4,.3) |
fee0 | 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 63 61 74 74 65 | )..pl.subplot(1,.2,.1).pl.scatte |
ff00 | 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 58 73 5b 3a 2c 20 32 5d 2c 20 63 3d 58 73 29 0a 70 6c 2e 61 | r(Xs[:,.0],.Xs[:,.2],.c=Xs).pl.a |
ff20 | 78 69 73 28 5b 30 2c 20 31 2c 20 30 2c 20 31 5d 29 0a 70 6c 2e 78 6c 61 62 65 6c 28 27 52 65 64 | xis([0,.1,.0,.1]).pl.xlabel('Red |
ff40 | 27 29 0a 70 6c 2e 79 6c 61 62 65 6c 28 27 42 6c 75 65 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 | ').pl.ylabel('Blue').pl.title('I |
ff60 | 6d 61 67 65 20 31 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 32 29 0a 70 6c | mage.1')..pl.subplot(1,.2,.2).pl |
ff80 | 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 32 5d 2c 20 63 3d 58 | .scatter(Xt[:,.0],.Xt[:,.2],.c=X |
ffa0 | 74 29 0a 70 6c 2e 61 78 69 73 28 5b 30 2c 20 31 2c 20 30 2c 20 31 5d 29 0a 70 6c 2e 78 6c 61 62 | t).pl.axis([0,.1,.0,.1]).pl.xlab |
ffc0 | 65 6c 28 27 52 65 64 27 29 0a 70 6c 2e 79 6c 61 62 65 6c 28 27 42 6c 75 65 27 29 0a 70 6c 2e 74 | el('Red').pl.ylabel('Blue').pl.t |
ffe0 | 69 74 6c 65 28 27 49 6d 61 67 65 20 32 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 | itle('Image.2').pl.tight_layout( |
10000 | 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 | )...############################ |
10020 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
10040 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 49 6e 73 74 61 6e 74 69 61 74 65 | ##################.#.Instantiate |
10060 | 20 74 68 65 20 64 69 66 66 65 72 65 6e 74 20 74 72 61 6e 73 70 6f 72 74 20 61 6c 67 6f 72 69 74 | .the.different.transport.algorit |
10080 | 68 6d 73 20 61 6e 64 20 66 69 74 20 74 68 65 6d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | hms.and.fit.them.#.------------- |
100a0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
100c0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 20 45 4d 44 54 72 61 6e 73 70 6f 72 74 0a 6f | --------------..#.EMDTransport.o |
100e0 | 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 5f | t_emd.=.ot.da.EMDTransport().ot_ |
10100 | 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 72 | emd.fit(Xs=Xs,.Xt=Xt)..#.Sinkhor |
10120 | 6e 54 72 61 6e 73 70 6f 72 74 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 2e 64 61 2e 53 | nTransport.ot_sinkhorn.=.ot.da.S |
10140 | 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 28 72 65 67 5f 65 3d 31 65 2d 31 29 0a 6f 74 5f | inkhornTransport(reg_e=1e-1).ot_ |
10160 | 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 70 72 | sinkhorn.fit(Xs=Xs,.Xt=Xt)..#.pr |
10180 | 65 64 69 63 74 69 6f 6e 20 62 65 74 77 65 65 6e 20 69 6d 61 67 65 73 20 28 75 73 69 6e 67 20 6f | ediction.between.images.(using.o |
101a0 | 75 74 20 6f 66 20 73 61 6d 70 6c 65 20 70 72 65 64 69 63 74 69 6f 6e 20 61 73 20 69 6e 20 5b 36 | ut.of.sample.prediction.as.in.[6 |
101c0 | 5d 29 0a 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 20 3d 20 6f 74 5f 65 6d 64 2e 74 72 61 6e 73 66 | ]).transp_Xs_emd.=.ot_emd.transf |
101e0 | 6f 72 6d 28 58 73 3d 58 31 29 0a 74 72 61 6e 73 70 5f 58 74 5f 65 6d 64 20 3d 20 6f 74 5f 65 6d | orm(Xs=X1).transp_Xt_emd.=.ot_em |
10200 | 64 2e 69 6e 76 65 72 73 65 5f 74 72 61 6e 73 66 6f 72 6d 28 58 74 3d 58 32 29 0a 0a 74 72 61 6e | d.inverse_transform(Xt=X2)..tran |
10220 | 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 6e 73 66 6f 72 | sp_Xs_sinkhorn.=.ot_emd.transfor |
10240 | 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 20 3d 20 6f 74 | m(Xs=X1).transp_Xt_sinkhorn.=.ot |
10260 | 5f 65 6d 64 2e 69 6e 76 65 72 73 65 5f 74 72 61 6e 73 66 6f 72 6d 28 58 74 3d 58 32 29 0a 0a 49 | _emd.inverse_transform(Xt=X2)..I |
10280 | 31 74 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 | 1t.=.minmax(mat2im(transp_Xs_emd |
102a0 | 2c 20 49 31 2e 73 68 61 70 65 29 29 0a 49 32 74 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d | ,.I1.shape)).I2t.=.minmax(mat2im |
102c0 | 28 74 72 61 6e 73 70 5f 58 74 5f 65 6d 64 2c 20 49 32 2e 73 68 61 70 65 29 29 0a 0a 49 31 74 65 | (transp_Xt_emd,.I2.shape))..I1te |
102e0 | 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 | .=.minmax(mat2im(transp_Xs_sinkh |
10300 | 6f 72 6e 2c 20 49 31 2e 73 68 61 70 65 29 29 0a 49 32 74 65 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 | orn,.I1.shape)).I2te.=.minmax(ma |
10320 | 74 32 69 6d 28 74 72 61 6e 73 70 5f 58 74 5f 73 69 6e 6b 68 6f 72 6e 2c 20 49 32 2e 73 68 61 70 | t2im(transp_Xt_sinkhorn,.I2.shap |
10340 | 65 29 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | e))...########################## |
10360 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
10380 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 6e 65 77 20 | ####################.#.Plot.new. |
103a0 | 69 6d 61 67 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 | images.#.---------------..pl.fig |
103c0 | 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 70 6c | ure(3,.figsize=(8,.4))..pl.subpl |
103e0 | 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 78 69 | ot(2,.3,.1).pl.imshow(I1).pl.axi |
10400 | 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 31 27 29 0a 0a 70 6c | s('off').pl.title('Image.1')..pl |
10420 | 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 74 29 | .subplot(2,.3,.2).pl.imshow(I1t) |
10440 | 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 65 20 | .pl.axis('off').pl.title('Image. |
10460 | 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 0a 70 | 1.Adapt')..pl.subplot(2,.3,.3).p |
10480 | 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 70 6c | l.imshow(I1te).pl.axis('off').pl |
104a0 | 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 0a 70 | .title('Image.1.Adapt.(reg)')..p |
104c0 | 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 32 29 | l.subplot(2,.3,.4).pl.imshow(I2) |
104e0 | 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 65 20 | .pl.axis('off').pl.title('Image. |
10500 | 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 73 68 | 2')..pl.subplot(2,.3,.5).pl.imsh |
10520 | 6f 77 28 49 32 74 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 | ow(I2t).pl.axis('off').pl.title( |
10540 | 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 2c 20 | 'Image.2.Adapt')..pl.subplot(2,. |
10560 | 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 27 6f | 3,.6).pl.imshow(I2te).pl.axis('o |
10580 | 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 72 65 | ff').pl.title('Image.2.Adapt.(re |
105a0 | 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 77 28 | g)').pl.tight_layout()..pl.show( |
105c0 | 29 0a 50 4b 01 02 14 03 14 00 00 00 00 00 90 53 be 4c c6 3b 52 da f3 0a 00 00 f3 0a 00 00 0e 00 | ).PK...........S.L.;R........... |
105e0 | 00 00 00 00 00 00 00 00 00 00 b4 81 00 00 00 00 70 6c 6f 74 5f 67 72 6f 6d 6f 76 2e 70 79 50 4b | ................plot_gromov.pyPK |
10600 | 01 02 14 03 14 00 00 00 00 00 91 53 be 4c a4 4f 47 3f 0c 0c 00 00 0c 0c 00 00 0b 00 00 00 00 00 | ...........S.L.OG?.............. |
10620 | 00 00 00 00 00 00 b4 81 1f 0b 00 00 70 6c 6f 74 5f 57 44 41 2e 70 79 50 4b 01 02 14 03 14 00 00 | ............plot_WDA.pyPK....... |
10640 | 00 00 00 97 53 be 4c e5 d4 47 7d 9d 1c 00 00 9d 1c 00 00 19 00 00 00 00 00 00 00 00 00 00 00 b4 | ....S.L..G}..................... |
10660 | 81 54 17 00 00 70 6c 6f 74 5f 67 72 6f 6d 6f 76 5f 62 61 72 79 63 65 6e 74 65 72 2e 70 79 50 4b | .T...plot_gromov_barycenter.pyPK |
10680 | 01 02 14 03 14 00 00 00 00 00 90 53 be 4c b8 cd f6 1b 7e 0b 00 00 7e 0b 00 00 13 00 00 00 00 00 | ...........S.L....~...~......... |
106a0 | 00 00 00 00 00 00 b4 81 28 34 00 00 70 6c 6f 74 5f 6f 70 74 69 6d 5f 4f 54 72 65 67 2e 70 79 50 | ........(4..plot_optim_OTreg.pyP |
106c0 | 4b 01 02 14 03 14 00 00 00 00 00 92 53 be 4c 39 06 7c 60 0c 15 00 00 0c 15 00 00 0f 00 00 00 00 | K...........S.L9.|`............. |
106e0 | 00 00 00 00 00 00 00 b4 81 d7 3f 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 64 32 2e 70 79 50 4b 01 02 | ..........?..plot_otda_d2.pyPK.. |
10700 | 14 03 14 00 00 00 00 00 92 53 be 4c 71 12 0d cb 23 12 00 00 23 12 00 00 1c 00 00 00 00 00 00 00 | .........S.Lq...#...#........... |
10720 | 00 00 00 00 b4 81 10 55 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 73 65 6d 69 5f 73 75 70 65 72 76 69 | .......U..plot_otda_semi_supervi |
10740 | 73 65 64 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 90 53 be 4c 0b 5c 2a af a2 06 00 00 a2 06 | sed.pyPK...........S.L.\*....... |
10760 | 00 00 0d 00 00 00 00 00 00 00 00 00 00 00 b4 81 6d 67 00 00 70 6c 6f 74 5f 4f 54 5f 31 44 2e 70 | ................mg..plot_OT_1D.p |
10780 | 79 50 4b 01 02 14 03 14 00 00 00 00 00 92 53 be 4c 1c cd f5 95 28 0d 00 00 28 0d 00 00 15 00 00 | yPK...........S.L....(...(...... |
107a0 | 00 00 00 00 00 00 00 00 00 b4 81 3a 6e 00 00 70 6c 6f 74 5f 62 61 72 79 63 65 6e 74 65 72 5f 31 | ...........:n..plot_barycenter_1 |
107c0 | 44 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 92 53 be 4c b0 31 70 de ee 10 00 00 ee 10 00 00 | D.pyPK...........S.L.1p......... |
107e0 | 14 00 00 00 00 00 00 00 00 00 00 00 b4 81 95 7b 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 63 6c 61 73 | ...............{..plot_otda_clas |
10800 | 73 65 73 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 92 53 be 4c 1a d1 23 82 4f 10 00 00 4f 10 | ses.pyPK...........S.L..#.O...O. |
10820 | 00 00 22 00 00 00 00 00 00 00 00 00 00 00 b4 81 b5 8c 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 6d 61 | ..".................plot_otda_ma |
10840 | 70 70 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 | pping_colors_images.pyPK........ |
10860 | 00 00 92 53 be 4c 6f 6c 58 5b 88 13 00 00 88 13 00 00 13 00 00 00 00 00 00 00 00 00 00 00 b4 81 | ...S.LolX[...................... |
10880 | 44 9d 00 00 70 6c 6f 74 5f 4f 54 5f 4c 31 5f 76 73 5f 4c 32 2e 70 79 50 4b 01 02 14 03 14 00 00 | D...plot_OT_L1_vs_L2.pyPK....... |
108a0 | 00 00 00 92 53 be 4c a6 16 4e 83 2e 17 00 00 2e 17 00 00 21 00 00 00 00 00 00 00 00 00 00 00 b4 | ....S.L..N.........!............ |
108c0 | 81 fd b0 00 00 70 6c 6f 74 5f 62 61 72 79 63 65 6e 74 65 72 5f 6c 70 5f 76 73 5f 65 6e 74 72 6f | .....plot_barycenter_lp_vs_entro |
108e0 | 70 69 63 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 90 53 be 4c bf 4a 09 ec 55 09 00 00 55 09 | pic.pyPK...........S.L.J..U...U. |
10900 | 00 00 15 00 00 00 00 00 00 00 00 00 00 00 b4 81 6a c8 00 00 70 6c 6f 74 5f 4f 54 5f 32 44 5f 73 | ................j...plot_OT_2D_s |
10920 | 61 6d 70 6c 65 73 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 90 53 be 4c 0e e0 72 82 97 0b 00 | amples.pyPK...........S.L..r.... |
10940 | 00 97 0b 00 00 1b 00 00 00 00 00 00 00 00 00 00 00 b4 81 f2 d1 00 00 70 6c 6f 74 5f 6f 74 64 61 | .......................plot_otda |
10960 | 5f 6c 69 6e 65 61 72 5f 6d 61 70 70 69 6e 67 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 92 53 | _linear_mapping.pyPK...........S |
10980 | be 4c cd ad d9 82 f4 0f 00 00 f4 0f 00 00 14 00 00 00 00 00 00 00 00 00 00 00 b4 81 c2 dd 00 00 | .L.............................. |
109a0 | 70 6c 6f 74 5f 6f 74 64 61 5f 6d 61 70 70 69 6e 67 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 | plot_otda_mapping.pyPK.......... |
109c0 | 90 53 be 4c 7a 2e b5 2b 65 09 00 00 65 09 00 00 13 00 00 00 00 00 00 00 00 00 00 00 b4 81 e8 ed | .S.Lz..+e...e................... |
109e0 | 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 00 | ..plot_compute_emd.pyPK......... |
10a00 | 00 92 53 be 4c 99 da 74 4f 0d 0e 00 00 0d 0e 00 00 19 00 00 00 00 00 00 00 00 00 00 00 b4 81 7e | ..S.L..tO......................~ |
10a20 | f7 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 05 06 | ...plot_otda_color_images.pyPK.. |
10a40 | 00 00 00 00 11 00 11 00 7a 04 00 00 c2 05 01 00 00 00 | ........z......... |