Files
xAiService/Helpers/VectorHelper.cs
T

86 lines
1.9 KiB
C#

using System;
using xCommons.Extensions;
namespace xAiService.Helpers
{
public static class VectorHelper
{
/// <summary>
/// Normalize a Vector ...
/// </summary>
/// <param name="vector"></param>
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;
}
}
/// <summary>
/// Similarity Check ...
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
/// <returns></returns>
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;
}
}
}