Frage Berechnen Sie den Abstand zwischen zwei Vektoren unterschiedlicher Länge


Es gibt verschiedene Methoden, um die Entfernung zwischen zwei Vektoren gleicher Länge zu berechnen: Euklidisch, Manhattan, Hamming ...

Ich wundere mich über jede Methode, die Entfernung zwischen Vektoren unterschiedlicher Länge berechnen würde.


12
2018-02-16 16:01


Ursprung


Antworten:


Die euklidische Abstandsformel ermittelt den Abstand zwischen zwei beliebigen Punkten im euklidischen Raum.

Ein Punkt im euklidischen Raum wird auch euklidischer Vektor genannt.

Sie können die euklidische Abstandsformel verwenden, um den Abstand zwischen Vektoren unterschiedlicher Länge zu berechnen.

Für Vektoren unterschiedlicher Dimensiones gilt das gleiche Prinzip.

Angenommen ein Vektor der unteren Dimension existiert auch im höherdimensionalen Raum. Sie können dann alle fehlenden Komponenten im niederdimensionalen Vektor auf 0 setzen, sodass beide Vektoren die gleiche Dimension haben. Sie würden dann eine der genannten Distanzformeln zur Berechnung der Entfernung verwenden.

Betrachten Sie zum Beispiel einen zweidimensionalen Vektor A im  mit Komponenten (a1,a2)und ein 3-dimensionaler Vektor B im  mit Komponenten (b1,b2,b3).

Ausdrücken A im , Sie würden seine Komponenten einstellen (a1,a2,0). Dann die euklidische Distanz d zwischen A und B kann mit der Formel gefunden werden:

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

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

Für Ihren speziellen Fall sind die Komponenten entweder 0 oder 1, so werden alle Unterschiede sein -1, 0, oder 1. Die quadrierten Differenzen werden dann nur sein 0 oder 1.

Wenn Sie Ganzzahlen oder einzelne Bits zur Darstellung der Komponenten verwenden, können Sie einfache bitweise Operationen anstelle einiger arithmetischer Operationen verwenden (^ meint XOR oder exclusive or):

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

Und wir nehmen die nachlaufenden Komponenten von A sind 0, so wird die endgültige Formel sein:

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

7
2018-02-16 16:06



Sie können Abstände zwischen Vektoren unterschiedlicher Länge nicht direkt berechnen.

Alle Vorschläge beginnen hier mit einer Funktion, die den Vektor mit der niedrigeren Länge auf einen höheren Vektor abbildet und dann die Berechnung als normal durchführt.

Es gibt viele, viele Funktionen (unendlich viele), die man benutzen kann:

  • Fülle mit Nullen auf. Es ist die einfachste Sache zu tun. Sagen Sie, wenn Sie ein Auto haben und seine Entfernung zu einem Flugzeug berechnen müssen, setzt dies das Auto auf Meereshöhe.
  • Schlage die fehlenden Werte irgendwo nach. Mit dem Auto-Flugzeug-Beispiel würden Sie Ihre Geo-Datenbank starten und Höhen von Längen- / Breitengrad nachschlagen.
  • Verwenden Sie eine mathematische Funktion.

Da das Ergebnis der Abstandsberechnung stark von der Funktion abhängt, die den kürzeren Vektor in den längeren umwandelt, muss sich jeder darüber im Klaren sein, welche Funktion verwendet wird. Entweder weil jeder in den Feldern zustimmt, dass nur eine Funktion sinnvoll ist, oder weil die Funktion, die bei der Konvertierung verwendet wird, notiert wird.


1
2018-01-28 21:55



Sie können versuchen, den durchschnittlichen Mindestabstand zwischen zwei Vektoren p und q der Dimensionen n und m (n ~ = m) zu berechnen:

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
2017-09-04 14:02



Die Idee, das Array kurzer Größe mit Nullen aufzufüllen, um die gleiche Länge wie das Array langer Länge aufzuweisen, scheint nicht "allgemein" eine richtige Idee zu sein.

Zum Beispiel, wenn wir zwei Sätze (Arrays, Vektoren, ...) von Messungen für den gleichen Parameter (z.B. Temperatur, Geschwindigkeit oder einen binären Parameter als den Status eines An / Aus-Schalters) haben, die zu verschiedenen Zeitpunkten durchgeführt werden. Es wird angenommen, dass der erste Satz A1 aus N Messungen besteht, die zu einer Menge von Zeitpunkten T1 gemacht wurden, während der zweite Satz A2 aus M Messungen (M ~ = N) besteht, die zu einem Zeitpunkt T2 getroffen wurden.

Bitte beachten Sie, dass die Verteilung von T2 willkürlich von der von T1 abweicht. Daher macht das Auffüllen mit Nullen hier keinen Sinn.

In diesem Fall schlage ich vor, die Interpolation mit einer gemeinsamen Menge von Zeitpunkten zu verwenden, sagen wir T wie folgt:

A1_neu = interpoliere (T1, A1, T);

A2_neu = interpoliere (T2, A2, T);

Dabei akzeptiert interpolate (x, y, xq) die Eingaben als die Variable x, die Funktion y (x) und die Abfragepunkte xq. Die Interpolationsfunktion gibt die interpolierte Ausgabe y (xq) zurück.

Nun können wir die Sätze A1_new und A2_new gleicher Größe durch irgendeine geeignete Maßnahme, z. Euklidische Entfernung.


0
2018-02-08 09:25