Speed-up Sinkhorn by LeoGautheron · Pull Request #57 · PythonOT/POT
Speed-up in 3 places:
- the computation of pairwise distance is faster with sklearn.metrics.pairwise.euclidean_distances
- faster computation of K = np.exp(-M / reg)
- faster computation of the error every 10 iterations
Example with this little script:
import time
import numpy as np
import ot
rng = np.random.RandomState(0)
transport = ot.da.SinkhornTransport()
time1 = time.time()
Xs, ys, Xt = rng.randn(10000, 100), rng.randint(0, 2, size=10000), rng.randn(10000, 100)
transport.fit(Xs=Xs, Xt=Xt)
time2 = time.time()
print("OT Computation Time {:6.2f} sec".format(time2-time1))
transport = ot.da.SinkhornLpl1Transport()
transport.fit(Xs=Xs, ys=ys, Xt=Xt)
time3 = time.time()
print("OT LpL1 Computation Time {:6.2f} sec".format(time3-time2))
Before
OT Computation Time 19.93 sec
OT LpL1 Computation Time 133.43 sec
After
OT Computation Time 7.55 sec
OT LpL1 Computation Time 82.25 sec