Tutorials, applications

These tutorials present real-life applications of the pykeops.numpy and pykeops.torch modules, from Gaussian processes to Optimal Transport theory and K-means clustering.


If you run a KeOps script for the first time, the internal engine may take a few minutes to compile all the relevant formulas. Do not worry: this work is done once and for all as KeOps stores the resulting shared object files (‘.so’) in a cache directory.

Gaussian Mixture Models

KeOps can be used to fit Mixture Models with custom priors on large datasets:

Interpolation - Splines

Thanks to a simple conjugate gradient solver, the numpy.KernelSolve and torch.KernelSolve operators can be used to solve large-scale interpolation problems with a linear memory footprint.


A fast implementation of the K-means algorithm on the GPU.

K-Nearest Neighbors

K-NN classification using the ArgKMin reduction.

Kernel MMDs, Optimal Transport

Thanks to its support of the Sum and LogSumExp reductions, KeOps is perfectly suited to the large-scale computation of Kernel norms and Sinkhorn divergences. Going further, the block-sparse routines allow us to implement genuine coarse-to-fine strategies that scale (almost) linearly with the number of samples, as advocated in (Schmitzer, 2016).

Relying on the KeOps routines generic_sum() and generic_logsumexp(), the GeomLoss library provides Geometric Loss functions as simple PyTorch layers, with a fully-fledged gallery of examples. Implemented on the GPU for the very first time, these routines outperform the standard Sinkhorn algorithm by a factor 50-100 and redefine the state-of-the-art for discrete Optimal Transport: on modern hardware, Wasserstein distances between clouds of 100,000 points can now be computed in less than a second.