|
|
Einlesen von großen Daten beschleunigen |
|
yarga09 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 31.05.2016, 12:05
Titel: Einlesen von großen Daten beschleunigen
|
 |
Hallo alle zusammen,
ich möchte mehrere Datenmengen aus einem .dat file einlesen. Der Code funktioniert, jedoch ist die Dauer des Vorgangs viel zu lange.
Mein .dat file sieht so aus:
NUMBER = 4123
123.0 456.7 12.3
125.0 453.7 12.4
127.3 452.7 12.5
. . .
. . .
. . .
193.0 446.7 10.4
NUMBER = 2133
125.0 453.7 12.4
125.0 453.7 12.4
127.3 452.7 12.5
. . .
. . .
. . .
193.0 446.7 10.4
Es handelt sich hier um Koordinatenpunkte wo für jeden Abschnitt die Anzahl an Punkten unterschiedlich ist (Anzahl der Punkte bzw. Zeilen = NUMBER). Es sind in etwa 1000 solcher Abschnitte.
Mein Code:
Hat jemand eine Idee wie ich den Vorgang beschleunigen kann?
Vielen Dank und schöne Grüße
|
|
|
|
|
Andreas Goser |

Forum-Meister
|
 |
Beiträge: 3.654
|
 |
|
 |
Anmeldedatum: 04.12.08
|
 |
|
 |
Wohnort: Ismaning
|
 |
|
 |
Version: 1.0
|
 |
|
|
 |
|
Verfasst am: 31.05.2016, 12:08
Titel:
|
 |
Mich interessiert zunächst der Applikationshintergrund. Wie lange ist lange und warum ist es zu lange? Werden die Daten immer wieder neu eingelesen, oder kann man sie einmal einlesen und als MAT files wieder schreiben.
Andreas
|
|
|
yarga09 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 31.05.2016, 12:23
Titel:
|
 |
Der komplette Vorgang braucht etwa 11min für 1000 von solchen Abschnitten. Mein Ziel ist es etwa 10000 von denen.
Wie du siehst wird das Array A nach jedem Durchgang überschrieben.
Ich führe mit A in jedem Schleifendurchgang nur eine einfache Rechnung durch und speichere zwei Werte daraus.
D.h. ich brauche eine Datenmenge nur einmal einlesen und danach wird sie wieder gelöscht.
|
|
|
Andreas Goser |

Forum-Meister
|
 |
Beiträge: 3.654
|
 |
|
 |
Anmeldedatum: 04.12.08
|
 |
|
 |
Wohnort: Ismaning
|
 |
|
 |
Version: 1.0
|
 |
|
|
 |
|
Verfasst am: 31.05.2016, 12:32
Titel:
|
 |
OK, also erstmal der Tipp:
Prä-allokation: A wird ja immer grösser. Das frisst sehr viel Zeit. Am Besten gleich am Anfang A so gross mit Nullen oder so vorbelegen und dann in jedem Schleifendurch lauf nur das neue Element überschreiben.
Andreas
|
|
|
yarga09 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 31.05.2016, 12:48
Titel:
|
 |
Das habe ich bereits getan mit der Funktion Zeros(), jedoch hatte das leider nur sehr geringe Verbesserung zu folge.
|
|
|
Andreas Goser |

Forum-Meister
|
 |
Beiträge: 3.654
|
 |
|
 |
Anmeldedatum: 04.12.08
|
 |
|
 |
Wohnort: Ismaning
|
 |
|
 |
Version: 1.0
|
 |
|
|
 |
|
Verfasst am: 31.05.2016, 13:10
Titel:
|
 |
Es ist ein halbwegs aktuelles 64 Bit Release?
Andreas
|
|
|
yarga09 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 01.06.2016, 07:49
Titel:
|
 |
Ja, ich benütze die Version R2014b_64b.
Glaubst du liegt es an meiner for-Schleife? Das dat.file hat etwa 3,5Mio Zeilen und ist 250MB groß. Sind 10min da als Dauer für den Einlesevorgang normal?
Danke.
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 01.06.2016, 08:41
Titel:
|
 |
Hallo,
das wiederholte Öffnen und Schließen der Datei wird viel Zeit in Anspruch nehmen. Lasse doch die Datei offen und zähle die Headerlines nur vom letzten gelesenen Wert.
Grüße,
Harald
|
|
|
yarga09 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 01.06.2016, 09:31
Titel:
|
 |
Ja das war das Problem. Ich brauche jetzt statt 660s nur mehr 4s für den ganzen Vorgang!
Ich weiß eure Hilfe sehr zu schätzen.
Vielen Dank!
|
|
|
|
|
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.
|
|