Verfasst am: 28.01.2011, 22:22
Titel: Cell als mat-File und nur einzelne Einträge laden
Hallo Leute!
Habe schon gesucht aber noch nix gefunden oder auch übersehen, dann sorry.
Mein Problem, ich habe ein verdammt großes Cell Array dass mir sehr viel Arbeitsspeicher weg nimmt. Ich speichere dieses Cell nun als mat-File mit save ab und lösche es dann damit ich es aus meinem Workspace kriege. Zur Bearbeitung der Daten würde ich nun gerne (in einer Schleife) nur einen Cell-Eintrag (der eine Matrix enthält)wieder laden, und dann den nächsten usw...
Geht das irgendwie mit load oder einem anderen Befehl bzw. ist sowas überhaupt möglich?
Verfasst am: 29.01.2011, 03:56
Titel: Re: Cell als mat-File und nur einzelne Einträge laden
Hallo hosti,
Nein, man kann nicht per LOAD ein einzelnes Element aus einem gespeicherten CELL-Array heraus holen. Dazu müsste man schon die einzelnen Elemente als separate Variablen abspeichern.
Wie groß ist das Array denn und welche Art von Daten enthält es?
Das Y_cell ist halt verdammt groß.
Habe gelesen dass wenn ich auf eine 64-Bit Version umsteige es funktionieren könnte. Werde schauen dass ich das am Wochenende machen kann.
Dir bei kanppem Arbeitsspeicher die Variablen-Tabellen mit dynamisch per EVAL erzeugten Variablen zuzuknallen ist mutig. Wesentlich sicherer wäre statt dessen:
Code:
for ii = 1:29
Data = Y_cell{ii};
save(['SH' num2str(ii), '.mat'], 'Data');
end
Dies dupliziert nicht die einzelnen Arrays! Data ist viel mehr ein Pointer of die gleichen Daten, so dass auch ein CLEAR überflüssig ist.
Ich vermute, ein einfaches FWRITE wäre schneller als SAVE.
Auch hier ein paar kleine Änderungen:
1. Auf EVAL verzichten, da es immer fehlerträchtiug, schwer debugbar und gerade mit Speicher ineffizient umgeht.
2. '.mat' in den Dateinamen eingefügt - sicher ist sicher.
3. B{ii} ist schneller als B{ii, 1}, wenn B sowieso ein Vektor ist.
4. Output von LOAD in einer Variablen speichern, statt sie dynamisch in den Workspace zu schreiben. Das ist immer sicherer und hält genau wie die Vermeidung von EVAL die Speicher-Tabellen sauber: Matlab weiß schon beim Einlesen des M-Files, welche Variablen benutzt werden und kann das für die JIT-Acceleration verwenden.
Aber ein 64-Bit-System mit viel RAM ist ohne Frage die allerbeste Idee. Große Probleme lassen sich am besten in großen Computern berechnen.
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
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.