I’m pleased to announce OptimalTransport.jl, a Julia package (currently still a work-in-progress) offering various algorithms for computational optimal transport, such as the celebrated Sinkhorn scaling algorithm for entropically regularised optimal transport.
Many algorithms are implemented natively in Julia, whilst other functionality is currently offered as a wrapper to the excellent POT (Python OT) library . We will be progressively adding more Julia-implemented algorithms in the future.
Any feedback or suggestions are welcome!
Check out the documentation here:
using OptimalTransport using Seaborn μ_spt = ν_spt = LinRange(-2, 2, 100) C = pairwise(Euclidean(), μ_spt', ν_spt').^2 μ = exp.((-(μ_spt).^2)/0.5^2) μ /= sum(μ) ν = ν_spt.^2 .*exp.((-(ν_spt).^2)/0.5^2) ν /= sum(ν) γ = OptimalTransport.sinkhorn_stabilized(μ, ν, C, 1e-4, max_iter = 5000) using Random, Distributions F = DiscreteNonParametric(1:prod(size(γ)), reshape(γ, prod(size(γ)))) t = rand(F, 5*10^3) μ_idx = t .% size(γ, 1) ν_idx = t .÷ size(γ, 2) Seaborn.figure() Seaborn.jointplot(x = [μ_spt[i] for i in μ_idx], y = [ν_spt[i] for i in ν_idx], kind = "kde") Seaborn.gcf() Seaborn.savefig("example.png")
 POT Python Optimal Transport library, Flamary, Remi and Courty, Nicolas