@allemandi/embed-utils
Version:
Fast, type-safe utilities for comparing and searching vector embeddings.
65 lines • 2.42 kB
TypeScript
/**
* Calculates the cosine similarity between two vectors.
* Cosine similarity measures how similar two vectors are, ranging from -1 (opposite) to 1 (identical).
* @public
* @param {number[]} vecA - First vector.
* @param {number[]} vecB - Second vector.
* @returns {number} - Cosine similarity score between `vecA` and `vecB`.
* @example
* computeCosineSimilarity([1, 2, 3], [1, 2, 3]);
* // => 1 (identical vectors)
* computeCosineSimilarity([1, 0], [0, 1]);
* // => 0 (orthogonal vectors)
* computeCosineSimilarity([1, 2], [2, 3]);
* // => 0.9922778767136677
* computeCosineSimilarity([1, 0], [-1, 0]);
* // => -1 (vectors diametrically opposed)
* computeCosineSimilarity([0, 0], [1, 2]);
* // => 0 (one vector has zero magnitude)
*/
export function computeCosineSimilarity(vecA: number[], vecB: number[]): number;
/**
* Normalizes a vector to unit length. If the vector has zero magnitude, returns the original vector.
* @public
* @param {number[]} vec - Input vector.
* @returns {number[]} - A new vector scaled to unit length.
* @example
* normalizeVector([3, 4]);
* // => [0.6, 0.8] (vector normalized to length 1)
* normalizeVector([0, 0]);
* // => [0, 0] (zero vector remains unchanged)
* normalizeVector([1, 1, 1]);
* // => [0.5773502691896258, 0.5773502691896258, 0.5773502691896258]
*/
export function normalizeVector(vec: number[]): number[];
/**
* Efficiently checks if a vector is L2-normalized (unit length).
* @public
* @param {number[]} vec - Input vector.
* @param {number} [epsilon=1e-6] - Tolerance for floating-point comparison.
* @returns {boolean} - True if the L2 norm is within epsilon of 1.
* @example
* isNormalized([1, 0]);
* // => true (vector length is exactly 1)
* isNormalized([0.6, 0.8]);
* // => true (approximately unit length)
* isNormalized([3, 4]);
* // => false (length is 5)
* isNormalized([0, 0]);
* // => false (length is 0)
*/
export function isNormalized(vec: number[], epsilon?: number): boolean;
/**
* Computes the mean (centroid) vector from an array of vectors.
* Assumes all vectors are of equal length.
* @public
* @param {number[][]} vectors - Array of input vectors.
* @returns {number[]} - The mean vector.
* @example
* meanVector([[1, 2], [3, 4], [5, 6]]);
* // => [3, 4]
* meanVector([]);
* // => []
*/
export function meanVector(vectors: number[][]): number[];
//# sourceMappingURL=similarity.d.ts.map