namespace TarninaHub.Application.Matchmaking; public static class VectorMath { public static double CosineSimilarity(IReadOnlyList a, IReadOnlyList b) { if (a.Count == 0 || a.Count != b.Count) { return 0; } double dot = 0; double magnitudeA = 0; double magnitudeB = 0; for (var i = 0; i < a.Count; i++) { dot += (double)a[i] * b[i]; magnitudeA += (double)a[i] * a[i]; magnitudeB += (double)b[i] * b[i]; } if (magnitudeA <= 0 || magnitudeB <= 0) { return 0; } return dot / (Math.Sqrt(magnitudeA) * Math.Sqrt(magnitudeB)); } }