cosineSimilarityList = (vector, listOfVectors) => {
const dotProduct = (a, b) => a.map((x, i) => a[i] * b[i]).reduce((m, n) => m + n);
const magnitude = (v) => Math.sqrt(v.map((x, i) => v[i] * v[i]).reduce((m, n) => m + n));
if (!Array.isArray(listOfVectors) || listOfVectors.length === 0) {
throw new Error('The list of vectors must be a non-empty array.');
}
if (listOfVectors.some(v => v.length !== vector.length)) {
throw new Error('All vectors must be of equal length.');
}
const magnitudeA = magnitude(vector);
return listOfVectors.map(b => {
const prod = dotProduct(vector, b);
const magnitudeB = magnitude(b);
if (magnitudeA === 0 || magnitudeB === 0) {
throw new Error('Vectors must be non-zero.');
}
return prod / (magnitudeA * magnitudeB);
});
}