|
|
Vergleich zweier Vektoren |
|
Gästchen |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 22.10.2012, 14:03
Titel: Vergleich zweier Vektoren
|
 |
Hallo liebe Matlab-Experten,
ich habe folgendes problem und vielleicht könnt ihr mir da weiterhelfen.
Ich habe 2 Vektoren. Die sehen ungefähr so aus:
A = [1 4 2 8 34 2 6 19 6 3 5]
B = [2 56 4 19 6 3]
Und jetzt möchte ich für jeden Wert aus A den nahesten Wert aus B suchen und zuweisen.
Für den jeweils einzelnen Wert ist das ja kaum ein Problem:
Wenn ich das aber über eine Vektorlänge von mehreren Millionen laufen lasse, wird das via Schleife unendlich langsam. Gibt es da eine elegante einfachere Variante? Etwas im Sinne von:
[value ind] = min(abs(B-A( ))?
Mit besten Dank!
|
|
|
|
|
MaFam |

Forum-Meister
|
 |
Beiträge: 799
|
 |
|
 |
Anmeldedatum: 02.05.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2009b
|
 |
|
|
 |
|
Verfasst am: 22.10.2012, 15:56
Titel:
|
 |
Hallo,
das Problem sollte man zunächst algorithmisch betrachten, bevor man es programmiert.
Vorschlag:
1. Man sortiere den längeren der beiden Vektoren. Dieser sei u. Die Länge sei n.
2. Mit binärer Suche ermittle man die Position einer jeden Komponente des anderen Vektors v in u. Die Anzahl der Komponenten von v sei m.
3. Die beiden Nachbarn sind Kandidaten und müssen beide überprüft werden.
Das führt zu einer Komplexität von O(m*log(n)+n*log(n))=O((m+n)*log(n)).
Grüße, Marc
|
|
|
Gästchen |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 22.10.2012, 16:46
Titel:
|
 |
Hui... klingt kompliziert. Aber ich versuche mal mein Glück.
Auf jeden Fall erstmal besten Dank für die Hilfe!
Liebe Grüsse!
|
|
|
MaFam |

Forum-Meister
|
 |
Beiträge: 799
|
 |
|
 |
Anmeldedatum: 02.05.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2009b
|
 |
|
|
 |
|
Verfasst am: 22.10.2012, 16:52
Titel:
|
 |
Ja, das klingt nur kompliziert...
|
|
|
Gästchen |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 23.10.2012, 13:53
Titel:
|
 |
So geht es... nach dem Sortieren der beiden Vektoren. Danke für den Tip!
1);
if(k2>size(data.B,1))
break;
end
end
end
|
|
|
MaFam |

Forum-Meister
|
 |
Beiträge: 799
|
 |
|
 |
Anmeldedatum: 02.05.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2009b
|
 |
|
|
 |
|
Verfasst am: 23.10.2012, 13:59
Titel:
|
 |
Wie ist denn so die Laufzeit? Mit binärer Suche lässt sich das nochmals beschleunigen.
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|