Sto cercando di trovare la somiglianza del coseno tra 2 vettori (x, punti y) e sto facendo un errore stupido che non riesco a definire. Pardone sono un principiante e mi dispiace se sto facendo un errore molto semplice (che molto probabilmente sono).Codice di somiglianza coseno (vettori non termici)
Grazie per il vostro aiuto
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));
}
Edit: A parte la sintassi, la mia domanda era anche a che fare con la costrutto logico data ho a che fare con vettori di diversa lunghezza. Inoltre, come è generalizzabile per i vettori di m dimensioni. Grazie
Hai confondersi con indici e X, Y. L'indice di ogni lista dovrebbe rappresentare i componenti (cioè 0-> x, 1-> y, 2-> z). Nell'altro modo avresti solo 2 punti V1 e V2, ognuno con una xey che rappresenta un vettore bidimensionale. Non hai bisogno sia dell'indice n che di .X e .Y – JohnPS