Ich versuche, die Indizes von Elementen in einem Vektor zu finden, die einem anderen Vektor entsprechen, vorzugsweise ohne Schleifen zu verwenden. Zum Beispiel könnte meine Eingabe lauten:
%Vor%Die Ausgabe wäre hier:
%Vor%Das schnellste, was mir bisher eingefallen ist:
%Vor% Allerdings habe ich das Gefühl, dass dies schneller erledigt werden könnte, zumal ich dachte, dass der Befehl find
ziemlich langsam ist.
Zu beachten:
DJiSet
sind garantiert für alle in JiSet
vorhanden
JiSet
wird immer in aufsteigender Reihenfolge ohne wiederholte Einträge DJiSet
wird nicht garantiert zusammenhängend in JiSet
gefunden
Vorgehensweise # 1
Sie können find
vermeiden, indem Sie die Orte von DJiSet
und JiSet
in ismember
umkehren und dann die zweite Ausgabe verwenden, die uns die passenden Indizes gibt -
Vorgehensweise # 2
Loopy-Ansatz, der auf die spezifischen Bedingungen in der Frage eingeht, könnte ausprobiert werden, nicht sicher, ob dies effizienter sein wird -
%Vor%Divakars Antwort ist der richtige Weg. Aber für den Fall, dass Sie es manuell tun möchten:
%Vor%Dies findet das erste Vorkommen, wenn es mehr als eins gibt.
Wenn die Werte in DJiSet
nicht garantiert in JiSet
vorhanden sind, könnten Sie eine kleine Änderung verwenden:
Für kleine Datensätze scheint mein ursprünglicher Ansatz schneller zu sein als die von Divakar vorgeschlagene ismember
-Lösung und die von qmeeeeeee vorgeschlagene intersect
-Lösung, aber alle drei werden von Luis Mendos Lösung geschlagen mit guter alter bsxfun
. Siehe untenstehenden Code, welcher mal bei jedem Ansatz:
Welche auf meinem Rechner (läuft R2014b) gibt die folgenden Zeiten zurück:
%Vor% Dies deutet darauf hin, dass die Verwendung von find
und ismember
in der umgekehrten Reihenfolge der Vektoren für kleine Datenmengen tatsächlich schneller ist als die Verwendung von ismember
allein. Da für alle Methoden aus der Generierung der Datensätze set
, mit denen getestet wird, auch ein fixer Overhead vorliegt, scheint der Unterschied ziemlich groß zu sein. Ausführlichere Tests finden Sie in den Kommentaren unten.
Vielleicht könnten Sie versuchen, sich zu schneiden? Es soll viel schneller sein:
%Vor%Die Reihenfolge spielt keine Rolle, solange das Element in beiden Listen existiert, geben die ind-Elemente den Index.
Tags und Links matlab