Source code for lostml.utils.distances

import numpy as np

[docs] def euclidean_distance(x1, x2): """ Compute Euclidean distance between points or arrays. Parameters ---------- x1 : array-like First point(s). Shape: (n_features,) or (n_samples, n_features) x2 : array-like Second point(s). Shape: (n_features,) or (n_samples, n_features) Returns ------- float or ndarray Euclidean distance(s). If both inputs are 1D, returns scalar. If inputs are 2D, returns array of distances. """ x1 = np.asarray(x1) x2 = np.asarray(x2) # Handle single point to single point if x1.ndim == 1 and x2.ndim == 1: return np.sqrt(np.sum((x1 - x2) ** 2)) # Handle array to array (vectorized) # x1: (n_test, n_features), x2: (n_train, n_features) # Returns: (n_test, n_train) distance matrix return np.sqrt(((x1[:, np.newaxis, :] - x2[np.newaxis, :, :]) ** 2).sum(axis=2))
[docs] def manhattan_distance(x1, x2): """ Compute Manhattan (L1) distance between points or arrays. Parameters ---------- x1 : array-like First point(s) x2 : array-like Second point(s) Returns ------- float or ndarray Manhattan distance(s) """ x1 = np.asarray(x1) x2 = np.asarray(x2) # Handle single point to single point if x1.ndim == 1 and x2.ndim == 1: return np.sum(np.abs(x1 - x2)) # Handle array to array (vectorized) return np.abs(x1[:, np.newaxis, :] - x2[np.newaxis, :, :]).sum(axis=2)