WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Variablenzugriff - Workspace vs. mat_File

 

Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 22.02.2013, 18:25     Titel: Variablenzugriff - Workspace vs. mat_File
  Antworten mit Zitat      
Hallo zusammen,

Wie bzw wo finde ich heraus, ob der direkt Zugriff auf ein mat-File oder das Laden in den Workspace und dann Zugriff darauf sinnvoller ist?

Hintergrund: Es besteht ein umfangreiches mat-File, nicht alle Daten werden in allen Funktionen/GUI benötigt. Bisher wird das File in den Workspace geladen und dann werden die Daten an die Funktionen übergeben.
Im Gegensatz dazu könnte man ja auch erst bei Bedarf auf die entsprechenden Daten im mat-File zugreifen ohne alles in den Workspace zu laden.

Dazu gibt es bestimmt in der Matlab_hilfe Hilfe, aber ich weiß nicht wonach ich suchen sollte.

Grüße & Dank,
Seban
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 22.02.2013, 20:22     Titel: Re: Variablenzugriff - Workspace vs. mat_File
  Antworten mit Zitat      
Hallo Seban,

Das sind beides gute Möglichkeiten. Zur Sicherheit würde ich die Daten, die per LOAD geladen werden auf jeden Fall in ein Struct laden, statt direkt in den Workspace, da andernfalls auch lokale Variablen überschrieben werden können, falls sie zufällig auch im MAT-File vorkommen.

Ich glaube, dazu gibt es keine Ratschläge in Matlabs Hilfetexten, da dies eine Geschmackssache ist.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Seban
Themenstarter

Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 22.02.2013, 20:54     Titel:
  Antworten mit Zitat      
Hallo Jan, danke für die Antwort.

Ich habe eben noch etwas vergessen:
Die Daten werden in der entsprechenden "Lade-Funktion" in den Workspace geladen (in einem Struct Wink ) und dann mittels setappdata in den Speicher(?) der Haupt-GUI abgelegt. Nach Verlassen dieser "Laden-Funktion" liegen die Daten also nicht mehr direkt im Workspace, sondern in einem Handle.

Ich vermute mal, das macht bzgl. der Ausgangsfrage keinen Unterschied, oder doch?

Grüße,
Seban
Private Nachricht senden Benutzer-Profile anzeigen
 
Seban
Themenstarter

Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 14.03.2013, 13:52     Titel:
  Antworten mit Zitat      
Hallo zusammen,

Ich hab noch eine vertiefende Frage hierzu.

Wenn man von einer GUI per setappdata ein struct in eine andere GUI übergibt, wie wird dieses struct intern verarbeitet? Wird das struct kopiert, verlinkt?
Wo kann man so etwas nachlesen?

Beste Grüße,
Seban
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 14.03.2013, 18:23     Titel:
  Antworten mit Zitat      
Hallo Seban,

Ist die Original-Frage beantwortet? Dann setzte bitte den Status entsprechend.
Bitte hänge eine neue Frage nicht an einen bestehen Thread an. Solches Thread-Highjacking ist verwirrend, weil die Zuordnung zwischen Fragen und Antworten nicht unbedingt eindeutig ist.

Die interne Verarbeitung von Daten ist dokumentiert: Bei Variablen, die mehr als ein Element haben, Cells und Structs wird beim Kopieren nicht die Daten kopiert, sondern ein zweiter Variablen-Header erstellt, der einen Pointer auf die Original-Daten enthält. Erst wenn in die neue Variable geschrieben wird, wird eine "deep copy" erzeugt, also die Daten dupliziert, damit die Orginal Variable nicht überschrieben wird.

Diese "shared data copy" oder "copy on write" Strategie hat bei großen Arrays fast die gleiche Effizienz wie ein Call-by-Reference.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Seban
Themenstarter

Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 14.03.2013, 20:07     Titel:
  Antworten mit Zitat      
Hallo Jan,

Vielen Dank!

Jan S hat Folgendes geschrieben:
Ist die Original-Frage beantwortet?

Hierzu sei mir noch eine Frage gestattet. Macht es von der Performance her einen merkbaren Unterschied, ob ein struct im Workspace liegt oder mittels setappdata im Speicher(?) einer GUI abgelegt wird?

Jan S hat Folgendes geschrieben:
Die interne Verarbeitung von Daten ist dokumentiert

Wonach muss ich denn suchen? Ich find das iwie nicht. Embarassed

Beim nächsten mal mach ich einen neuen Thread auf. Sorry!

Grüße,
Seban
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 15.03.2013, 14:38     Titel:
  Antworten mit Zitat      
Hallo Seban,

Was genau ist "Performance"? GUIs leiden immer unter der langsamen Benutzung durch die User. Da kann auch eine GUI die mit 100Hz ihren Zustand ändern kann, kaum die Effizienz steigern :-)

Aber Daten in den (Base-)Workspace zu schreiben ist viel schwieriger zu debuggen. Da kann es schonmal eine Stunde dauern, bis man herausgefunden hat, welche Funktion nun für die aktuellen Werte verantwortlich ist. SETAPPDATA ist deshalb deutlich sicherer.

Suche nach im Netz "Matlab copy on write" und "Matlab call by reference" - letzteres ist in Matlab nicht möglich, aber die diskussionen darüber enthalten alle Details und Links zu der Dokumentation.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Seban
Themenstarter

Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 15.03.2013, 16:02     Titel:
  Antworten mit Zitat      
Hallo Jan,
Jan S hat Folgendes geschrieben:
Was genau ist "Performance"? GUIs leiden immer unter der langsamen Benutzung durch die User. Da kann auch eine GUI die mit 100Hz ihren Zustand ändern kann, kaum die Effizienz steigern Smile

Mit Performance meine ich, wie schnell Matlab die Daten verarbeiten kann. Rein als Beispiel, speichert man einen 200000x1-Vektor im Workspace und per setappdata und greift dann darauf zu, sei es zum Rechnen, Plotten oder oder. Ist eine Variante prinzipiell schneller als die andere? Oder vielleicht in Abhängigkeit der gespeicherten Daten?
Weiß nicht, ob man sich über so etwas Gedanken machen muss oder ob Matlab damit eigentlich immer gut zurecht kommt.
Deine Antwort scheint ja eher dafür zu sprechen, dass es keinen (großen) Unterschied macht.

Jan S hat Folgendes geschrieben:
Aber Daten in den (Base-)Workspace zu schreiben ist viel schwieriger zu debuggen. Da kann es schonmal eine Stunde dauern, bis man herausgefunden hat, welche Funktion nun für die aktuellen Werte verantwortlich ist. SETAPPDATA ist deshalb deutlich sicherer.

Ok, das ist gut. Bisher wird ohnehin setappdata verwendet.

Jan S hat Folgendes geschrieben:
Suche nach im Netz "Matlab copy on write" und "Matlab call by reference" - letzteres ist in Matlab nicht möglich, aber die diskussionen darüber enthalten alle Details und Links zu der Dokumentation.

Das werde ich über's Wochenende mal machen und mich bzgl. Datenverarbeitung schlau machen.

Vielen Dank!

Grüße,
Seban
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 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.