web-dev-qa-db-fra.com

Calculer la distance entre deux vecteurs de longueur différente

Il existe différentes méthodes pour calculer la distance entre deux vecteurs de même longueur: Euclidean, Manhattan, Hamming ...

Je m'interroge sur une méthode permettant de calculer la distance entre vecteurs de différentes longueurs.

13
user1155073

La formule de distance euclidienne recherche la distance entre deux points quelconques de l’espace euclidien.

Un point dans l'espace euclidien est également appelé un vecteur euclidien. 

Vous pouvez utiliser la formule de distance euclidienne pour calculer la distance entre vecteurs de deux longueurs différentes.

Pour les vecteurs de dimension différente , le même principe s'applique. 

Supposons qu'un vecteur de dimension inférieure existe également dans l'espace de dimension supérieure. Vous pouvez ensuite définir tous les composants manquants du vecteur de dimension inférieure sur 0 afin que les deux vecteurs aient la même dimension. Vous utiliseriez ensuite l'une des formules de distance mentionnées pour calculer la distance. 

Par exemple, considérons un vecteur à 2 dimensions A dans avec les composants (a1,a2) et un vecteur à 3 dimensions B dans avec des composants (b1,b2,b3)

Pour exprimer A dans , définissez ses composants sur (a1,a2,0). Ensuite, la distance euclidienne d entre A et B peut être trouvée en utilisant la formule:

d² = (b1 - a1)² + (b2 - a2)² + (b3 - 0)²

d = sqrt((b1 - a1)² + (b2 - a2)² + b3²)

Dans votre cas particulier, les composants seront soit 0, soit 1; toutes les différences seront donc -1, 0 ou 1. Les différences au carré ne seront alors que 0 ou 1

Si vous utilisez des entiers ou des bits individuels pour représenter les composants, vous pouvez utiliser des opérations simples au niveau des bits au lieu de l'arithmétique (^ signifie XOR ou exclusive or):

d = sqrt(b1 ^ a1 + b2 ^ a2 + ... + b(n-1) ^ a(n-1) + b(n) ^ a(n))

Et nous supposons que les composants de fin de A sont 0, la formule finale sera donc:

d = sqrt(b1 ^ a1 + b2 ^ a2 + ... + b(n-1) + b(n))
8
ardnew

Vous ne pouvez pas calculer directement les distances entre vecteurs de différentes longueurs.

Toutes les suggestions ici commencent par une fonction qui mappe le vecteur de longueur inférieure à un vecteur de longueur supérieure, puis effectue le calcul normalement.

Il y a beaucoup, beaucoup de fonctions (infiniment nombreuses, en fait) que l'on peut utiliser:

  • Remplir de zéros. C'est la chose la plus facile à faire. Disons que si vous avez une voiture et devez calculer sa distance par rapport à un avion, la voiture est au niveau de la mer.
  • Recherchez les valeurs manquantes quelque part. Avec l'exemple avion-voiture, vous ouvriez votre base de données géographique et recherchiez des hauteurs à partir de la longitude/latitude.
  • Utilisez une fonction mathématique.

Étant donné que le résultat du calcul de la distance dépend fortement de la fonction qui convertit le vecteur le plus court en un vecteur plus long, il est nécessaire que tout le monde sache quelle fonction est utilisée. Soit parce que tout le monde dans les champs s'accorde pour dire qu'une seule fonction a un sens, soit parce que la fonction utilisée dans la conversion est notée.

1
toolforger

L'idée de remplir le tableau de taille courte avec des zéros pour qu'elle ait la même longueur que le tableau de taille longue ne semble "généralement" pas une bonne idée. 

Par exemple, si nous avons deux ensembles (tableaux, vecteurs, ...) de mesures pour le même paramètre (par exemple, la température, la vitesse ou un paramètre binaire comme état d’un commutateur marche/arrêt) effectués à des instants différents. Supposons que le premier ensemble A1 se compose de N mesures effectuées à un ensemble d'instants T1 alors que le deuxième ensemble A2 consiste en M mesures (M ~ = N) prises à un ensemble d'instants T2. 

Veuillez noter que la distribution de T2 diffère arbitrairement de celle de T1. Ainsi, le remplissage avec des zéros ici n'a pas de sens.

Dans ce cas, je suggère d'utiliser l'interpolation en utilisant un ensemble commun d'instants de temps, disons T comme suit:

A1_new = interpoler (T1, A1, T);

A2_new = interpoler (T2, A2, T);

où interpolate (x, y, xq) accepte les entrées en tant que variable x, la fonction y(x) et les points de la requête xq. La fonction 'interpoler' renvoie la sortie interpolée y (xq).

Maintenant, nous pouvons comparer les ensembles de même taille A1_new et A2_new par toute mesure appropriée, par ex. Distance euclidienne. 

0
Mohamed Hasan

Vous pouvez essayer de calculer la distance minimale moyenne entre deux vecteurs p et q de dimensions n et m (n ~ = m):

d = 1/n * sum_i=1:n ( min_j=1:m (p(i) - q(j))) + 1/m * sum_j=1:m (min_i=1:n (p(i) - q(j)))
0
cloudx