|
|
super schnelle for-Schleife für 8000000 Ausführungen? |
|
ovo |

Forum-Anfänger
|
 |
Beiträge: 11
|
 |
|
 |
Anmeldedatum: 30.03.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 07.04.2014, 14:24
Titel: super schnelle for-Schleife für 8000000 Ausführungen?
|
 |
Guten Tag
Ich habe eine for-Schleife, die von 1 - 8000000 geht, wie ihr euch wohl denken könnt, geht das eeeeeewigs.
Wie kann ich die auf eine nützliche Zeit herunterstutzen? max 10s
Wäre ich schneller, wenn ich das in eine Funktion packe?
Eine Vektorisierung der for-Schleife würde es bestimmt schneller machen, aber wie kann ich das in diesem Fall machen?
Ich habe irgendwo gelesen, wenn ich meinen Variablen Typen bereits vor dem Gebrauch zuweise, so das Programm auch schneller wird. bspw: I = int32(1); Stimmt das?
Gruss
|
|
|
|
|
Winkow |

Moderator
|
 |
Beiträge: 3.842
|
 |
|
 |
Anmeldedatum: 04.11.11
|
 |
|
 |
Wohnort: Dresden
|
 |
|
 |
Version: R2014a 2015a
|
 |
|
|
 |
|
Verfasst am: 07.04.2014, 14:38
Titel:
|
 |
welche dimension haben comparray und myarray ? kannst du ein lauffägies minimalbeispiel posten ?
_________________
richtig Fragen
|
|
|
ovo |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 11
|
 |
|
 |
Anmeldedatum: 30.03.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 07.04.2014, 14:43
Titel:
|
 |
Beide sind jeweils 1x8200000 gross.
Leider kann ich dir kein lauffähiges Beispiel geben, da compArray und myArray jeweils aus weiteren Files gewonnen werden.
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 07.04.2014, 14:55
Titel:
|
 |
Hallo,
die Schleife geht bis 8000000, die Vektorlänge ist 82000000.
Wie steht das allgemein in Bezug zueinander?
Ich würde das gerne mit einem kleineren Beispiel testen und dann in Bezug zueinandersetzen.
Ich meine, dass
hier hilfreich sein könnte - du machst ja so eine Art moving average?
Grüße,
Harald
|
|
|
Winkow |

Moderator
|
 |
Beiträge: 3.842
|
 |
|
 |
Anmeldedatum: 04.11.11
|
 |
|
 |
Wohnort: Dresden
|
 |
|
 |
Version: R2014a 2015a
|
 |
|
|
 |
|
Verfasst am: 07.04.2014, 15:17
Titel:
|
 |
das circshift scheint recht langsam zu sein.
ist bei mir schonmal mehr als doppelt so schnell mit den zufalls beispielwerten. ich könnte mir vorstellen das ganze auch zu paralelisieren falls die toolbox vorhanden ist.
_________________
richtig Fragen
Zuletzt bearbeitet von Winkow am 07.04.2014, 15:23, insgesamt einmal bearbeitet
|
|
|
ovo |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 11
|
 |
|
 |
Anmeldedatum: 30.03.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 07.04.2014, 15:21
Titel:
|
 |
In compArray ist eine willkürliche Zahlenfolge zwischen -1 und 1.
myArray ist ein Array mit 200000 generierten Werten, die nur 1 und -1 sein können, die restlichen 8000000 sind 0.
Ich versuche eine Kreuzkorrelation zu machen.
myArray erfährt bei jedem Durchgang der Schleife einen circshift, damit möchte ich eine Kreuzkorrelation an jeder möglichen Position berechnen.
Die if-Abfrage sieht nur nach, ob die Aktuelle Korrelation grösser ist als die Vorhergehende, wenn ja, wird die Aktuelle gespeichert.
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 07.04.2014, 16:04
Titel:
|
 |
Hallo,
hilft dir
?
Wenn ein Großteil der Einträge Nullen sind, dann ist die Multiplikation ja überflüssig. Vielleicht kann man das geschickter machen? Sind die von 0 verschiedenen Einträge denn am Stück?
Ein kleines, komplett reproduzierbares Beispiel wäre hilfreich.
Grüße,
Harald
|
|
|
ovo |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 11
|
 |
|
 |
Anmeldedatum: 30.03.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 07.04.2014, 16:14
Titel:
|
 |
myArray ist beim ersten Durchgang der for-Schleife myArray = [1, -1, 1, -1, -1, -1, 1, ..., 1, 0, 0, ..., 0 ] die ersten 200000 Einträge sind Werte zwischen 1 und -1 und die restlichen 8000000 sind 0.
Beim zweiten Durchgang ist myArray = [0, 1, -1, 1, -1, -1, -1, 1, ..., 1, 0, 0, ..., 0] ist der erste Wert 0, die Werte an der Stelle 2 bis 200001 sind 1 oder -1 und die restlichen 7999999 sind 0.
usw.
Wenn man bei myArray die 0er weglassen kann für die Multiplikation, wäre mein Programm wahrscheinlich schneller. Aber Matlab lässt doch eine Matrixmultiplikation nur zu, wenn die Matrizen jeweils gleich gross sind, oder?
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 07.04.2014, 16:51
Titel:
|
 |
Hallo,
Zitat: |
Aber Matlab lässt doch eine Matrixmultiplikation nur zu, wenn die Matrizen jeweils gleich gross sind, oder? |
Du kannst ja vom zweiten Array per Indizierung nur den Teil extrahieren, der gerade benötigt wird.
Bitte auf die Fragen eingehen. Ich habe ja filter und xcorr vorgeschlagen.
Meines Erachtens sollte sich die komplette Rechnung reduzieren lassen auf etwas der Form:
Soweit ich sehen kann, gibt es bei RBig2 leichte, durch numerische Abweichungen bedingte Ungenauigkeiten. Bei IBig2 blicke ich noch nicht ganz durch, aber auch das sollte hinzubekommen sein.
Bei mir braucht da ein Beispieldurchlauf 0,03s.
Grüße,
Harald
|
|
|
|
|
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.
|
|