|
|
|
Suche nach Wertepaaren in n x 2 Matrix beschleunigen |
|
| Muck |

Forum-Newbie
|
 |
Beiträge: 5
|
 |
|
 |
Anmeldedatum: 12.06.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.06.2012, 16:08
Titel: Suche nach Wertepaaren in n x 2 Matrix beschleunigen
|
 |
Hallo,
leider bin ich noch etwas ungeübt mit Matlab. In einem Unterprogramm möchte ich feststellen wie oft sich Wertepaare (jeweils in einer Zeile) innerhalb eines Wertebereiches (std) in einer n x 2 Matrix wiederholen. Mein Unterprogramm funktioniert zwar, jedoch ist die Rechenzeit propotional zu n^2. Da ich sehr große Matrizen bis ca. 88000000x2 überprüfen will sollte ich einen Rechenzeitaufwand realiseren der deutlich geringer ist. Ich bin mir sicher dass ihr mir bestimmt hilfreiche Ideen geben könnt
Grüße und vielen Dank im Voraus !!!
|
|
|
|
|
|
| Sirius3 |

Forum-Guru
|
 |
Beiträge: 441
|
 |
|
 |
Anmeldedatum: 11.11.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.06.2012, 17:49
Titel:
|
 |
Hallo Muck,
zuerst ein paar allgemeine Anmerkungen:
Matlab zählt Indizes von 1 bis n. Deine Schleife läuft von 0 ab,
wobei immer auf i+1 zugegriffen wird. Im letzten Schleifenschritt
läuft also i+1 über das Ende der j-Matrix hinaus, und müßte
eigentlich mit einem
Index exceeds matrix dimensions.
abbrechen.
Besser die For-Schleife von 1:n laufen lassen.
Die Zeilen
haben ein paar seltsame Nebeneffekte.
Ist ein Element a(k)==a(i+1) zählt es nicht als gleich (e>0-Abfrage)
hat es aber den Abstand 1: a(k)+1==a(i+1) zählt es als gleich (e<1|e>1-Abfrage)
Kürzer gehts mit:
Nun zur Komplexität:
Wenn Du die Wertepaare sortierst
dann mußt Du nur in einer Umgebung k(a)+sqrt(2)*std>k(i)>k(b)-sqrt(2)*std
die Paar-Gleichheit überprüfen und hast effektiv wahrscheinlich O(n*log(n)).
Grüße
Sirius
|
|
|
|
| Muck |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 5
|
 |
|
 |
Anmeldedatum: 12.06.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 13.06.2012, 09:13
Titel:
|
 |
Hallo Sirius,
Vielen Dank für die schnelle Antwort und die Tipps. Den Code werde ich mir gleich einmal ansehen. Ich hatte vergessen zur erwähnen dass ich die Matrix "j" zuvor auch mit einer for-Schleife erzeugt hatte bei der "i" ebenso bei 0 startete.
Grüße,
Sebastian
|
|
|
|
| Muck |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 5
|
 |
|
 |
Anmeldedatum: 12.06.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 13.06.2012, 12:34
Titel:
|
 |
Hallo Sirius,
leider habe ich zum Thema Komplexität noch nicht den gesamten Durchblick.
Damit die Sortierung funktioniert muss ich bei der quadrierung noch einen Punkt setzen (skalare quadrierung der Matrixwerte).
Was ist mit der Indizierung von k(a),k(i) und k(b) hier gemeint ?
k(a)+sqrt(2)*std>k(i)>k(b)-sqrt(2)*std
Grüße,
Sebastian
|
|
|
|
|
|
|
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.
|
|