using System; using xCommons.Extensions; namespace xAiService.Helpers { public static class VectorHelper { /// /// Normalize a Vector ... /// /// public static void Normalize(float[] vector) { // // Validate ... if (vector.IsNull() || !vector.HasChild()) { return; } // float sum = 0f; foreach (var value in vector) { sum += value * value; } // float norm = MathF.Sqrt(sum); if (norm <= 1e-9f) { return; } // for (int i = 0; i < vector.Length; i++) { vector[i] /= norm; } } /// /// Similarity Check ... /// /// /// /// public static float CosineSimilarity(float[] a, float[] b) { // if (a.IsNull() || b.IsNull()) { return 0f; } // if (a.Length != b.Length) { return 0f; } // float dot = 0f; float normA = 0f; float normB = 0f; for (int i = 0; i < a.Length; i++) { // dot += a[i] * b[i]; normA += a[i] * a[i]; normB += b[i] * b[i]; } // float denominator = MathF.Sqrt(normA) * MathF.Sqrt(normB); if (denominator <= 1e-9f) { return 0f; } // var result = dot / denominator; return result; } } }