Estoy tratando de encontrar la similitud del coseno entre 2 vectores (x, y Puntos) y estoy cometiendo un error tonto que no puedo identificar. Perdóneme soy un novato y lo siento si estoy cometiendo un error muy simple (que probablemente sea).Código de similitud de coseno (vectores no de término)
Gracias por su ayuda
public static double GetCosineSimilarity(List<Point> V1, List<Point> V2)
{
double sim = 0.0d;
int N = 0;
N = ((V2.Count < V1.Count)?V2.Count : V1.Count);
double dotX = 0.0d; double dotY = 0.0d;
double magX = 0.0d; double magY = 0.0d;
for (int n = 0; n < N; n++)
{
dotX += V1[n].X * V2[n].X;
dotY += V1[n].Y * V2[n].Y;
magX += Math.Pow(V1[n].X, 2);
magY += Math.Pow(V1[n].Y, 2);
}
return (dotX + dotY)/(Math.Sqrt(magX) * Math.Sqrt(magY));
}
Editar: Aparte de la sintaxis, mi pregunta era también que ver con la construcción lógica dado que estoy tratando con vectores de diferentes longitudes. Además, ¿cómo es que lo anterior se puede generalizar a vectores de m dimensiones? Gracias
Te estás confundiendo con índices y X, Y. El índice en cada lista debe representar componentes (es decir, 0-> x, 1-> y, 2-> z). De la otra manera, solo tendría 2 puntos V1 y V2, cada uno con una xey, que representa un vector bidimensional. No necesita tanto el índice n como .X y .Y – JohnPS