UNPKG

ml-nearest-vector

Version:

Find the nearest point to a sample point

41 lines (40 loc) 1.48 kB
'use strict'; import { squaredEuclidean } from 'ml-distance-euclidean'; const defaultOptions = { distanceFunction: squaredEuclidean }; export default function nearestVector(listVectors, vector, options = defaultOptions) { const distanceFunction = options.distanceFunction || defaultOptions.distanceFunction; const similarityFunction = options.similarityFunction || defaultOptions.similarityFunction; let vectorIndex = -1; if (typeof similarityFunction === 'function') { // maximum similarity let maxSim = Number.MIN_VALUE; for (let j = 0; j < listVectors.length; j++) { const sim = similarityFunction(vector, listVectors[j]); if (sim > maxSim) { maxSim = sim; vectorIndex = j; } } } else if (typeof distanceFunction === 'function') { // minimum distance let minDist = Number.MAX_VALUE; for (let i = 0; i < listVectors.length; i++) { const dist = distanceFunction(vector, listVectors[i]); if (dist < minDist) { minDist = dist; vectorIndex = i; } } } else { throw new Error("A similarity or distance function it's required"); } return vectorIndex; } export function findNearestVector(vectorList, vector, options = defaultOptions) { const index = nearestVector(vectorList, vector, options); return vectorList[index]; }