umap-rs 0.1.0

Fast, parallel Rust implementation of the core UMAP dimensionality reduction algorithm
Documentation

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 Metric trait
  • 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