Finde den nächsten Vektor aus einer Liste von Vektoren | Python

8

Wenn Sie sagen, eine Liste von 10 Vektoren, genannt A, die verschiedene Gruppen darstellen. Dann haben Sie eine Zeitreihe von Vektoren v1, v2, ..., vn, von denen jeder auch ein Vektor ist. Ich habe mich gefragt, ob es eine Möglichkeit gibt, den "nächsten" Vektor in A für jedes v1, v2, ..., vn zu finden, wenn Sie eine Abstandsmetrik definieren?

Gibt es einen schnellen Weg, um das Ganze zu durchlaufen und alle Einträge zu vergleichen?

Edit: Nein, ich frage nicht, wie man k-means oder so etwas macht.

    
ajl123 07.09.2015, 22:19
quelle

3 Antworten

12

Sie können den räumlichen KDtree in scipy . Es verwendet einen schnellen Baumalgorithmus, um nahe Punkte für Vektoren beliebiger Dimension zu identifizieren.

Bearbeiten : Entschuldigung, wenn Sie nach beliebigen Distanzmetriken suchen, ein Baum wie Struktur könnte immer noch eine Option sein.

Hier ist ein Beispiel:

%Vor%

Dadurch wird der KDTree mit allen Punkten in A eingerichtet, sodass Sie schnelle räumliche Suchvorgänge in ihm durchführen können. Eine solche Abfrage nimmt einen Vektor und gibt den nächsten Nachbarn in A dafür zurück:

%Vor%

Der erste Rückgabewert ist der Abstand des nächsten Nachbarn und der zweite seine Position in A, so dass Sie ihn beispielsweise so erhalten können:

%Vor%     
haraldkl 07.09.2015, 22:24
quelle
1

Wenn Sie eine Metrik definieren, können Sie sie in der Funktion min verwenden:

%Vor%     
jojonas 07.09.2015 22:22
quelle
1

Also ein Beispielcode ist:

%Vor%

Dies gibt die Variablen d und i zurück. d speichert die kürzeste Entfernung Ich gebe den Index zurück, bei dem das passiert

Hoffe, das hilft.

    
ajl123 10.09.2015 15:13
quelle

Tags und Links