similarity

js/ml/metrics/similarity.ts

Vector similarity and distance, shared by embedding consumers.

Functions

function cosineSimilarity(a: ArrayLike<number>, b: ArrayLike<number>): number

Cosine of the angle between two vectors, in [-1, 1].

Measures direction only, so vector magnitude is irrelevant — which is what makes it the right default for comparing embeddings. Reports 0 when either vector is all zeros and the angle is undefined.

import { cosineSimilarity } from 'fino:ml/metrics';

console.log(cosineSimilarity([1, 0], [1, 0])); // 1
console.log(cosineSimilarity([1, 0], [0, 1])); // 0
console.log(cosineSimilarity([1, 0], [-1, 0])); // -1

function cosineDistance(a: ArrayLike<number>, b: ArrayLike<number>): number

Cosine distance, 1 - cosineSimilarity.

import { cosineDistance } from 'fino:ml/metrics';

console.log(cosineDistance([1, 0], [0, 1])); // 1

function dotProduct(a: ArrayLike<number>, b: ArrayLike<number>): number

Sum of elementwise products.

import { dotProduct } from 'fino:ml/metrics';

console.log(dotProduct([1, 2, 3], [4, 5, 6])); // 32

function euclideanDistance(a: ArrayLike<number>, b: ArrayLike<number>): number

Straight-line distance between two vectors.

import { euclideanDistance } from 'fino:ml/metrics';

console.log(euclideanDistance([0, 0], [3, 4])); // 5

function manhattanDistance(a: ArrayLike<number>, b: ArrayLike<number>): number

Sum of absolute differences between two vectors.

import { manhattanDistance } from 'fino:ml/metrics';

console.log(manhattanDistance([0, 0], [3, 4])); // 7

function l2Norm(vector: ArrayLike<number>): number

Euclidean length of a vector.

import { l2Norm } from 'fino:ml/metrics';

console.log(l2Norm([3, 4])); // 5