Pairwise Distance Base#
base
#
| CLASS | DESCRIPTION |
|---|---|
PairwiseDistance |
Abstract base class for computing pairwise distances between samples. |
PairwiseDistanceRegistry |
Registry for pairwise distance classes. |
| FUNCTION | DESCRIPTION |
|---|---|
initialize_distance_fn |
Initialize a distance from an instance or registry name. |
Classes#
PairwiseDistance(reduce: Literal['mean', 'sum', 'none', None] = None, compute_mode: Literal['donot_use_mm_for_euclid_dist', 'use_mm_for_euclid_dist', 'use_mm_for_euclid_dist_if_necessary'] | None = 'donot_use_mm_for_euclid_dist', normalize: bool = False)
#
Bases: Module
Abstract base class for computing pairwise distances between samples.
Provides a unified interface for different distance metrics used in spectral
methods and manifold learning. All distance implementations should inherit
from this class and implement the forward_step method.
| PARAMETER | DESCRIPTION |
|---|---|
reduce
|
Reduction method for the computed distances.
TYPE:
|
compute_mode
|
Computation strategy for Euclidean distances.
TYPE:
|
normalize
|
Whether to normalize distances to unit scale.
TYPE:
|
Examples:
Creating a custom distance metric:
>>> import torch
>>> from spectre.pairwise_distance import PairwiseDistance
>>>
>>> class ManhattanDistance(PairwiseDistance):
... def forward_step(self, X):
... return torch.cdist(X, X, p=1)
>>>
>>> X = torch.randn(50, 3)
>>> distance_fn = ManhattanDistance()
>>> distances = distance_fn(X)
Using existing distance implementations:
>>> from spectre.pairwise_distance import PairwiseDistanceEuclidean
>>> euclidean = PairwiseDistanceEuclidean(normalize=True)
| METHOD | DESCRIPTION |
|---|---|
forward_step |
Compute pairwise distances between samples. |
forward |
Compute pairwise distances with automatic parameter handling. |
Source code in spectre/pairwise_distance/base.py
Functions#
forward_step(X: torch.Tensor, **kwargs) -> torch.Tensor
abstractmethod
#
Compute pairwise distances between samples.
This method must be implemented by subclasses to define their specific distance computation logic. The signature allows flexibility for different distance metrics that require varying parameters.
| PARAMETER | DESCRIPTION |
|---|---|
X
|
Input data matrix.
TYPE:
|
**kwargs
|
Additional keyword arguments specific to the distance metric.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
Tensor
|
Pairwise distance matrix. Shape depends on the specific metric and input parameters. |
Examples:
Euclidean distance with second tensor:
Mahalanobis distance with inverse covariance:
Covariance distance (no additional parameters):
Source code in spectre/pairwise_distance/base.py
forward(X: torch.Tensor, **kwargs) -> torch.Tensor
#
Compute pairwise distances with automatic parameter handling.
This method provides a unified interface for all distance metrics while allowing flexible parameter passing. Derived classes handle their own parameter extraction from kwargs.
| PARAMETER | DESCRIPTION |
|---|---|
X
|
Input data matrix.
TYPE:
|
**kwargs
|
Additional keyword arguments passed to
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
Tensor
|
Distance matrix as computed by the specific metric implementation. |
Examples:
>>> # Euclidean distance
>>> euclidean_dist = euclidean_module(X, Y, normalize=True)
>>>
>>> # Mahalanobis distance
>>> mahalanobis_dist = mahalanobis_module(X, M_inv=M_inv, reduce="mean")
>>>
>>> # Covariance distance
>>> cov_dist = covariance_module(X, cov_k_neighbor=8)
Source code in spectre/pairwise_distance/base.py
Functions#
initialize_distance_fn(distance_fn: PairwiseDistance | str | None, distance_kwargs: dict[str, Any] | None = None) -> PairwiseDistance
#
Initialize a distance from an instance or registry name.
Arguments
distance_fn : PairwiseDistance | str | None Distance instance or name of registered distance. distance_kwargs : dict[str, Any] | None Keyword arguments passed to distance constructor (only for string names).
| RETURNS | DESCRIPTION |
|---|---|
PairwiseDistance
|
Initialized distance instance. |
| RAISES | DESCRIPTION |
|---|---|
ValueError
|
If |
TypeError
|
If |