Fast, parallel Rust implementation of the UMAP dimensionality reduction algorithm.
This library provides a streamlined implementation of UMAP (Uniform Manifold Approximation and Projection) focused on performance and correctness. It requires precomputed k-nearest neighbors and initialization, allowing you to use your preferred libraries for these steps.
Example
use umap::{Umap, UmapConfig};
use umap::EuclideanMetric;
// Configure UMAP
let config = UmapConfig::default();
let umap = Umap::new(config);
// Fit to data (requires precomputed KNN and initialization)
let model = umap.fit(
data.view(),
knn_indices.view(),
knn_dists.view(),
init.view(),
);
// Get the embedding
let embedding = model.embedding();
Features
- Parallel optimization: 4-8x speedup via Rayon's parallel SGD (Hogwild! algorithm)
- Euclidean specialization: Fast path for Euclidean metrics
- Generic metrics: Extensible via the
Metrictrait - Zero-copy views: Efficient array handling with
ndarray
Limitations
- Dense arrays only (no sparse matrix support)
- Fit only (transform for new points not yet implemented)
- Panics on invalid input (no Result-based error handling)
- Requires external KNN computation and initialization
Public API
The library exposes a minimal, well-defined API:
- [
Umap] - Main algorithm struct - [
FittedUmap] - Fitted model with embeddings - [
UmapConfig] - Configuration parameters - [
Metric] - Distance metric trait - [
EuclideanMetric] - Euclidean distance implementation