ofs | hex dump | ascii |
---|
0000 | 50 4b 03 04 14 00 00 00 00 00 b3 5c 6f 4e c6 3b 52 da f3 0a 00 00 f3 0a 00 00 0e 00 00 00 70 6c | PK.........\oN.;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 b3 5c 6f 4e a4 4f 47 3f 0c 0c 00 00 0c 0c 00 00 0b 00 00 00 70 6c 6f | K.........\oN.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 a6 5d | layout()..pl.show().PK.........] |
1760 | 6f 4e 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 | oN..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 b3 5c 6f 4e b8 cd f6 1b 7e 0b 00 00 7e 0b | r='r')..PK.........\oN....~...~. |
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 a6 5d 6f 4e 39 06 7c 60 0c 15 00 00 0c 15 00 00 0f 00 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 64 | ..]oN9.|`............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 a6 5d 6f 4e 71 12 | out().pl.show().PK.........]oNq. |
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 b3 5c 6f 4e 0b 5c 2a af a2 | ().pl.show().PK.........\oN.\*.. |
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 b4 5c 6f 4e 6d 8a 53 18 e2 17 00 00 e2 17 00 00 12 00 00 00 70 6c 6f 74 5f 73 74 6f | .....\oNm.S.............plot_sto |
6e60 | 63 68 61 73 74 69 63 2e 70 79 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | chastic.py""".================== |
6e80 | 3d 3d 3d 3d 3d 3d 3d 3d 0a 53 74 6f 63 68 61 73 74 69 63 20 65 78 61 6d 70 6c 65 73 0a 3d 3d 3d | ========.Stochastic.examples.=== |
6ea0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 | =======================..This.ex |
6ec0 | 61 6d 70 6c 65 20 69 73 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73 68 6f 77 20 68 6f 77 20 74 6f | ample.is.designed.to.show.how.to |
6ee0 | 20 75 73 65 20 74 68 65 20 73 74 6f 63 68 61 74 69 63 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a | .use.the.stochatic.optimization. |
6f00 | 61 6c 67 6f 72 69 74 68 6d 73 20 66 6f 72 20 64 65 73 63 72 65 74 65 20 61 6e 64 20 73 65 6d 69 | algorithms.for.descrete.and.semi |
6f20 | 63 6f 6e 74 69 6e 6f 75 73 20 6d 65 61 73 75 72 65 73 20 66 72 6f 6d 20 74 68 65 20 50 4f 54 20 | continous.measures.from.the.POT. |
6f40 | 6c 69 62 72 61 72 79 2e 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a 20 4b 69 6c 69 61 6e 20 | library..."""..#.Author:.Kilian. |
6f60 | 46 61 74 72 61 73 20 3c 6b 69 6c 69 61 6e 2e 66 61 74 72 61 73 40 67 6d 61 69 6c 2e 63 6f 6d 3e | Fatras.<kilian.fatras@gmail.com> |
6f80 | 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 |
6fa0 | 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. |
6fc0 | 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6f 74 0a 69 6d 70 6f 72 74 20 6f 74 2e | numpy.as.np.import.ot.import.ot. |
6fe0 | 70 6c 6f 74 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | plot...######################### |
7000 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7020 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 43 4f 4d 50 55 54 45 20 54 | ####################.#.COMPUTE.T |
7040 | 52 41 4e 53 50 4f 52 54 41 54 49 4f 4e 20 4d 41 54 52 49 58 20 46 4f 52 20 53 45 4d 49 2d 44 55 | RANSPORTATION.MATRIX.FOR.SEMI-DU |
7060 | 41 4c 20 50 52 4f 42 4c 45 4d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | AL.PROBLEM.##################### |
7080 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
70a0 | 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 23 23 23 23 23 23 | ########################.####### |
70c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
70e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7100 | 23 23 23 23 23 23 0a 23 20 44 49 53 43 52 45 54 45 20 43 41 53 45 3a 0a 23 0a 23 20 53 61 6d 70 | ######.#.DISCRETE.CASE:.#.#.Samp |
7120 | 6c 65 20 74 77 6f 20 64 69 73 63 72 65 74 65 20 6d 65 61 73 75 72 65 73 20 66 6f 72 20 74 68 65 | le.two.discrete.measures.for.the |
7140 | 20 64 69 73 63 72 65 74 65 20 63 61 73 65 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | .discrete.case.#.--------------- |
7160 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 | ------------------------------.# |
7180 | 0a 23 20 44 65 66 69 6e 65 20 32 20 64 69 73 63 72 65 74 65 20 6d 65 61 73 75 72 65 73 20 61 20 | .#.Define.2.discrete.measures.a. |
71a0 | 61 6e 64 20 62 2c 20 74 68 65 20 70 6f 69 6e 74 73 20 77 68 65 72 65 20 61 72 65 20 64 65 66 69 | and.b,.the.points.where.are.defi |
71c0 | 6e 65 64 20 74 68 65 20 73 6f 75 72 63 65 0a 23 20 61 6e 64 20 74 68 65 20 74 61 72 67 65 74 20 | ned.the.source.#.and.the.target. |
71e0 | 6d 65 61 73 75 72 65 73 20 61 6e 64 20 66 69 6e 61 6c 6c 79 20 74 68 65 20 63 6f 73 74 20 6d 61 | measures.and.finally.the.cost.ma |
7200 | 74 72 69 78 20 63 2e 0a 0a 6e 5f 73 6f 75 72 63 65 20 3d 20 37 0a 6e 5f 74 61 72 67 65 74 20 3d | trix.c...n_source.=.7.n_target.= |
7220 | 20 34 0a 72 65 67 20 3d 20 31 0a 6e 75 6d 49 74 65 72 6d 61 78 20 3d 20 31 30 30 30 0a 0a 61 20 | .4.reg.=.1.numItermax.=.1000..a. |
7240 | 3d 20 6f 74 2e 75 74 69 6c 73 2e 75 6e 69 66 28 6e 5f 73 6f 75 72 63 65 29 0a 62 20 3d 20 6f 74 | =.ot.utils.unif(n_source).b.=.ot |
7260 | 2e 75 74 69 6c 73 2e 75 6e 69 66 28 6e 5f 74 61 72 67 65 74 29 0a 0a 72 6e 67 20 3d 20 6e 70 2e | .utils.unif(n_target)..rng.=.np. |
7280 | 72 61 6e 64 6f 6d 2e 52 61 6e 64 6f 6d 53 74 61 74 65 28 30 29 0a 58 5f 73 6f 75 72 63 65 20 3d | random.RandomState(0).X_source.= |
72a0 | 20 72 6e 67 2e 72 61 6e 64 6e 28 6e 5f 73 6f 75 72 63 65 2c 20 32 29 0a 59 5f 74 61 72 67 65 74 | .rng.randn(n_source,.2).Y_target |
72c0 | 20 3d 20 72 6e 67 2e 72 61 6e 64 6e 28 6e 5f 74 61 72 67 65 74 2c 20 32 29 0a 4d 20 3d 20 6f 74 | .=.rng.randn(n_target,.2).M.=.ot |
72e0 | 2e 64 69 73 74 28 58 5f 73 6f 75 72 63 65 2c 20 59 5f 74 61 72 67 65 74 29 0a 0a 23 23 23 23 23 | .dist(X_source,.Y_target)..##### |
7300 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7320 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7340 | 23 23 23 23 23 23 23 23 0a 23 0a 23 20 43 61 6c 6c 20 74 68 65 20 22 53 41 47 22 20 6d 65 74 68 | ########.#.#.Call.the."SAG".meth |
7360 | 6f 64 20 74 6f 20 66 69 6e 64 20 74 68 65 20 74 72 61 6e 73 70 6f 72 74 61 74 69 6f 6e 20 6d 61 | od.to.find.the.transportation.ma |
7380 | 74 72 69 78 20 69 6e 20 74 68 65 20 64 69 73 63 72 65 74 65 20 63 61 73 65 0a 23 20 2d 2d 2d 2d | trix.in.the.discrete.case.#.---- |
73a0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
73c0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 23 20 44 65 66 69 6e 65 20 74 68 65 20 6d 65 74 68 6f 64 20 | ---------.#.#.Define.the.method. |
73e0 | 22 53 41 47 22 2c 20 63 61 6c 6c 20 6f 74 2e 73 6f 6c 76 65 5f 73 65 6d 69 5f 64 75 61 6c 5f 65 | "SAG",.call.ot.solve_semi_dual_e |
7400 | 6e 74 72 6f 70 69 63 20 61 6e 64 20 70 6c 6f 74 20 74 68 65 0a 23 20 72 65 73 75 6c 74 73 2e 0a | ntropic.and.plot.the.#.results.. |
7420 | 0a 6d 65 74 68 6f 64 20 3d 20 22 53 41 47 22 0a 73 61 67 5f 70 69 20 3d 20 6f 74 2e 73 74 6f 63 | .method.=."SAG".sag_pi.=.ot.stoc |
7440 | 68 61 73 74 69 63 2e 73 6f 6c 76 65 5f 73 65 6d 69 5f 64 75 61 6c 5f 65 6e 74 72 6f 70 69 63 28 | hastic.solve_semi_dual_entropic( |
7460 | 61 2c 20 62 2c 20 4d 2c 20 72 65 67 2c 20 6d 65 74 68 6f 64 2c 0a 20 20 20 20 20 20 20 20 20 20 | a,.b,.M,.reg,.method,........... |
7480 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
74a0 | 20 20 20 20 20 20 6e 75 6d 49 74 65 72 6d 61 78 29 0a 70 72 69 6e 74 28 73 61 67 5f 70 69 29 0a | ......numItermax).print(sag_pi). |
74c0 | 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 | .############################### |
74e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7500 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 53 45 4d 49 43 4f 4e 54 49 4e 4f 55 53 20 43 | ##############.#.SEMICONTINOUS.C |
7520 | 41 53 45 3a 0a 23 0a 23 20 53 61 6d 70 6c 65 20 6f 6e 65 20 67 65 6e 65 72 61 6c 20 6d 65 61 73 | ASE:.#.#.Sample.one.general.meas |
7540 | 75 72 65 20 61 2c 20 6f 6e 65 20 64 69 73 63 72 65 74 65 20 6d 65 61 73 75 72 65 73 20 62 20 66 | ure.a,.one.discrete.measures.b.f |
7560 | 6f 72 20 74 68 65 20 73 65 6d 69 63 6f 6e 74 69 6e 6f 75 73 0a 23 20 63 61 73 65 0a 23 20 2d 2d | or.the.semicontinous.#.case.#.-- |
7580 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
75a0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 23 20 44 65 66 69 6e 65 20 6f 6e 65 20 67 65 6e 65 72 | -----------.#.#.Define.one.gener |
75c0 | 61 6c 20 6d 65 61 73 75 72 65 20 61 2c 20 6f 6e 65 20 64 69 73 63 72 65 74 65 20 6d 65 61 73 75 | al.measure.a,.one.discrete.measu |
75e0 | 72 65 73 20 62 2c 20 74 68 65 20 70 6f 69 6e 74 73 20 77 68 65 72 65 0a 23 20 61 72 65 20 64 65 | res.b,.the.points.where.#.are.de |
7600 | 66 69 6e 65 64 20 74 68 65 20 73 6f 75 72 63 65 20 61 6e 64 20 74 68 65 20 74 61 72 67 65 74 20 | fined.the.source.and.the.target. |
7620 | 6d 65 61 73 75 72 65 73 20 61 6e 64 20 66 69 6e 61 6c 6c 79 20 74 68 65 20 63 6f 73 74 20 6d 61 | measures.and.finally.the.cost.ma |
7640 | 74 72 69 78 20 63 2e 0a 0a 6e 5f 73 6f 75 72 63 65 20 3d 20 37 0a 6e 5f 74 61 72 67 65 74 20 3d | trix.c...n_source.=.7.n_target.= |
7660 | 20 34 0a 72 65 67 20 3d 20 31 0a 6e 75 6d 49 74 65 72 6d 61 78 20 3d 20 31 30 30 30 0a 6c 6f 67 | .4.reg.=.1.numItermax.=.1000.log |
7680 | 20 3d 20 54 72 75 65 0a 0a 61 20 3d 20 6f 74 2e 75 74 69 6c 73 2e 75 6e 69 66 28 6e 5f 73 6f 75 | .=.True..a.=.ot.utils.unif(n_sou |
76a0 | 72 63 65 29 0a 62 20 3d 20 6f 74 2e 75 74 69 6c 73 2e 75 6e 69 66 28 6e 5f 74 61 72 67 65 74 29 | rce).b.=.ot.utils.unif(n_target) |
76c0 | 0a 0a 72 6e 67 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 52 61 6e 64 6f 6d 53 74 61 74 65 28 30 29 | ..rng.=.np.random.RandomState(0) |
76e0 | 0a 58 5f 73 6f 75 72 63 65 20 3d 20 72 6e 67 2e 72 61 6e 64 6e 28 6e 5f 73 6f 75 72 63 65 2c 20 | .X_source.=.rng.randn(n_source,. |
7700 | 32 29 0a 59 5f 74 61 72 67 65 74 20 3d 20 72 6e 67 2e 72 61 6e 64 6e 28 6e 5f 74 61 72 67 65 74 | 2).Y_target.=.rng.randn(n_target |
7720 | 2c 20 32 29 0a 4d 20 3d 20 6f 74 2e 64 69 73 74 28 58 5f 73 6f 75 72 63 65 2c 20 59 5f 74 61 72 | ,.2).M.=.ot.dist(X_source,.Y_tar |
7740 | 67 65 74 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | get)..########################## |
7760 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7780 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 0a 23 20 43 61 6c 6c 20 74 68 65 | ###################.#.#.Call.the |
77a0 | 20 22 41 53 47 44 22 20 6d 65 74 68 6f 64 20 74 6f 20 66 69 6e 64 20 74 68 65 20 74 72 61 6e 73 | ."ASGD".method.to.find.the.trans |
77c0 | 70 6f 72 74 61 74 69 6f 6e 20 6d 61 74 72 69 78 20 69 6e 20 74 68 65 20 73 65 6d 69 63 6f 6e 74 | portation.matrix.in.the.semicont |
77e0 | 69 6e 6f 75 73 0a 23 20 63 61 73 65 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | inous.#.case.#.----------------- |
7800 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 23 | ----------------------------.#.# |
7820 | 20 44 65 66 69 6e 65 20 74 68 65 20 6d 65 74 68 6f 64 20 22 41 53 47 44 22 2c 20 63 61 6c 6c 20 | .Define.the.method."ASGD",.call. |
7840 | 6f 74 2e 73 6f 6c 76 65 5f 73 65 6d 69 5f 64 75 61 6c 5f 65 6e 74 72 6f 70 69 63 20 61 6e 64 20 | ot.solve_semi_dual_entropic.and. |
7860 | 70 6c 6f 74 20 74 68 65 0a 23 20 72 65 73 75 6c 74 73 2e 0a 0a 6d 65 74 68 6f 64 20 3d 20 22 41 | plot.the.#.results...method.=."A |
7880 | 53 47 44 22 0a 61 73 67 64 5f 70 69 2c 20 6c 6f 67 5f 61 73 67 64 20 3d 20 6f 74 2e 73 74 6f 63 | SGD".asgd_pi,.log_asgd.=.ot.stoc |
78a0 | 68 61 73 74 69 63 2e 73 6f 6c 76 65 5f 73 65 6d 69 5f 64 75 61 6c 5f 65 6e 74 72 6f 70 69 63 28 | hastic.solve_semi_dual_entropic( |
78c0 | 61 2c 20 62 2c 20 4d 2c 20 72 65 67 2c 20 6d 65 74 68 6f 64 2c 0a 20 20 20 20 20 20 20 20 20 20 | a,.b,.M,.reg,.method,........... |
78e0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
7900 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6d 49 74 65 72 6d 61 78 2c 20 6c 6f 67 | .................numItermax,.log |
7920 | 3d 6c 6f 67 29 0a 70 72 69 6e 74 28 6c 6f 67 5f 61 73 67 64 5b 27 61 6c 70 68 61 27 5d 2c 20 6c | =log).print(log_asgd['alpha'],.l |
7940 | 6f 67 5f 61 73 67 64 5b 27 62 65 74 61 27 5d 29 0a 70 72 69 6e 74 28 61 73 67 64 5f 70 69 29 0a | og_asgd['beta']).print(asgd_pi). |
7960 | 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 | .############################### |
7980 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
79a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 0a 23 20 43 6f 6d 70 61 72 65 20 74 68 65 20 72 | ##############.#.#.Compare.the.r |
79c0 | 65 73 75 6c 74 73 20 77 69 74 68 20 74 68 65 20 53 69 6e 6b 68 6f 72 6e 20 61 6c 67 6f 72 69 74 | esults.with.the.Sinkhorn.algorit |
79e0 | 68 6d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | hm.#.--------------------------- |
7a00 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 23 20 43 61 6c 6c 20 74 68 65 20 | ------------------.#.#.Call.the. |
7a20 | 53 69 6e 6b 68 6f 72 6e 20 61 6c 67 6f 72 69 74 68 6d 20 66 72 6f 6d 20 50 4f 54 0a 0a 73 69 6e | Sinkhorn.algorithm.from.POT..sin |
7a40 | 6b 68 6f 72 6e 5f 70 69 20 3d 20 6f 74 2e 73 69 6e 6b 68 6f 72 6e 28 61 2c 20 62 2c 20 4d 2c 20 | khorn_pi.=.ot.sinkhorn(a,.b,.M,. |
7a60 | 72 65 67 29 0a 70 72 69 6e 74 28 73 69 6e 6b 68 6f 72 6e 5f 70 69 29 0a 0a 0a 23 23 23 23 23 23 | reg).print(sinkhorn_pi)...###### |
7a80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7aa0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7ac0 | 23 23 23 23 23 23 23 23 0a 23 20 50 4c 4f 54 20 54 52 41 4e 53 50 4f 52 54 41 54 49 4f 4e 20 4d | ########.#.PLOT.TRANSPORTATION.M |
7ae0 | 41 54 52 49 58 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ATRIX.########################## |
7b00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7b20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23 23 23 23 23 23 23 23 23 23 | ####################..########## |
7b40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7b60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7b80 | 23 23 23 23 0a 23 20 50 6c 6f 74 20 53 41 47 20 72 65 73 75 6c 74 73 0a 23 20 2d 2d 2d 2d 2d 2d | ####.#.Plot.SAG.results.#.------ |
7ba0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 | ----------..pl.figure(4,.figsize |
7bc0 | 3d 28 35 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 | =(5,.5)).ot.plot.plot1D_mat(a,.b |
7be0 | 2c 20 73 61 67 5f 70 69 2c 20 27 73 65 6d 69 2d 64 75 61 6c 20 3a 20 4f 54 20 6d 61 74 72 69 78 | ,.sag_pi,.'semi-dual.:.OT.matrix |
7c00 | 20 53 41 47 27 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 | .SAG').pl.show()...############# |
7c20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7c40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7c60 | 23 0a 23 20 50 6c 6f 74 20 41 53 47 44 20 72 65 73 75 6c 74 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d | #.#.Plot.ASGD.results.#.-------- |
7c80 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d | ---------..pl.figure(4,.figsize= |
7ca0 | 28 35 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c | (5,.5)).ot.plot.plot1D_mat(a,.b, |
7cc0 | 20 61 73 67 64 5f 70 69 2c 20 27 73 65 6d 69 2d 64 75 61 6c 20 3a 20 4f 54 20 6d 61 74 72 69 78 | .asgd_pi,.'semi-dual.:.OT.matrix |
7ce0 | 20 41 53 47 44 27 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 | .ASGD').pl.show()...############ |
7d00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7d20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7d40 | 23 23 0a 23 20 50 6c 6f 74 20 53 69 6e 6b 68 6f 72 6e 20 72 65 73 75 6c 74 73 0a 23 20 2d 2d 2d | ##.#.Plot.Sinkhorn.results.#.--- |
7d60 | 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 34 2c | ------------------..pl.figure(4, |
7d80 | 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f | .figsize=(5,.5)).ot.plot.plot1D_ |
7da0 | 6d 61 74 28 61 2c 20 62 2c 20 73 69 6e 6b 68 6f 72 6e 5f 70 69 2c 20 27 4f 54 20 6d 61 74 72 69 | mat(a,.b,.sinkhorn_pi,.'OT.matri |
7dc0 | 78 20 53 69 6e 6b 68 6f 72 6e 27 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 0a 0a 23 23 23 23 23 23 23 | x.Sinkhorn').pl.show()...####### |
7de0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7e00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7e20 | 23 23 23 23 23 23 0a 23 20 43 4f 4d 50 55 54 45 20 54 52 41 4e 53 50 4f 52 54 41 54 49 4f 4e 20 | ######.#.COMPUTE.TRANSPORTATION. |
7e40 | 4d 41 54 52 49 58 20 46 4f 52 20 44 55 41 4c 20 50 52 4f 42 4c 45 4d 0a 23 23 23 23 23 23 23 23 | MATRIX.FOR.DUAL.PROBLEM.######## |
7e60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
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 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 | #####.########################## |
7ec0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
7ee0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 53 45 4d 49 43 4f 4e 54 49 4e | ###################.#.SEMICONTIN |
7f00 | 4f 55 53 20 43 41 53 45 3a 0a 23 0a 23 20 53 61 6d 70 6c 65 20 6f 6e 65 20 67 65 6e 65 72 61 6c | OUS.CASE:.#.#.Sample.one.general |
7f20 | 20 6d 65 61 73 75 72 65 20 61 2c 20 6f 6e 65 20 64 69 73 63 72 65 74 65 20 6d 65 61 73 75 72 65 | .measure.a,.one.discrete.measure |
7f40 | 73 20 62 20 66 6f 72 20 74 68 65 20 73 65 6d 69 63 6f 6e 74 69 6e 6f 75 73 0a 23 20 63 61 73 65 | s.b.for.the.semicontinous.#.case |
7f60 | 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 | .#.----------------------------- |
7f80 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 23 20 44 65 66 69 6e 65 20 6f 6e 65 20 | ----------------.#.#.Define.one. |
7fa0 | 67 65 6e 65 72 61 6c 20 6d 65 61 73 75 72 65 20 61 2c 20 6f 6e 65 20 64 69 73 63 72 65 74 65 20 | general.measure.a,.one.discrete. |
7fc0 | 6d 65 61 73 75 72 65 73 20 62 2c 20 74 68 65 20 70 6f 69 6e 74 73 20 77 68 65 72 65 0a 23 20 61 | measures.b,.the.points.where.#.a |
7fe0 | 72 65 20 64 65 66 69 6e 65 64 20 74 68 65 20 73 6f 75 72 63 65 20 61 6e 64 20 74 68 65 20 74 61 | re.defined.the.source.and.the.ta |
8000 | 72 67 65 74 20 6d 65 61 73 75 72 65 73 20 61 6e 64 20 66 69 6e 61 6c 6c 79 20 74 68 65 20 63 6f | rget.measures.and.finally.the.co |
8020 | 73 74 20 6d 61 74 72 69 78 20 63 2e 0a 0a 6e 5f 73 6f 75 72 63 65 20 3d 20 37 0a 6e 5f 74 61 72 | st.matrix.c...n_source.=.7.n_tar |
8040 | 67 65 74 20 3d 20 34 0a 72 65 67 20 3d 20 31 0a 6e 75 6d 49 74 65 72 6d 61 78 20 3d 20 31 30 30 | get.=.4.reg.=.1.numItermax.=.100 |
8060 | 30 30 30 0a 6c 72 20 3d 20 30 2e 31 0a 62 61 74 63 68 5f 73 69 7a 65 20 3d 20 33 0a 6c 6f 67 20 | 000.lr.=.0.1.batch_size.=.3.log. |
8080 | 3d 20 54 72 75 65 0a 0a 61 20 3d 20 6f 74 2e 75 74 69 6c 73 2e 75 6e 69 66 28 6e 5f 73 6f 75 72 | =.True..a.=.ot.utils.unif(n_sour |
80a0 | 63 65 29 0a 62 20 3d 20 6f 74 2e 75 74 69 6c 73 2e 75 6e 69 66 28 6e 5f 74 61 72 67 65 74 29 0a | ce).b.=.ot.utils.unif(n_target). |
80c0 | 0a 72 6e 67 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 52 61 6e 64 6f 6d 53 74 61 74 65 28 30 29 0a | .rng.=.np.random.RandomState(0). |
80e0 | 58 5f 73 6f 75 72 63 65 20 3d 20 72 6e 67 2e 72 61 6e 64 6e 28 6e 5f 73 6f 75 72 63 65 2c 20 32 | X_source.=.rng.randn(n_source,.2 |
8100 | 29 0a 59 5f 74 61 72 67 65 74 20 3d 20 72 6e 67 2e 72 61 6e 64 6e 28 6e 5f 74 61 72 67 65 74 2c | ).Y_target.=.rng.randn(n_target, |
8120 | 20 32 29 0a 4d 20 3d 20 6f 74 2e 64 69 73 74 28 58 5f 73 6f 75 72 63 65 2c 20 59 5f 74 61 72 67 | .2).M.=.ot.dist(X_source,.Y_targ |
8140 | 65 74 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | et)..########################### |
8160 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8180 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 0a 23 20 43 61 6c 6c 20 74 68 65 20 | ##################.#.#.Call.the. |
81a0 | 22 53 47 44 22 20 64 75 61 6c 20 6d 65 74 68 6f 64 20 74 6f 20 66 69 6e 64 20 74 68 65 20 74 72 | "SGD".dual.method.to.find.the.tr |
81c0 | 61 6e 73 70 6f 72 74 61 74 69 6f 6e 20 6d 61 74 72 69 78 20 69 6e 20 74 68 65 0a 23 20 73 65 6d | ansportation.matrix.in.the.#.sem |
81e0 | 69 63 6f 6e 74 69 6e 6f 75 73 20 63 61 73 65 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | icontinous.case.#.-------------- |
8200 | 2d 2d 2d 2d 2d 2d 2d 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 | -------------------------------. |
8220 | 23 0a 23 20 43 61 6c 6c 20 6f 74 2e 73 6f 6c 76 65 5f 64 75 61 6c 5f 65 6e 74 72 6f 70 69 63 20 | #.#.Call.ot.solve_dual_entropic. |
8240 | 61 6e 64 20 70 6c 6f 74 20 74 68 65 20 72 65 73 75 6c 74 73 2e 0a 0a 73 67 64 5f 64 75 61 6c 5f | and.plot.the.results...sgd_dual_ |
8260 | 70 69 2c 20 6c 6f 67 5f 73 67 64 20 3d 20 6f 74 2e 73 74 6f 63 68 61 73 74 69 63 2e 73 6f 6c 76 | pi,.log_sgd.=.ot.stochastic.solv |
8280 | 65 5f 64 75 61 6c 5f 65 6e 74 72 6f 70 69 63 28 61 2c 20 62 2c 20 4d 2c 20 72 65 67 2c 0a 20 20 | e_dual_entropic(a,.b,.M,.reg,... |
82a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
82c0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 61 74 63 68 5f 73 69 7a | .......................batch_siz |
82e0 | 65 2c 20 6e 75 6d 49 74 65 72 6d 61 78 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | e,.numItermax,.................. |
8300 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ |
8320 | 20 20 20 20 20 20 20 20 6c 72 2c 20 6c 6f 67 3d 6c 6f 67 29 0a 70 72 69 6e 74 28 6c 6f 67 5f 73 | ........lr,.log=log).print(log_s |
8340 | 67 64 5b 27 61 6c 70 68 61 27 5d 2c 20 6c 6f 67 5f 73 67 64 5b 27 62 65 74 61 27 5d 29 0a 70 72 | gd['alpha'],.log_sgd['beta']).pr |
8360 | 69 6e 74 28 73 67 64 5f 64 75 61 6c 5f 70 69 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | int(sgd_dual_pi)..############## |
8380 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
83a0 | 23 23 23 23 23 23 23 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 | ###############################. |
83c0 | 23 0a 23 20 43 6f 6d 70 61 72 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 77 69 74 68 20 74 68 65 | #.#.Compare.the.results.with.the |
83e0 | 20 53 69 6e 6b 68 6f 72 6e 20 61 6c 67 6f 72 69 74 68 6d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | .Sinkhorn.algorithm.#.---------- |
8400 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
8420 | 2d 2d 2d 0a 23 0a 23 20 43 61 6c 6c 20 74 68 65 20 53 69 6e 6b 68 6f 72 6e 20 61 6c 67 6f 72 69 | ---.#.#.Call.the.Sinkhorn.algori |
8440 | 74 68 6d 20 66 72 6f 6d 20 50 4f 54 0a 0a 73 69 6e 6b 68 6f 72 6e 5f 70 69 20 3d 20 6f 74 2e 73 | thm.from.POT..sinkhorn_pi.=.ot.s |
8460 | 69 6e 6b 68 6f 72 6e 28 61 2c 20 62 2c 20 4d 2c 20 72 65 67 29 0a 70 72 69 6e 74 28 73 69 6e 6b | inkhorn(a,.b,.M,.reg).print(sink |
8480 | 68 6f 72 6e 5f 70 69 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | horn_pi)..###################### |
84a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
84c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 | ########################.#.Plot. |
84e0 | 20 53 47 44 20 72 65 73 75 6c 74 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | .SGD.results.#.----------------- |
8500 | 0a 0a 70 6c 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 29 0a 6f | ..pl.figure(4,.figsize=(5,.5)).o |
8520 | 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 73 67 64 5f 64 75 61 6c | t.plot.plot1D_mat(a,.b,.sgd_dual |
8540 | 5f 70 69 2c 20 27 64 75 61 6c 20 3a 20 4f 54 20 6d 61 74 72 69 78 20 53 47 44 27 29 0a 70 6c 2e | _pi,.'dual.:.OT.matrix.SGD').pl. |
8560 | 73 68 6f 77 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | show()...####################### |
8580 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
85a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 53 | #######################.#.Plot.S |
85c0 | 69 6e 6b 68 6f 72 6e 20 72 65 73 75 6c 74 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | inkhorn.results.#.-------------- |
85e0 | 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 35 | -------..pl.figure(4,.figsize=(5 |
8600 | 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 73 | ,.5)).ot.plot.plot1D_mat(a,.b,.s |
8620 | 69 6e 6b 68 6f 72 6e 5f 70 69 2c 20 27 4f 54 20 6d 61 74 72 69 78 20 53 69 6e 6b 68 6f 72 6e 27 | inkhorn_pi,.'OT.matrix.Sinkhorn' |
8640 | 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 3c 5d 6f 4e f2 7c 7e 9e 5c 0e | ).pl.show().PK........<]oN.|~.\. |
8660 | 00 00 5c 0e 00 00 15 00 00 00 70 6c 6f 74 5f 62 61 72 79 63 65 6e 74 65 72 5f 31 44 2e 70 79 23 | ..\.......plot_barycenter_1D.py# |
8680 | 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d | .-*-.coding:.utf-8.-*-.""".===== |
86a0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 31 44 20 57 61 73 | =========================.1D.Was |
86c0 | 73 65 72 73 74 65 69 6e 20 62 61 72 79 63 65 6e 74 65 72 20 64 65 6d 6f 0a 3d 3d 3d 3d 3d 3d 3d | serstein.barycenter.demo.======= |
86e0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 | =======================..This.ex |
8700 | 61 6d 70 6c 65 20 69 6c 6c 75 73 74 72 61 74 65 73 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69 6f | ample.illustrates.the.computatio |
8720 | 6e 20 6f 66 20 72 65 67 75 6c 61 72 69 7a 65 64 20 57 61 73 73 65 72 73 79 65 69 6e 20 42 61 72 | n.of.regularized.Wassersyein.Bar |
8740 | 79 63 65 6e 74 65 72 0a 61 73 20 70 72 6f 70 6f 73 65 64 20 69 6e 20 5b 33 5d 2e 0a 0a 0a 5b 33 | ycenter.as.proposed.in.[3]....[3 |
8760 | 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 20 43 | ].Benamou,.J..D.,.Carlier,.G.,.C |
8780 | 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 2c 20 | uturi,.M.,.Nenna,.L.,.&.Peyr..,. |
87a0 | 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 72 6f | G..(2015)..Iterative.Bregman.pro |
87c0 | 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 70 6f | jections.for.regularized.transpo |
87e0 | 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 6f 6e | rtation.problems.SIAM.Journal.on |
8800 | 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 41 31 | .Scientific.Computing,.37(2),.A1 |
8820 | 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 69 20 | 111-A1138..."""..#.Author:.Remi. |
8840 | 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 3e 0a | Flamary.<remi.flamary@unice.fr>. |
8860 | 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 |
8880 | 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 | .numpy.as.np.import.matplotlib.p |
88a0 | 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 72 79 | ylab.as.pl.import.ot.#.necessary |
88c0 | 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 66 72 | .for.3d.plot.even.if.not.used.fr |
88e0 | 6f 6d 20 6d 70 6c 5f 74 6f 6f 6c 6b 69 74 73 2e 6d 70 6c 6f 74 33 64 20 69 6d 70 6f 72 74 20 41 | om.mpl_toolkits.mplot3d.import.A |
8900 | 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 63 6f | xes3D..#.noqa.from.matplotlib.co |
8920 | 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 6e 0a | llections.import.PolyCollection. |
8940 | 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 | .############################### |
8960 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8980 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a | ###############.#.Generate.data. |
89a0 | 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 0a | #.-------------..#%%.parameters. |
89c0 | 0a 6e 20 3d 20 31 30 30 20 20 23 20 6e 62 20 62 69 6e 73 0a 0a 23 20 62 69 6e 20 70 6f 73 69 74 | .n.=.100..#.nb.bins..#.bin.posit |
89e0 | 69 6f 6e 73 0a 78 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 2c 20 64 74 79 70 65 3d 6e 70 2e 66 | ions.x.=.np.arange(n,.dtype=np.f |
8a00 | 6c 6f 61 74 36 34 29 0a 0a 23 20 47 61 75 73 73 69 61 6e 20 64 69 73 74 72 69 62 75 74 69 6f 6e | loat64)..#.Gaussian.distribution |
8a20 | 73 0a 61 31 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 31 44 5f 67 61 75 73 73 | s.a1.=.ot.datasets.make_1D_gauss |
8a40 | 28 6e 2c 20 6d 3d 32 30 2c 20 73 3d 35 29 20 20 23 20 6d 3d 20 6d 65 61 6e 2c 20 73 3d 20 73 74 | (n,.m=20,.s=5)..#.m=.mean,.s=.st |
8a60 | 64 0a 61 32 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 31 44 5f 67 61 75 73 73 | d.a2.=.ot.datasets.make_1D_gauss |
8a80 | 28 6e 2c 20 6d 3d 36 30 2c 20 73 3d 38 29 0a 0a 23 20 63 72 65 61 74 69 6e 67 20 6d 61 74 72 69 | (n,.m=60,.s=8)..#.creating.matri |
8aa0 | 78 20 41 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61 6c 6c 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 | x.A.containing.all.distributions |
8ac0 | 0a 41 20 3d 20 6e 70 2e 76 73 74 61 63 6b 28 28 61 31 2c 20 61 32 29 29 2e 54 0a 6e 5f 64 69 73 | .A.=.np.vstack((a1,.a2)).T.n_dis |
8ae0 | 74 72 69 62 75 74 69 6f 6e 73 20 3d 20 41 2e 73 68 61 70 65 5b 31 5d 0a 0a 23 20 6c 6f 73 73 20 | tributions.=.A.shape[1]..#.loss. |
8b00 | 6d 61 74 72 69 78 20 2b 20 6e 6f 72 6d 61 6c 69 7a 61 74 69 6f 6e 0a 4d 20 3d 20 6f 74 2e 75 74 | matrix.+.normalization.M.=.ot.ut |
8b20 | 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 23 23 23 23 | ils.dist0(n).M./=.M.max()..##### |
8b40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8b60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8b80 | 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d | #########.#.Plot.data.#.-------- |
8ba0 | 2d 0a 0a 23 25 25 20 70 6c 6f 74 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 70 | -..#%%.plot.the.distributions..p |
8bc0 | 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 29 29 0a 66 6f | l.figure(1,.figsize=(6.4,.3)).fo |
8be0 | 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6e 5f 64 69 73 74 72 69 62 75 74 69 6f 6e 73 29 3a 0a 20 | r.i.in.range(n_distributions):.. |
8c00 | 20 20 20 70 6c 2e 70 6c 6f 74 28 78 2c 20 41 5b 3a 2c 20 69 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 | ...pl.plot(x,.A[:,.i]).pl.title( |
8c20 | 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 79 6f 75 74 | 'Distributions').pl.tight_layout |
8c40 | 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ()..############################ |
8c60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8c80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 42 61 72 79 63 65 6e 74 65 72 20 | ##################.#.Barycenter. |
8ca0 | 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 2d 2d 2d 2d 2d 2d 2d | computation.#.------------------ |
8cc0 | 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 75 74 61 74 69 6f 6e | ----..#%%.barycenter.computation |
8ce0 | 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 3c 3d 31 0a 77 65 69 | ..alpha.=.0.2..#.0<=alpha<=1.wei |
8d00 | 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 68 | ghts.=.np.array([1.-.alpha,.alph |
8d20 | 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 28 77 65 | a])..#.l2bary.bary_l2.=.A.dot(we |
8d40 | 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 65 2d 33 | ights)..#.wasserstein.reg.=.1e-3 |
8d60 | 0a 62 61 72 79 5f 77 61 73 73 20 3d 20 6f 74 2e 62 72 65 67 6d 61 6e 2e 62 61 72 79 63 65 6e 74 | .bary_wass.=.ot.bregman.barycent |
8d80 | 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 6c 2e 66 69 67 75 72 | er(A,.M,.reg,.weights)..pl.figur |
8da0 | 65 28 32 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 31 2c 20 31 | e(2).pl.clf().pl.subplot(2,.1,.1 |
8dc0 | 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 |
8de0 | 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 |
8e00 | 74 6c 65 28 27 44 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 | tle('Distributions')..pl.subplot |
8e20 | 28 32 2c 20 31 2c 20 32 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 61 72 79 5f 6c 32 2c 20 27 72 | (2,.1,.2).pl.plot(x,.bary_l2,.'r |
8e40 | 27 2c 20 6c 61 62 65 6c 3d 27 6c 32 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 61 72 79 5f 77 | ',.label='l2').pl.plot(x,.bary_w |
8e60 | 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 65 69 6e 27 29 0a 70 | ass,.'g',.label='Wasserstein').p |
8e80 | 6c 2e 6c 65 67 65 6e 64 28 29 0a 70 6c 2e 74 69 74 6c 65 28 27 42 61 72 79 63 65 6e 74 65 72 73 | l.legend().pl.title('Barycenters |
8ea0 | 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 23 23 | ').pl.tight_layout()..########## |
8ec0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8ee0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
8f00 | 23 23 23 23 0a 23 20 42 61 72 79 63 65 6e 74 72 69 63 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e | ####.#.Barycentric.interpolation |
8f20 | 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 | .#.-------------------------..#% |
8f40 | 25 20 62 61 72 79 63 65 6e 74 65 72 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 0a 0a 6e 5f 61 6c | %.barycenter.interpolation..n_al |
8f60 | 70 68 61 20 3d 20 31 31 0a 61 6c 70 68 61 5f 6c 69 73 74 20 3d 20 6e 70 2e 6c 69 6e 73 70 61 63 | pha.=.11.alpha_list.=.np.linspac |
8f80 | 65 28 30 2c 20 31 2c 20 6e 5f 61 6c 70 68 61 29 0a 0a 0a 42 5f 6c 32 20 3d 20 6e 70 2e 7a 65 72 | e(0,.1,.n_alpha)...B_l2.=.np.zer |
8fa0 | 6f 73 28 28 6e 2c 20 6e 5f 61 6c 70 68 61 29 29 0a 0a 42 5f 77 61 73 73 20 3d 20 6e 70 2e 63 6f | os((n,.n_alpha))..B_wass.=.np.co |
8fc0 | 70 79 28 42 5f 6c 32 29 0a 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 30 2c 20 6e 5f 61 6c | py(B_l2)..for.i.in.range(0,.n_al |
8fe0 | 70 68 61 29 3a 0a 20 20 20 20 61 6c 70 68 61 20 3d 20 61 6c 70 68 61 5f 6c 69 73 74 5b 69 5d 0a | pha):.....alpha.=.alpha_list[i]. |
9000 | 20 20 20 20 77 65 69 67 68 74 73 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 31 20 2d 20 61 6c 70 68 | ....weights.=.np.array([1.-.alph |
9020 | 61 2c 20 61 6c 70 68 61 5d 29 0a 20 20 20 20 42 5f 6c 32 5b 3a 2c 20 69 5d 20 3d 20 41 2e 64 6f | a,.alpha]).....B_l2[:,.i].=.A.do |
9040 | 74 28 77 65 69 67 68 74 73 29 0a 20 20 20 20 42 5f 77 61 73 73 5b 3a 2c 20 69 5d 20 3d 20 6f 74 | t(weights).....B_wass[:,.i].=.ot |
9060 | 2e 62 72 65 67 6d 61 6e 2e 62 61 72 79 63 65 6e 74 65 72 28 41 2c 20 4d 2c 20 72 65 67 2c 20 77 | .bregman.barycenter(A,.M,.reg,.w |
9080 | 65 69 67 68 74 73 29 0a 0a 23 25 25 20 70 6c 6f 74 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 0a | eights)..#%%.plot.interpolation. |
90a0 | 0a 70 6c 2e 66 69 67 75 72 65 28 33 29 0a 0a 63 6d 61 70 20 3d 20 70 6c 2e 63 6d 2e 67 65 74 5f | .pl.figure(3)..cmap.=.pl.cm.get_ |
90c0 | 63 6d 61 70 28 27 76 69 72 69 64 69 73 27 29 0a 76 65 72 74 73 20 3d 20 5b 5d 0a 7a 73 20 3d 20 | cmap('viridis').verts.=.[].zs.=. |
90e0 | 61 6c 70 68 61 5f 6c 69 73 74 0a 66 6f 72 20 69 2c 20 7a 20 69 6e 20 65 6e 75 6d 65 72 61 74 65 | alpha_list.for.i,.z.in.enumerate |
9100 | 28 7a 73 29 3a 0a 20 20 20 20 79 73 20 3d 20 42 5f 6c 32 5b 3a 2c 20 69 5d 0a 20 20 20 20 76 65 | (zs):.....ys.=.B_l2[:,.i].....ve |
9120 | 72 74 73 2e 61 70 70 65 6e 64 28 6c 69 73 74 28 7a 69 70 28 78 2c 20 79 73 29 29 29 0a 0a 61 78 | rts.append(list(zip(x,.ys)))..ax |
9140 | 20 3d 20 70 6c 2e 67 63 66 28 29 2e 67 63 61 28 70 72 6f 6a 65 63 74 69 6f 6e 3d 27 33 64 27 29 | .=.pl.gcf().gca(projection='3d') |
9160 | 0a 0a 70 6f 6c 79 20 3d 20 50 6f 6c 79 43 6f 6c 6c 65 63 74 69 6f 6e 28 76 65 72 74 73 2c 20 66 | ..poly.=.PolyCollection(verts,.f |
9180 | 61 63 65 63 6f 6c 6f 72 73 3d 5b 63 6d 61 70 28 61 29 20 66 6f 72 20 61 20 69 6e 20 61 6c 70 68 | acecolors=[cmap(a).for.a.in.alph |
91a0 | 61 5f 6c 69 73 74 5d 29 0a 70 6f 6c 79 2e 73 65 74 5f 61 6c 70 68 61 28 30 2e 37 29 0a 61 78 2e | a_list]).poly.set_alpha(0.7).ax. |
91c0 | 61 64 64 5f 63 6f 6c 6c 65 63 74 69 6f 6e 33 64 28 70 6f 6c 79 2c 20 7a 73 3d 7a 73 2c 20 7a 64 | add_collection3d(poly,.zs=zs,.zd |
91e0 | 69 72 3d 27 79 27 29 0a 61 78 2e 73 65 74 5f 78 6c 61 62 65 6c 28 27 78 27 29 0a 61 78 2e 73 65 | ir='y').ax.set_xlabel('x').ax.se |
9200 | 74 5f 78 6c 69 6d 33 64 28 30 2c 20 6e 29 0a 61 78 2e 73 65 74 5f 79 6c 61 62 65 6c 28 27 24 5c | t_xlim3d(0,.n).ax.set_ylabel('$\ |
9220 | 5c 61 6c 70 68 61 24 27 29 0a 61 78 2e 73 65 74 5f 79 6c 69 6d 33 64 28 30 2c 20 31 29 0a 61 78 | \alpha$').ax.set_ylim3d(0,.1).ax |
9240 | 2e 73 65 74 5f 7a 6c 61 62 65 6c 28 27 27 29 0a 61 78 2e 73 65 74 5f 7a 6c 69 6d 33 64 28 30 2c | .set_zlabel('').ax.set_zlim3d(0, |
9260 | 20 42 5f 6c 32 2e 6d 61 78 28 29 20 2a 20 31 2e 30 31 29 0a 70 6c 2e 74 69 74 6c 65 28 27 42 61 | .B_l2.max().*.1.01).pl.title('Ba |
9280 | 72 79 63 65 6e 74 65 72 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 20 77 69 74 68 20 6c 32 27 29 | rycenter.interpolation.with.l2') |
92a0 | 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 34 29 | .pl.tight_layout()..pl.figure(4) |
92c0 | 0a 63 6d 61 70 20 3d 20 70 6c 2e 63 6d 2e 67 65 74 5f 63 6d 61 70 28 27 76 69 72 69 64 69 73 27 | .cmap.=.pl.cm.get_cmap('viridis' |
92e0 | 29 0a 76 65 72 74 73 20 3d 20 5b 5d 0a 7a 73 20 3d 20 61 6c 70 68 61 5f 6c 69 73 74 0a 66 6f 72 | ).verts.=.[].zs.=.alpha_list.for |
9300 | 20 69 2c 20 7a 20 69 6e 20 65 6e 75 6d 65 72 61 74 65 28 7a 73 29 3a 0a 20 20 20 20 79 73 20 3d | .i,.z.in.enumerate(zs):.....ys.= |
9320 | 20 42 5f 77 61 73 73 5b 3a 2c 20 69 5d 0a 20 20 20 20 76 65 72 74 73 2e 61 70 70 65 6e 64 28 6c | .B_wass[:,.i].....verts.append(l |
9340 | 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 67 63 66 28 29 2e | ist(zip(x,.ys)))..ax.=.pl.gcf(). |
9360 | 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 20 3d 20 50 6f 6c | gca(projection='3d')..poly.=.Pol |
9380 | 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 6f 72 73 3d 5b 63 | yCollection(verts,.facecolors=[c |
93a0 | 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 5d 29 0a 70 6f 6c | map(a).for.a.in.alpha_list]).pol |
93c0 | 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 6c 6c 65 63 74 69 | y.set_alpha(0.7).ax.add_collecti |
93e0 | 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 29 0a 61 78 2e 73 | on3d(poly,.zs=zs,.zdir='y').ax.s |
9400 | 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 33 64 28 30 2c 20 | et_xlabel('x').ax.set_xlim3d(0,. |
9420 | 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 24 27 29 0a 61 78 | n).ax.set_ylabel('$\\alpha$').ax |
9440 | 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 6c 61 62 65 6c 28 | .set_ylim3d(0,.1).ax.set_zlabel( |
9460 | 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 6d 61 78 28 29 20 | '').ax.set_zlim3d(0,.B_l2.max(). |
9480 | 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 65 72 20 69 6e 74 | *.1.01).pl.title('Barycenter.int |
94a0 | 65 72 70 6f 6c 61 74 69 6f 6e 20 77 69 74 68 20 57 61 73 73 65 72 73 74 65 69 6e 27 29 0a 70 6c | erpolation.with.Wasserstein').pl |
94c0 | 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 | .tight_layout()..pl.show().PK... |
94e0 | 00 00 00 00 00 a6 5d 6f 4e b0 31 70 de ee 10 00 00 ee 10 00 00 14 00 00 00 70 6c 6f 74 5f 6f 74 | ......]oN.1p.............plot_ot |
9500 | 64 61 5f 63 6c 61 73 73 65 73 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 | da_classes.py#.-*-.coding:.utf-8 |
9520 | 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 | .-*-.""".======================= |
9540 | 3d 0a 4f 54 20 66 6f 72 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 0a 3d 3d 3d 3d 3d | =.OT.for.domain.adaptation.===== |
9560 | 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 |
9580 | 65 20 69 6e 74 72 6f 64 75 63 65 73 20 61 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e | e.introduces.a.domain.adaptation |
95a0 | 20 69 6e 20 61 20 32 44 20 73 65 74 74 69 6e 67 20 61 6e 64 20 74 68 65 20 34 20 4f 54 44 41 0a | .in.a.2D.setting.and.the.4.OTDA. |
95c0 | 61 70 70 72 6f 61 63 68 65 73 20 63 75 72 72 65 6e 74 6c 79 20 73 75 70 70 6f 72 74 65 64 20 69 | approaches.currently.supported.i |
95e0 | 6e 20 50 4f 54 2e 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 73 3a 20 52 65 6d 69 20 46 6c 61 | n.POT..."""..#.Authors:.Remi.Fla |
9600 | 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 20 20 | mary.<remi.flamary@unice.fr>.#.. |
9620 | 20 20 20 20 20 20 20 20 53 74 61 6e 69 73 6c 61 73 20 43 68 61 6d 62 6f 6e 20 3c 73 74 61 6e 2e | ........Stanislas.Chambon.<stan. |
9640 | 63 68 61 6d 62 6f 6e 40 67 6d 61 69 6c 2e 63 6f 6d 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 | chambon@gmail.com>.#.#.License:. |
9660 | 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 | MIT.License..import.matplotlib.p |
9680 | 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 0a 0a 23 23 23 23 23 23 23 23 23 | ylab.as.pl.import.ot...######### |
96a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
96c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
96e0 | 23 23 23 23 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d | #####.#.Generate.data.#.-------- |
9700 | 2d 2d 2d 2d 2d 0a 0a 6e 5f 73 6f 75 72 63 65 5f 73 61 6d 70 6c 65 73 20 3d 20 31 35 30 0a 6e 5f | -----..n_source_samples.=.150.n_ |
9720 | 74 61 72 67 65 74 5f 73 61 6d 70 6c 65 73 20 3d 20 31 35 30 0a 0a 58 73 2c 20 79 73 20 3d 20 6f | target_samples.=.150..Xs,.ys.=.o |
9740 | 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 27 33 67 | t.datasets.make_data_classif('3g |
9760 | 61 75 73 73 27 2c 20 6e 5f 73 6f 75 72 63 65 5f 73 61 6d 70 6c 65 73 29 0a 58 74 2c 20 79 74 20 | auss',.n_source_samples).Xt,.yt. |
9780 | 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 61 5f 63 6c 61 73 73 69 66 28 | =.ot.datasets.make_data_classif( |
97a0 | 27 33 67 61 75 73 73 32 27 2c 20 6e 5f 74 61 72 67 65 74 5f 73 61 6d 70 6c 65 73 29 0a 0a 0a 23 | '3gauss2',.n_target_samples)...# |
97c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
97e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
9800 | 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 49 6e 73 74 61 6e 74 69 61 74 65 20 74 68 65 20 | #############.#.Instantiate.the. |
9820 | 64 69 66 66 65 72 65 6e 74 20 74 72 61 6e 73 70 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d 73 20 61 | different.transport.algorithms.a |
9840 | 6e 64 20 66 69 74 20 74 68 65 6d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | nd.fit.them.#.------------------ |
9860 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
9880 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 20 45 4d 44 20 54 72 61 6e 73 70 6f 72 74 0a 6f 74 5f 65 6d | ---------..#.EMD.Transport.ot_em |
98a0 | 64 20 3d 20 6f 74 2e 64 61 2e 45 4d 44 54 72 61 6e 73 70 6f 72 74 28 29 0a 6f 74 5f 65 6d 64 2e | d.=.ot.da.EMDTransport().ot_emd. |
98c0 | 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 |
98e0 | 61 6e 73 70 6f 72 74 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b | ansport.ot_sinkhorn.=.ot.da.Sink |
9900 | 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 28 72 65 67 5f 65 3d 31 65 2d 31 29 0a 6f 74 5f 73 69 6e | hornTransport(reg_e=1e-1).ot_sin |
9920 | 6b 68 6f 72 6e 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 53 69 6e 6b 68 | khorn.fit(Xs=Xs,.Xt=Xt)..#.Sinkh |
9940 | 6f 72 6e 20 54 72 61 6e 73 70 6f 72 74 20 77 69 74 68 20 47 72 6f 75 70 20 6c 61 73 73 6f 20 72 | orn.Transport.with.Group.lasso.r |
9960 | 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 6f 74 5f 6c 70 6c 31 20 3d 20 6f 74 2e 64 61 2e 53 69 | egularization.ot_lpl1.=.ot.da.Si |
9980 | 6e 6b 68 6f 72 6e 4c 70 6c 31 54 72 61 6e 73 70 6f 72 74 28 72 65 67 5f 65 3d 31 65 2d 31 2c 20 | nkhornLpl1Transport(reg_e=1e-1,. |
99a0 | 72 65 67 5f 63 6c 3d 31 65 30 29 0a 6f 74 5f 6c 70 6c 31 2e 66 69 74 28 58 73 3d 58 73 2c 20 79 | reg_cl=1e0).ot_lpl1.fit(Xs=Xs,.y |
99c0 | 73 3d 79 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 53 69 6e 6b 68 6f 72 6e 20 54 72 61 6e 73 70 6f | s=ys,.Xt=Xt)..#.Sinkhorn.Transpo |
99e0 | 72 74 20 77 69 74 68 20 47 72 6f 75 70 20 6c 61 73 73 6f 20 72 65 67 75 6c 61 72 69 7a 61 74 69 | rt.with.Group.lasso.regularizati |
9a00 | 6f 6e 20 6c 31 6c 32 0a 6f 74 5f 6c 31 6c 32 20 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b 68 6f 72 6e | on.l1l2.ot_l1l2.=.ot.da.Sinkhorn |
9a20 | 4c 31 6c 32 54 72 61 6e 73 70 6f 72 74 28 72 65 67 5f 65 3d 31 65 2d 31 2c 20 72 65 67 5f 63 6c | L1l2Transport(reg_e=1e-1,.reg_cl |
9a40 | 3d 32 65 30 2c 20 6d 61 78 5f 69 74 65 72 3d 32 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | =2e0,.max_iter=20,.............. |
9a60 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 | .........................verbose |
9a80 | 3d 54 72 75 65 29 0a 6f 74 5f 6c 31 6c 32 2e 66 69 74 28 58 73 3d 58 73 2c 20 79 73 3d 79 73 2c | =True).ot_l1l2.fit(Xs=Xs,.ys=ys, |
9aa0 | 20 58 74 3d 58 74 29 0a 0a 23 20 74 72 61 6e 73 70 6f 72 74 20 73 6f 75 72 63 65 20 73 61 6d 70 | .Xt=Xt)..#.transport.source.samp |
9ac0 | 6c 65 73 20 6f 6e 74 6f 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 0a 74 72 61 6e 73 70 5f 58 | les.onto.target.samples.transp_X |
9ae0 | 73 5f 65 6d 64 20 3d 20 6f 74 5f 65 6d 64 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a | s_emd.=.ot_emd.transform(Xs=Xs). |
9b00 | 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 5f 73 69 6e 6b 68 6f 72 6e | transp_Xs_sinkhorn.=.ot_sinkhorn |
9b20 | 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 6c 70 6c 31 | .transform(Xs=Xs).transp_Xs_lpl1 |
9b40 | 20 3d 20 6f 74 5f 6c 70 6c 31 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 73 29 0a 74 72 61 6e | .=.ot_lpl1.transform(Xs=Xs).tran |
9b60 | 73 70 5f 58 73 5f 6c 31 6c 32 20 3d 20 6f 74 5f 6c 31 6c 32 2e 74 72 61 6e 73 66 6f 72 6d 28 58 | sp_Xs_l1l2.=.ot_l1l2.transform(X |
9b80 | 73 3d 58 73 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | s=Xs)...######################## |
9ba0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
9bc0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 46 69 67 20 31 20 3a | ######################.#.Fig.1.: |
9be0 | 20 70 6c 6f 74 73 20 73 6f 75 72 63 65 20 61 6e 64 20 74 61 72 67 65 74 20 73 61 6d 70 6c 65 73 | .plots.source.and.target.samples |
9c00 | 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 | .#.----------------------------- |
9c20 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 | ----------..pl.figure(1,.figsize |
9c40 | 3d 28 31 30 2c 20 35 29 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0a 70 6c | =(10,.5)).pl.subplot(1,.2,.1).pl |
9c60 | 2e 73 63 61 74 74 65 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 58 73 5b 3a 2c 20 31 5d 2c 20 63 3d 79 | .scatter(Xs[:,.0],.Xs[:,.1],.c=y |
9c80 | 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d | s,.marker='+',.label='Source.sam |
9ca0 | 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([ |
9cc0 | 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 53 6f | ]).pl.legend(loc=0).pl.title('So |
9ce0 | 75 72 63 65 20 20 73 61 6d 70 6c 65 73 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 | urce..samples')..pl.subplot(1,.2 |
9d00 | 2c 20 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 | ,.2).pl.scatter(Xt[:,.0],.Xt[:,. |
9d20 | 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 | 1],.c=yt,.marker='o',.label='Tar |
9d40 | 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 | get.samples').pl.xticks([]).pl.y |
9d60 | 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 | ticks([]).pl.legend(loc=0).pl.ti |
9d80 | 74 6c 65 28 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c | tle('Target.samples').pl.tight_l |
9da0 | 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()...###################### |
9dc0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
9de0 | 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 32 | ########################.#.Fig.2 |
9e00 | 20 3a 20 70 6c 6f 74 20 6f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 73 20 61 6e 64 20 74 72 | .:.plot.optimal.couplings.and.tr |
9e20 | 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | ansported.samples.#.------------ |
9e40 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
9e60 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 61 72 61 6d 5f 69 6d 67 20 3d 20 7b 27 69 6e 74 65 72 70 | ----------..param_img.=.{'interp |
9e80 | 6f 6c 61 74 69 6f 6e 27 3a 20 27 6e 65 61 72 65 73 74 27 7d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 | olation':.'nearest'}..pl.figure( |
9ea0 | 32 2c 20 66 69 67 73 69 7a 65 3d 28 31 35 2c 20 38 29 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 | 2,.figsize=(15,.8)).pl.subplot(2 |
9ec0 | 2c 20 34 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 65 6d 64 2e 63 6f 75 70 6c 69 6e | ,.4,.1).pl.imshow(ot_emd.couplin |
9ee0 | 67 5f 2c 20 2a 2a 70 61 72 61 6d 5f 69 6d 67 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 | g_,.**param_img).pl.xticks([]).p |
9f00 | 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 70 74 69 6d 61 6c 20 63 | l.yticks([]).pl.title('Optimal.c |
9f20 | 6f 75 70 6c 69 6e 67 5c 6e 45 4d 44 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 | oupling\nEMDTransport')..pl.subp |
9f40 | 6c 6f 74 28 32 2c 20 34 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 73 69 6e 6b 68 6f | lot(2,.4,.2).pl.imshow(ot_sinkho |
9f60 | 72 6e 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 2a 2a 70 61 72 61 6d 5f 69 6d 67 29 0a 70 6c 2e 78 74 | rn.coupling_,.**param_img).pl.xt |
9f80 | 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 | icks([]).pl.yticks([]).pl.title( |
9fa0 | 27 4f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 5c 6e 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 | 'Optimal.coupling\nSinkhornTrans |
9fc0 | 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 34 2c 20 33 29 0a 70 6c 2e 69 | port')..pl.subplot(2,.4,.3).pl.i |
9fe0 | 6d 73 68 6f 77 28 6f 74 5f 6c 70 6c 31 2e 63 6f 75 70 6c 69 6e 67 5f 2c 20 2a 2a 70 61 72 61 6d | mshow(ot_lpl1.coupling_,.**param |
a000 | 5f 69 6d 67 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 28 5b 5d | _img).pl.xticks([]).pl.yticks([] |
a020 | 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 70 74 69 6d 61 6c 20 63 6f 75 70 6c 69 6e 67 5c 6e 53 69 | ).pl.title('Optimal.coupling\nSi |
a040 | 6e 6b 68 6f 72 6e 4c 70 6c 31 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f | nkhornLpl1Transport')..pl.subplo |
a060 | 74 28 32 2c 20 34 2c 20 34 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 5f 6c 31 6c 32 2e 63 6f 75 | t(2,.4,.4).pl.imshow(ot_l1l2.cou |
a080 | 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([ |
a0a0 | 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 |
a0c0 | 61 6c 20 63 6f 75 70 6c 69 6e 67 5c 6e 53 69 6e 6b 68 6f 72 6e 4c 31 6c 32 54 72 61 6e 73 70 6f | al.coupling\nSinkhornL1l2Transpo |
a0e0 | 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 34 2c 20 35 29 0a 70 6c 2e 73 63 61 | rt')..pl.subplot(2,.4,.5).pl.sca |
a100 | 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d | tter(Xt[:,.0],.Xt[:,.1],.c=yt,.m |
a120 | 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 | arker='o',............label='Tar |
a140 | 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 30 2e 33 29 0a 70 6c 2e 73 63 61 74 | get.samples',.alpha=0.3).pl.scat |
a160 | 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f | ter(transp_Xs_emd[:,.0],.transp_ |
a180 | 58 73 5f 65 6d 64 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d | Xs_emd[:,.1],.c=ys,............m |
a1a0 | 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 | arker='+',.label='Transp.samples |
a1c0 | 27 2c 20 73 3d 33 30 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 79 74 69 63 6b 73 | ',.s=30).pl.xticks([]).pl.yticks |
a1e0 | 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c | ([]).pl.title('Transported.sampl |
a200 | 65 73 5c 6e 45 6d 64 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 | es\nEmdTransport').pl.legend(loc |
a220 | 3d 22 6c 6f 77 65 72 20 6c 65 66 74 22 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 34 2c | ="lower.left")..pl.subplot(2,.4, |
a240 | 20 36 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 | .6).pl.scatter(Xt[:,.0],.Xt[:,.1 |
a260 | 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 | ],.c=yt,.marker='o',............ |
a280 | 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 30 2e | label='Target.samples',.alpha=0. |
a2a0 | 33 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e | 3).pl.scatter(transp_Xs_sinkhorn |
a2c0 | 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 5b 3a 2c 20 31 5d | [:,.0],.transp_Xs_sinkhorn[:,.1] |
a2e0 | 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c | ,.c=ys,............marker='+',.l |
a300 | 61 62 65 6c 3d 27 54 72 61 6e 73 70 20 73 61 6d 70 6c 65 73 27 2c 20 73 3d 33 30 29 0a 70 6c 2e | abel='Transp.samples',.s=30).pl. |
a320 | 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 |
a340 | 65 28 27 54 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 5c 6e 53 69 6e 6b 68 6f 72 6e | e('Transported.samples\nSinkhorn |
a360 | 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 2c 20 37 29 | Transport')..pl.subplot(2,.4,.7) |
a380 | 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 | .pl.scatter(Xt[:,.0],.Xt[:,.1],. |
a3a0 | 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 | c=yt,.marker='o',............lab |
a3c0 | 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 30 2e 33 29 0a | el='Target.samples',.alpha=0.3). |
a3e0 | 70 6c 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 6c 70 6c 31 5b 3a 2c 20 30 5d 2c | pl.scatter(transp_Xs_lpl1[:,.0], |
a400 | 20 74 72 61 6e 73 70 5f 58 73 5f 6c 70 6c 31 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 | .transp_Xs_lpl1[:,.1],.c=ys,.... |
a420 | 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 54 72 61 6e 73 | ........marker='+',.label='Trans |
a440 | 70 20 73 61 6d 70 6c 65 73 27 2c 20 73 3d 33 30 29 0a 70 6c 2e 78 74 69 63 6b 73 28 5b 5d 29 0a | p.samples',.s=30).pl.xticks([]). |
a460 | 70 6c 2e 79 74 69 63 6b 73 28 5b 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 72 61 6e 73 70 6f 72 | pl.yticks([]).pl.title('Transpor |
a480 | 74 65 64 20 73 61 6d 70 6c 65 73 5c 6e 53 69 6e 6b 68 6f 72 6e 4c 70 6c 31 54 72 61 6e 73 70 6f | ted.samples\nSinkhornLpl1Transpo |
a4a0 | 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 34 2c 20 38 29 0a 70 6c 2e 73 63 61 | rt')..pl.subplot(2,.4,.8).pl.sca |
a4c0 | 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d | tter(Xt[:,.0],.Xt[:,.1],.c=yt,.m |
a4e0 | 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 | arker='o',............label='Tar |
a500 | 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 30 2e 33 29 0a 70 6c 2e 73 63 61 74 | get.samples',.alpha=0.3).pl.scat |
a520 | 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 6c 31 6c 32 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 | ter(transp_Xs_l1l2[:,.0],.transp |
a540 | 5f 58 73 5f 6c 31 6c 32 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 | _Xs_l1l2[:,.1],.c=ys,........... |
a560 | 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 |
a580 | 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 63 | es',.s=30).pl.xticks([]).pl.ytic |
a5a0 | 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 6d | ks([]).pl.title('Transported.sam |
a5c0 | 70 6c 65 73 5c 6e 53 69 6e 6b 68 6f 72 6e 4c 31 6c 32 54 72 61 6e 73 70 6f 72 74 27 29 0a 70 6c | ples\nSinkhornL1l2Transport').pl |
a5e0 | 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 | .tight_layout()..pl.show().PK... |
a600 | 00 00 00 00 00 b3 5c 6f 4e ff 09 e8 78 dd 08 00 00 dd 08 00 00 14 00 00 00 70 6c 6f 74 5f 4f 54 | ......\oN...x............plot_OT |
a620 | 5f 31 44 5f 73 6d 6f 6f 74 68 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 | _1D_smooth.py#.-*-.coding:.utf-8 |
a640 | 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 | .-*-.""".======================= |
a660 | 3d 3d 3d 3d 0a 31 44 20 73 6d 6f 6f 74 68 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 | ====.1D.smooth.optimal.transport |
a680 | 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 0a 0a 54 68 | .===========================..Th |
a6a0 | 69 73 20 65 78 61 6d 70 6c 65 20 69 6c 6c 75 73 74 72 61 74 65 73 20 74 68 65 20 63 6f 6d 70 75 | is.example.illustrates.the.compu |
a6c0 | 74 61 74 69 6f 6e 20 6f 66 20 45 4d 44 2c 20 53 69 6e 6b 68 6f 72 6e 20 61 6e 64 20 73 6d 6f 6f | tation.of.EMD,.Sinkhorn.and.smoo |
a6e0 | 74 68 20 4f 54 20 70 6c 61 6e 73 0a 61 6e 64 20 74 68 65 69 72 20 76 69 73 75 61 6c 69 7a 61 74 | th.OT.plans.and.their.visualizat |
a700 | 69 6f 6e 2e 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 | ion..."""..#.Author:.Remi.Flamar |
a720 | 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 0a 23 20 4c 69 | y.<remi.flamary@unice.fr>.#.#.Li |
a740 | 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 | cense:.MIT.License..import.numpy |
a760 | 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 | .as.np.import.matplotlib.pylab.a |
a780 | 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 66 72 | s.pl.import.ot.import.ot.plot.fr |
a7a0 | 6f 6d 20 6f 74 2e 64 61 74 61 73 65 74 73 20 69 6d 70 6f 72 74 20 6d 61 6b 65 5f 31 44 5f 67 61 | om.ot.datasets.import.make_1D_ga |
a7c0 | 75 73 73 20 61 73 20 67 61 75 73 73 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | uss.as.gauss..################## |
a7e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
a800 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 47 | ############################.#.G |
a820 | 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 0a 23 | enerate.data.#.-------------...# |
a840 | 25 25 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 6e 20 3d 20 31 30 30 20 20 23 20 6e 62 20 62 69 6e | %%.parameters..n.=.100..#.nb.bin |
a860 | 73 0a 0a 23 20 62 69 6e 20 70 6f 73 69 74 69 6f 6e 73 0a 78 20 3d 20 6e 70 2e 61 72 61 6e 67 65 | s..#.bin.positions.x.=.np.arange |
a880 | 28 6e 2c 20 64 74 79 70 65 3d 6e 70 2e 66 6c 6f 61 74 36 34 29 0a 0a 23 20 47 61 75 73 73 69 61 | (n,.dtype=np.float64)..#.Gaussia |
a8a0 | 6e 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 61 20 3d 20 67 61 75 73 73 28 6e 2c 20 6d 3d 32 | n.distributions.a.=.gauss(n,.m=2 |
a8c0 | 30 2c 20 73 3d 35 29 20 20 23 20 6d 3d 20 6d 65 61 6e 2c 20 73 3d 20 73 74 64 0a 62 20 3d 20 67 | 0,.s=5)..#.m=.mean,.s=.std.b.=.g |
a8e0 | 61 75 73 73 28 6e 2c 20 6d 3d 36 30 2c 20 73 3d 31 30 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 | auss(n,.m=60,.s=10)..#.loss.matr |
a900 | 69 78 0a 4d 20 3d 20 6f 74 2e 64 69 73 74 28 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 | ix.M.=.ot.dist(x.reshape((n,.1)) |
a920 | 2c 20 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 | ,.x.reshape((n,.1))).M./=.M.max( |
a940 | 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 | )...############################ |
a960 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
a980 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 64 69 73 74 72 69 | ##################.#.Plot.distri |
a9a0 | 62 75 74 69 6f 6e 73 20 61 6e 64 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 23 20 2d 2d 2d 2d 2d 2d | butions.and.loss.matrix.#.------ |
a9c0 | 2d 2d 2d 2d 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 | ----------------------------..#% |
a9e0 | 25 20 70 6c 6f 74 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 70 6c 2e 66 69 67 | %.plot.the.distributions..pl.fig |
aa00 | 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 29 29 0a 70 6c 2e 70 6c 6f 74 | ure(1,.figsize=(6.4,.3)).pl.plot |
aa20 | 28 78 2c 20 61 2c 20 27 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 64 69 73 74 72 69 | (x,.a,.'b',.label='Source.distri |
aa40 | 62 75 74 69 6f 6e 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 2c 20 27 72 27 2c 20 6c 61 62 65 | bution').pl.plot(x,.b,.'r',.labe |
aa60 | 6c 3d 27 54 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 27 29 0a 70 6c 2e 6c 65 67 65 | l='Target.distribution').pl.lege |
aa80 | 6e 64 28 29 0a 0a 23 25 25 20 70 6c 6f 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 61 6e 64 | nd()..#%%.plot.distributions.and |
aaa0 | 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 73 69 | .loss.matrix..pl.figure(2,.figsi |
aac0 | 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 2c | ze=(5,.5)).ot.plot.plot1D_mat(a, |
aae0 | 20 62 2c 20 4d 2c 20 27 43 6f 73 74 20 6d 61 74 72 69 78 20 4d 27 29 0a 0a 23 23 23 23 23 23 23 | .b,.M,.'Cost.matrix.M')..####### |
ab00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
ab20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
ab40 | 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 0a | #######.#.Solve.EMD.#.---------. |
ab60 | 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). |
ab80 | 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 |
aba0 | 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 |
abc0 | 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')..#################### |
abe0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
ac00 | 23 23 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 |
ac20 | 76 65 20 53 69 6e 6b 68 6f 72 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 | ve.Sinkhorn.#.--------------...# |
ac40 | 25 25 20 53 69 6e 6b 68 6f 72 6e 0a 0a 6c 61 6d 62 64 20 3d 20 32 65 2d 33 0a 47 73 20 3d 20 6f | %%.Sinkhorn..lambd.=.2e-3.Gs.=.o |
ac60 | 74 2e 73 69 6e 6b 68 6f 72 6e 28 61 2c 20 62 2c 20 4d 2c 20 6c 61 6d 62 64 2c 20 76 65 72 62 6f | t.sinkhorn(a,.b,.M,.lambd,.verbo |
ac80 | 73 65 3d 54 72 75 65 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 | se=True)..pl.figure(4,.figsize=( |
aca0 | 35 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 | 5,.5)).ot.plot.plot1D_mat(a,.b,. |
acc0 | 47 73 2c 20 27 4f 54 20 6d 61 74 72 69 78 20 53 69 6e 6b 68 6f 72 6e 27 29 0a 0a 70 6c 2e 73 68 | Gs,.'OT.matrix.Sinkhorn')..pl.sh |
ace0 | 6f 77 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ow()..########################## |
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 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 53 6f 6c 76 65 20 53 6d 6f | ####################.#.Solve.Smo |
ad40 | 6f 74 68 20 4f 54 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 25 25 20 53 6d | oth.OT.#.--------------...#%%.Sm |
ad60 | 6f 6f 74 68 20 4f 54 20 77 69 74 68 20 4b 4c 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 0a | ooth.OT.with.KL.regularization.. |
ad80 | 6c 61 6d 62 64 20 3d 20 32 65 2d 33 0a 47 73 6d 20 3d 20 6f 74 2e 73 6d 6f 6f 74 68 2e 73 6d 6f | lambd.=.2e-3.Gsm.=.ot.smooth.smo |
ada0 | 6f 74 68 5f 6f 74 5f 64 75 61 6c 28 61 2c 20 62 2c 20 4d 2c 20 6c 61 6d 62 64 2c 20 72 65 67 5f | oth_ot_dual(a,.b,.M,.lambd,.reg_ |
adc0 | 74 79 70 65 3d 27 6b 6c 27 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 35 2c 20 66 69 67 73 69 7a 65 | type='kl')..pl.figure(5,.figsize |
ade0 | 3d 28 35 2c 20 35 29 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 | =(5,.5)).ot.plot.plot1D_mat(a,.b |
ae00 | 2c 20 47 73 6d 2c 20 27 4f 54 20 6d 61 74 72 69 78 20 53 6d 6f 6f 74 68 20 4f 54 20 4b 4c 20 72 | ,.Gsm,.'OT.matrix.Smooth.OT.KL.r |
ae20 | 65 67 2e 27 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 0a 0a 23 25 25 20 53 6d 6f 6f 74 68 20 4f 54 | eg.')..pl.show()...#%%.Smooth.OT |
ae40 | 20 77 69 74 68 20 4b 4c 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 0a 6c 61 6d 62 64 20 3d | .with.KL.regularization..lambd.= |
ae60 | 20 31 65 2d 31 0a 47 73 6d 20 3d 20 6f 74 2e 73 6d 6f 6f 74 68 2e 73 6d 6f 6f 74 68 5f 6f 74 5f | .1e-1.Gsm.=.ot.smooth.smooth_ot_ |
ae80 | 64 75 61 6c 28 61 2c 20 62 2c 20 4d 2c 20 6c 61 6d 62 64 2c 20 72 65 67 5f 74 79 70 65 3d 27 6c | dual(a,.b,.M,.lambd,.reg_type='l |
aea0 | 32 27 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 36 2c 20 66 69 67 73 69 7a 65 3d 28 35 2c 20 35 29 | 2')..pl.figure(6,.figsize=(5,.5) |
aec0 | 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 31 44 5f 6d 61 74 28 61 2c 20 62 2c 20 47 73 6d 2c 20 | ).ot.plot.plot1D_mat(a,.b,.Gsm,. |
aee0 | 27 4f 54 20 6d 61 74 72 69 78 20 53 6d 6f 6f 74 68 20 4f 54 20 6c 32 20 72 65 67 2e 27 29 0a 0a | 'OT.matrix.Smooth.OT.l2.reg.').. |
af00 | 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 3d 5d 6f 4e b0 ed ff 28 54 10 00 00 | pl.show().PK........=]oN...(T... |
af20 | 54 10 00 00 22 00 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 6d 61 70 70 69 6e 67 5f 63 6f 6c 6f 72 73 | T..."...plot_otda_mapping_colors |
af40 | 5f 69 6d 61 67 65 73 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a | _images.py#.-*-.coding:.utf-8.-* |
af60 | 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 | -.""".========================== |
af80 | 3d 3d 3d 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 |
afa0 | 6f 72 20 69 6d 61 67 65 20 63 6f 6c 6f 72 20 61 64 61 70 74 61 74 69 6f 6e 20 77 69 74 68 20 6d | or.image.color.adaptation.with.m |
afc0 | 61 70 70 69 6e 67 20 65 73 74 69 6d 61 74 69 6f 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | apping.estimation.============== |
afe0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
b000 | 3d 3d 3d 3d 3d 3d 3d 0a 0a 4f 54 20 66 6f 72 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f | =======..OT.for.domain.adaptatio |
b020 | 6e 20 77 69 74 68 20 69 6d 61 67 65 20 63 6f 6c 6f 72 20 61 64 61 70 74 61 74 69 6f 6e 20 5b 36 | n.with.image.color.adaptation.[6 |
b040 | 5d 20 77 69 74 68 20 6d 61 70 70 69 6e 67 0a 65 73 74 69 6d 61 74 69 6f 6e 20 5b 38 5d 2e 0a 0a | ].with.mapping.estimation.[8]... |
b060 | 5b 36 5d 20 46 65 72 72 61 64 61 6e 73 2c 20 53 2e 2c 20 50 61 70 61 64 61 6b 69 73 2c 20 4e 2e | [6].Ferradans,.S.,.Papadakis,.N. |
b080 | 2c 20 50 65 79 72 65 2c 20 47 2e 2c 20 26 20 41 75 6a 6f 6c 2c 20 4a 2e 20 46 2e 20 28 32 30 31 | ,.Peyre,.G.,.&.Aujol,.J..F..(201 |
b0a0 | 34 29 2e 20 52 65 67 75 6c 61 72 69 7a 65 64 0a 20 20 20 20 64 69 73 63 72 65 74 65 20 6f 70 74 | 4)..Regularized.....discrete.opt |
b0c0 | 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 20 | imal.transport..SIAM.Journal.on. |
b0e0 | 49 6d 61 67 69 6e 67 20 53 63 69 65 6e 63 65 73 2c 20 37 28 33 29 2c 0a 20 20 20 20 31 38 35 33 | Imaging.Sciences,.7(3),.....1853 |
b100 | 2d 31 38 38 32 2e 0a 5b 38 5d 20 4d 2e 20 50 65 72 72 6f 74 2c 20 4e 2e 20 43 6f 75 72 74 79 2c | -1882..[8].M..Perrot,.N..Courty, |
b120 | 20 52 2e 20 46 6c 61 6d 61 72 79 2c 20 41 2e 20 48 61 62 72 61 72 64 2c 20 22 4d 61 70 70 69 6e | .R..Flamary,.A..Habrard,."Mappin |
b140 | 67 20 65 73 74 69 6d 61 74 69 6f 6e 20 66 6f 72 0a 20 20 20 20 64 69 73 63 72 65 74 65 20 6f 70 | g.estimation.for.....discrete.op |
b160 | 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 22 2c 20 4e 65 75 72 61 6c 20 49 6e 66 6f 72 6d 61 | timal.transport",.Neural.Informa |
b180 | 74 69 6f 6e 20 50 72 6f 63 65 73 73 69 6e 67 20 53 79 73 74 65 6d 73 20 28 4e 49 50 53 29 2c 0a | tion.Processing.Systems.(NIPS),. |
b1a0 | 20 20 20 20 32 30 31 36 2e 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 73 3a 20 52 65 6d 69 20 | ....2016..."""..#.Authors:.Remi. |
b1c0 | 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 3e 0a | Flamary.<remi.flamary@unice.fr>. |
b1e0 | 23 20 20 20 20 20 20 20 20 20 20 53 74 61 6e 69 73 6c 61 73 20 43 68 61 6d 62 6f 6e 20 3c 73 74 | #..........Stanislas.Chambon.<st |
b200 | 61 6e 2e 63 68 61 6d 62 6f 6e 40 67 6d 61 69 6c 2e 63 6f 6d 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 | an.chambon@gmail.com>.#.#.Licens |
b220 | 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 | e:.MIT.License..import.numpy.as. |
b240 | 6e 70 0a 66 72 6f 6d 20 73 63 69 70 79 20 69 6d 70 6f 72 74 20 6e 64 69 6d 61 67 65 0a 69 6d 70 | np.from.scipy.import.ndimage.imp |
b260 | 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 | ort.matplotlib.pylab.as.pl.impor |
b280 | 74 20 6f 74 0a 0a 72 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 52 61 6e 64 6f 6d 53 74 61 74 65 28 | t.ot..r.=.np.random.RandomState( |
b2a0 | 34 32 29 0a 0a 0a 64 65 66 20 69 6d 32 6d 61 74 28 49 29 3a 0a 20 20 20 20 22 22 22 43 6f 6e 76 | 42)...def.im2mat(I):....."""Conv |
b2c0 | 65 72 74 73 20 61 6e 64 20 69 6d 61 67 65 20 74 6f 20 6d 61 74 72 69 78 20 28 6f 6e 65 20 70 69 | erts.and.image.to.matrix.(one.pi |
b2e0 | 78 65 6c 20 70 65 72 20 6c 69 6e 65 29 22 22 22 0a 20 20 20 20 72 65 74 75 72 6e 20 49 2e 72 65 | xel.per.line)""".....return.I.re |
b300 | 73 68 61 70 65 28 28 49 2e 73 68 61 70 65 5b 30 5d 20 2a 20 49 2e 73 68 61 70 65 5b 31 5d 2c 20 | shape((I.shape[0].*.I.shape[1],. |
b320 | 49 2e 73 68 61 70 65 5b 32 5d 29 29 0a 0a 0a 64 65 66 20 6d 61 74 32 69 6d 28 58 2c 20 73 68 61 | I.shape[2]))...def.mat2im(X,.sha |
b340 | 70 65 29 3a 0a 20 20 20 20 22 22 22 43 6f 6e 76 65 72 74 73 20 62 61 63 6b 20 61 20 6d 61 74 72 | pe):....."""Converts.back.a.matr |
b360 | 69 78 20 74 6f 20 61 6e 20 69 6d 61 67 65 22 22 22 0a 20 20 20 20 72 65 74 75 72 6e 20 58 2e 72 | ix.to.an.image""".....return.X.r |
b380 | 65 73 68 61 70 65 28 73 68 61 70 65 29 0a 0a 0a 64 65 66 20 6d 69 6e 6d 61 78 28 49 29 3a 0a 20 | eshape(shape)...def.minmax(I):.. |
b3a0 | 20 20 20 72 65 74 75 72 6e 20 6e 70 2e 63 6c 69 70 28 49 2c 20 30 2c 20 31 29 0a 0a 0a 23 23 23 | ...return.np.clip(I,.0,.1)...### |
b3c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
b3e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
b400 | 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d | ###########.#.Generate.data.#.-- |
b420 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 20 4c 6f 61 64 69 6e 67 20 69 6d 61 67 65 73 0a 49 31 | -----------..#.Loading.images.I1 |
b440 | 20 3d 20 6e 64 69 6d 61 67 65 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 6f 63 65 61 6e | .=.ndimage.imread('../data/ocean |
b460 | 5f 64 61 79 2e 6a 70 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 20 2f 20 | _day.jpg').astype(np.float64)./. |
b480 | 32 35 36 0a 49 32 20 3d 20 6e 64 69 6d 61 67 65 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 | 256.I2.=.ndimage.imread('../data |
b4a0 | 2f 6f 63 65 61 6e 5f 73 75 6e 73 65 74 2e 6a 70 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c | /ocean_sunset.jpg').astype(np.fl |
b4c0 | 6f 61 74 36 34 29 20 2f 20 32 35 36 0a 0a 0a 58 31 20 3d 20 69 6d 32 6d 61 74 28 49 31 29 0a 58 | oat64)./.256...X1.=.im2mat(I1).X |
b4e0 | 32 20 3d 20 69 6d 32 6d 61 74 28 49 32 29 0a 0a 23 20 74 72 61 69 6e 69 6e 67 20 73 61 6d 70 6c | 2.=.im2mat(I2)..#.training.sampl |
b500 | 65 73 0a 6e 62 20 3d 20 31 30 30 30 0a 69 64 78 31 20 3d 20 72 2e 72 61 6e 64 69 6e 74 28 58 31 | es.nb.=.1000.idx1.=.r.randint(X1 |
b520 | 2e 73 68 61 70 65 5b 30 5d 2c 20 73 69 7a 65 3d 28 6e 62 2c 29 29 0a 69 64 78 32 20 3d 20 72 2e | .shape[0],.size=(nb,)).idx2.=.r. |
b540 | 72 61 6e 64 69 6e 74 28 58 32 2e 73 68 61 70 65 5b 30 5d 2c 20 73 69 7a 65 3d 28 6e 62 2c 29 29 | randint(X2.shape[0],.size=(nb,)) |
b560 | 0a 0a 58 73 20 3d 20 58 31 5b 69 64 78 31 2c 20 3a 5d 0a 58 74 20 3d 20 58 32 5b 69 64 78 32 2c | ..Xs.=.X1[idx1,.:].Xt.=.X2[idx2, |
b580 | 20 3a 5d 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | .:]...########################## |
b5a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
b5c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 44 6f 6d 61 69 6e 20 61 64 | ####################.#.Domain.ad |
b5e0 | 61 70 74 61 74 69 6f 6e 20 66 6f 72 20 70 69 78 65 6c 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20 | aptation.for.pixel.distribution. |
b600 | 74 72 61 6e 73 66 65 72 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | transfer.#.--------------------- |
b620 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 20 | ----------------------------..#. |
b640 | 45 4d 44 54 72 61 6e 73 70 6f 72 74 0a 6f 74 5f 65 6d 64 20 3d 20 6f 74 2e 64 61 2e 45 4d 44 54 | EMDTransport.ot_emd.=.ot.da.EMDT |
b660 | 72 61 6e 73 70 6f 72 74 28 29 0a 6f 74 5f 65 6d 64 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d | ransport().ot_emd.fit(Xs=Xs,.Xt= |
b680 | 58 74 29 0a 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 20 3d 20 6f 74 5f 65 6d 64 2e 74 72 61 6e 73 | Xt).transp_Xs_emd.=.ot_emd.trans |
b6a0 | 66 6f 72 6d 28 58 73 3d 58 31 29 0a 49 6d 61 67 65 5f 65 6d 64 20 3d 20 6d 69 6e 6d 61 78 28 6d | form(Xs=X1).Image_emd.=.minmax(m |
b6c0 | 61 74 32 69 6d 28 74 72 61 6e 73 70 5f 58 73 5f 65 6d 64 2c 20 49 31 2e 73 68 61 70 65 29 29 0a | at2im(transp_Xs_emd,.I1.shape)). |
b6e0 | 0a 23 20 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e | .#.SinkhornTransport.ot_sinkhorn |
b700 | 20 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f 72 74 28 72 65 67 5f 65 | .=.ot.da.SinkhornTransport(reg_e |
b720 | 3d 31 65 2d 31 29 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 | =1e-1).ot_sinkhorn.fit(Xs=Xs,.Xt |
b740 | 3d 58 74 29 0a 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 5f 73 69 6e | =Xt).transp_Xs_sinkhorn.=.ot_sin |
b760 | 6b 68 6f 72 6e 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 31 29 0a 49 6d 61 67 65 5f 73 69 6e | khorn.transform(Xs=X1).Image_sin |
b780 | 6b 68 6f 72 6e 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 74 72 61 6e 73 70 5f 58 73 5f | khorn.=.minmax(mat2im(transp_Xs_ |
b7a0 | 73 69 6e 6b 68 6f 72 6e 2c 20 49 31 2e 73 68 61 70 65 29 29 0a 0a 6f 74 5f 6d 61 70 70 69 6e 67 | sinkhorn,.I1.shape))..ot_mapping |
b7c0 | 5f 6c 69 6e 65 61 72 20 3d 20 6f 74 2e 64 61 2e 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 | _linear.=.ot.da.MappingTransport |
b7e0 | 28 0a 20 20 20 20 6d 75 3d 31 65 30 2c 20 65 74 61 3d 31 65 2d 38 2c 20 62 69 61 73 3d 54 72 75 | (.....mu=1e0,.eta=1e-8,.bias=Tru |
b800 | 65 2c 20 6d 61 78 5f 69 74 65 72 3d 32 30 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 6f 74 | e,.max_iter=20,.verbose=True).ot |
b820 | 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 | _mapping_linear.fit(Xs=Xs,.Xt=Xt |
b840 | 29 0a 0a 58 31 74 6c 20 3d 20 6f 74 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 2e 74 72 61 6e | )..X1tl.=.ot_mapping_linear.tran |
b860 | 73 66 6f 72 6d 28 58 73 3d 58 31 29 0a 49 6d 61 67 65 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 | sform(Xs=X1).Image_mapping_linea |
b880 | 72 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 58 31 74 6c 2c 20 49 31 2e 73 68 61 70 65 | r.=.minmax(mat2im(X1tl,.I1.shape |
b8a0 | 29 29 0a 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 67 61 75 73 73 69 61 6e 20 3d 20 6f 74 2e 64 61 2e | ))..ot_mapping_gaussian.=.ot.da. |
b8c0 | 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 28 0a 20 20 20 20 6d 75 3d 31 65 30 2c 20 65 74 | MappingTransport(.....mu=1e0,.et |
b8e0 | 61 3d 31 65 2d 32 2c 20 73 69 67 6d 61 3d 31 2c 20 62 69 61 73 3d 46 61 6c 73 65 2c 20 6d 61 78 | a=1e-2,.sigma=1,.bias=False,.max |
b900 | 5f 69 74 65 72 3d 31 30 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 6f 74 5f 6d 61 70 70 69 | _iter=10,.verbose=True).ot_mappi |
b920 | 6e 67 5f 67 61 75 73 73 69 61 6e 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 58 | ng_gaussian.fit(Xs=Xs,.Xt=Xt)..X |
b940 | 31 74 6e 20 3d 20 6f 74 5f 6d 61 70 70 69 6e 67 5f 67 61 75 73 73 69 61 6e 2e 74 72 61 6e 73 66 | 1tn.=.ot_mapping_gaussian.transf |
b960 | 6f 72 6d 28 58 73 3d 58 31 29 20 20 23 20 75 73 65 20 74 68 65 20 65 73 74 69 6d 61 74 65 64 20 | orm(Xs=X1)..#.use.the.estimated. |
b980 | 6d 61 70 70 69 6e 67 0a 49 6d 61 67 65 5f 6d 61 70 70 69 6e 67 5f 67 61 75 73 73 69 61 6e 20 3d | mapping.Image_mapping_gaussian.= |
b9a0 | 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 58 31 74 6e 2c 20 49 31 2e 73 68 61 70 65 29 29 0a | .minmax(mat2im(X1tn,.I1.shape)). |
b9c0 | 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 | ..############################## |
b9e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
ba00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 6f 72 69 67 69 6e 61 6c | ################.#.Plot.original |
ba20 | 20 69 6d 61 67 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a | .images.#.--------------------.. |
ba40 | 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 29 29 0a 70 | pl.figure(1,.figsize=(6.4,.3)).p |
ba60 | 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 29 | l.subplot(1,.2,.1).pl.imshow(I1) |
ba80 | 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. |
baa0 | 31 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 | 1')..pl.subplot(1,.2,.2).pl.imsh |
bac0 | 6f 77 28 49 32 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 | ow(I2).pl.axis('off').pl.title(' |
bae0 | 49 6d 61 67 65 20 32 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 0a 23 23 | Image.2').pl.tight_layout()...## |
bb00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
bb20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
bb40 | 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 70 69 78 65 6c 20 76 61 6c 75 65 73 | ############.#.Plot.pixel.values |
bb60 | 20 64 69 73 74 72 69 62 75 74 69 6f 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | .distribution.#.---------------- |
bb80 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 | --------------..pl.figure(2,.fig |
bba0 | 73 69 7a 65 3d 28 36 2e 34 2c 20 35 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c | size=(6.4,.5))..pl.subplot(1,.2, |
bbc0 | 20 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 58 73 5b 3a 2c 20 32 | .1).pl.scatter(Xs[:,.0],.Xs[:,.2 |
bbe0 | 5d 2c 20 63 3d 58 73 29 0a 70 6c 2e 61 78 69 73 28 5b 30 2c 20 31 2c 20 30 2c 20 31 5d 29 0a 70 | ],.c=Xs).pl.axis([0,.1,.0,.1]).p |
bc00 | 6c 2e 78 6c 61 62 65 6c 28 27 52 65 64 27 29 0a 70 6c 2e 79 6c 61 62 65 6c 28 27 42 6c 75 65 27 | l.xlabel('Red').pl.ylabel('Blue' |
bc20 | 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 31 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f | ).pl.title('Image.1')..pl.subplo |
bc40 | 74 28 31 2c 20 32 2c 20 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 74 5b 3a 2c 20 30 5d 2c 20 | t(1,.2,.2).pl.scatter(Xt[:,.0],. |
bc60 | 58 74 5b 3a 2c 20 32 5d 2c 20 63 3d 58 74 29 0a 70 6c 2e 61 78 69 73 28 5b 30 2c 20 31 2c 20 30 | Xt[:,.2],.c=Xt).pl.axis([0,.1,.0 |
bc80 | 2c 20 31 5d 29 0a 70 6c 2e 78 6c 61 62 65 6c 28 27 52 65 64 27 29 0a 70 6c 2e 79 6c 61 62 65 6c | ,.1]).pl.xlabel('Red').pl.ylabel |
bca0 | 28 27 42 6c 75 65 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 32 27 29 0a 70 6c 2e | ('Blue').pl.title('Image.2').pl. |
bcc0 | 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | tight_layout()...############### |
bce0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
bd00 | 23 23 23 23 23 23 23 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 | ###############################. |
bd20 | 23 20 50 6c 6f 74 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 69 6d 61 67 65 73 0a 23 20 2d 2d 2d 2d | #.Plot.transformed.images.#.---- |
bd40 | 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 32 | -------------------..pl.figure(2 |
bd60 | 2c 20 66 69 67 73 69 7a 65 3d 28 31 30 2c 20 35 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 | ,.figsize=(10,.5))..pl.subplot(2 |
bd80 | 2c 20 33 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 29 0a 70 6c 2e 61 78 69 73 28 27 6f | ,.3,.1).pl.imshow(I1).pl.axis('o |
bda0 | 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 2e 20 31 27 29 0a 0a 70 6c 2e 73 75 62 70 6c | ff').pl.title('Im..1')..pl.subpl |
bdc0 | 6f 74 28 32 2c 20 33 2c 20 34 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 29 0a 70 6c 2e 61 78 69 | ot(2,.3,.4).pl.imshow(I2).pl.axi |
bde0 | 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 2e 20 32 27 29 0a 0a 70 6c 2e 73 | s('off').pl.title('Im..2')..pl.s |
be00 | 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 6d 61 67 65 5f | ubplot(2,.3,.2).pl.imshow(Image_ |
be20 | 65 6d 64 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 45 6d | emd).pl.axis('off').pl.title('Em |
be40 | 64 54 72 61 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 35 | dTransport')..pl.subplot(2,.3,.5 |
be60 | 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 6d 61 67 65 5f 73 69 6e 6b 68 6f 72 6e 29 0a 70 6c 2e 61 | ).pl.imshow(Image_sinkhorn).pl.a |
be80 | 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 69 6e 6b 68 6f 72 6e 54 72 61 | xis('off').pl.title('SinkhornTra |
bea0 | 6e 73 70 6f 72 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 33 29 0a 70 6c | nsport')..pl.subplot(2,.3,.3).pl |
bec0 | 2e 69 6d 73 68 6f 77 28 49 6d 61 67 65 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 29 0a 70 6c | .imshow(Image_mapping_linear).pl |
bee0 | 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4d 61 70 70 69 6e 67 54 72 | .axis('off').pl.title('MappingTr |
bf00 | 61 6e 73 70 6f 72 74 20 28 6c 69 6e 65 61 72 29 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 | ansport.(linear)')..pl.subplot(2 |
bf20 | 2c 20 33 2c 20 36 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 6d 61 67 65 5f 6d 61 70 70 69 6e 67 5f | ,.3,.6).pl.imshow(Image_mapping_ |
bf40 | 67 61 75 73 73 69 61 6e 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c | gaussian).pl.axis('off').pl.titl |
bf60 | 65 28 27 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 20 28 67 61 75 73 73 69 61 6e 29 27 29 | e('MappingTransport.(gaussian)') |
bf80 | 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b | .pl.tight_layout()..pl.show().PK |
bfa0 | 03 04 14 00 00 00 00 00 b3 5c 6f 4e 90 0c 61 ee fa 07 00 00 fa 07 00 00 1f 00 00 00 70 6c 6f 74 | .........\oN..a.............plot |
bfc0 | 5f 66 72 65 65 5f 73 75 70 70 6f 72 74 5f 62 61 72 79 63 65 6e 74 65 72 2e 70 79 23 20 2d 2a 2d | _free_support_barycenter.py#.-*- |
bfe0 | 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d | .coding:.utf-8.-*-.""".========= |
c000 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
c020 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 32 44 20 66 72 65 65 20 73 75 70 70 6f 72 74 20 57 61 73 73 | ===========.2D.free.support.Wass |
c040 | 65 72 73 74 65 69 6e 20 62 61 72 79 63 65 6e 74 65 72 73 20 6f 66 20 64 69 73 74 72 69 62 75 74 | erstein.barycenters.of.distribut |
c060 | 69 6f 6e 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ions.=========================== |
c080 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 49 6c 6c 75 73 | =========================..Illus |
c0a0 | 74 72 61 74 69 6f 6e 20 6f 66 20 32 44 20 57 61 73 73 65 72 73 74 65 69 6e 20 62 61 72 79 63 65 | tration.of.2D.Wasserstein.baryce |
c0c0 | 6e 74 65 72 73 20 69 66 20 64 69 73 63 72 69 62 75 74 69 6f 6e 73 20 74 68 61 74 20 61 72 65 20 | nters.if.discributions.that.are. |
c0e0 | 77 65 69 67 68 74 65 64 0a 73 75 6d 20 6f 66 20 64 69 72 61 63 73 2e 0a 0a 22 22 22 0a 0a 23 20 | weighted.sum.of.diracs..."""..#. |
c100 | 41 75 74 68 6f 72 3a 20 56 69 76 69 65 6e 20 53 65 67 75 79 20 3c 76 69 76 69 65 6e 2e 73 65 67 | Author:.Vivien.Seguy.<vivien.seg |
c120 | 75 79 40 69 69 70 2e 69 73 74 2e 69 2e 6b 79 6f 74 6f 2d 75 2e 61 63 2e 6a 70 3e 0a 23 0a 23 20 | uy@iip.ist.i.kyoto-u.ac.jp>.#.#. |
c140 | 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d | License:.MIT.License..import.num |
c160 | 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 | py.as.np.import.matplotlib.pylab |
c180 | 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 | .as.pl.import.ot...############# |
c1a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
c1c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
c1e0 | 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | #.#.Generate.data.#.------------ |
c200 | 2d 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 20 61 6e 64 20 64 61 74 61 20 67 65 6e 65 72 61 | -.#%%.parameters.and.data.genera |
c220 | 74 69 6f 6e 0a 4e 20 3d 20 33 0a 64 20 3d 20 32 0a 6d 65 61 73 75 72 65 73 5f 6c 6f 63 61 74 69 | tion.N.=.3.d.=.2.measures_locati |
c240 | 6f 6e 73 20 3d 20 5b 5d 0a 6d 65 61 73 75 72 65 73 5f 77 65 69 67 68 74 73 20 3d 20 5b 5d 0a 0a | ons.=.[].measures_weights.=.[].. |
c260 | 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 4e 29 3a 0a 0a 20 20 20 20 6e 5f 69 20 3d 20 6e 70 | for.i.in.range(N):......n_i.=.np |
c280 | 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 69 6e 74 28 6c 6f 77 3d 31 2c 20 68 69 67 68 3d 32 30 29 20 | .random.randint(low=1,.high=20). |
c2a0 | 20 23 20 6e 62 20 73 61 6d 70 6c 65 73 0a 0a 20 20 20 20 6d 75 5f 69 20 3d 20 6e 70 2e 72 61 6e | .#.nb.samples......mu_i.=.np.ran |
c2c0 | 64 6f 6d 2e 6e 6f 72 6d 61 6c 28 30 2e 2c 20 34 2e 2c 20 28 64 2c 29 29 20 20 23 20 47 61 75 73 | dom.normal(0.,.4.,.(d,))..#.Gaus |
c2e0 | 73 69 61 6e 20 6d 65 61 6e 0a 0a 20 20 20 20 41 5f 69 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 | sian.mean......A_i.=.np.random.r |
c300 | 61 6e 64 28 64 2c 20 64 29 0a 20 20 20 20 63 6f 76 5f 69 20 3d 20 6e 70 2e 64 6f 74 28 41 5f 69 | and(d,.d).....cov_i.=.np.dot(A_i |
c320 | 2c 20 41 5f 69 2e 74 72 61 6e 73 70 6f 73 65 28 29 29 20 20 23 20 47 61 75 73 73 69 61 6e 20 63 | ,.A_i.transpose())..#.Gaussian.c |
c340 | 6f 76 61 72 69 61 6e 63 65 20 6d 61 74 72 69 78 0a 0a 20 20 20 20 78 5f 69 20 3d 20 6f 74 2e 64 | ovariance.matrix......x_i.=.ot.d |
c360 | 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 32 44 5f 73 61 6d 70 6c 65 73 5f 67 61 75 73 73 28 6e 5f | atasets.make_2D_samples_gauss(n_ |
c380 | 69 2c 20 6d 75 5f 69 2c 20 63 6f 76 5f 69 29 20 20 23 20 44 69 72 61 63 20 6c 6f 63 61 74 69 6f | i,.mu_i,.cov_i)..#.Dirac.locatio |
c3a0 | 6e 73 0a 20 20 20 20 62 5f 69 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 75 6e 69 66 6f 72 6d 28 30 | ns.....b_i.=.np.random.uniform(0 |
c3c0 | 2e 2c 20 31 2e 2c 20 28 6e 5f 69 2c 29 29 0a 20 20 20 20 62 5f 69 20 3d 20 62 5f 69 20 2f 20 6e | .,.1.,.(n_i,)).....b_i.=.b_i./.n |
c3e0 | 70 2e 73 75 6d 28 62 5f 69 29 20 20 23 20 44 69 72 61 63 20 77 65 69 67 68 74 73 0a 0a 20 20 20 | p.sum(b_i)..#.Dirac.weights..... |
c400 | 20 6d 65 61 73 75 72 65 73 5f 6c 6f 63 61 74 69 6f 6e 73 2e 61 70 70 65 6e 64 28 78 5f 69 29 0a | .measures_locations.append(x_i). |
c420 | 20 20 20 20 6d 65 61 73 75 72 65 73 5f 77 65 69 67 68 74 73 2e 61 70 70 65 6e 64 28 62 5f 69 29 | ....measures_weights.append(b_i) |
c440 | 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ...############################# |
c460 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
c480 | 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 66 72 65 65 | #################.#.Compute.free |
c4a0 | 20 73 75 70 70 6f 72 74 20 62 61 72 79 63 65 6e 74 65 72 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | .support.barycenter.#.---------- |
c4c0 | 2d 2d 2d 0a 0a 6b 20 3d 20 31 30 20 20 23 20 6e 75 6d 62 65 72 20 6f 66 20 44 69 72 61 63 73 20 | ---..k.=.10..#.number.of.Diracs. |
c4e0 | 6f 66 20 74 68 65 20 62 61 72 79 63 65 6e 74 65 72 0a 58 5f 69 6e 69 74 20 3d 20 6e 70 2e 72 61 | of.the.barycenter.X_init.=.np.ra |
c500 | 6e 64 6f 6d 2e 6e 6f 72 6d 61 6c 28 30 2e 2c 20 31 2e 2c 20 28 6b 2c 20 64 29 29 20 20 23 20 69 | ndom.normal(0.,.1.,.(k,.d))..#.i |
c520 | 6e 69 74 69 61 6c 20 44 69 72 61 63 20 6c 6f 63 61 74 69 6f 6e 73 0a 62 20 3d 20 6e 70 2e 6f 6e | nitial.Dirac.locations.b.=.np.on |
c540 | 65 73 28 28 6b 2c 29 29 20 2f 20 6b 20 20 23 20 77 65 69 67 68 74 73 20 6f 66 20 74 68 65 20 62 | es((k,))./.k..#.weights.of.the.b |
c560 | 61 72 79 63 65 6e 74 65 72 20 28 69 74 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 6f 70 74 69 6d 69 | arycenter.(it.will.not.be.optimi |
c580 | 7a 65 64 2c 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6f 70 74 69 | zed,.only.the.locations.are.opti |
c5a0 | 6d 69 7a 65 64 29 0a 0a 58 20 3d 20 6f 74 2e 6c 70 2e 66 72 65 65 5f 73 75 70 70 6f 72 74 5f 62 | mized)..X.=.ot.lp.free_support_b |
c5c0 | 61 72 79 63 65 6e 74 65 72 28 6d 65 61 73 75 72 65 73 5f 6c 6f 63 61 74 69 6f 6e 73 2c 20 6d 65 | arycenter(measures_locations,.me |
c5e0 | 61 73 75 72 65 73 5f 77 65 69 67 68 74 73 2c 20 58 5f 69 6e 69 74 2c 20 62 29 0a 0a 0a 23 23 23 | asures_weights,.X_init,.b)...### |
c600 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
c620 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
c640 | 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 2d 2d | ###########.#.Plot.data.#.------ |
c660 | 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 29 0a 66 6f 72 20 28 78 5f 69 2c 20 62 5f 69 29 | ---..pl.figure(1).for.(x_i,.b_i) |
c680 | 20 69 6e 20 7a 69 70 28 6d 65 61 73 75 72 65 73 5f 6c 6f 63 61 74 69 6f 6e 73 2c 20 6d 65 61 73 | .in.zip(measures_locations,.meas |
c6a0 | 75 72 65 73 5f 77 65 69 67 68 74 73 29 3a 0a 20 20 20 20 63 6f 6c 6f 72 20 3d 20 6e 70 2e 72 61 | ures_weights):.....color.=.np.ra |
c6c0 | 6e 64 6f 6d 2e 72 61 6e 64 69 6e 74 28 6c 6f 77 3d 31 2c 20 68 69 67 68 3d 31 30 20 2a 20 4e 29 | ndom.randint(low=1,.high=10.*.N) |
c6e0 | 0a 20 20 20 20 70 6c 2e 73 63 61 74 74 65 72 28 78 5f 69 5b 3a 2c 20 30 5d 2c 20 78 5f 69 5b 3a | .....pl.scatter(x_i[:,.0],.x_i[: |
c700 | 2c 20 31 5d 2c 20 73 3d 62 20 2a 20 31 30 30 30 2c 20 6c 61 62 65 6c 3d 27 69 6e 70 75 74 20 6d | ,.1],.s=b.*.1000,.label='input.m |
c720 | 65 61 73 75 72 65 27 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 5b 3a 2c 20 30 5d 2c 20 58 5b 3a | easure').pl.scatter(X[:,.0],.X[: |
c740 | 2c 20 31 5d 2c 20 73 3d 62 20 2a 20 31 30 30 30 2c 20 63 3d 27 62 6c 61 63 6b 27 2c 20 6d 61 72 | ,.1],.s=b.*.1000,.c='black',.mar |
c760 | 6b 65 72 3d 27 5e 27 2c 20 6c 61 62 65 6c 3d 27 32 2d 57 61 73 73 65 72 73 74 65 69 6e 20 62 61 | ker='^',.label='2-Wasserstein.ba |
c780 | 72 79 63 65 6e 74 65 72 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 44 61 74 61 20 6d 65 61 73 75 72 | rycenter').pl.title('Data.measur |
c7a0 | 65 73 20 61 6e 64 20 74 68 65 69 72 20 62 61 72 79 63 65 6e 74 65 72 27 29 0a 70 6c 2e 6c 65 67 | es.and.their.barycenter').pl.leg |
c7c0 | 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 a6 | end(loc=0).pl.show().PK......... |
c7e0 | 5d 6f 4e 6f 6c 58 5b 88 13 00 00 88 13 00 00 13 00 00 00 70 6c 6f 74 5f 4f 54 5f 4c 31 5f 76 73 | ]oNolX[............plot_OT_L1_vs |
c800 | 5f 4c 32 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 | _L2.py#.-*-.coding:.utf-8.-*-."" |
c820 | 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ".============================== |
c840 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 32 44 20 4f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 | ============.2D.Optimal.transpor |
c860 | 74 20 66 6f 72 20 64 69 66 66 65 72 65 6e 74 20 6d 65 74 72 69 63 73 0a 3d 3d 3d 3d 3d 3d 3d 3d | t.for.different.metrics.======== |
c880 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
c8a0 | 3d 3d 0a 0a 32 44 20 4f 54 20 6f 6e 20 65 6d 70 69 72 69 63 61 6c 20 64 69 73 74 72 69 62 75 74 | ==..2D.OT.on.empirical.distribut |
c8c0 | 69 6f 20 20 77 69 74 68 20 64 69 66 66 65 72 65 6e 74 20 67 6f 75 6e 64 20 6d 65 74 72 69 63 2e | io..with.different.gound.metric. |
c8e0 | 0a 0a 53 74 6f 6c 65 20 74 68 65 20 66 69 67 75 72 65 20 69 64 65 61 20 66 72 6f 6d 20 46 69 67 | ..Stole.the.figure.idea.from.Fig |
c900 | 2e 20 31 20 61 6e 64 20 32 20 69 6e 0a 68 74 74 70 73 3a 2f 2f 61 72 78 69 76 2e 6f 72 67 2f 70 | ..1.and.2.in.https://arxiv.org/p |
c920 | 64 66 2f 31 37 30 36 2e 30 37 36 35 30 2e 70 64 66 0a 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f | df/1706.07650.pdf..."""..#.Autho |
c940 | 72 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e | r:.Remi.Flamary.<remi.flamary@un |
c960 | 69 63 65 2e 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 | ice.fr>.#.#.License:.MIT.License |
c980 | 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 | ..import.numpy.as.np.import.matp |
c9a0 | 6c 6f 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 69 6d 70 | lotlib.pylab.as.pl.import.ot.imp |
c9c0 | 6f 72 74 20 6f 74 2e 70 6c 6f 74 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ort.ot.plot..################### |
c9e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
ca00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 44 61 | ###########################.#.Da |
ca20 | 74 61 73 65 74 20 31 20 3a 20 75 6e 69 66 6f 72 6d 20 73 61 6d 70 6c 69 6e 67 0a 23 20 2d 2d 2d | taset.1.:.uniform.sampling.#.--- |
ca40 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 6e 20 3d 20 32 | -------------------------..n.=.2 |
ca60 | 30 20 20 23 20 6e 62 20 73 61 6d 70 6c 65 73 0a 78 73 20 3d 20 6e 70 2e 7a 65 72 6f 73 28 28 6e | 0..#.nb.samples.xs.=.np.zeros((n |
ca80 | 2c 20 32 29 29 0a 78 73 5b 3a 2c 20 30 5d 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 29 20 2b 20 | ,.2)).xs[:,.0].=.np.arange(n).+. |
caa0 | 31 0a 78 73 5b 3a 2c 20 31 5d 20 3d 20 28 6e 70 2e 61 72 61 6e 67 65 28 6e 29 20 2b 20 31 29 20 | 1.xs[:,.1].=.(np.arange(n).+.1). |
cac0 | 2a 20 2d 30 2e 30 30 31 20 20 23 20 74 6f 20 6d 61 6b 65 20 69 74 20 73 74 72 69 63 74 6c 79 20 | *.-0.001..#.to.make.it.strictly. |
cae0 | 63 6f 6e 76 65 78 2e 2e 2e 0a 0a 78 74 20 3d 20 6e 70 2e 7a 65 72 6f 73 28 28 6e 2c 20 32 29 29 | convex.....xt.=.np.zeros((n,.2)) |
cb00 | 0a 78 74 5b 3a 2c 20 31 5d 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 29 20 2b 20 31 0a 0a 61 2c | .xt[:,.1].=.np.arange(n).+.1..a, |
cb20 | 20 62 20 3d 20 6f 74 2e 75 6e 69 66 28 6e 29 2c 20 6f 74 2e 75 6e 69 66 28 6e 29 20 20 23 20 75 | .b.=.ot.unif(n),.ot.unif(n)..#.u |
cb40 | 6e 69 66 6f 72 6d 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6f 6e 20 73 61 6d 70 6c 65 73 0a 0a | niform.distribution.on.samples.. |
cb60 | 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 31 20 3d 20 6f 74 2e 64 69 73 74 28 78 73 2c 20 78 | #.loss.matrix.M1.=.ot.dist(xs,.x |
cb80 | 74 2c 20 6d 65 74 72 69 63 3d 27 65 75 63 6c 69 64 65 61 6e 27 29 0a 4d 31 20 2f 3d 20 4d 31 2e | t,.metric='euclidean').M1./=.M1. |
cba0 | 6d 61 78 28 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 32 20 3d 20 6f 74 2e 64 69 73 | max()..#.loss.matrix.M2.=.ot.dis |
cbc0 | 74 28 78 73 2c 20 78 74 2c 20 6d 65 74 72 69 63 3d 27 73 71 65 75 63 6c 69 64 65 61 6e 27 29 0a | t(xs,.xt,.metric='sqeuclidean'). |
cbe0 | 4d 32 20 2f 3d 20 4d 32 2e 6d 61 78 28 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 70 | M2./=.M2.max()..#.loss.matrix.Mp |
cc00 | 20 3d 20 6e 70 2e 73 71 72 74 28 6f 74 2e 64 69 73 74 28 78 73 2c 20 78 74 2c 20 6d 65 74 72 69 | .=.np.sqrt(ot.dist(xs,.xt,.metri |
cc20 | 63 3d 27 65 75 63 6c 69 64 65 61 6e 27 29 29 0a 4d 70 20 2f 3d 20 4d 70 2e 6d 61 78 28 29 0a 0a | c='euclidean')).Mp./=.Mp.max().. |
cc40 | 23 20 44 61 74 61 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 37 2c 20 | #.Data.pl.figure(1,.figsize=(7,. |
cc60 | 33 29 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 | 3)).pl.clf().pl.plot(xs[:,.0],.x |
cc80 | 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 |
cca0 | 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 |
ccc0 | 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') |
cce0 | 0a 70 6c 2e 61 78 69 73 28 27 65 71 75 61 6c 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 | .pl.axis('equal').pl.title('Sour |
cd00 | 63 65 20 61 6e 64 20 74 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 0a | ce.and.target.distributions')... |
cd20 | 23 20 43 6f 73 74 20 6d 61 74 72 69 63 65 73 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 | #.Cost.matrices.pl.figure(2,.fig |
cd40 | 73 69 7a 65 3d 28 37 2c 20 33 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 31 | size=(7,.3))..pl.subplot(1,.3,.1 |
cd60 | 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 4d 31 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e | ).pl.imshow(M1,.interpolation='n |
cd80 | 65 61 72 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 45 75 63 6c 69 64 65 61 6e 20 63 6f 73 | earest').pl.title('Euclidean.cos |
cda0 | 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 | t')..pl.subplot(1,.3,.2).pl.imsh |
cdc0 | 6f 77 28 4d 32 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a | ow(M2,.interpolation='nearest'). |
cde0 | 70 6c 2e 74 69 74 6c 65 28 27 53 71 75 61 72 65 64 20 45 75 63 6c 69 64 65 61 6e 20 63 6f 73 74 | pl.title('Squared.Euclidean.cost |
ce00 | 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 33 29 0a 70 6c 2e 69 6d 73 68 6f | ')..pl.subplot(1,.3,.3).pl.imsho |
ce20 | 77 28 4d 70 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 | w(Mp,.interpolation='nearest').p |
ce40 | 6c 2e 74 69 74 6c 65 28 27 53 71 72 74 20 45 75 63 6c 69 64 65 61 6e 20 63 6f 73 74 27 29 0a 70 | l.title('Sqrt.Euclidean.cost').p |
ce60 | 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | l.tight_layout()..############## |
ce80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
cea0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
cec0 | 0a 23 20 44 61 74 61 73 65 74 20 31 20 3a 20 50 6c 6f 74 20 4f 54 20 4d 61 74 72 69 63 65 73 0a | .#.Dataset.1.:.Plot.OT.Matrices. |
cee0 | 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 | #.----------------------------.. |
cf00 | 0a 23 25 25 20 45 4d 44 0a 47 31 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 31 29 0a 47 | .#%%.EMD.G1.=.ot.emd(a,.b,.M1).G |
cf20 | 32 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 32 29 0a 47 70 20 3d 20 6f 74 2e 65 6d 64 | 2.=.ot.emd(a,.b,.M2).Gp.=.ot.emd |
cf40 | 28 61 2c 20 62 2c 20 4d 70 29 0a 0a 23 20 4f 54 20 6d 61 74 72 69 63 65 73 0a 70 6c 2e 66 69 67 | (a,.b,.Mp)..#.OT.matrices.pl.fig |
cf60 | 75 72 65 28 33 2c 20 66 69 67 73 69 7a 65 3d 28 37 2c 20 33 29 29 0a 0a 70 6c 2e 73 75 62 70 6c | ure(3,.figsize=(7,.3))..pl.subpl |
cf80 | 6f 74 28 31 2c 20 33 2c 20 31 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c | ot(1,.3,.1).ot.plot.plot2D_sampl |
cfa0 | 65 73 5f 6d 61 74 28 78 73 2c 20 78 74 2c 20 47 31 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d | es_mat(xs,.xt,.G1,.c=[.5,..5,.1] |
cfc0 | 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b | ).pl.plot(xs[:,.0],.xs[:,.1],.'+ |
cfe0 | 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 | b',.label='Source.samples').pl.p |
d000 | 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 | lot(xt[:,.0],.xt[:,.1],.'xr',.la |
d020 | 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 61 78 69 73 28 27 65 | bel='Target.samples').pl.axis('e |
d040 | 71 75 61 6c 27 29 0a 23 20 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 | qual').#.pl.legend(loc=0).pl.tit |
d060 | 6c 65 28 27 4f 54 20 45 75 63 6c 69 64 65 61 6e 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 | le('OT.Euclidean')..pl.subplot(1 |
d080 | 2c 20 33 2c 20 32 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d | ,.3,.2).ot.plot.plot2D_samples_m |
d0a0 | 61 74 28 78 73 2c 20 78 74 2c 20 47 32 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c | at(xs,.xt,.G2,.c=[.5,..5,.1]).pl |
d0c0 | 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 | .plot(xs[:,.0],.xs[:,.1],.'+b',. |
d0e0 | 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 | label='Source.samples').pl.plot( |
d100 | 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d | xt[:,.0],.xt[:,.1],.'xr',.label= |
d120 | 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 61 78 69 73 28 27 65 71 75 61 6c | 'Target.samples').pl.axis('equal |
d140 | 27 29 0a 23 20 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 | ').#.pl.legend(loc=0).pl.title(' |
d160 | 4f 54 20 73 71 75 61 72 65 64 20 45 75 63 6c 69 64 65 61 6e 27 29 0a 0a 70 6c 2e 73 75 62 70 6c | OT.squared.Euclidean')..pl.subpl |
d180 | 6f 74 28 31 2c 20 33 2c 20 33 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c | ot(1,.3,.3).ot.plot.plot2D_sampl |
d1a0 | 65 73 5f 6d 61 74 28 78 73 2c 20 78 74 2c 20 47 70 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d | es_mat(xs,.xt,.Gp,.c=[.5,..5,.1] |
d1c0 | 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b | ).pl.plot(xs[:,.0],.xs[:,.1],.'+ |
d1e0 | 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 | b',.label='Source.samples').pl.p |
d200 | 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 | lot(xt[:,.0],.xt[:,.1],.'xr',.la |
d220 | 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 61 78 69 73 28 27 65 | bel='Target.samples').pl.axis('e |
d240 | 71 75 61 6c 27 29 0a 23 20 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 | qual').#.pl.legend(loc=0).pl.tit |
d260 | 6c 65 28 27 4f 54 20 73 71 72 74 20 45 75 63 6c 69 64 65 61 6e 27 29 0a 70 6c 2e 74 69 67 68 74 | le('OT.sqrt.Euclidean').pl.tight |
d280 | 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 | _layout()..pl.show()...######### |
d2a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
d2c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
d2e0 | 23 23 23 23 23 0a 23 20 44 61 74 61 73 65 74 20 32 20 3a 20 50 61 72 74 69 61 6c 20 63 69 72 63 | #####.#.Dataset.2.:.Partial.circ |
d300 | 6c 65 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a | le.#.--------------------------. |
d320 | 0a 6e 20 3d 20 35 30 20 20 23 20 6e 62 20 73 61 6d 70 6c 65 73 0a 78 74 6f 74 20 3d 20 6e 70 2e | .n.=.50..#.nb.samples.xtot.=.np. |
d340 | 7a 65 72 6f 73 28 28 6e 20 2b 20 31 2c 20 32 29 29 0a 78 74 6f 74 5b 3a 2c 20 30 5d 20 3d 20 6e | zeros((n.+.1,.2)).xtot[:,.0].=.n |
d360 | 70 2e 63 6f 73 28 0a 20 20 20 20 28 6e 70 2e 61 72 61 6e 67 65 28 6e 20 2b 20 31 29 20 2b 20 31 | p.cos(.....(np.arange(n.+.1).+.1 |
d380 | 2e 30 29 20 2a 20 30 2e 39 20 2f 20 28 6e 20 2b 20 32 29 20 2a 20 32 20 2a 20 6e 70 2e 70 69 29 | .0).*.0.9./.(n.+.2).*.2.*.np.pi) |
d3a0 | 0a 78 74 6f 74 5b 3a 2c 20 31 5d 20 3d 20 6e 70 2e 73 69 6e 28 0a 20 20 20 20 28 6e 70 2e 61 72 | .xtot[:,.1].=.np.sin(.....(np.ar |
d3c0 | 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.+. |
d3e0 | 32 29 20 2a 20 32 20 2a 20 6e 70 2e 70 69 29 0a 0a 78 73 20 3d 20 78 74 6f 74 5b 3a 6e 2c 20 3a | 2).*.2.*.np.pi)..xs.=.xtot[:n,.: |
d400 | 5d 0a 78 74 20 3d 20 78 74 6f 74 5b 31 3a 2c 20 3a 5d 0a 0a 61 2c 20 62 20 3d 20 6f 74 2e 75 6e | ].xt.=.xtot[1:,.:]..a,.b.=.ot.un |
d420 | 69 66 28 6e 29 2c 20 6f 74 2e 75 6e 69 66 28 6e 29 20 20 23 20 75 6e 69 66 6f 72 6d 20 64 69 73 | if(n),.ot.unif(n)..#.uniform.dis |
d440 | 74 72 69 62 75 74 69 6f 6e 20 6f 6e 20 73 61 6d 70 6c 65 73 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 | tribution.on.samples..#.loss.mat |
d460 | 72 69 78 0a 4d 31 20 3d 20 6f 74 2e 64 69 73 74 28 78 73 2c 20 78 74 2c 20 6d 65 74 72 69 63 3d | rix.M1.=.ot.dist(xs,.xt,.metric= |
d480 | 27 65 75 63 6c 69 64 65 61 6e 27 29 0a 4d 31 20 2f 3d 20 4d 31 2e 6d 61 78 28 29 0a 0a 23 20 6c | 'euclidean').M1./=.M1.max()..#.l |
d4a0 | 6f 73 73 20 6d 61 74 72 69 78 0a 4d 32 20 3d 20 6f 74 2e 64 69 73 74 28 78 73 2c 20 78 74 2c 20 | oss.matrix.M2.=.ot.dist(xs,.xt,. |
d4c0 | 6d 65 74 72 69 63 3d 27 73 71 65 75 63 6c 69 64 65 61 6e 27 29 0a 4d 32 20 2f 3d 20 4d 32 2e 6d | metric='sqeuclidean').M2./=.M2.m |
d4e0 | 61 78 28 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 70 20 3d 20 6e 70 2e 73 71 72 74 | ax()..#.loss.matrix.Mp.=.np.sqrt |
d500 | 28 6f 74 2e 64 69 73 74 28 78 73 2c 20 78 74 2c 20 6d 65 74 72 69 63 3d 27 65 75 63 6c 69 64 65 | (ot.dist(xs,.xt,.metric='euclide |
d520 | 61 6e 27 29 29 0a 4d 70 20 2f 3d 20 4d 70 2e 6d 61 78 28 29 0a 0a 0a 23 20 44 61 74 61 0a 70 6c | an')).Mp./=.Mp.max()...#.Data.pl |
d540 | 2e 66 69 67 75 72 65 28 34 2c 20 66 69 67 73 69 7a 65 3d 28 37 2c 20 33 29 29 0a 70 6c 2e 63 6c | .figure(4,.figsize=(7,.3)).pl.cl |
d560 | 66 28 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 | f().pl.plot(xs[:,.0],.xs[:,.1],. |
d580 | 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c | '+b',.label='Source.samples').pl |
d5a0 | 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 | .plot(xt[:,.0],.xt[:,.1],.'xr',. |
d5c0 | 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 61 78 69 73 28 | label='Target.samples').pl.axis( |
d5e0 | 27 65 71 75 61 6c 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 20 61 6e 64 20 74 72 | 'equal').pl.title('Source.and.tr |
d600 | 61 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 0a 23 20 43 6f 73 74 20 6d 61 | aget.distributions')...#.Cost.ma |
d620 | 74 72 69 63 65 73 0a 70 6c 2e 66 69 67 75 72 65 28 35 2c 20 66 69 67 73 69 7a 65 3d 28 37 2c 20 | trices.pl.figure(5,.figsize=(7,. |
d640 | 33 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 31 29 0a 70 6c 2e 69 6d 73 68 | 3))..pl.subplot(1,.3,.1).pl.imsh |
d660 | 6f 77 28 4d 31 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a | ow(M1,.interpolation='nearest'). |
d680 | 70 6c 2e 74 69 74 6c 65 28 27 45 75 63 6c 69 64 65 61 6e 20 63 6f 73 74 27 29 0a 0a 70 6c 2e 73 | pl.title('Euclidean.cost')..pl.s |
d6a0 | 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 4d 32 2c 20 69 6e | ubplot(1,.3,.2).pl.imshow(M2,.in |
d6c0 | 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 | terpolation='nearest').pl.title( |
d6e0 | 27 53 71 75 61 72 65 64 20 45 75 63 6c 69 64 65 61 6e 20 63 6f 73 74 27 29 0a 0a 70 6c 2e 73 75 | 'Squared.Euclidean.cost')..pl.su |
d700 | 62 70 6c 6f 74 28 31 2c 20 33 2c 20 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 4d 70 2c 20 69 6e 74 | bplot(1,.3,.3).pl.imshow(Mp,.int |
d720 | 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 | erpolation='nearest').pl.title(' |
d740 | 53 71 72 74 20 45 75 63 6c 69 64 65 61 6e 20 63 6f 73 74 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c | Sqrt.Euclidean.cost').pl.tight_l |
d760 | 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 23 23 | ayout()..####################### |
d780 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
d7a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 44 61 74 61 73 65 | #######################.#.Datase |
d7c0 | 74 20 32 20 3a 20 50 6c 6f 74 20 20 4f 54 20 4d 61 74 72 69 63 65 73 0a 23 20 2d 2d 2d 2d 2d 2d | t.2.:.Plot..OT.Matrices.#.------ |
d7e0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 23 25 25 20 45 4d | -----------------------...#%%.EM |
d800 | 44 0a 47 31 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 31 29 0a 47 32 20 3d 20 6f 74 2e | D.G1.=.ot.emd(a,.b,.M1).G2.=.ot. |
d820 | 65 6d 64 28 61 2c 20 62 2c 20 4d 32 29 0a 47 70 20 3d 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 | emd(a,.b,.M2).Gp.=.ot.emd(a,.b,. |
d840 | 4d 70 29 0a 0a 23 20 4f 54 20 6d 61 74 72 69 63 65 73 0a 70 6c 2e 66 69 67 75 72 65 28 36 2c 20 | Mp)..#.OT.matrices.pl.figure(6,. |
d860 | 66 69 67 73 69 7a 65 3d 28 37 2c 20 33 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 | figsize=(7,.3))..pl.subplot(1,.3 |
d880 | 2c 20 31 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 | ,.1).ot.plot.plot2D_samples_mat( |
d8a0 | 78 73 2c 20 78 74 2c 20 47 31 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 70 6c | xs,.xt,.G1,.c=[.5,..5,.1]).pl.pl |
d8c0 | 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 | ot(xs[:,.0],.xs[:,.1],.'+b',.lab |
d8e0 | 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b | el='Source.samples').pl.plot(xt[ |
d900 | 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 | :,.0],.xt[:,.1],.'xr',.label='Ta |
d920 | 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 0a | rget.samples').pl.axis('equal'). |
d940 | 23 20 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 | #.pl.legend(loc=0).pl.title('OT. |
d960 | 45 75 63 6c 69 64 65 61 6e 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 2c 20 32 29 | Euclidean')..pl.subplot(1,.3,.2) |
d980 | 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 78 73 2c 20 | .ot.plot.plot2D_samples_mat(xs,. |
d9a0 | 78 74 2c 20 47 32 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 70 6c 6f 74 28 78 | xt,.G2,.c=[.5,..5,.1]).pl.plot(x |
d9c0 | 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 | s[:,.0],.xs[:,.1],.'+b',.label=' |
d9e0 | 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 | Source.samples').pl.plot(xt[:,.0 |
da00 | 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 | ],.xt[:,.1],.'xr',.label='Target |
da20 | 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 61 78 69 73 28 27 65 71 75 61 6c 27 29 0a 23 20 70 6c | .samples').pl.axis('equal').#.pl |
da40 | 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 73 71 75 61 | .legend(loc=0).pl.title('OT.squa |
da60 | 72 65 64 20 45 75 63 6c 69 64 65 61 6e 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 33 | red.Euclidean')..pl.subplot(1,.3 |
da80 | 2c 20 33 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 6c 65 73 5f 6d 61 74 28 | ,.3).ot.plot.plot2D_samples_mat( |
daa0 | 78 73 2c 20 78 74 2c 20 47 70 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 5d 29 0a 70 6c 2e 70 6c | xs,.xt,.Gp,.c=[.5,..5,.1]).pl.pl |
dac0 | 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 | ot(xs[:,.0],.xs[:,.1],.'+b',.lab |
dae0 | 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b | el='Source.samples').pl.plot(xt[ |
db00 | 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c 61 62 65 6c 3d 27 54 61 | :,.0],.xt[:,.1],.'xr',.label='Ta |
db20 | 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 0a | rget.samples').pl.axis('equal'). |
db40 | 23 20 70 6c 2e 6c 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 | #.pl.legend(loc=0).pl.title('OT. |
db60 | 73 71 72 74 20 45 75 63 6c 69 64 65 61 6e 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 | sqrt.Euclidean').pl.tight_layout |
db80 | 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 a6 5d 6f 4e a6 16 4e 83 | ()..pl.show().PK.........]oN..N. |
dba0 | 2e 17 00 00 2e 17 00 00 21 00 00 00 70 6c 6f 74 5f 62 61 72 79 63 65 6e 74 65 72 5f 6c 70 5f 76 | ........!...plot_barycenter_lp_v |
dbc0 | 73 5f 65 6e 74 72 6f 70 69 63 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 | s_entropic.py#.-*-.coding:.utf-8 |
dbe0 | 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 | .-*-.""".======================= |
dc00 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
dc20 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 31 44 20 57 61 | ==========================.1D.Wa |
dc40 | 73 73 65 72 73 74 65 69 6e 20 62 61 72 79 63 65 6e 74 65 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 | sserstein.barycenter.comparison. |
dc60 | 62 65 74 77 65 65 6e 20 65 78 61 63 74 20 4c 50 20 61 6e 64 20 65 6e 74 72 6f 70 69 63 20 72 65 | between.exact.LP.and.entropic.re |
dc80 | 67 75 6c 61 72 69 7a 61 74 69 6f 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | gularization.=================== |
dca0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
dcc0 | 3d 3d 3d 3d 3d 3d 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 | ==============================.. |
dce0 | 54 68 69 73 20 65 78 61 6d 70 6c 65 20 69 6c 6c 75 73 74 72 61 74 65 73 20 74 68 65 20 63 6f 6d | This.example.illustrates.the.com |
dd00 | 70 75 74 61 74 69 6f 6e 20 6f 66 20 72 65 67 75 6c 61 72 69 7a 65 64 20 57 61 73 73 65 72 73 74 | putation.of.regularized.Wasserst |
dd20 | 65 69 6e 20 42 61 72 79 63 65 6e 74 65 72 0a 61 73 20 70 72 6f 70 6f 73 65 64 20 69 6e 20 5b 33 | ein.Barycenter.as.proposed.in.[3 |
dd40 | 5d 20 61 6e 64 20 65 78 61 63 74 20 4c 50 20 62 61 72 79 63 65 6e 74 65 72 73 20 75 73 69 6e 67 | ].and.exact.LP.barycenters.using |
dd60 | 20 73 74 61 6e 64 61 72 64 20 4c 50 20 73 6f 6c 76 65 72 2e 0a 0a 49 74 20 72 65 70 72 6f 64 75 | .standard.LP.solver...It.reprodu |
dd80 | 63 65 73 20 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 46 69 67 75 72 65 20 33 2e 31 20 61 6e 64 | ces.approximately.Figure.3.1.and |
dda0 | 20 33 2e 32 20 66 72 6f 6d 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 70 61 70 65 72 3a 0a 43 | .3.2.from.the.following.paper:.C |
ddc0 | 75 74 75 72 69 2c 20 4d 2e 2c 20 26 20 50 65 79 72 c3 a9 2c 20 47 2e 20 28 32 30 31 36 29 2e 20 | uturi,.M.,.&.Peyr..,.G..(2016).. |
dde0 | 41 20 73 6d 6f 6f 74 68 65 64 20 64 75 61 6c 20 61 70 70 72 6f 61 63 68 20 66 6f 72 20 76 61 72 | A.smoothed.dual.approach.for.var |
de00 | 69 61 74 69 6f 6e 61 6c 0a 57 61 73 73 65 72 73 74 65 69 6e 20 70 72 6f 62 6c 65 6d 73 2e 20 53 | iational.Wasserstein.problems..S |
de20 | 49 41 4d 20 4a 6f 75 72 6e 61 6c 20 6f 6e 20 49 6d 61 67 69 6e 67 20 53 63 69 65 6e 63 65 73 2c | IAM.Journal.on.Imaging.Sciences, |
de40 | 20 39 28 31 29 2c 20 33 32 30 2d 33 34 33 2e 0a 0a 5b 33 5d 20 42 65 6e 61 6d 6f 75 2c 20 4a 2e | .9(1),.320-343...[3].Benamou,.J. |
de60 | 20 44 2e 2c 20 43 61 72 6c 69 65 72 2c 20 47 2e 2c 20 43 75 74 75 72 69 2c 20 4d 2e 2c 20 4e 65 | .D.,.Carlier,.G.,.Cuturi,.M.,.Ne |
de80 | 6e 6e 61 2c 20 4c 2e 2c 20 26 20 50 65 79 72 c3 a9 2c 20 47 2e 20 28 32 30 31 35 29 2e 0a 49 74 | nna,.L.,.&.Peyr..,.G..(2015)..It |
dea0 | 65 72 61 74 69 76 65 20 42 72 65 67 6d 61 6e 20 70 72 6f 6a 65 63 74 69 6f 6e 73 20 66 6f 72 20 | erative.Bregman.projections.for. |
dec0 | 72 65 67 75 6c 61 72 69 7a 65 64 20 74 72 61 6e 73 70 6f 72 74 61 74 69 6f 6e 20 70 72 6f 62 6c | regularized.transportation.probl |
dee0 | 65 6d 73 0a 53 49 41 4d 20 4a 6f 75 72 6e 61 6c 20 6f 6e 20 53 63 69 65 6e 74 69 66 69 63 20 43 | ems.SIAM.Journal.on.Scientific.C |
df00 | 6f 6d 70 75 74 69 6e 67 2c 20 33 37 28 32 29 2c 20 41 31 31 31 31 2d 41 31 31 33 38 2e 0a 0a 22 | omputing,.37(2),.A1111-A1138..." |
df20 | 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 | ""..#.Author:.Remi.Flamary.<remi |
df40 | 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 | .flamary@unice.fr>.#.#.License:. |
df60 | 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a | MIT.License..import.numpy.as.np. |
df80 | 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 6d | import.matplotlib.pylab.as.pl.im |
dfa0 | 70 6f 72 74 20 6f 74 0a 23 20 6e 65 63 65 73 73 61 72 79 20 66 6f 72 20 33 64 20 70 6c 6f 74 20 | port.ot.#.necessary.for.3d.plot. |
dfc0 | 65 76 65 6e 20 69 66 20 6e 6f 74 20 75 73 65 64 0a 66 72 6f 6d 20 6d 70 6c 5f 74 6f 6f 6c 6b 69 | even.if.not.used.from.mpl_toolki |
dfe0 | 74 73 2e 6d 70 6c 6f 74 33 64 20 69 6d 70 6f 72 74 20 41 78 65 73 33 44 20 20 23 20 6e 6f 71 61 | ts.mplot3d.import.Axes3D..#.noqa |
e000 | 0a 66 72 6f 6d 20 6d 61 74 70 6c 6f 74 6c 69 62 2e 63 6f 6c 6c 65 63 74 69 6f 6e 73 20 69 6d 70 | .from.matplotlib.collections.imp |
e020 | 6f 72 74 20 50 6f 6c 79 43 6f 6c 6c 65 63 74 69 6f 6e 20 20 23 20 6e 6f 71 61 0a 0a 23 69 6d 70 | ort.PolyCollection..#.noqa..#imp |
e040 | 6f 72 74 20 6f 74 2e 6c 70 2e 63 76 78 20 61 73 20 63 76 78 0a 0a 23 23 23 23 23 23 23 23 23 23 | ort.ot.lp.cvx.as.cvx..########## |
e060 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
e080 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
e0a0 | 23 23 23 23 0a 23 20 47 61 75 73 73 69 61 6e 20 44 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d | ####.#.Gaussian.Data.#.--------- |
e0c0 | 2d 2d 2d 2d 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 70 72 6f 62 6c 65 6d 73 20 3d | ----..#%%.parameters..problems.= |
e0e0 | 20 5b 5d 0a 0a 6e 20 3d 20 31 30 30 20 20 23 20 6e 62 20 62 69 6e 73 0a 0a 23 20 62 69 6e 20 70 | .[]..n.=.100..#.nb.bins..#.bin.p |
e100 | 6f 73 69 74 69 6f 6e 73 0a 78 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 2c 20 64 74 79 70 65 3d | ositions.x.=.np.arange(n,.dtype= |
e120 | 6e 70 2e 66 6c 6f 61 74 36 34 29 0a 0a 23 20 47 61 75 73 73 69 61 6e 20 64 69 73 74 72 69 62 75 | np.float64)..#.Gaussian.distribu |
e140 | 74 69 6f 6e 73 0a 23 20 47 61 75 73 73 69 61 6e 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 61 | tions.#.Gaussian.distributions.a |
e160 | 31 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 31 44 5f 67 61 75 73 73 28 6e 2c | 1.=.ot.datasets.make_1D_gauss(n, |
e180 | 20 6d 3d 32 30 2c 20 73 3d 35 29 20 20 23 20 6d 3d 20 6d 65 61 6e 2c 20 73 3d 20 73 74 64 0a 61 | .m=20,.s=5)..#.m=.mean,.s=.std.a |
e1a0 | 32 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 31 44 5f 67 61 75 73 73 28 6e 2c | 2.=.ot.datasets.make_1D_gauss(n, |
e1c0 | 20 6d 3d 36 30 2c 20 73 3d 38 29 0a 0a 23 20 63 72 65 61 74 69 6e 67 20 6d 61 74 72 69 78 20 41 | .m=60,.s=8)..#.creating.matrix.A |
e1e0 | 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61 6c 6c 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 41 20 | .containing.all.distributions.A. |
e200 | 3d 20 6e 70 2e 76 73 74 61 63 6b 28 28 61 31 2c 20 61 32 29 29 2e 54 0a 6e 5f 64 69 73 74 72 69 | =.np.vstack((a1,.a2)).T.n_distri |
e220 | 62 75 74 69 6f 6e 73 20 3d 20 41 2e 73 68 61 70 65 5b 31 5d 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 | butions.=.A.shape[1]..#.loss.mat |
e240 | 72 69 78 20 2b 20 6e 6f 72 6d 61 6c 69 7a 61 74 69 6f 6e 0a 4d 20 3d 20 6f 74 2e 75 74 69 6c 73 | rix.+.normalization.M.=.ot.utils |
e260 | 2e 64 69 73 74 30 28 6e 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 29 0a 0a 0a 23 25 25 20 70 6c 6f | .dist0(n).M./=.M.max()...#%%.plo |
e280 | 74 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 | t.the.distributions..pl.figure(1 |
e2a0 | 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 29 29 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e | ,.figsize=(6.4,.3)).for.i.in.ran |
e2c0 | 67 65 28 6e 5f 64 69 73 74 72 69 62 75 74 69 6f 6e 73 29 3a 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 | ge(n_distributions):.....pl.plot |
e2e0 | 28 78 2c 20 41 5b 3a 2c 20 69 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 44 69 73 74 72 69 62 75 74 | (x,.A[:,.i]).pl.title('Distribut |
e300 | 69 6f 6e 73 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 23 25 25 20 62 61 | ions').pl.tight_layout()..#%%.ba |
e320 | 72 79 63 65 6e 74 65 72 20 63 6f 6d 70 75 74 61 74 69 6f 6e 0a 0a 61 6c 70 68 61 20 3d 20 30 2e | rycenter.computation..alpha.=.0. |
e340 | 35 20 20 23 20 30 3c 3d 61 6c 70 68 61 3c 3d 31 0a 77 65 69 67 68 74 73 20 3d 20 6e 70 2e 61 72 | 5..#.0<=alpha<=1.weights.=.np.ar |
e360 | 72 61 79 28 5b 31 20 2d 20 61 6c 70 68 61 2c 20 61 6c 70 68 61 5d 29 0a 0a 23 20 6c 32 62 61 72 | ray([1.-.alpha,.alpha])..#.l2bar |
e380 | 79 0a 62 61 72 79 5f 6c 32 20 3d 20 41 2e 64 6f 74 28 77 65 69 67 68 74 73 29 0a 0a 23 20 77 61 | y.bary_l2.=.A.dot(weights)..#.wa |
e3a0 | 73 73 65 72 73 74 65 69 6e 0a 72 65 67 20 3d 20 31 65 2d 33 0a 6f 74 2e 74 69 63 28 29 0a 62 61 | sserstein.reg.=.1e-3.ot.tic().ba |
e3c0 | 72 79 5f 77 61 73 73 20 3d 20 6f 74 2e 62 72 65 67 6d 61 6e 2e 62 61 72 79 63 65 6e 74 65 72 28 | ry_wass.=.ot.bregman.barycenter( |
e3e0 | 41 2c 20 4d 2c 20 72 65 67 2c 20 77 65 69 67 68 74 73 29 0a 6f 74 2e 74 6f 63 28 29 0a 0a 0a 6f | A,.M,.reg,.weights).ot.toc()...o |
e400 | 74 2e 74 69 63 28 29 0a 62 61 72 79 5f 77 61 73 73 32 20 3d 20 6f 74 2e 6c 70 2e 62 61 72 79 63 | t.tic().bary_wass2.=.ot.lp.baryc |
e420 | 65 6e 74 65 72 28 41 2c 20 4d 2c 20 77 65 69 67 68 74 73 2c 20 73 6f 6c 76 65 72 3d 27 69 6e 74 | enter(A,.M,.weights,.solver='int |
e440 | 65 72 69 6f 72 2d 70 6f 69 6e 74 27 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 6f 74 2e 74 | erior-point',.verbose=True).ot.t |
e460 | 6f 63 28 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 2e 73 | oc()..pl.figure(2).pl.clf().pl.s |
e480 | 75 62 70 6c 6f 74 28 32 2c 20 31 2c 20 31 29 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6e | ubplot(2,.1,.1).for.i.in.range(n |
e4a0 | 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,. |
e4c0 | 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 |
e4e0 | 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 31 2c 20 32 29 0a 70 6c 2e 70 6c 6f 74 28 | ')..pl.subplot(2,.1,.2).pl.plot( |
e500 | 78 2c 20 62 61 72 79 5f 6c 32 2c 20 27 72 27 2c 20 6c 61 62 65 6c 3d 27 6c 32 27 29 0a 70 6c 2e | x,.bary_l2,.'r',.label='l2').pl. |
e520 | 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 52 | plot(x,.bary_wass,.'g',.label='R |
e540 | 65 67 20 57 61 73 73 65 72 73 74 65 69 6e 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 61 72 79 | eg.Wasserstein').pl.plot(x,.bary |
e560 | 5f 77 61 73 73 32 2c 20 27 62 27 2c 20 6c 61 62 65 6c 3d 27 4c 50 20 57 61 73 73 65 72 73 74 65 | _wass2,.'b',.label='LP.Wasserste |
e580 | 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 63 | in').pl.legend().pl.title('Baryc |
e5a0 | 65 6e 74 65 72 73 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 72 6f 62 | enters').pl.tight_layout()..prob |
e5c0 | 6c 65 6d 73 2e 61 70 70 65 6e 64 28 5b 41 2c 20 5b 62 61 72 79 5f 6c 32 2c 20 62 61 72 79 5f 77 | lems.append([A,.[bary_l2,.bary_w |
e5e0 | 61 73 73 2c 20 62 61 72 79 5f 77 61 73 73 32 5d 5d 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 | ass,.bary_wass2]])..############ |
e600 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
e620 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
e640 | 23 23 0a 23 20 44 69 72 61 63 20 44 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 | ##.#.Dirac.Data.#.----------..#% |
e660 | 25 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 61 31 20 3d 20 31 2e 30 20 2a 20 28 78 20 3e 20 31 30 | %.parameters..a1.=.1.0.*.(x.>.10 |
e680 | 29 20 2a 20 28 78 20 3c 20 35 30 29 0a 61 32 20 3d 20 31 2e 30 20 2a 20 28 78 20 3e 20 36 30 29 | ).*.(x.<.50).a2.=.1.0.*.(x.>.60) |
e6a0 | 20 2a 20 28 78 20 3c 20 38 30 29 0a 0a 61 31 20 2f 3d 20 61 31 2e 73 75 6d 28 29 0a 61 32 20 2f | .*.(x.<.80)..a1./=.a1.sum().a2./ |
e6c0 | 3d 20 61 32 2e 73 75 6d 28 29 0a 0a 23 20 63 72 65 61 74 69 6e 67 20 6d 61 74 72 69 78 20 41 20 | =.a2.sum()..#.creating.matrix.A. |
e6e0 | 63 6f 6e 74 61 69 6e 69 6e 67 20 61 6c 6c 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 41 20 3d | containing.all.distributions.A.= |
e700 | 20 6e 70 2e 76 73 74 61 63 6b 28 28 61 31 2c 20 61 32 29 29 2e 54 0a 6e 5f 64 69 73 74 72 69 62 | .np.vstack((a1,.a2)).T.n_distrib |
e720 | 75 74 69 6f 6e 73 20 3d 20 41 2e 73 68 61 70 65 5b 31 5d 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 | utions.=.A.shape[1]..#.loss.matr |
e740 | 69 78 20 2b 20 6e 6f 72 6d 61 6c 69 7a 61 74 69 6f 6e 0a 4d 20 3d 20 6f 74 2e 75 74 69 6c 73 2e | ix.+.normalization.M.=.ot.utils. |
e760 | 64 69 73 74 30 28 6e 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 29 0a 0a 0a 23 25 25 20 70 6c 6f 74 | dist0(n).M./=.M.max()...#%%.plot |
e780 | 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c | .the.distributions..pl.figure(1, |
e7a0 | 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 29 29 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 | .figsize=(6.4,.3)).for.i.in.rang |
e7c0 | 65 28 6e 5f 64 69 73 74 72 69 62 75 74 69 6f 6e 73 29 3a 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 28 | e(n_distributions):.....pl.plot( |
e7e0 | 78 2c 20 41 5b 3a 2c 20 69 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 44 69 73 74 72 69 62 75 74 69 | x,.A[:,.i]).pl.title('Distributi |
e800 | 6f 6e 73 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 0a 23 25 25 20 62 61 | ons').pl.tight_layout()...#%%.ba |
e820 | 72 79 63 65 6e 74 65 72 20 63 6f 6d 70 75 74 61 74 69 6f 6e 0a 0a 61 6c 70 68 61 20 3d 20 30 2e | rycenter.computation..alpha.=.0. |
e840 | 35 20 20 23 20 30 3c 3d 61 6c 70 68 61 3c 3d 31 0a 77 65 69 67 68 74 73 20 3d 20 6e 70 2e 61 72 | 5..#.0<=alpha<=1.weights.=.np.ar |
e860 | 72 61 79 28 5b 31 20 2d 20 61 6c 70 68 61 2c 20 61 6c 70 68 61 5d 29 0a 0a 23 20 6c 32 62 61 72 | ray([1.-.alpha,.alpha])..#.l2bar |
e880 | 79 0a 62 61 72 79 5f 6c 32 20 3d 20 41 2e 64 6f 74 28 77 65 69 67 68 74 73 29 0a 0a 23 20 77 61 | y.bary_l2.=.A.dot(weights)..#.wa |
e8a0 | 73 73 65 72 73 74 65 69 6e 0a 72 65 67 20 3d 20 31 65 2d 33 0a 6f 74 2e 74 69 63 28 29 0a 62 61 | sserstein.reg.=.1e-3.ot.tic().ba |
e8c0 | 72 79 5f 77 61 73 73 20 3d 20 6f 74 2e 62 72 65 67 6d 61 6e 2e 62 61 72 79 63 65 6e 74 65 72 28 | ry_wass.=.ot.bregman.barycenter( |
e8e0 | 41 2c 20 4d 2c 20 72 65 67 2c 20 77 65 69 67 68 74 73 29 0a 6f 74 2e 74 6f 63 28 29 0a 0a 0a 6f | A,.M,.reg,.weights).ot.toc()...o |
e900 | 74 2e 74 69 63 28 29 0a 62 61 72 79 5f 77 61 73 73 32 20 3d 20 6f 74 2e 6c 70 2e 62 61 72 79 63 | t.tic().bary_wass2.=.ot.lp.baryc |
e920 | 65 6e 74 65 72 28 41 2c 20 4d 2c 20 77 65 69 67 68 74 73 2c 20 73 6f 6c 76 65 72 3d 27 69 6e 74 | enter(A,.M,.weights,.solver='int |
e940 | 65 72 69 6f 72 2d 70 6f 69 6e 74 27 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 0a 6f 74 2e 74 | erior-point',.verbose=True).ot.t |
e960 | 6f 63 28 29 0a 0a 0a 70 72 6f 62 6c 65 6d 73 2e 61 70 70 65 6e 64 28 5b 41 2c 20 5b 62 61 72 79 | oc()...problems.append([A,.[bary |
e980 | 5f 6c 32 2c 20 62 61 72 79 5f 77 61 73 73 2c 20 62 61 72 79 5f 77 61 73 73 32 5d 5d 29 0a 0a 70 | _l2,.bary_wass,.bary_wass2]])..p |
e9a0 | 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( |
e9c0 | 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 |
e9e0 | 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] |
ea00 | 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. |
ea20 | 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 |
ea40 | 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, |
ea60 | 20 62 61 72 79 5f 77 61 73 73 2c 20 27 67 27 2c 20 6c 61 62 65 6c 3d 27 52 65 67 20 57 61 73 73 | .bary_wass,.'g',.label='Reg.Wass |
ea80 | 65 72 73 74 65 69 6e 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 61 72 79 5f 77 61 73 73 32 2c | erstein').pl.plot(x,.bary_wass2, |
eaa0 | 20 27 62 27 2c 20 6c 61 62 65 6c 3d 27 4c 50 20 57 61 73 73 65 72 73 74 65 69 6e 27 29 0a 70 6c | .'b',.label='LP.Wasserstein').pl |
eac0 | 2e 6c 65 67 65 6e 64 28 29 0a 70 6c 2e 74 69 74 6c 65 28 27 42 61 72 79 63 65 6e 74 65 72 73 27 | .legend().pl.title('Barycenters' |
eae0 | 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 | ).pl.tight_layout()..#%%.paramet |
eb00 | 65 72 73 0a 0a 61 31 20 3d 20 6e 70 2e 7a 65 72 6f 73 28 6e 29 0a 61 32 20 3d 20 6e 70 2e 7a 65 | ers..a1.=.np.zeros(n).a2.=.np.ze |
eb20 | 72 6f 73 28 6e 29 0a 0a 61 31 5b 31 30 5d 20 3d 20 2e 32 35 0a 61 31 5b 32 30 5d 20 3d 20 2e 35 | ros(n)..a1[10].=..25.a1[20].=..5 |
eb40 | 0a 61 31 5b 33 30 5d 20 3d 20 2e 32 35 0a 61 32 5b 38 30 5d 20 3d 20 31 0a 0a 0a 61 31 20 2f 3d | .a1[30].=..25.a2[80].=.1...a1./= |
eb60 | 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 61 | .a1.sum().a2./=.a2.sum()..#.crea |
eb80 | 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 73 | ting.matrix.A.containing.all.dis |
eba0 | 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 32 | tributions.A.=.np.vstack((a1,.a2 |
ebc0 | 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 31 | )).T.n_distributions.=.A.shape[1 |
ebe0 | 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 6e | ]..#.loss.matrix.+.normalization |
ec00 | 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 61 | .M.=.ot.utils.dist0(n).M./=.M.ma |
ec20 | 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 73 | x()...#%%.plot.the.distributions |
ec40 | 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 29 29 | ..pl.figure(1,.figsize=(6.4,.3)) |
ec60 | 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 29 | .for.i.in.range(n_distributions) |
ec80 | 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 74 | :.....pl.plot(x,.A[:,.i]).pl.tit |
eca0 | 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 79 | le('Distributions').pl.tight_lay |
ecc0 | 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 69 | out()...#%%.barycenter.computati |
ece0 | 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 77 | on..alpha.=.0.5..#.0<=alpha<=1.w |
ed00 | 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 6c | eights.=.np.array([1.-.alpha,.al |
ed20 | 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 28 | pha])..#.l2bary.bary_l2.=.A.dot( |
ed40 | 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 65 | weights)..#.wasserstein.reg.=.1e |
ed60 | 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 6d | -3.ot.tic().bary_wass.=.ot.bregm |
ed80 | 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 |
eda0 | 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 32 | ).ot.toc()...ot.tic().bary_wass2 |
edc0 | 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 74 | .=.ot.lp.barycenter(A,.M,.weight |
ede0 | 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 62 | s,.solver='interior-point',.verb |
ee00 | 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 70 | ose=True).ot.toc()...problems.ap |
ee20 | 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 61 | pend([A,.[bary_l2,.bary_wass,.ba |
ee40 | 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 66 | ry_wass2]])..pl.figure(2).pl.clf |
ee60 | 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 20 | ().pl.subplot(2,.1,.1).for.i.in. |
ee80 | 72 61 6e 67 65 28 6e 5f 64 69 73 74 72 69 62 75 74 69 6f 6e 73 29 3a 0a 20 20 20 20 70 6c 2e 70 | range(n_distributions):.....pl.p |
eea0 | 6c 6f 74 28 78 2c 20 41 5b 3a 2c 20 69 5d 29 0a 70 6c 2e 74 69 74 6c 65 28 27 44 69 73 74 72 69 | lot(x,.A[:,.i]).pl.title('Distri |
eec0 | 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 70 | butions')..pl.subplot(2,.1,.2).p |
eee0 | 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 6c | l.plot(x,.bary_l2,.'r',.label='l |
ef00 | 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 6c | 2').pl.plot(x,.bary_wass,.'g',.l |
ef20 | 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 28 | abel='Reg.Wasserstein').pl.plot( |
ef40 | 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 61 | x,.bary_wass2,.'b',.label='LP.Wa |
ef60 | 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 65 | sserstein').pl.legend().pl.title |
ef80 | 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 28 | ('Barycenters').pl.tight_layout( |
efa0 | 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 | )...############################ |
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 0a 23 20 46 69 6e 61 6c 20 66 69 67 75 72 | ##################.#.Final.figur |
f000 | 65 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 0a 23 25 25 20 70 6c 6f 74 0a 0a 6e 62 | e.#.------------.#..#%%.plot..nb |
f020 | 6d 20 3d 20 6c 65 6e 28 70 72 6f 62 6c 65 6d 73 29 0a 6e 62 6d 32 20 3d 20 28 6e 62 6d 20 2f 2f | m.=.len(problems).nbm2.=.(nbm.// |
f040 | 20 32 29 0a 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 28 32 30 2c 20 36 29 29 0a 70 6c 2e 63 | .2)...pl.figure(2,.(20,.6)).pl.c |
f060 | 6c 66 28 29 0a 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6e 62 6d 29 3a 0a 0a 20 20 20 20 | lf()..for.i.in.range(nbm):...... |
f080 | 41 20 3d 20 70 72 6f 62 6c 65 6d 73 5b 69 5d 5b 30 5d 0a 20 20 20 20 62 61 72 79 5f 6c 32 20 3d | A.=.problems[i][0].....bary_l2.= |
f0a0 | 20 70 72 6f 62 6c 65 6d 73 5b 69 5d 5b 31 5d 5b 30 5d 0a 20 20 20 20 62 61 72 79 5f 77 61 73 73 | .problems[i][1][0].....bary_wass |
f0c0 | 20 3d 20 70 72 6f 62 6c 65 6d 73 5b 69 5d 5b 31 5d 5b 31 5d 0a 20 20 20 20 62 61 72 79 5f 77 61 | .=.problems[i][1][1].....bary_wa |
f0e0 | 73 73 32 20 3d 20 70 72 6f 62 6c 65 6d 73 5b 69 5d 5b 31 5d 5b 32 5d 0a 0a 20 20 20 20 70 6c 2e | ss2.=.problems[i][1][2]......pl. |
f100 | 73 75 62 70 6c 6f 74 28 32 2c 20 6e 62 6d 2c 20 31 20 2b 20 69 29 0a 20 20 20 20 66 6f 72 20 6a | subplot(2,.nbm,.1.+.i).....for.j |
f120 | 20 69 6e 20 72 61 6e 67 65 28 6e 5f 64 69 73 74 72 69 62 75 74 69 6f 6e 73 29 3a 0a 20 20 20 20 | .in.range(n_distributions):..... |
f140 | 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 2c 20 41 5b 3a 2c 20 6a 5d 29 0a 20 20 20 20 69 66 20 69 | ....pl.plot(x,.A[:,.j]).....if.i |
f160 | 20 3d 3d 20 6e 62 6d 32 3a 0a 20 20 20 20 20 20 20 20 70 6c 2e 74 69 74 6c 65 28 27 44 69 73 74 | .==.nbm2:.........pl.title('Dist |
f180 | 72 69 62 75 74 69 6f 6e 73 27 29 0a 20 20 20 20 70 6c 2e 78 74 69 63 6b 73 28 28 29 29 0a 20 20 | ributions').....pl.xticks(())... |
f1a0 | 20 20 70 6c 2e 79 74 69 63 6b 73 28 28 29 29 0a 0a 20 20 20 20 70 6c 2e 73 75 62 70 6c 6f 74 28 | ..pl.yticks(())......pl.subplot( |
f1c0 | 32 2c 20 6e 62 6d 2c 20 31 20 2b 20 69 20 2b 20 6e 62 6d 29 0a 0a 20 20 20 20 70 6c 2e 70 6c 6f | 2,.nbm,.1.+.i.+.nbm)......pl.plo |
f1e0 | 74 28 78 2c 20 62 61 72 79 5f 6c 32 2c 20 27 72 27 2c 20 6c 61 62 65 6c 3d 27 4c 32 20 28 45 75 | t(x,.bary_l2,.'r',.label='L2.(Eu |
f200 | 63 6c 69 64 65 61 6e 29 27 29 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 61 72 79 5f 77 | clidean)').....pl.plot(x,.bary_w |
f220 | 61 73 73 2c 20 27 67 27 2c 20 6c 61 62 65 6c 3d 27 52 65 67 20 57 61 73 73 65 72 73 74 65 69 6e | ass,.'g',.label='Reg.Wasserstein |
f240 | 27 29 0a 20 20 20 20 70 6c 2e 70 6c 6f 74 28 78 2c 20 62 61 72 79 5f 77 61 73 73 32 2c 20 27 62 | ').....pl.plot(x,.bary_wass2,.'b |
f260 | 27 2c 20 6c 61 62 65 6c 3d 27 4c 50 20 57 61 73 73 65 72 73 74 65 69 6e 27 29 0a 20 20 20 20 69 | ',.label='LP.Wasserstein').....i |
f280 | 66 20 69 20 3d 3d 20 6e 62 6d 20 2d 20 31 3a 0a 20 20 20 20 20 20 20 20 70 6c 2e 6c 65 67 65 6e | f.i.==.nbm.-.1:.........pl.legen |
f2a0 | 64 28 29 0a 20 20 20 20 69 66 20 69 20 3d 3d 20 6e 62 6d 32 3a 0a 20 20 20 20 20 20 20 20 70 6c | d().....if.i.==.nbm2:.........pl |
f2c0 | 2e 74 69 74 6c 65 28 27 42 61 72 79 63 65 6e 74 65 72 73 27 29 0a 0a 20 20 20 20 70 6c 2e 78 74 | .title('Barycenters')......pl.xt |
f2e0 | 69 63 6b 73 28 28 29 29 0a 20 20 20 20 70 6c 2e 79 74 69 63 6b 73 28 28 29 29 0a 50 4b 03 04 14 | icks(()).....pl.yticks(()).PK... |
f300 | 00 00 00 00 00 b3 5c 6f 4e bf 4a 09 ec 55 09 00 00 55 09 00 00 15 00 00 00 70 6c 6f 74 5f 4f 54 | ......\oN.J..U...U.......plot_OT |
f320 | 5f 32 44 5f 73 61 6d 70 6c 65 73 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d | _2D_samples.py#.-*-.coding:.utf- |
f340 | 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | 8.-*-.""".====================== |
f360 | 3d 3d 3d 3d 3d 3d 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 | ==============================.2 |
f380 | 44 20 4f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 20 62 65 74 77 65 65 6e 20 65 6d 70 69 | D.Optimal.transport.between.empi |
f3a0 | 72 69 63 61 6c 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | rical.distributions.============ |
f3c0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
f3e0 | 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 49 6c 6c 75 73 74 72 61 74 69 6f 6e 20 6f 66 20 32 44 20 6f 70 74 | ========..Illustration.of.2D.opt |
f400 | 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 20 62 65 74 77 65 65 6e 20 64 69 73 63 72 69 62 75 74 | imal.transport.between.discribut |
f420 | 69 6f 6e 73 20 74 68 61 74 20 61 72 65 20 77 65 69 67 68 74 65 64 0a 73 75 6d 20 6f 66 20 64 69 | ions.that.are.weighted.sum.of.di |
f440 | 72 61 63 73 2e 20 54 68 65 20 4f 54 20 6d 61 74 72 69 78 20 69 73 20 70 6c 6f 74 74 65 64 20 77 | racs..The.OT.matrix.is.plotted.w |
f460 | 69 74 68 20 74 68 65 20 73 61 6d 70 6c 65 73 2e 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a | ith.the.samples..."""..#.Author: |
f480 | 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 | .Remi.Flamary.<remi.flamary@unic |
f4a0 | 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 0a | e.fr>.#.#.License:.MIT.License.. |
f4c0 | 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f | import.numpy.as.np.import.matplo |
f4e0 | 74 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 69 6d 70 6f 72 | tlib.pylab.as.pl.import.ot.impor |
f500 | 74 20 6f 74 2e 70 6c 6f 74 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | t.ot.plot..##################### |
f520 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f540 | 23 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 |
f560 | 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 | rate.data.#.-------------..#%%.p |
f580 | 61 72 61 6d 65 74 65 72 73 20 61 6e 64 20 64 61 74 61 20 67 65 6e 65 72 61 74 69 6f 6e 0a 0a 6e | arameters.and.data.generation..n |
f5a0 | 20 3d 20 35 30 20 20 23 20 6e 62 20 73 61 6d 70 6c 65 73 0a 0a 6d 75 5f 73 20 3d 20 6e 70 2e 61 | .=.50..#.nb.samples..mu_s.=.np.a |
f5c0 | 72 72 61 79 28 5b 30 2c 20 30 5d 29 0a 63 6f 76 5f 73 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 5b | rray([0,.0]).cov_s.=.np.array([[ |
f5e0 | 31 2c 20 30 5d 2c 20 5b 30 2c 20 31 5d 5d 29 0a 0a 6d 75 5f 74 20 3d 20 6e 70 2e 61 72 72 61 79 | 1,.0],.[0,.1]])..mu_t.=.np.array |
f600 | 28 5b 34 2c 20 34 5d 29 0a 63 6f 76 5f 74 20 3d 20 6e 70 2e 61 72 72 61 79 28 5b 5b 31 2c 20 2d | ([4,.4]).cov_t.=.np.array([[1,.- |
f620 | 2e 38 5d 2c 20 5b 2d 2e 38 2c 20 31 5d 5d 29 0a 0a 78 73 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 | .8],.[-.8,.1]])..xs.=.ot.dataset |
f640 | 73 2e 6d 61 6b 65 5f 32 44 5f 73 61 6d 70 6c 65 73 5f 67 61 75 73 73 28 6e 2c 20 6d 75 5f 73 2c | s.make_2D_samples_gauss(n,.mu_s, |
f660 | 20 63 6f 76 5f 73 29 0a 78 74 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 32 44 | .cov_s).xt.=.ot.datasets.make_2D |
f680 | 5f 73 61 6d 70 6c 65 73 5f 67 61 75 73 73 28 6e 2c 20 6d 75 5f 74 2c 20 63 6f 76 5f 74 29 0a 0a | _samples_gauss(n,.mu_t,.cov_t).. |
f6a0 | 61 2c 20 62 20 3d 20 6e 70 2e 6f 6e 65 73 28 28 6e 2c 29 29 20 2f 20 6e 2c 20 6e 70 2e 6f 6e 65 | a,.b.=.np.ones((n,))./.n,.np.one |
f6c0 | 73 28 28 6e 2c 29 29 20 2f 20 6e 20 20 23 20 75 6e 69 66 6f 72 6d 20 64 69 73 74 72 69 62 75 74 | s((n,))./.n..#.uniform.distribut |
f6e0 | 69 6f 6e 20 6f 6e 20 73 61 6d 70 6c 65 73 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 4d 20 | ion.on.samples..#.loss.matrix.M. |
f700 | 3d 20 6f 74 2e 64 69 73 74 28 78 73 2c 20 78 74 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 29 0a 0a | =.ot.dist(xs,.xt).M./=.M.max().. |
f720 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f740 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f760 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 64 61 74 61 0a 23 20 2d 2d 2d | ##############.#.Plot.data.#.--- |
f780 | 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 6c 6f 74 20 73 61 6d 70 6c 65 73 0a 0a 70 6c 2e 66 69 67 | ------..#%%.plot.samples..pl.fig |
f7a0 | 75 72 65 28 31 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 | ure(1).pl.plot(xs[:,.0],.xs[:,.1 |
f7c0 | 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 | ],.'+b',.label='Source.samples') |
f7e0 | 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 | .pl.plot(xt[:,.0],.xt[:,.1],.'xr |
f800 | 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 6c 65 | ',.label='Target.samples').pl.le |
f820 | 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 20 61 6e 64 | gend(loc=0).pl.title('Source.and |
f840 | 20 74 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 70 6c 2e 66 69 67 75 | .target.distributions')..pl.figu |
f860 | 72 65 28 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 4d 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e | re(2).pl.imshow(M,.interpolation |
f880 | 3d 27 6e 65 61 72 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 43 6f 73 74 20 6d 61 74 72 69 | ='nearest').pl.title('Cost.matri |
f8a0 | 78 20 4d 27 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | x.M')..######################### |
f8c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
f8e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 43 6f 6d 70 75 74 65 20 | #####################.#.Compute. |
f900 | 45 4d 44 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 45 4d 44 0a 0a 47 30 20 3d | EMD.#.-----------..#%%.EMD..G0.= |
f920 | 20 6f 74 2e 65 6d 64 28 61 2c 20 62 2c 20 4d 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 33 29 0a 70 | .ot.emd(a,.b,.M)..pl.figure(3).p |
f940 | 6c 2e 69 6d 73 68 6f 77 28 47 30 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 | l.imshow(G0,.interpolation='near |
f960 | 65 73 74 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 6d 61 74 72 69 78 20 47 30 27 29 0a 0a | est').pl.title('OT.matrix.G0').. |
f980 | 70 6c 2e 66 69 67 75 72 65 28 34 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 | pl.figure(4).ot.plot.plot2D_samp |
f9a0 | 6c 65 73 5f 6d 61 74 28 78 73 2c 20 78 74 2c 20 47 30 2c 20 63 3d 5b 2e 35 2c 20 2e 35 2c 20 31 | les_mat(xs,.xt,.G0,.c=[.5,..5,.1 |
f9c0 | 5d 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 | ]).pl.plot(xs[:,.0],.xs[:,.1],.' |
f9e0 | 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e | +b',.label='Source.samples').pl. |
fa00 | 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 27 2c 20 6c | plot(xt[:,.0],.xt[:,.1],.'xr',.l |
fa20 | 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 | abel='Target.samples').pl.legend |
fa40 | 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 6d 61 74 72 69 78 20 77 69 74 68 | (loc=0).pl.title('OT.matrix.with |
fa60 | 20 73 61 6d 70 6c 65 73 27 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | .samples')...################### |
fa80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
faa0 | 23 23 23 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 |
fac0 | 6d 70 75 74 65 20 53 69 6e 6b 68 6f 72 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | mpute.Sinkhorn.#.--------------- |
fae0 | 2d 0a 0a 23 25 25 20 73 69 6e 6b 68 6f 72 6e 0a 0a 23 20 72 65 67 20 74 65 72 6d 0a 6c 61 6d 62 | -..#%%.sinkhorn..#.reg.term.lamb |
fb00 | 64 20 3d 20 31 65 2d 33 0a 0a 47 73 20 3d 20 6f 74 2e 73 69 6e 6b 68 6f 72 6e 28 61 2c 20 62 2c | d.=.1e-3..Gs.=.ot.sinkhorn(a,.b, |
fb20 | 20 4d 2c 20 6c 61 6d 62 64 29 0a 0a 70 6c 2e 66 69 67 75 72 65 28 35 29 0a 70 6c 2e 69 6d 73 68 | .M,.lambd)..pl.figure(5).pl.imsh |
fb40 | 6f 77 28 47 73 2c 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 3d 27 6e 65 61 72 65 73 74 27 29 0a | ow(Gs,.interpolation='nearest'). |
fb60 | 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 6d 61 74 72 69 78 20 73 69 6e 6b 68 6f 72 6e 27 29 0a 0a | pl.title('OT.matrix.sinkhorn').. |
fb80 | 70 6c 2e 66 69 67 75 72 65 28 36 29 0a 6f 74 2e 70 6c 6f 74 2e 70 6c 6f 74 32 44 5f 73 61 6d 70 | pl.figure(6).ot.plot.plot2D_samp |
fba0 | 6c 65 73 5f 6d 61 74 28 78 73 2c 20 78 74 2c 20 47 73 2c 20 63 6f 6c 6f 72 3d 5b 2e 35 2c 20 2e | les_mat(xs,.xt,.Gs,.color=[.5,.. |
fbc0 | 35 2c 20 31 5d 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 | 5,.1]).pl.plot(xs[:,.0],.xs[:,.1 |
fbe0 | 5d 2c 20 27 2b 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 | ],.'+b',.label='Source.samples') |
fc00 | 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 78 72 | .pl.plot(xt[:,.0],.xt[:,.1],.'xr |
fc20 | 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 6c 65 | ',.label='Target.samples').pl.le |
fc40 | 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4f 54 20 6d 61 74 72 69 78 20 | gend(loc=0).pl.title('OT.matrix. |
fc60 | 53 69 6e 6b 68 6f 72 6e 20 77 69 74 68 20 73 61 6d 70 6c 65 73 27 29 0a 0a 70 6c 2e 73 68 6f 77 | Sinkhorn.with.samples')..pl.show |
fc80 | 28 29 0a 50 4b 03 04 14 00 00 00 00 00 b3 5c 6f 4e 0e e0 72 82 97 0b 00 00 97 0b 00 00 1b 00 00 | ().PK.........\oN..r............ |
fca0 | 00 70 6c 6f 74 5f 6f 74 64 61 5f 6c 69 6e 65 61 72 5f 6d 61 70 70 69 6e 67 2e 70 79 23 21 2f 75 | .plot_otda_linear_mapping.py#!/u |
fcc0 | 73 72 2f 62 69 6e 2f 65 6e 76 20 70 79 74 68 6f 6e 33 0a 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a | sr/bin/env.python3.#.-*-.coding: |
fce0 | 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | .utf-8.-*-.""".================= |
fd00 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4c 69 6e 65 61 72 20 4f 54 20 6d 61 70 70 69 6e 67 20 65 73 | ===========.Linear.OT.mapping.es |
fd20 | 74 69 6d 61 74 69 6f 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | timation.======================= |
fd40 | 3d 3d 3d 3d 3d 0a 0a 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a 20 52 65 6d 69 20 46 6c 61 6d | =====..."""..#.Author:.Remi.Flam |
fd60 | 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 0a 23 20 | ary.<remi.flamary@unice.fr>.#.#. |
fd80 | 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d | License:.MIT.License..import.num |
fda0 | 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f | py.as.np.import.pylab.as.pl.impo |
fdc0 | 72 74 20 6f 74 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | rt.ot..######################### |
fde0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
fe00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 47 65 6e 65 72 61 74 65 | #####################.#.Generate |
fe20 | 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 6e 20 3d 20 31 30 30 30 0a | .data.#.-------------..n.=.1000. |
fe40 | 64 20 3d 20 32 0a 73 69 67 6d 61 20 3d 20 2e 31 0a 0a 23 20 73 6f 75 72 63 65 20 73 61 6d 70 6c | d.=.2.sigma.=..1..#.source.sampl |
fe60 | 65 73 0a 61 6e 67 6c 65 73 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 28 6e 2c 20 31 29 | es.angles.=.np.random.rand(n,.1) |
fe80 | 20 2a 20 32 20 2a 20 6e 70 2e 70 69 0a 78 73 20 3d 20 6e 70 2e 63 6f 6e 63 61 74 65 6e 61 74 65 | .*.2.*.np.pi.xs.=.np.concatenate |
fea0 | 28 28 6e 70 2e 73 69 6e 28 61 6e 67 6c 65 73 29 2c 20 6e 70 2e 63 6f 73 28 61 6e 67 6c 65 73 29 | ((np.sin(angles),.np.cos(angles) |
fec0 | 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 78 69 73 3d 31 29 20 2b | ),.....................axis=1).+ |
fee0 | 20 73 69 67 6d 61 20 2a 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 6e 28 6e 2c 20 32 29 0a 78 | .sigma.*.np.random.randn(n,.2).x |
ff00 | 73 5b 3a 6e 20 2f 2f 20 32 2c 20 31 5d 20 2b 3d 20 32 0a 0a 0a 23 20 74 61 72 67 65 74 20 73 61 | s[:n.//.2,.1].+=.2...#.target.sa |
ff20 | 6d 70 6c 65 73 0a 61 6e 67 6c 65 74 20 3d 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 28 6e 2c | mples.anglet.=.np.random.rand(n, |
ff40 | 20 31 29 20 2a 20 32 20 2a 20 6e 70 2e 70 69 0a 78 74 20 3d 20 6e 70 2e 63 6f 6e 63 61 74 65 6e | .1).*.2.*.np.pi.xt.=.np.concaten |
ff60 | 61 74 65 28 28 6e 70 2e 73 69 6e 28 61 6e 67 6c 65 74 29 2c 20 6e 70 2e 63 6f 73 28 61 6e 67 6c | ate((np.sin(anglet),.np.cos(angl |
ff80 | 65 74 29 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 78 69 73 3d 31 | et)),.....................axis=1 |
ffa0 | 29 20 2b 20 73 69 67 6d 61 20 2a 20 6e 70 2e 72 61 6e 64 6f 6d 2e 72 61 6e 64 6e 28 6e 2c 20 32 | ).+.sigma.*.np.random.randn(n,.2 |
ffc0 | 29 0a 78 74 5b 3a 6e 20 2f 2f 20 32 2c 20 31 5d 20 2b 3d 20 32 0a 0a 0a 41 20 3d 20 6e 70 2e 61 | ).xt[:n.//.2,.1].+=.2...A.=.np.a |
ffe0 | 72 72 61 79 28 5b 5b 31 2e 35 2c 20 2e 37 5d 2c 20 5b 2e 37 2c 20 31 2e 35 5d 5d 29 0a 62 20 3d | rray([[1.5,..7],.[.7,.1.5]]).b.= |
10000 | 20 6e 70 2e 61 72 72 61 79 28 5b 5b 34 2c 20 32 5d 5d 29 0a 78 74 20 3d 20 78 74 2e 64 6f 74 28 | .np.array([[4,.2]]).xt.=.xt.dot( |
10020 | 41 29 20 2b 20 62 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | A).+.b..######################## |
10040 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
10060 | 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 64 61 | ######################.#.Plot.da |
10080 | 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 28 35 2c | ta.#.---------..pl.figure(1,.(5, |
100a0 | 20 35 29 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c 20 78 73 5b 3a 2c 20 31 5d 2c | .5)).pl.plot(xs[:,.0],.xs[:,.1], |
100c0 | 20 27 2b 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d 2c 20 78 74 5b 3a 2c 20 31 5d | .'+').pl.plot(xt[:,.0],.xt[:,.1] |
100e0 | 2c 20 27 6f 27 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ,.'o')...####################### |
10100 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
10120 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 45 73 74 69 6d 61 | #######################.#.Estima |
10140 | 74 65 20 6c 69 6e 65 61 72 20 6d 61 70 70 69 6e 67 20 61 6e 64 20 74 72 61 6e 73 70 6f 72 74 0a | te.linear.mapping.and.transport. |
10160 | 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 | #.------------------------------ |
10180 | 2d 2d 2d 2d 2d 2d 2d 0a 0a 41 65 2c 20 62 65 20 3d 20 6f 74 2e 64 61 2e 4f 54 5f 6d 61 70 70 69 | -------..Ae,.be.=.ot.da.OT_mappi |
101a0 | 6e 67 5f 6c 69 6e 65 61 72 28 78 73 2c 20 78 74 29 0a 0a 78 73 74 20 3d 20 78 73 2e 64 6f 74 28 | ng_linear(xs,.xt)..xst.=.xs.dot( |
101c0 | 41 65 29 20 2b 20 62 65 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | Ae).+.be...##################### |
101e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
10200 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 | #########################.#.Plot |
10220 | 20 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d | .transported.samples.#.--------- |
10240 | 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 20 28 35 | ---------------..pl.figure(1,.(5 |
10260 | 2c 20 35 29 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 5b 3a 2c 20 30 5d 2c | ,.5)).pl.clf().pl.plot(xs[:,.0], |
10280 | 20 78 73 5b 3a 2c 20 31 5d 2c 20 27 2b 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 74 5b 3a 2c 20 30 5d | .xs[:,.1],.'+').pl.plot(xt[:,.0] |
102a0 | 2c 20 78 74 5b 3a 2c 20 31 5d 2c 20 27 6f 27 29 0a 70 6c 2e 70 6c 6f 74 28 78 73 74 5b 3a 2c 20 | ,.xt[:,.1],.'o').pl.plot(xst[:,. |
102c0 | 30 5d 2c 20 78 73 74 5b 3a 2c 20 31 5d 2c 20 27 2b 27 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 0a | 0],.xst[:,.1],.'+')..pl.show().. |
102e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
10300 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
10320 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 4c 6f 61 64 20 69 6d 61 67 65 20 64 61 74 61 | ##############.#.Load.image.data |
10340 | 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 0a 64 65 66 20 69 6d 32 6d 61 74 28 | .#.---------------...def.im2mat( |
10360 | 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 65 20 74 6f | I):....."""Converts.and.image.to |
10380 | 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 22 22 22 0a | .matrix.(one.pixel.per.line)""". |
103a0 | 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 65 5b 30 5d | ....return.I.reshape((I.shape[0] |
103c0 | 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 0a 0a 64 65 | .*.I.shape[1],.I.shape[2]))...de |
103e0 | 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 6f 6e 76 65 | f.mat2im(X,.shape):....."""Conve |
10400 | 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 65 22 22 22 | rts.back.a.matrix.to.an.image""" |
10420 | 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 0a 0a 0a 64 | .....return.X.reshape(shape)...d |
10440 | 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 63 6c 69 70 | ef.minmax(I):.....return.np.clip |
10460 | 28 49 2c 20 30 2c 20 31 29 0a 0a 0a 23 20 4c 6f 61 64 69 6e 67 20 69 6d 61 67 65 73 0a 49 31 20 | (I,.0,.1)...#.Loading.images.I1. |
10480 | 3d 20 70 6c 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 6f 63 65 61 6e 5f 64 61 79 2e 6a | =.pl.imread('../data/ocean_day.j |
104a0 | 70 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 20 2f 20 32 35 36 0a 49 32 | pg').astype(np.float64)./.256.I2 |
104c0 | 20 3d 20 70 6c 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 6f 63 65 61 6e 5f 73 75 6e 73 | .=.pl.imread('../data/ocean_suns |
104e0 | 65 74 2e 6a 70 67 27 29 2e 61 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 20 2f 20 32 35 | et.jpg').astype(np.float64)./.25 |
10500 | 36 0a 0a 0a 58 31 20 3d 20 69 6d 32 6d 61 74 28 49 31 29 0a 58 32 20 3d 20 69 6d 32 6d 61 74 28 | 6...X1.=.im2mat(I1).X2.=.im2mat( |
10520 | 49 32 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | I2)..########################### |
10540 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
10560 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 45 73 74 69 6d 61 74 65 20 6d | ###################.#.Estimate.m |
10580 | 61 70 70 69 6e 67 20 61 6e 64 20 61 64 61 70 74 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | apping.and.adapt.#.------------- |
105a0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 6d 61 70 70 69 6e 67 20 3d 20 6f 74 2e 64 61 | ---------------..mapping.=.ot.da |
105c0 | 2e 4c 69 6e 65 61 72 54 72 61 6e 73 70 6f 72 74 28 29 0a 0a 6d 61 70 70 69 6e 67 2e 66 69 74 28 | .LinearTransport()..mapping.fit( |
105e0 | 58 73 3d 58 31 2c 20 58 74 3d 58 32 29 0a 0a 0a 78 73 74 20 3d 20 6d 61 70 70 69 6e 67 2e 74 72 | Xs=X1,.Xt=X2)...xst.=.mapping.tr |
10600 | 61 6e 73 66 6f 72 6d 28 58 73 3d 58 31 29 0a 78 74 73 20 3d 20 6d 61 70 70 69 6e 67 2e 69 6e 76 | ansform(Xs=X1).xts.=.mapping.inv |
10620 | 65 72 73 65 5f 74 72 61 6e 73 66 6f 72 6d 28 58 74 3d 58 32 29 0a 0a 49 31 74 20 3d 20 6d 69 6e | erse_transform(Xt=X2)..I1t.=.min |
10640 | 6d 61 78 28 6d 61 74 32 69 6d 28 78 73 74 2c 20 49 31 2e 73 68 61 70 65 29 29 0a 49 32 74 20 3d | max(mat2im(xst,.I1.shape)).I2t.= |
10660 | 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 78 74 73 2c 20 49 32 2e 73 68 61 70 65 29 29 0a 0a | .minmax(mat2im(xts,.I2.shape)).. |
10680 | 23 20 25 25 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | #.%%...######################### |
106a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
106c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 74 72 61 | #####################.#.Plot.tra |
106e0 | 6e 73 66 6f 72 6d 65 64 20 69 6d 61 67 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | nsformed.images.#.-------------- |
10700 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 3d | ---------..pl.figure(2,.figsize= |
10720 | 28 31 30 2c 20 37 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 31 29 0a 70 6c | (10,.7))..pl.subplot(2,.2,.1).pl |
10740 | 2e 69 6d 73 68 6f 77 28 49 31 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 | .imshow(I1).pl.axis('off').pl.ti |
10760 | 74 6c 65 28 27 49 6d 2e 20 31 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 32 | tle('Im..1')..pl.subplot(2,.2,.2 |
10780 | 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 | ).pl.imshow(I2).pl.axis('off').p |
107a0 | 6c 2e 74 69 74 6c 65 28 27 49 6d 2e 20 32 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 | l.title('Im..2')..pl.subplot(2,. |
107c0 | 32 2c 20 33 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 74 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 | 2,.3).pl.imshow(I1t).pl.axis('of |
107e0 | 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 4d 61 70 70 69 6e 67 20 49 6d 2e 20 31 27 29 0a 0a 70 | f').pl.title('Mapping.Im..1')..p |
10800 | 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 34 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 74 | l.subplot(2,.2,.4).pl.imshow(I2t |
10820 | 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6e 76 65 72 | ).pl.axis('off').pl.title('Inver |
10840 | 73 65 20 6d 61 70 70 69 6e 67 20 49 6d 2e 20 32 27 29 0a 50 4b 03 04 14 00 00 00 00 00 a6 5d 6f | se.mapping.Im..2').PK.........]o |
10860 | 4e cd ad d9 82 f4 0f 00 00 f4 0f 00 00 14 00 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 6d 61 70 70 69 | N................plot_otda_mappi |
10880 | 6e 67 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 | ng.py#.-*-.coding:.utf-8.-*-.""" |
108a0 | 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | .=============================== |
108c0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 4f 54 20 6d 61 70 70 69 6e 67 20 65 73 74 69 6d 61 74 69 | ============.OT.mapping.estimati |
108e0 | 6f 6e 20 66 6f 72 20 64 6f 6d 61 69 6e 20 61 64 61 70 74 61 74 69 6f 6e 0a 3d 3d 3d 3d 3d 3d 3d | on.for.domain.adaptation.======= |
10900 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | ================================ |
10920 | 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 70 72 65 73 65 6e 74 73 20 68 6f 77 20 | ====..This.example.presents.how. |
10940 | 74 6f 20 75 73 65 20 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 20 74 6f 20 65 73 74 69 6d | to.use.MappingTransport.to.estim |
10960 | 61 74 65 20 61 74 20 74 68 65 20 73 61 6d 65 0a 74 69 6d 65 20 62 6f 74 68 20 74 68 65 20 63 6f | ate.at.the.same.time.both.the.co |
10980 | 75 70 6c 69 6e 67 20 74 72 61 6e 73 70 6f 72 74 20 61 6e 64 20 61 70 70 72 6f 78 69 6d 61 74 65 | upling.transport.and.approximate |
109a0 | 20 74 68 65 20 74 72 61 6e 73 70 6f 72 74 20 6d 61 70 20 77 69 74 68 20 65 69 74 68 65 72 0a 61 | .the.transport.map.with.either.a |
109c0 | 20 6c 69 6e 65 61 72 20 6f 72 20 61 20 6b 65 72 6e 65 6c 69 7a 65 64 20 6d 61 70 70 69 6e 67 20 | .linear.or.a.kernelized.mapping. |
109e0 | 61 73 20 69 6e 74 72 6f 64 75 63 65 64 20 69 6e 20 5b 38 5d 2e 0a 0a 5b 38 5d 20 4d 2e 20 50 65 | as.introduced.in.[8]...[8].M..Pe |
10a00 | 72 72 6f 74 2c 20 4e 2e 20 43 6f 75 72 74 79 2c 20 52 2e 20 46 6c 61 6d 61 72 79 2c 20 41 2e 20 | rrot,.N..Courty,.R..Flamary,.A.. |
10a20 | 48 61 62 72 61 72 64 2c 0a 20 20 20 20 22 4d 61 70 70 69 6e 67 20 65 73 74 69 6d 61 74 69 6f 6e | Habrard,....."Mapping.estimation |
10a40 | 20 66 6f 72 20 64 69 73 63 72 65 74 65 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 74 22 | .for.discrete.optimal.transport" |
10a60 | 2c 0a 20 20 20 20 4e 65 75 72 61 6c 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 50 72 6f 63 65 73 73 | ,.....Neural.Information.Process |
10a80 | 69 6e 67 20 53 79 73 74 65 6d 73 20 28 4e 49 50 53 29 2c 20 32 30 31 36 2e 0a 22 22 22 0a 0a 23 | ing.Systems.(NIPS),.2016.."""..# |
10aa0 | 20 41 75 74 68 6f 72 73 3a 20 52 65 6d 69 20 46 6c 61 6d 61 72 79 20 3c 72 65 6d 69 2e 66 6c 61 | .Authors:.Remi.Flamary.<remi.fla |
10ac0 | 6d 61 72 79 40 75 6e 69 63 65 2e 66 72 3e 0a 23 20 20 20 20 20 20 20 20 20 20 53 74 61 6e 69 73 | mary@unice.fr>.#..........Stanis |
10ae0 | 6c 61 73 20 43 68 61 6d 62 6f 6e 20 3c 73 74 61 6e 2e 63 68 61 6d 62 6f 6e 40 67 6d 61 69 6c 2e | las.Chambon.<stan.chambon@gmail. |
10b00 | 63 6f 6d 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 0a 69 | com>.#.#.License:.MIT.License..i |
10b20 | 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a 69 6d 70 6f 72 74 20 6d 61 74 70 6c 6f 74 | mport.numpy.as.np.import.matplot |
10b40 | 6c 69 62 2e 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 0a 0a 23 23 23 23 | lib.pylab.as.pl.import.ot...#### |
10b60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
10b80 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
10ba0 | 23 23 23 23 23 23 23 23 23 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d | ##########.#.Generate.data.#.--- |
10bc0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 6e 5f 73 6f 75 72 63 65 5f 73 61 6d 70 6c 65 73 20 3d 20 31 | ----------..n_source_samples.=.1 |
10be0 | 30 30 0a 6e 5f 74 61 72 67 65 74 5f 73 61 6d 70 6c 65 73 20 3d 20 31 30 30 0a 74 68 65 74 61 20 | 00.n_target_samples.=.100.theta. |
10c00 | 3d 20 32 20 2a 20 6e 70 2e 70 69 20 2f 20 32 30 0a 6e 6f 69 73 65 5f 6c 65 76 65 6c 20 3d 20 30 | =.2.*.np.pi./.20.noise_level.=.0 |
10c20 | 2e 31 0a 0a 58 73 2c 20 79 73 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 | .1..Xs,.ys.=.ot.datasets.make_da |
10c40 | 74 61 5f 63 6c 61 73 73 69 66 28 0a 20 20 20 20 27 67 61 75 73 73 72 6f 74 27 2c 20 6e 5f 73 6f | ta_classif(.....'gaussrot',.n_so |
10c60 | 75 72 63 65 5f 73 61 6d 70 6c 65 73 2c 20 6e 7a 3d 6e 6f 69 73 65 5f 6c 65 76 65 6c 29 0a 58 73 | urce_samples,.nz=noise_level).Xs |
10c80 | 5f 6e 65 77 2c 20 5f 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 61 5f | _new,._.=.ot.datasets.make_data_ |
10ca0 | 63 6c 61 73 73 69 66 28 0a 20 20 20 20 27 67 61 75 73 73 72 6f 74 27 2c 20 6e 5f 73 6f 75 72 63 | classif(.....'gaussrot',.n_sourc |
10cc0 | 65 5f 73 61 6d 70 6c 65 73 2c 20 6e 7a 3d 6e 6f 69 73 65 5f 6c 65 76 65 6c 29 0a 58 74 2c 20 79 | e_samples,.nz=noise_level).Xt,.y |
10ce0 | 74 20 3d 20 6f 74 2e 64 61 74 61 73 65 74 73 2e 6d 61 6b 65 5f 64 61 74 61 5f 63 6c 61 73 73 69 | t.=.ot.datasets.make_data_classi |
10d00 | 66 28 0a 20 20 20 20 27 67 61 75 73 73 72 6f 74 27 2c 20 6e 5f 74 61 72 67 65 74 5f 73 61 6d 70 | f(.....'gaussrot',.n_target_samp |
10d20 | 6c 65 73 2c 20 74 68 65 74 61 3d 74 68 65 74 61 2c 20 6e 7a 3d 6e 6f 69 73 65 5f 6c 65 76 65 6c | les,.theta=theta,.nz=noise_level |
10d40 | 29 0a 0a 23 20 6f 6e 65 20 6f 66 20 74 68 65 20 74 61 72 67 65 74 20 6d 6f 64 65 20 63 68 61 6e | )..#.one.of.the.target.mode.chan |
10d60 | 67 65 73 20 69 74 73 20 76 61 72 69 61 6e 63 65 20 28 6e 6f 20 6c 69 6e 65 61 72 20 6d 61 70 70 | ges.its.variance.(no.linear.mapp |
10d80 | 69 6e 67 29 0a 58 74 5b 79 74 20 3d 3d 20 32 5d 20 2a 3d 20 33 0a 58 74 20 3d 20 58 74 20 2b 20 | ing).Xt[yt.==.2].*=.3.Xt.=.Xt.+. |
10da0 | 34 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | 4..############################# |
10dc0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
10de0 | 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.#. |
10e00 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 28 31 30 2c 20 35 29 29 | ---------..pl.figure(1,.(10,.5)) |
10e20 | 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 73 5b 3a 2c 20 30 5d 2c 20 58 | .pl.clf().pl.scatter(Xs[:,.0],.X |
10e40 | 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 |
10e60 | 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 |
10e80 | 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=' |
10ea0 | 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 6c | o',.label='Target.samples').pl.l |
10ec0 | 65 67 65 6e 64 28 6c 6f 63 3d 30 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 20 61 6e | egend(loc=0).pl.title('Source.an |
10ee0 | 64 20 74 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 27 29 0a 0a 0a 23 23 23 23 23 | d.target.distributions')...##### |
10f00 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
10f20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
10f40 | 23 23 23 23 23 23 23 23 23 0a 23 20 49 6e 73 74 61 6e 74 69 61 74 65 20 74 68 65 20 64 69 66 66 | #########.#.Instantiate.the.diff |
10f60 | 65 72 65 6e 74 20 74 72 61 6e 73 70 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d 73 20 61 6e 64 20 66 | erent.transport.algorithms.and.f |
10f80 | 69 74 20 74 68 65 6d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | it.them.#.---------------------- |
10fa0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
10fc0 | 2d 2d 2d 2d 2d 0a 0a 23 20 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 20 77 69 74 68 20 6c | -----..#.MappingTransport.with.l |
10fe0 | 69 6e 65 61 72 20 6b 65 72 6e 65 6c 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 20 3d | inear.kernel.ot_mapping_linear.= |
11000 | 20 6f 74 2e 64 61 2e 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 28 0a 20 20 20 20 6b 65 72 | .ot.da.MappingTransport(.....ker |
11020 | 6e 65 6c 3d 22 6c 69 6e 65 61 72 22 2c 20 6d 75 3d 31 65 30 2c 20 65 74 61 3d 31 65 2d 38 2c 20 | nel="linear",.mu=1e0,.eta=1e-8,. |
11040 | 62 69 61 73 3d 54 72 75 65 2c 0a 20 20 20 20 6d 61 78 5f 69 74 65 72 3d 32 30 2c 20 76 65 72 62 | bias=True,.....max_iter=20,.verb |
11060 | 6f 73 65 3d 54 72 75 65 29 0a 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 2e 66 69 74 | ose=True)..ot_mapping_linear.fit |
11080 | 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 66 6f 72 20 6f 72 69 67 69 6e 61 6c 20 73 | (Xs=Xs,.Xt=Xt)..#.for.original.s |
110a0 | 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 2c 20 74 72 61 6e 73 66 6f 72 6d 20 61 70 70 6c 69 65 73 | ource.samples,.transform.applies |
110c0 | 20 62 61 72 79 63 65 6e 74 72 69 63 20 6d 61 70 70 69 6e 67 0a 74 72 61 6e 73 70 5f 58 73 5f 6c | .barycentric.mapping.transp_Xs_l |
110e0 | 69 6e 65 61 72 20 3d 20 6f 74 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 2e 74 72 61 6e 73 66 | inear.=.ot_mapping_linear.transf |
11100 | 6f 72 6d 28 58 73 3d 58 73 29 0a 0a 23 20 66 6f 72 20 6f 75 74 20 6f 66 20 73 6f 75 72 63 65 20 | orm(Xs=Xs)..#.for.out.of.source. |
11120 | 73 61 6d 70 6c 65 73 2c 20 74 72 61 6e 73 66 6f 72 6d 20 61 70 70 6c 69 65 73 20 74 68 65 20 6c | samples,.transform.applies.the.l |
11140 | 69 6e 65 61 72 20 6d 61 70 70 69 6e 67 0a 74 72 61 6e 73 70 5f 58 73 5f 6c 69 6e 65 61 72 5f 6e | inear.mapping.transp_Xs_linear_n |
11160 | 65 77 20 3d 20 6f 74 5f 6d 61 70 70 69 6e 67 5f 6c 69 6e 65 61 72 2e 74 72 61 6e 73 66 6f 72 6d | ew.=.ot_mapping_linear.transform |
11180 | 28 58 73 3d 58 73 5f 6e 65 77 29 0a 0a 0a 23 20 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f 72 74 | (Xs=Xs_new)...#.MappingTransport |
111a0 | 20 77 69 74 68 20 67 61 75 73 73 69 61 6e 20 6b 65 72 6e 65 6c 0a 6f 74 5f 6d 61 70 70 69 6e 67 | .with.gaussian.kernel.ot_mapping |
111c0 | 5f 67 61 75 73 73 69 61 6e 20 3d 20 6f 74 2e 64 61 2e 4d 61 70 70 69 6e 67 54 72 61 6e 73 70 6f | _gaussian.=.ot.da.MappingTranspo |
111e0 | 72 74 28 0a 20 20 20 20 6b 65 72 6e 65 6c 3d 22 67 61 75 73 73 69 61 6e 22 2c 20 65 74 61 3d 31 | rt(.....kernel="gaussian",.eta=1 |
11200 | 65 2d 35 2c 20 6d 75 3d 31 65 2d 31 2c 20 62 69 61 73 3d 54 72 75 65 2c 20 73 69 67 6d 61 3d 31 | e-5,.mu=1e-1,.bias=True,.sigma=1 |
11220 | 2c 0a 20 20 20 20 6d 61 78 5f 69 74 65 72 3d 31 30 2c 20 76 65 72 62 6f 73 65 3d 54 72 75 65 29 | ,.....max_iter=10,.verbose=True) |
11240 | 0a 6f 74 5f 6d 61 70 70 69 6e 67 5f 67 61 75 73 73 69 61 6e 2e 66 69 74 28 58 73 3d 58 73 2c 20 | .ot_mapping_gaussian.fit(Xs=Xs,. |
11260 | 58 74 3d 58 74 29 0a 0a 23 20 66 6f 72 20 6f 72 69 67 69 6e 61 6c 20 73 6f 75 72 63 65 20 73 61 | Xt=Xt)..#.for.original.source.sa |
11280 | 6d 70 6c 65 73 2c 20 74 72 61 6e 73 66 6f 72 6d 20 61 70 70 6c 69 65 73 20 62 61 72 79 63 65 6e | mples,.transform.applies.barycen |
112a0 | 74 72 69 63 20 6d 61 70 70 69 6e 67 0a 74 72 61 6e 73 70 5f 58 73 5f 67 61 75 73 73 69 61 6e 20 | tric.mapping.transp_Xs_gaussian. |
112c0 | 3d 20 6f 74 5f 6d 61 70 70 69 6e 67 5f 67 61 75 73 73 69 61 6e 2e 74 72 61 6e 73 66 6f 72 6d 28 | =.ot_mapping_gaussian.transform( |
112e0 | 58 73 3d 58 73 29 0a 0a 23 20 66 6f 72 20 6f 75 74 20 6f 66 20 73 6f 75 72 63 65 20 73 61 6d 70 | Xs=Xs)..#.for.out.of.source.samp |
11300 | 6c 65 73 2c 20 74 72 61 6e 73 66 6f 72 6d 20 61 70 70 6c 69 65 73 20 74 68 65 20 67 61 75 73 73 | les,.transform.applies.the.gauss |
11320 | 69 61 6e 20 6d 61 70 70 69 6e 67 0a 74 72 61 6e 73 70 5f 58 73 5f 67 61 75 73 73 69 61 6e 5f 6e | ian.mapping.transp_Xs_gaussian_n |
11340 | 65 77 20 3d 20 6f 74 5f 6d 61 70 70 69 6e 67 5f 67 61 75 73 73 69 61 6e 2e 74 72 61 6e 73 66 6f | ew.=.ot_mapping_gaussian.transfo |
11360 | 72 6d 28 58 73 3d 58 73 5f 6e 65 77 29 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | rm(Xs=Xs_new)...################ |
11380 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
113a0 | 23 23 23 23 23 23 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 | ##############################.# |
113c0 | 20 50 6c 6f 74 20 74 72 61 6e 73 70 6f 72 74 65 64 20 73 61 6d 70 6c 65 73 0a 23 20 2d 2d 2d 2d | .Plot.transported.samples.#.---- |
113e0 | 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( |
11400 | 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 32 2c 20 31 29 0a | 2).pl.clf().pl.subplot(2,.2,.1). |
11420 | 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 |
11440 | 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 | =yt,.marker='o',............labe |
11460 | 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 2e 32 29 0a 70 6c | l='Target.samples',.alpha=.2).pl |
11480 | 2e 73 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 6c 69 6e 65 61 72 5b 3a 2c 20 30 5d 2c | .scatter(transp_Xs_linear[:,.0], |
114a0 | 20 74 72 61 6e 73 70 5f 58 73 5f 6c 69 6e 65 61 72 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 20 6d | .transp_Xs_linear[:,.1],.c=ys,.m |
114c0 | 61 72 6b 65 72 3d 27 2b 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 4d 61 70 | arker='+',............label='Map |
114e0 | 70 65 64 20 73 6f 75 72 63 65 20 73 61 6d 70 6c 65 73 27 29 0a 70 6c 2e 74 69 74 6c 65 28 22 42 | ped.source.samples').pl.title("B |
11500 | 61 72 79 2e 20 6d 61 70 70 69 6e 67 20 28 6c 69 6e 65 61 72 29 22 29 0a 70 6c 2e 6c 65 67 65 6e | ary..mapping.(linear)").pl.legen |
11520 | 64 28 6c 6f 63 3d 30 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 32 29 0a 70 6c | d(loc=0)..pl.subplot(2,.2,.2).pl |
11540 | 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 |
11560 | 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= |
11580 | 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 2c 20 61 6c 70 68 61 3d 2e 32 29 0a 70 6c 2e 73 | 'Target.samples',.alpha=.2).pl.s |
115a0 | 63 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 6c 69 6e 65 61 72 5f 6e 65 77 5b 3a 2c 20 30 | catter(transp_Xs_linear_new[:,.0 |
115c0 | 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 6c 69 6e 65 61 72 5f 6e 65 77 5b 3a 2c 20 31 5d 2c 0a 20 | ],.transp_Xs_linear_new[:,.1],.. |
115e0 | 20 20 20 20 20 20 20 20 20 20 63 3d 79 73 2c 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c 61 62 65 | ..........c=ys,.marker='+',.labe |
11600 | 6c 3d 27 4c 65 61 72 6e 65 64 20 6d 61 70 70 69 6e 67 27 29 0a 70 6c 2e 74 69 74 6c 65 28 22 45 | l='Learned.mapping').pl.title("E |
11620 | 73 74 69 6d 2e 20 6d 61 70 70 69 6e 67 20 28 6c 69 6e 65 61 72 29 22 29 0a 0a 70 6c 2e 73 75 62 | stim..mapping.(linear)")..pl.sub |
11640 | 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 58 74 5b 3a 2c 20 30 | plot(2,.2,.3).pl.scatter(Xt[:,.0 |
11660 | 5d 2c 20 58 74 5b 3a 2c 20 31 5d 2c 20 63 3d 79 74 2c 20 6d 61 72 6b 65 72 3d 27 6f 27 2c 0a 20 | ],.Xt[:,.1],.c=yt,.marker='o',.. |
11680 | 20 20 20 20 20 20 20 20 20 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 73 61 6d 70 6c 65 73 27 | ..........label='Target.samples' |
116a0 | 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 73 | ,.alpha=.2).pl.scatter(transp_Xs |
116c0 | 5f 67 61 75 73 73 69 61 6e 5b 3a 2c 20 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 67 61 75 73 73 | _gaussian[:,.0],.transp_Xs_gauss |
116e0 | 69 61 6e 5b 3a 2c 20 31 5d 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b | ian[:,.1],.c=ys,............mark |
11700 | 65 72 3d 27 2b 27 2c 20 6c 61 62 65 6c 3d 27 62 61 72 79 63 65 6e 74 72 69 63 20 6d 61 70 70 69 | er='+',.label='barycentric.mappi |
11720 | 6e 67 27 29 0a 70 6c 2e 74 69 74 6c 65 28 22 42 61 72 79 2e 20 6d 61 70 70 69 6e 67 20 28 6b 65 | ng').pl.title("Bary..mapping.(ke |
11740 | 72 6e 65 6c 29 22 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 32 2c 20 34 29 0a 70 6c 2e | rnel)")..pl.subplot(2,.2,.4).pl. |
11760 | 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 |
11780 | 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=' |
117a0 | 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 |
117c0 | 61 74 74 65 72 28 74 72 61 6e 73 70 5f 58 73 5f 67 61 75 73 73 69 61 6e 5f 6e 65 77 5b 3a 2c 20 | atter(transp_Xs_gaussian_new[:,. |
117e0 | 30 5d 2c 20 74 72 61 6e 73 70 5f 58 73 5f 67 61 75 73 73 69 61 6e 5f 6e 65 77 5b 3a 2c 20 31 5d | 0],.transp_Xs_gaussian_new[:,.1] |
11800 | 2c 20 63 3d 79 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 61 72 6b 65 72 3d 27 2b 27 2c 20 6c | ,.c=ys,............marker='+',.l |
11820 | 61 62 65 6c 3d 27 4c 65 61 72 6e 65 64 20 6d 61 70 70 69 6e 67 27 29 0a 70 6c 2e 74 69 74 6c 65 | abel='Learned.mapping').pl.title |
11840 | 28 22 45 73 74 69 6d 2e 20 6d 61 70 70 69 6e 67 20 28 6b 65 72 6e 65 6c 29 22 29 0a 70 6c 2e 74 | ("Estim..mapping.(kernel)").pl.t |
11860 | 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 | ight_layout()..pl.show().PK..... |
11880 | 00 00 00 b3 5c 6f 4e 7a 2e b5 2b 65 09 00 00 65 09 00 00 13 00 00 00 70 6c 6f 74 5f 63 6f 6d 70 | ....\oNz..+e...e.......plot_comp |
118a0 | 75 74 65 5f 65 6d 64 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 20 2d 2a | ute_emd.py#.-*-.coding:.utf-8.-* |
118c0 | 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 50 6c 6f 74 20 6d 75 6c | -.""".=================.Plot.mul |
118e0 | 74 69 70 6c 65 20 45 4d 44 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 53 68 6f | tiple.EMD.=================..Sho |
11900 | 77 73 20 68 6f 77 20 74 6f 20 63 6f 6d 70 75 74 65 20 6d 75 6c 74 69 70 6c 65 20 45 4d 44 20 61 | ws.how.to.compute.multiple.EMD.a |
11920 | 6e 64 20 53 69 6e 6b 68 6f 72 6e 20 77 69 74 68 20 74 77 6f 20 64 69 66 66 65 72 6e 74 0a 67 72 | nd.Sinkhorn.with.two.differnt.gr |
11940 | 6f 75 6e 64 20 6d 65 74 72 69 63 73 20 61 6e 64 20 70 6c 6f 74 20 74 68 65 69 72 20 76 61 6c 75 | ound.metrics.and.plot.their.valu |
11960 | 65 73 20 66 6f 72 20 64 69 66 66 65 65 6e 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 2e 0a 0a | es.for.diffeent.distributions... |
11980 | 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 |
119a0 | 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 |
119c0 | 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 |
119e0 | 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. |
11a00 | 69 6d 70 6f 72 74 20 6f 74 0a 66 72 6f 6d 20 6f 74 2e 64 61 74 61 73 65 74 73 20 69 6d 70 6f 72 | import.ot.from.ot.datasets.impor |
11a20 | 74 20 6d 61 6b 65 5f 31 44 5f 67 61 75 73 73 20 61 73 20 67 61 75 73 73 0a 0a 0a 23 23 23 23 23 | t.make_1D_gauss.as.gauss...##### |
11a40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
11a60 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
11a80 | 23 23 23 23 23 23 23 23 23 0a 23 20 47 65 6e 65 72 61 74 65 20 64 61 74 61 0a 23 20 2d 2d 2d 2d | #########.#.Generate.data.#.---- |
11aa0 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 70 61 72 61 6d 65 74 65 72 73 0a 0a 6e 20 3d 20 31 | ---------..#%%.parameters..n.=.1 |
11ac0 | 30 30 20 20 23 20 6e 62 20 62 69 6e 73 0a 6e 5f 74 61 72 67 65 74 20 3d 20 35 30 20 20 23 20 6e | 00..#.nb.bins.n_target.=.50..#.n |
11ae0 | 62 20 74 61 72 67 65 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 0a 23 20 62 69 6e 20 70 | b.target.distributions...#.bin.p |
11b00 | 6f 73 69 74 69 6f 6e 73 0a 78 20 3d 20 6e 70 2e 61 72 61 6e 67 65 28 6e 2c 20 64 74 79 70 65 3d | ositions.x.=.np.arange(n,.dtype= |
11b20 | 6e 70 2e 66 6c 6f 61 74 36 34 29 0a 0a 6c 73 74 5f 6d 20 3d 20 6e 70 2e 6c 69 6e 73 70 61 63 65 | np.float64)..lst_m.=.np.linspace |
11b40 | 28 32 30 2c 20 39 30 2c 20 6e 5f 74 61 72 67 65 74 29 0a 0a 23 20 47 61 75 73 73 69 61 6e 20 64 | (20,.90,.n_target)..#.Gaussian.d |
11b60 | 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 61 20 3d 20 67 61 75 73 73 28 6e 2c 20 6d 3d 32 30 2c 20 | istributions.a.=.gauss(n,.m=20,. |
11b80 | 73 3d 35 29 20 20 23 20 6d 3d 20 6d 65 61 6e 2c 20 73 3d 20 73 74 64 0a 0a 42 20 3d 20 6e 70 2e | s=5)..#.m=.mean,.s=.std..B.=.np. |
11ba0 | 7a 65 72 6f 73 28 28 6e 2c 20 6e 5f 74 61 72 67 65 74 29 29 0a 0a 66 6f 72 20 69 2c 20 6d 20 69 | zeros((n,.n_target))..for.i,.m.i |
11bc0 | 6e 20 65 6e 75 6d 65 72 61 74 65 28 6c 73 74 5f 6d 29 3a 0a 20 20 20 20 42 5b 3a 2c 20 69 5d 20 | n.enumerate(lst_m):.....B[:,.i]. |
11be0 | 3d 20 67 61 75 73 73 28 6e 2c 20 6d 3d 6d 2c 20 73 3d 35 29 0a 0a 23 20 6c 6f 73 73 20 6d 61 74 | =.gauss(n,.m=m,.s=5)..#.loss.mat |
11c00 | 72 69 78 20 61 6e 64 20 6e 6f 72 6d 61 6c 69 7a 61 74 69 6f 6e 0a 4d 20 3d 20 6f 74 2e 64 69 73 | rix.and.normalization.M.=.ot.dis |
11c20 | 74 28 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 2c 20 78 2e 72 65 73 68 61 70 65 28 28 | t(x.reshape((n,.1)),.x.reshape(( |
11c40 | 6e 2c 20 31 29 29 2c 20 27 65 75 63 6c 69 64 65 61 6e 27 29 0a 4d 20 2f 3d 20 4d 2e 6d 61 78 28 | n,.1)),.'euclidean').M./=.M.max( |
11c60 | 29 0a 4d 32 20 3d 20 6f 74 2e 64 69 73 74 28 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 | ).M2.=.ot.dist(x.reshape((n,.1)) |
11c80 | 2c 20 78 2e 72 65 73 68 61 70 65 28 28 6e 2c 20 31 29 29 2c 20 27 73 71 65 75 63 6c 69 64 65 61 | ,.x.reshape((n,.1)),.'sqeuclidea |
11ca0 | 6e 27 29 0a 4d 32 20 2f 3d 20 4d 32 2e 6d 61 78 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 | n').M2./=.M2.max()..############ |
11cc0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
11ce0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
11d00 | 23 23 0a 23 20 50 6c 6f 74 20 64 61 74 61 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 23 25 25 20 | ##.#.Plot.data.#.---------..#%%. |
11d20 | 70 6c 6f 74 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 0a 0a 70 6c 2e 66 69 67 75 72 | plot.the.distributions..pl.figur |
11d40 | 65 28 31 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 31 2c 20 31 29 0a 70 6c 2e 70 6c 6f 74 | e(1).pl.subplot(2,.1,.1).pl.plot |
11d60 | 28 78 2c 20 61 2c 20 27 62 27 2c 20 6c 61 62 65 6c 3d 27 53 6f 75 72 63 65 20 64 69 73 74 72 69 | (x,.a,.'b',.label='Source.distri |
11d80 | 62 75 74 69 6f 6e 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 53 6f 75 72 63 65 20 64 69 73 74 72 69 | bution').pl.title('Source.distri |
11da0 | 62 75 74 69 6f 6e 27 29 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 31 2c 20 32 29 0a 70 6c 2e | bution').pl.subplot(2,.1,.2).pl. |
11dc0 | 70 6c 6f 74 28 78 2c 20 42 2c 20 6c 61 62 65 6c 3d 27 54 61 72 67 65 74 20 64 69 73 74 72 69 62 | plot(x,.B,.label='Target.distrib |
11de0 | 75 74 69 6f 6e 73 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 54 61 72 67 65 74 20 64 69 73 74 72 69 | utions').pl.title('Target.distri |
11e00 | 62 75 74 69 6f 6e 73 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 0a 23 23 | butions').pl.tight_layout()...## |
11e20 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
11e40 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
11e60 | 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 43 6f 6d 70 75 74 65 20 45 4d 44 20 66 6f 72 20 74 | ############.#.Compute.EMD.for.t |
11e80 | 68 65 20 64 69 66 66 65 72 65 6e 74 20 6c 6f 73 73 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | he.different.losses.#.---------- |
11ea0 | 2d 2d 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 | --------------------------..#%%. |
11ec0 | 43 6f 6d 70 75 74 65 20 61 6e 64 20 70 6c 6f 74 20 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 61 | Compute.and.plot.distributions.a |
11ee0 | 6e 64 20 6c 6f 73 73 20 6d 61 74 72 69 78 0a 0a 64 5f 65 6d 64 20 3d 20 6f 74 2e 65 6d 64 32 28 | nd.loss.matrix..d_emd.=.ot.emd2( |
11f00 | 61 2c 20 42 2c 20 4d 29 20 20 23 20 64 69 72 65 63 74 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f | a,.B,.M)..#.direct.computation.o |
11f20 | 66 20 45 4d 44 0a 64 5f 65 6d 64 32 20 3d 20 6f 74 2e 65 6d 64 32 28 61 2c 20 42 2c 20 4d 32 29 | f.EMD.d_emd2.=.ot.emd2(a,.B,.M2) |
11f40 | 20 20 23 20 64 69 72 65 63 74 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66 20 45 4d 44 20 77 69 | ..#.direct.computation.of.EMD.wi |
11f60 | 74 68 20 6c 6f 73 73 20 4d 32 0a 0a 0a 70 6c 2e 66 69 67 75 72 65 28 32 29 0a 70 6c 2e 70 6c 6f | th.loss.M2...pl.figure(2).pl.plo |
11f80 | 74 28 64 5f 65 6d 64 2c 20 6c 61 62 65 6c 3d 27 45 75 63 6c 69 64 65 61 6e 20 45 4d 44 27 29 0a | t(d_emd,.label='Euclidean.EMD'). |
11fa0 | 70 6c 2e 70 6c 6f 74 28 64 5f 65 6d 64 32 2c 20 6c 61 62 65 6c 3d 27 53 71 75 61 72 65 64 20 45 | pl.plot(d_emd2,.label='Squared.E |
11fc0 | 75 63 6c 69 64 65 61 6e 20 45 4d 44 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 45 4d 44 20 64 69 73 | uclidean.EMD').pl.title('EMD.dis |
11fe0 | 74 61 6e 63 65 73 27 29 0a 70 6c 2e 6c 65 67 65 6e 64 28 29 0a 0a 23 23 23 23 23 23 23 23 23 23 | tances').pl.legend()..########## |
12000 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
12020 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
12040 | 23 23 23 23 0a 23 20 43 6f 6d 70 75 74 65 20 53 69 6e 6b 68 6f 72 6e 20 66 6f 72 20 74 68 65 20 | ####.#.Compute.Sinkhorn.for.the. |
12060 | 64 69 66 66 65 72 65 6e 74 20 6c 6f 73 73 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | different.losses.#.------------- |
12080 | 2d 2d 2d 2d 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 | ----------------------------..#% |
120a0 | 25 0a 72 65 67 20 3d 20 31 65 2d 32 0a 64 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 2e 73 69 6e | %.reg.=.1e-2.d_sinkhorn.=.ot.sin |
120c0 | 6b 68 6f 72 6e 32 28 61 2c 20 42 2c 20 4d 2c 20 72 65 67 29 0a 64 5f 73 69 6e 6b 68 6f 72 6e 32 | khorn2(a,.B,.M,.reg).d_sinkhorn2 |
120e0 | 20 3d 20 6f 74 2e 73 69 6e 6b 68 6f 72 6e 32 28 61 2c 20 42 2c 20 4d 32 2c 20 72 65 67 29 0a 0a | .=.ot.sinkhorn2(a,.B,.M2,.reg).. |
12100 | 70 6c 2e 66 69 67 75 72 65 28 32 29 0a 70 6c 2e 63 6c 66 28 29 0a 70 6c 2e 70 6c 6f 74 28 64 5f | pl.figure(2).pl.clf().pl.plot(d_ |
12120 | 65 6d 64 2c 20 6c 61 62 65 6c 3d 27 45 75 63 6c 69 64 65 61 6e 20 45 4d 44 27 29 0a 70 6c 2e 70 | emd,.label='Euclidean.EMD').pl.p |
12140 | 6c 6f 74 28 64 5f 65 6d 64 32 2c 20 6c 61 62 65 6c 3d 27 53 71 75 61 72 65 64 20 45 75 63 6c 69 | lot(d_emd2,.label='Squared.Eucli |
12160 | 64 65 61 6e 20 45 4d 44 27 29 0a 70 6c 2e 70 6c 6f 74 28 64 5f 73 69 6e 6b 68 6f 72 6e 2c 20 27 | dean.EMD').pl.plot(d_sinkhorn,.' |
12180 | 2b 27 2c 20 6c 61 62 65 6c 3d 27 45 75 63 6c 69 64 65 61 6e 20 53 69 6e 6b 68 6f 72 6e 27 29 0a | +',.label='Euclidean.Sinkhorn'). |
121a0 | 70 6c 2e 70 6c 6f 74 28 64 5f 73 69 6e 6b 68 6f 72 6e 32 2c 20 27 2b 27 2c 20 6c 61 62 65 6c 3d | pl.plot(d_sinkhorn2,.'+',.label= |
121c0 | 27 53 71 75 61 72 65 64 20 45 75 63 6c 69 64 65 61 6e 20 53 69 6e 6b 68 6f 72 6e 27 29 0a 70 6c | 'Squared.Euclidean.Sinkhorn').pl |
121e0 | 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 |
12200 | 64 28 29 0a 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 b3 5c 6f 4e d1 a8 d7 | d()..pl.show().PK.........\oN... |
12220 | 2e a9 09 00 00 a9 09 00 00 20 00 00 00 70 6c 6f 74 5f 63 6f 6e 76 6f 6c 75 74 69 6f 6e 61 6c 5f | .............plot_convolutional_ |
12240 | 62 61 72 79 63 65 6e 74 65 72 2e 70 79 0a 23 25 25 0a 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 | barycenter.py.#%%.#.-*-.coding:. |
12260 | 75 74 66 2d 38 20 2d 2a 2d 0a 22 22 22 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | utf-8.-*-.""".================== |
12280 | 3d 3d 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 43 6f 6e 76 6f | ==========================.Convo |
122a0 | 6c 75 74 69 6f 6e 61 6c 20 57 61 73 73 65 72 73 74 65 69 6e 20 42 61 72 79 63 65 6e 74 65 72 20 | lutional.Wasserstein.Barycenter. |
122c0 | 65 78 61 6d 70 6c 65 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 | example.======================== |
122e0 | 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 | ====================..This.examp |
12300 | 6c 65 20 69 73 20 64 65 73 69 67 6e 65 64 20 74 6f 20 69 6c 6c 75 73 74 72 61 74 65 20 68 6f 77 | le.is.designed.to.illustrate.how |
12320 | 20 74 68 65 20 43 6f 6e 76 6f 6c 75 74 69 6f 6e 61 6c 20 57 61 73 73 65 72 73 74 65 69 6e 20 42 | .the.Convolutional.Wasserstein.B |
12340 | 61 72 79 63 65 6e 74 65 72 0a 66 75 6e 63 74 69 6f 6e 20 6f 66 20 50 4f 54 20 77 6f 72 6b 73 2e | arycenter.function.of.POT.works. |
12360 | 0a 22 22 22 0a 0a 23 20 41 75 74 68 6f 72 3a 20 4e 69 63 6f 6c 61 73 20 43 6f 75 72 74 79 20 3c | ."""..#.Author:.Nicolas.Courty.< |
12380 | 6e 63 6f 75 72 74 79 40 69 72 69 73 61 2e 66 72 3e 0a 23 0a 23 20 4c 69 63 65 6e 73 65 3a 20 4d | ncourty@irisa.fr>.#.#.License:.M |
123a0 | 49 54 20 4c 69 63 65 6e 73 65 0a 0a 0a 69 6d 70 6f 72 74 20 6e 75 6d 70 79 20 61 73 20 6e 70 0a | IT.License...import.numpy.as.np. |
123c0 | 69 6d 70 6f 72 74 20 70 79 6c 61 62 20 61 73 20 70 6c 0a 69 6d 70 6f 72 74 20 6f 74 0a 0a 23 23 | import.pylab.as.pl.import.ot..## |
123e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
12400 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
12420 | 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 44 61 74 61 20 70 72 65 70 61 72 61 74 69 6f 6e 0a | ############.#.Data.preparation. |
12440 | 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 23 20 54 68 65 20 66 6f 75 72 20 | #.----------------.#.#.The.four. |
12460 | 64 69 73 74 72 69 62 75 74 69 6f 6e 73 20 61 72 65 20 63 6f 6e 73 74 72 75 63 74 65 64 20 66 72 | distributions.are.constructed.fr |
12480 | 6f 6d 20 34 20 73 69 6d 70 6c 65 20 69 6d 61 67 65 73 0a 0a 0a 66 31 20 3d 20 31 20 2d 20 70 6c | om.4.simple.images...f1.=.1.-.pl |
124a0 | 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 72 65 64 63 72 6f 73 73 2e 70 6e 67 27 29 5b | .imread('../data/redcross.png')[ |
124c0 | 3a 2c 20 3a 2c 20 32 5d 0a 66 32 20 3d 20 31 20 2d 20 70 6c 2e 69 6d 72 65 61 64 28 27 2e 2e 2f | :,.:,.2].f2.=.1.-.pl.imread('../ |
124e0 | 64 61 74 61 2f 64 75 63 6b 2e 70 6e 67 27 29 5b 3a 2c 20 3a 2c 20 32 5d 0a 66 33 20 3d 20 31 20 | data/duck.png')[:,.:,.2].f3.=.1. |
12500 | 2d 20 70 6c 2e 69 6d 72 65 61 64 28 27 2e 2e 2f 64 61 74 61 2f 68 65 61 72 74 2e 70 6e 67 27 29 | -.pl.imread('../data/heart.png') |
12520 | 5b 3a 2c 20 3a 2c 20 32 5d 0a 66 34 20 3d 20 31 20 2d 20 70 6c 2e 69 6d 72 65 61 64 28 27 2e 2e | [:,.:,.2].f4.=.1.-.pl.imread('.. |
12540 | 2f 64 61 74 61 2f 74 6f 6f 74 68 2e 70 6e 67 27 29 5b 3a 2c 20 3a 2c 20 32 5d 0a 0a 41 20 3d 20 | /data/tooth.png')[:,.:,.2]..A.=. |
12560 | 5b 5d 0a 66 31 20 3d 20 66 31 20 2f 20 6e 70 2e 73 75 6d 28 66 31 29 0a 66 32 20 3d 20 66 32 20 | [].f1.=.f1./.np.sum(f1).f2.=.f2. |
12580 | 2f 20 6e 70 2e 73 75 6d 28 66 32 29 0a 66 33 20 3d 20 66 33 20 2f 20 6e 70 2e 73 75 6d 28 66 33 | /.np.sum(f2).f3.=.f3./.np.sum(f3 |
125a0 | 29 0a 66 34 20 3d 20 66 34 20 2f 20 6e 70 2e 73 75 6d 28 66 34 29 0a 41 2e 61 70 70 65 6e 64 28 | ).f4.=.f4./.np.sum(f4).A.append( |
125c0 | 66 31 29 0a 41 2e 61 70 70 65 6e 64 28 66 32 29 0a 41 2e 61 70 70 65 6e 64 28 66 33 29 0a 41 2e | f1).A.append(f2).A.append(f3).A. |
125e0 | 61 70 70 65 6e 64 28 66 34 29 0a 41 20 3d 20 6e 70 2e 61 72 72 61 79 28 41 29 0a 0a 6e 62 5f 69 | append(f4).A.=.np.array(A)..nb_i |
12600 | 6d 61 67 65 73 20 3d 20 35 0a 0a 23 20 74 68 6f 73 65 20 61 72 65 20 74 68 65 20 66 6f 75 72 20 | mages.=.5..#.those.are.the.four. |
12620 | 63 6f 72 6e 65 72 73 20 63 6f 6f 72 64 69 6e 61 74 65 73 20 74 68 61 74 20 77 69 6c 6c 20 62 65 | corners.coordinates.that.will.be |
12640 | 20 69 6e 74 65 72 70 6f 6c 61 74 65 64 20 62 79 20 62 69 6c 69 6e 65 61 72 0a 23 20 69 6e 74 65 | .interpolated.by.bilinear.#.inte |
12660 | 72 70 6f 6c 61 74 69 6f 6e 0a 76 31 20 3d 20 6e 70 2e 61 72 72 61 79 28 28 31 2c 20 30 2c 20 30 | rpolation.v1.=.np.array((1,.0,.0 |
12680 | 2c 20 30 29 29 0a 76 32 20 3d 20 6e 70 2e 61 72 72 61 79 28 28 30 2c 20 31 2c 20 30 2c 20 30 29 | ,.0)).v2.=.np.array((0,.1,.0,.0) |
126a0 | 29 0a 76 33 20 3d 20 6e 70 2e 61 72 72 61 79 28 28 30 2c 20 30 2c 20 31 2c 20 30 29 29 0a 76 34 | ).v3.=.np.array((0,.0,.1,.0)).v4 |
126c0 | 20 3d 20 6e 70 2e 61 72 72 61 79 28 28 30 2c 20 30 2c 20 30 2c 20 31 29 29 0a 0a 0a 23 23 23 23 | .=.np.array((0,.0,.0,.1))...#### |
126e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
12700 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
12720 | 23 23 23 23 23 23 23 23 23 23 0a 23 20 42 61 72 79 63 65 6e 74 65 72 20 63 6f 6d 70 75 74 61 74 | ##########.#.Barycenter.computat |
12740 | 69 6f 6e 20 61 6e 64 20 76 69 73 75 61 6c 69 7a 61 74 69 6f 6e 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d | ion.and.visualization.#.-------- |
12760 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
12780 | 0a 23 0a 0a 70 6c 2e 66 69 67 75 72 65 28 66 69 67 73 69 7a 65 3d 28 31 30 2c 20 31 30 29 29 0a | .#..pl.figure(figsize=(10,.10)). |
127a0 | 70 6c 2e 74 69 74 6c 65 28 27 43 6f 6e 76 6f 6c 75 74 69 6f 6e 61 6c 20 57 61 73 73 65 72 73 74 | pl.title('Convolutional.Wasserst |
127c0 | 65 69 6e 20 42 61 72 79 63 65 6e 74 65 72 73 20 69 6e 20 50 4f 54 27 29 0a 63 6d 20 3d 20 27 42 | ein.Barycenters.in.POT').cm.=.'B |
127e0 | 6c 75 65 73 27 0a 23 20 72 65 67 75 6c 61 72 69 7a 61 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 | lues'.#.regularization.parameter |
12800 | 0a 72 65 67 20 3d 20 30 2e 30 30 34 0a 66 6f 72 20 69 20 69 6e 20 72 61 6e 67 65 28 6e 62 5f 69 | .reg.=.0.004.for.i.in.range(nb_i |
12820 | 6d 61 67 65 73 29 3a 0a 20 20 20 20 66 6f 72 20 6a 20 69 6e 20 72 61 6e 67 65 28 6e 62 5f 69 6d | mages):.....for.j.in.range(nb_im |
12840 | 61 67 65 73 29 3a 0a 20 20 20 20 20 20 20 20 70 6c 2e 73 75 62 70 6c 6f 74 28 6e 62 5f 69 6d 61 | ages):.........pl.subplot(nb_ima |
12860 | 67 65 73 2c 20 6e 62 5f 69 6d 61 67 65 73 2c 20 69 20 2a 20 6e 62 5f 69 6d 61 67 65 73 20 2b 20 | ges,.nb_images,.i.*.nb_images.+. |
12880 | 6a 20 2b 20 31 29 0a 20 20 20 20 20 20 20 20 74 78 20 3d 20 66 6c 6f 61 74 28 69 29 20 2f 20 28 | j.+.1).........tx.=.float(i)./.( |
128a0 | 6e 62 5f 69 6d 61 67 65 73 20 2d 20 31 29 0a 20 20 20 20 20 20 20 20 74 79 20 3d 20 66 6c 6f 61 | nb_images.-.1).........ty.=.floa |
128c0 | 74 28 6a 29 20 2f 20 28 6e 62 5f 69 6d 61 67 65 73 20 2d 20 31 29 0a 0a 20 20 20 20 20 20 20 20 | t(j)./.(nb_images.-.1).......... |
128e0 | 23 20 77 65 69 67 68 74 73 20 61 72 65 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 62 69 6c | #.weights.are.constructed.by.bil |
12900 | 69 6e 65 61 72 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 0a 20 20 20 20 20 20 20 20 74 6d 70 31 | inear.interpolation.........tmp1 |
12920 | 20 3d 20 28 31 20 2d 20 74 78 29 20 2a 20 76 31 20 2b 20 74 78 20 2a 20 76 32 0a 20 20 20 20 20 | .=.(1.-.tx).*.v1.+.tx.*.v2...... |
12940 | 20 20 20 74 6d 70 32 20 3d 20 28 31 20 2d 20 74 78 29 20 2a 20 76 33 20 2b 20 74 78 20 2a 20 76 | ...tmp2.=.(1.-.tx).*.v3.+.tx.*.v |
12960 | 34 0a 20 20 20 20 20 20 20 20 77 65 69 67 68 74 73 20 3d 20 28 31 20 2d 20 74 79 29 20 2a 20 74 | 4.........weights.=.(1.-.ty).*.t |
12980 | 6d 70 31 20 2b 20 74 79 20 2a 20 74 6d 70 32 0a 0a 20 20 20 20 20 20 20 20 69 66 20 69 20 3d 3d | mp1.+.ty.*.tmp2..........if.i.== |
129a0 | 20 30 20 61 6e 64 20 6a 20 3d 3d 20 30 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 6c 2e 69 6d | .0.and.j.==.0:.............pl.im |
129c0 | 73 68 6f 77 28 66 31 2c 20 63 6d 61 70 3d 63 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 6c | show(f1,.cmap=cm).............pl |
129e0 | 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 20 20 20 20 20 20 20 20 65 6c 69 66 20 69 20 3d 3d 20 30 | .axis('off').........elif.i.==.0 |
12a00 | 20 61 6e 64 20 6a 20 3d 3d 20 28 6e 62 5f 69 6d 61 67 65 73 20 2d 20 31 29 3a 0a 20 20 20 20 20 | .and.j.==.(nb_images.-.1):...... |
12a20 | 20 20 20 20 20 20 20 70 6c 2e 69 6d 73 68 6f 77 28 66 33 2c 20 63 6d 61 70 3d 63 6d 29 0a 20 20 | .......pl.imshow(f3,.cmap=cm)... |
12a40 | 20 20 20 20 20 20 20 20 20 20 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 20 20 20 20 20 20 20 | ..........pl.axis('off')........ |
12a60 | 20 65 6c 69 66 20 69 20 3d 3d 20 28 6e 62 5f 69 6d 61 67 65 73 20 2d 20 31 29 20 61 6e 64 20 6a | .elif.i.==.(nb_images.-.1).and.j |
12a80 | 20 3d 3d 20 30 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 6c 2e 69 6d 73 68 6f 77 28 66 32 2c | .==.0:.............pl.imshow(f2, |
12aa0 | 20 63 6d 61 70 3d 63 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 6c 2e 61 78 69 73 28 27 6f | .cmap=cm).............pl.axis('o |
12ac0 | 66 66 27 29 0a 20 20 20 20 20 20 20 20 65 6c 69 66 20 69 20 3d 3d 20 28 6e 62 5f 69 6d 61 67 65 | ff').........elif.i.==.(nb_image |
12ae0 | 73 20 2d 20 31 29 20 61 6e 64 20 6a 20 3d 3d 20 28 6e 62 5f 69 6d 61 67 65 73 20 2d 20 31 29 3a | s.-.1).and.j.==.(nb_images.-.1): |
12b00 | 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 6c 2e 69 6d 73 68 6f 77 28 66 34 2c 20 63 6d 61 70 3d | .............pl.imshow(f4,.cmap= |
12b20 | 63 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 20 | cm).............pl.axis('off').. |
12b40 | 20 20 20 20 20 20 20 65 6c 73 65 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 63 61 6c 6c 20 | .......else:.............#.call. |
12b60 | 74 6f 20 62 61 72 79 63 65 6e 74 65 72 20 63 6f 6d 70 75 74 61 74 69 6f 6e 0a 20 20 20 20 20 20 | to.barycenter.computation....... |
12b80 | 20 20 20 20 20 20 70 6c 2e 69 6d 73 68 6f 77 28 6f 74 2e 62 72 65 67 6d 61 6e 2e 63 6f 6e 76 6f | ......pl.imshow(ot.bregman.convo |
12ba0 | 6c 75 74 69 6f 6e 61 6c 5f 62 61 72 79 63 65 6e 74 65 72 32 64 28 41 2c 20 72 65 67 2c 20 77 65 | lutional_barycenter2d(A,.reg,.we |
12bc0 | 69 67 68 74 73 29 2c 20 63 6d 61 70 3d 63 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 6c 2e | ights),.cmap=cm).............pl. |
12be0 | 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 73 68 6f 77 28 29 0a 50 4b 03 04 14 00 00 00 00 00 | axis('off').pl.show().PK........ |
12c00 | c0 5c 6f 4e f4 37 b2 97 17 0e 00 00 17 0e 00 00 19 00 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 63 6f | .\oN.7..............plot_otda_co |
12c20 | 6c 6f 72 5f 69 6d 61 67 65 73 2e 70 79 23 20 2d 2a 2d 20 63 6f 64 69 6e 67 3a 20 75 74 66 2d 38 | lor_images.py#.-*-.coding:.utf-8 |
12c40 | 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 | .-*-.""".======================= |
12c60 | 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 |
12c80 | 74 69 6f 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d | tion.=========================== |
12ca0 | 3d 3d 0a 0a 54 68 69 73 20 65 78 61 6d 70 6c 65 20 70 72 65 73 65 6e 74 73 20 61 20 77 61 79 20 | ==..This.example.presents.a.way. |
12cc0 | 6f 66 20 74 72 61 6e 73 66 65 72 72 69 6e 67 20 63 6f 6c 6f 72 73 20 62 65 74 77 65 65 6e 20 74 | of.transferring.colors.between.t |
12ce0 | 77 6f 20 69 6d 61 67 65 73 0a 77 69 74 68 20 4f 70 74 69 6d 61 6c 20 54 72 61 6e 73 70 6f 72 74 | wo.images.with.Optimal.Transport |
12d00 | 20 61 73 20 69 6e 74 72 6f 64 75 63 65 64 20 69 6e 20 5b 36 5d 0a 0a 5b 36 5d 20 46 65 72 72 61 | .as.introduced.in.[6]..[6].Ferra |
12d20 | 64 61 6e 73 2c 20 53 2e 2c 20 50 61 70 61 64 61 6b 69 73 2c 20 4e 2e 2c 20 50 65 79 72 65 2c 20 | dans,.S.,.Papadakis,.N.,.Peyre,. |
12d40 | 47 2e 2c 20 26 20 41 75 6a 6f 6c 2c 20 4a 2e 20 46 2e 20 28 32 30 31 34 29 2e 0a 52 65 67 75 6c | G.,.&.Aujol,.J..F..(2014)..Regul |
12d60 | 61 72 69 7a 65 64 20 64 69 73 63 72 65 74 65 20 6f 70 74 69 6d 61 6c 20 74 72 61 6e 73 70 6f 72 | arized.discrete.optimal.transpor |
12d80 | 74 2e 0a 53 49 41 4d 20 4a 6f 75 72 6e 61 6c 20 6f 6e 20 49 6d 61 67 69 6e 67 20 53 63 69 65 6e | t..SIAM.Journal.on.Imaging.Scien |
12da0 | 63 65 73 2c 20 37 28 33 29 2c 20 31 38 35 33 2d 31 38 38 32 2e 0a 22 22 22 0a 0a 23 20 41 75 74 | ces,.7(3),.1853-1882.."""..#.Aut |
12dc0 | 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 |
12de0 | 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. |
12e00 | 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> |
12e20 | 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 |
12e40 | 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. |
12e60 | 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. |
12e80 | 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 72 61 6e 64 6f 6d 2e | as.pl.import.ot...r.=.np.random. |
12ea0 | 52 61 6e 64 6f 6d 53 74 61 74 65 28 34 32 29 0a 0a 0a 64 65 66 20 69 6d 32 6d 61 74 28 49 29 3a | RandomState(42)...def.im2mat(I): |
12ec0 | 0a 20 20 20 20 22 22 22 43 6f 6e 76 65 72 74 73 20 61 6e 20 69 6d 61 67 65 20 74 6f 20 6d 61 74 | ....."""Converts.an.image.to.mat |
12ee0 | 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)"""..... |
12f00 | 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 |
12f20 | 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 |
12f40 | 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. |
12f60 | 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""".... |
12f80 | 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 |
12fa0 | 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,. |
12fc0 | 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)...######################## |
12fe0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
13000 | 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 |
13020 | 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 |
13040 | 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('.. |
13060 | 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. |
13080 | 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 |
130a0 | 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 |
130c0 | 73 74 79 70 65 28 6e 70 2e 66 6c 6f 61 74 36 34 29 20 2f 20 32 35 36 0a 0a 58 31 20 3d 20 69 6d | stype(np.float64)./.256..X1.=.im |
130e0 | 32 6d 61 74 28 49 31 29 0a 58 32 20 3d 20 69 6d 32 6d 61 74 28 49 32 29 0a 0a 23 20 74 72 61 69 | 2mat(I1).X2.=.im2mat(I2)..#.trai |
13100 | 6e 69 6e 67 20 73 61 6d 70 6c 65 73 0a 6e 62 20 3d 20 31 30 30 30 0a 69 64 78 31 20 3d 20 72 2e | ning.samples.nb.=.1000.idx1.=.r. |
13120 | 72 61 6e 64 69 6e 74 28 58 31 2e 73 68 61 70 65 5b 30 5d 2c 20 73 69 7a 65 3d 28 6e 62 2c 29 29 | randint(X1.shape[0],.size=(nb,)) |
13140 | 0a 69 64 78 32 20 3d 20 72 2e 72 61 6e 64 69 6e 74 28 58 32 2e 73 68 61 70 65 5b 30 5d 2c 20 73 | .idx2.=.r.randint(X2.shape[0],.s |
13160 | 69 7a 65 3d 28 6e 62 2c 29 29 0a 0a 58 73 20 3d 20 58 31 5b 69 64 78 31 2c 20 3a 5d 0a 58 74 20 | ize=(nb,))..Xs.=.X1[idx1,.:].Xt. |
13180 | 3d 20 58 32 5b 69 64 78 32 2c 20 3a 5d 0a 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | =.X2[idx2,.:]...################ |
131a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
131c0 | 23 23 23 23 23 23 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 | ##############################.# |
131e0 | 20 50 6c 6f 74 20 6f 72 69 67 69 6e 61 6c 20 69 6d 61 67 65 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d | .Plot.original.image.#.--------- |
13200 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 67 75 72 65 28 31 2c 20 66 69 67 73 69 7a 65 | ----------..pl.figure(1,.figsize |
13220 | 3d 28 36 2e 34 2c 20 33 29 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0a | =(6.4,.3))..pl.subplot(1,.2,.1). |
13240 | 70 6c 2e 69 6d 73 68 6f 77 28 49 31 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e | pl.imshow(I1).pl.axis('off').pl. |
13260 | 74 69 74 6c 65 28 27 49 6d 61 67 65 20 31 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 | title('Image.1')..pl.subplot(1,. |
13280 | 32 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 | 2,.2).pl.imshow(I2).pl.axis('off |
132a0 | 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 32 27 29 0a 0a 0a 23 23 23 23 23 23 23 | ').pl.title('Image.2')...####### |
132c0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
132e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
13300 | 23 23 23 23 23 23 23 0a 23 20 53 63 61 74 74 65 72 20 70 6c 6f 74 20 6f 66 20 63 6f 6c 6f 72 73 | #######.#.Scatter.plot.of.colors |
13320 | 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 69 | .#.----------------------..pl.fi |
13340 | 67 75 72 65 28 32 2c 20 66 69 67 73 69 7a 65 3d 28 36 2e 34 2c 20 33 29 29 0a 0a 70 6c 2e 73 75 | gure(2,.figsize=(6.4,.3))..pl.su |
13360 | 62 70 6c 6f 74 28 31 2c 20 32 2c 20 31 29 0a 70 6c 2e 73 63 61 74 74 65 72 28 58 73 5b 3a 2c 20 | bplot(1,.2,.1).pl.scatter(Xs[:,. |
13380 | 30 5d 2c 20 58 73 5b 3a 2c 20 32 5d 2c 20 63 3d 58 73 29 0a 70 6c 2e 61 78 69 73 28 5b 30 2c 20 | 0],.Xs[:,.2],.c=Xs).pl.axis([0,. |
133a0 | 31 2c 20 30 2c 20 31 5d 29 0a 70 6c 2e 78 6c 61 62 65 6c 28 27 52 65 64 27 29 0a 70 6c 2e 79 6c | 1,.0,.1]).pl.xlabel('Red').pl.yl |
133c0 | 61 62 65 6c 28 27 42 6c 75 65 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 31 27 29 | abel('Blue').pl.title('Image.1') |
133e0 | 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 31 2c 20 32 2c 20 32 29 0a 70 6c 2e 73 63 61 74 74 65 72 | ..pl.subplot(1,.2,.2).pl.scatter |
13400 | 28 58 74 5b 3a 2c 20 30 5d 2c 20 58 74 5b 3a 2c 20 32 5d 2c 20 63 3d 58 74 29 0a 70 6c 2e 61 78 | (Xt[:,.0],.Xt[:,.2],.c=Xt).pl.ax |
13420 | 69 73 28 5b 30 2c 20 31 2c 20 30 2c 20 31 5d 29 0a 70 6c 2e 78 6c 61 62 65 6c 28 27 52 65 64 27 | is([0,.1,.0,.1]).pl.xlabel('Red' |
13440 | 29 0a 70 6c 2e 79 6c 61 62 65 6c 28 27 42 6c 75 65 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d | ).pl.ylabel('Blue').pl.title('Im |
13460 | 61 67 65 20 32 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 0a 23 23 23 23 | age.2').pl.tight_layout()...#### |
13480 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
134a0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
134c0 | 23 23 23 23 23 23 23 23 23 23 0a 23 20 49 6e 73 74 61 6e 74 69 61 74 65 20 74 68 65 20 64 69 66 | ##########.#.Instantiate.the.dif |
134e0 | 66 65 72 65 6e 74 20 74 72 61 6e 73 70 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d 73 20 61 6e 64 20 | ferent.transport.algorithms.and. |
13500 | 66 69 74 20 74 68 65 6d 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | fit.them.#.--------------------- |
13520 | 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | -------------------------------- |
13540 | 2d 2d 2d 2d 2d 2d 0a 0a 23 20 45 4d 44 54 72 61 6e 73 70 6f 72 74 0a 6f 74 5f 65 6d 64 20 3d 20 | ------..#.EMDTransport.ot_emd.=. |
13560 | 6f 74 2e 64 61 2e 45 4d 44 54 72 61 6e 73 70 6f 72 74 28 29 0a 6f 74 5f 65 6d 64 2e 66 69 74 28 | ot.da.EMDTransport().ot_emd.fit( |
13580 | 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 53 69 6e 6b 68 6f 72 6e 54 72 61 6e 73 70 6f | Xs=Xs,.Xt=Xt)..#.SinkhornTranspo |
135a0 | 72 74 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 2e 64 61 2e 53 69 6e 6b 68 6f 72 6e 54 | rt.ot_sinkhorn.=.ot.da.SinkhornT |
135c0 | 72 61 6e 73 70 6f 72 74 28 72 65 67 5f 65 3d 31 65 2d 31 29 0a 6f 74 5f 73 69 6e 6b 68 6f 72 6e | ransport(reg_e=1e-1).ot_sinkhorn |
135e0 | 2e 66 69 74 28 58 73 3d 58 73 2c 20 58 74 3d 58 74 29 0a 0a 23 20 70 72 65 64 69 63 74 69 6f 6e | .fit(Xs=Xs,.Xt=Xt)..#.prediction |
13600 | 20 62 65 74 77 65 65 6e 20 69 6d 61 67 65 73 20 28 75 73 69 6e 67 20 6f 75 74 20 6f 66 20 73 61 | .between.images.(using.out.of.sa |
13620 | 6d 70 6c 65 20 70 72 65 64 69 63 74 69 6f 6e 20 61 73 20 69 6e 20 5b 36 5d 29 0a 74 72 61 6e 73 | mple.prediction.as.in.[6]).trans |
13640 | 70 5f 58 73 5f 65 6d 64 20 3d 20 6f 74 5f 65 6d 64 2e 74 72 61 6e 73 66 6f 72 6d 28 58 73 3d 58 | p_Xs_emd.=.ot_emd.transform(Xs=X |
13660 | 31 29 0a 74 72 61 6e 73 70 5f 58 74 5f 65 6d 64 20 3d 20 6f 74 5f 65 6d 64 2e 69 6e 76 65 72 73 | 1).transp_Xt_emd.=.ot_emd.invers |
13680 | 65 5f 74 72 61 6e 73 66 6f 72 6d 28 58 74 3d 58 32 29 0a 0a 74 72 61 6e 73 70 5f 58 73 5f 73 69 | e_transform(Xt=X2)..transp_Xs_si |
136a0 | 6e 6b 68 6f 72 6e 20 3d 20 6f 74 5f 73 69 6e 6b 68 6f 72 6e 2e 74 72 61 6e 73 66 6f 72 6d 28 58 | nkhorn.=.ot_sinkhorn.transform(X |
136c0 | 73 3d 58 31 29 0a 74 72 61 6e 73 70 5f 58 74 5f 73 69 6e 6b 68 6f 72 6e 20 3d 20 6f 74 5f 73 69 | s=X1).transp_Xt_sinkhorn.=.ot_si |
136e0 | 6e 6b 68 6f 72 6e 2e 69 6e 76 65 72 73 65 5f 74 72 61 6e 73 66 6f 72 6d 28 58 74 3d 58 32 29 0a | nkhorn.inverse_transform(Xt=X2). |
13700 | 0a 49 31 74 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 74 72 61 6e 73 70 5f 58 73 5f 65 | .I1t.=.minmax(mat2im(transp_Xs_e |
13720 | 6d 64 2c 20 49 31 2e 73 68 61 70 65 29 29 0a 49 32 74 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 | md,.I1.shape)).I2t.=.minmax(mat2 |
13740 | 69 6d 28 74 72 61 6e 73 70 5f 58 74 5f 65 6d 64 2c 20 49 32 2e 73 68 61 70 65 29 29 0a 0a 49 31 | im(transp_Xt_emd,.I2.shape))..I1 |
13760 | 74 65 20 3d 20 6d 69 6e 6d 61 78 28 6d 61 74 32 69 6d 28 74 72 61 6e 73 70 5f 58 73 5f 73 69 6e | te.=.minmax(mat2im(transp_Xs_sin |
13780 | 6b 68 6f 72 6e 2c 20 49 31 2e 73 68 61 70 65 29 29 0a 49 32 74 65 20 3d 20 6d 69 6e 6d 61 78 28 | khorn,.I1.shape)).I2te.=.minmax( |
137a0 | 6d 61 74 32 69 6d 28 74 72 61 6e 73 70 5f 58 74 5f 73 69 6e 6b 68 6f 72 6e 2c 20 49 32 2e 73 68 | mat2im(transp_Xt_sinkhorn,.I2.sh |
137c0 | 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))...######################## |
137e0 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 | ################################ |
13800 | 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 50 6c 6f 74 20 6e 65 | ######################.#.Plot.ne |
13820 | 77 20 69 6d 61 67 65 73 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 70 6c 2e 66 | w.images.#.---------------..pl.f |
13840 | 69 67 75 72 65 28 33 2c 20 66 69 67 73 69 7a 65 3d 28 38 2c 20 34 29 29 0a 0a 70 6c 2e 73 75 62 | igure(3,.figsize=(8,.4))..pl.sub |
13860 | 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 |
13880 | 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 31 27 29 0a 0a | xis('off').pl.title('Image.1').. |
138a0 | 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 32 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 | pl.subplot(2,.3,.2).pl.imshow(I1 |
138c0 | 74 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 | t).pl.axis('off').pl.title('Imag |
138e0 | 65 20 31 20 41 64 61 70 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 33 29 | e.1.Adapt')..pl.subplot(2,.3,.3) |
13900 | 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 31 74 65 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a | .pl.imshow(I1te).pl.axis('off'). |
13920 | 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 31 20 41 64 61 70 74 20 28 72 65 67 29 27 29 0a | pl.title('Image.1.Adapt.(reg)'). |
13940 | 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 34 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 | .pl.subplot(2,.3,.4).pl.imshow(I |
13960 | 32 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 | 2).pl.axis('off').pl.title('Imag |
13980 | 65 20 32 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 2c 20 33 2c 20 35 29 0a 70 6c 2e 69 6d | e.2')..pl.subplot(2,.3,.5).pl.im |
139a0 | 73 68 6f 77 28 49 32 74 29 0a 70 6c 2e 61 78 69 73 28 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c | show(I2t).pl.axis('off').pl.titl |
139c0 | 65 28 27 49 6d 61 67 65 20 32 20 41 64 61 70 74 27 29 0a 0a 70 6c 2e 73 75 62 70 6c 6f 74 28 32 | e('Image.2.Adapt')..pl.subplot(2 |
139e0 | 2c 20 33 2c 20 36 29 0a 70 6c 2e 69 6d 73 68 6f 77 28 49 32 74 65 29 0a 70 6c 2e 61 78 69 73 28 | ,.3,.6).pl.imshow(I2te).pl.axis( |
13a00 | 27 6f 66 66 27 29 0a 70 6c 2e 74 69 74 6c 65 28 27 49 6d 61 67 65 20 32 20 41 64 61 70 74 20 28 | 'off').pl.title('Image.2.Adapt.( |
13a20 | 72 65 67 29 27 29 0a 70 6c 2e 74 69 67 68 74 5f 6c 61 79 6f 75 74 28 29 0a 0a 70 6c 2e 73 68 6f | reg)').pl.tight_layout()..pl.sho |
13a40 | 77 28 29 0a 50 4b 01 02 14 03 14 00 00 00 00 00 b3 5c 6f 4e c6 3b 52 da f3 0a 00 00 f3 0a 00 00 | w().PK...........\oN.;R......... |
13a60 | 0e 00 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 | ..................plot_gromov.py |
13a80 | 50 4b 01 02 14 03 14 00 00 00 00 00 b3 5c 6f 4e a4 4f 47 3f 0c 0c 00 00 0c 0c 00 00 0b 00 00 00 | PK...........\oN.OG?............ |
13aa0 | 00 00 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 | ..............plot_WDA.pyPK..... |
13ac0 | 00 00 00 00 00 a6 5d 6f 4e e5 d4 47 7d 9d 1c 00 00 9d 1c 00 00 19 00 00 00 00 00 00 00 00 00 00 | ......]oN..G}................... |
13ae0 | 00 b4 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 | ...T...plot_gromov_barycenter.py |
13b00 | 50 4b 01 02 14 03 14 00 00 00 00 00 b3 5c 6f 4e b8 cd f6 1b 7e 0b 00 00 7e 0b 00 00 13 00 00 00 | PK...........\oN....~...~....... |
13b20 | 00 00 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 | ..........(4..plot_optim_OTreg.p |
13b40 | 79 50 4b 01 02 14 03 14 00 00 00 00 00 a6 5d 6f 4e 39 06 7c 60 0c 15 00 00 0c 15 00 00 0f 00 00 | yPK...........]oN9.|`........... |
13b60 | 00 00 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 | ............?..plot_otda_d2.pyPK |
13b80 | 01 02 14 03 14 00 00 00 00 00 a6 5d 6f 4e 71 12 0d cb 23 12 00 00 23 12 00 00 1c 00 00 00 00 00 | ...........]oNq...#...#......... |
13ba0 | 00 00 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 | .........U..plot_otda_semi_super |
13bc0 | 76 69 73 65 64 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 b3 5c 6f 4e 0b 5c 2a af a2 06 00 00 | vised.pyPK...........\oN.\*..... |
13be0 | a2 06 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 | ..................mg..plot_OT_1D |
13c00 | 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 b4 5c 6f 4e 6d 8a 53 18 e2 17 00 00 e2 17 00 00 12 | .pyPK...........\oNm.S.......... |
13c20 | 00 00 00 00 00 00 00 00 00 00 00 b4 81 3a 6e 00 00 70 6c 6f 74 5f 73 74 6f 63 68 61 73 74 69 63 | .............:n..plot_stochastic |
13c40 | 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 3c 5d 6f 4e f2 7c 7e 9e 5c 0e 00 00 5c 0e 00 00 15 | .pyPK..........<]oN.|~.\...\.... |
13c60 | 00 00 00 00 00 00 00 00 00 00 00 b4 81 4c 86 00 00 70 6c 6f 74 5f 62 61 72 79 63 65 6e 74 65 72 | .............L...plot_barycenter |
13c80 | 5f 31 44 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 a6 5d 6f 4e b0 31 70 de ee 10 00 00 ee 10 | _1D.pyPK...........]oN.1p....... |
13ca0 | 00 00 14 00 00 00 00 00 00 00 00 00 00 00 b4 81 db 94 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 63 6c | ....................plot_otda_cl |
13cc0 | 61 73 73 65 73 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 b3 5c 6f 4e ff 09 e8 78 dd 08 00 00 | asses.pyPK...........\oN...x.... |
13ce0 | dd 08 00 00 14 00 00 00 00 00 00 00 00 00 00 00 b4 81 fb a5 00 00 70 6c 6f 74 5f 4f 54 5f 31 44 | ......................plot_OT_1D |
13d00 | 5f 73 6d 6f 6f 74 68 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 3d 5d 6f 4e b0 ed ff 28 54 10 | _smooth.pyPK..........=]oN...(T. |
13d20 | 00 00 54 10 00 00 22 00 00 00 00 00 00 00 00 00 00 00 b4 81 0a af 00 00 70 6c 6f 74 5f 6f 74 64 | ..T...".................plot_otd |
13d40 | 61 5f 6d 61 70 70 69 6e 67 5f 63 6f 6c 6f 72 73 5f 69 6d 61 67 65 73 2e 70 79 50 4b 01 02 14 03 | a_mapping_colors_images.pyPK.... |
13d60 | 14 00 00 00 00 00 b3 5c 6f 4e 90 0c 61 ee fa 07 00 00 fa 07 00 00 1f 00 00 00 00 00 00 00 00 00 | .......\oN..a................... |
13d80 | 00 00 b4 81 9e bf 00 00 70 6c 6f 74 5f 66 72 65 65 5f 73 75 70 70 6f 72 74 5f 62 61 72 79 63 65 | ........plot_free_support_baryce |
13da0 | 6e 74 65 72 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 a6 5d 6f 4e 6f 6c 58 5b 88 13 00 00 88 | nter.pyPK...........]oNolX[..... |
13dc0 | 13 00 00 13 00 00 00 00 00 00 00 00 00 00 00 b4 81 d5 c7 00 00 70 6c 6f 74 5f 4f 54 5f 4c 31 5f | .....................plot_OT_L1_ |
13de0 | 76 73 5f 4c 32 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 a6 5d 6f 4e a6 16 4e 83 2e 17 00 00 | vs_L2.pyPK...........]oN..N..... |
13e00 | 2e 17 00 00 21 00 00 00 00 00 00 00 00 00 00 00 b4 81 8e db 00 00 70 6c 6f 74 5f 62 61 72 79 63 | ....!.................plot_baryc |
13e20 | 65 6e 74 65 72 5f 6c 70 5f 76 73 5f 65 6e 74 72 6f 70 69 63 2e 70 79 50 4b 01 02 14 03 14 00 00 | enter_lp_vs_entropic.pyPK....... |
13e40 | 00 00 00 b3 5c 6f 4e bf 4a 09 ec 55 09 00 00 55 09 00 00 15 00 00 00 00 00 00 00 00 00 00 00 b4 | ....\oN.J..U...U................ |
13e60 | 81 fb f2 00 00 70 6c 6f 74 5f 4f 54 5f 32 44 5f 73 61 6d 70 6c 65 73 2e 70 79 50 4b 01 02 14 03 | .....plot_OT_2D_samples.pyPK.... |
13e80 | 14 00 00 00 00 00 b3 5c 6f 4e 0e e0 72 82 97 0b 00 00 97 0b 00 00 1b 00 00 00 00 00 00 00 00 00 | .......\oN..r................... |
13ea0 | 00 00 b4 81 83 fc 00 00 70 6c 6f 74 5f 6f 74 64 61 5f 6c 69 6e 65 61 72 5f 6d 61 70 70 69 6e 67 | ........plot_otda_linear_mapping |
13ec0 | 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 a6 5d 6f 4e cd ad d9 82 f4 0f 00 00 f4 0f 00 00 14 | .pyPK...........]oN............. |
13ee0 | 00 00 00 00 00 00 00 00 00 00 00 b4 81 53 08 01 00 70 6c 6f 74 5f 6f 74 64 61 5f 6d 61 70 70 69 | .............S...plot_otda_mappi |
13f00 | 6e 67 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 b3 5c 6f 4e 7a 2e b5 2b 65 09 00 00 65 09 00 | ng.pyPK...........\oNz..+e...e.. |
13f20 | 00 13 00 00 00 00 00 00 00 00 00 00 00 b4 81 79 18 01 00 70 6c 6f 74 5f 63 6f 6d 70 75 74 65 5f | ...............y...plot_compute_ |
13f40 | 65 6d 64 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 b3 5c 6f 4e d1 a8 d7 2e a9 09 00 00 a9 09 | emd.pyPK...........\oN.......... |
13f60 | 00 00 20 00 00 00 00 00 00 00 00 00 00 00 b4 81 0f 22 01 00 70 6c 6f 74 5f 63 6f 6e 76 6f 6c 75 | ................."..plot_convolu |
13f80 | 74 69 6f 6e 61 6c 5f 62 61 72 79 63 65 6e 74 65 72 2e 70 79 50 4b 01 02 14 03 14 00 00 00 00 00 | tional_barycenter.pyPK.......... |
13fa0 | c0 5c 6f 4e f4 37 b2 97 17 0e 00 00 17 0e 00 00 19 00 00 00 00 00 00 00 00 00 00 00 b4 81 f6 2b | .\oN.7.........................+ |
13fc0 | 01 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 00 | ..plot_otda_color_images.pyPK... |
13fe0 | 00 00 00 15 00 15 00 97 05 00 00 44 3a 01 00 00 00 | ...........D:.... |