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

Automatisches speichern von Variablen mit Namenszusatz

 

PeterK
Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 23.12.13
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 10.07.2014, 17:39     Titel: Automatisches speichern von Variablen mit Namenszusatz
  Antworten mit Zitat      
Hallo alle zusammen,

ich habe ein kleine Problem mit Matlab.

Der Ausgabewert einer Funktion ist eine ein 3-fach indiziertes Konstrukt also quasi eine 3D-Matrix.
Diese Funktion befindet sich in einem for-loop und wenn ich das Ergebniss jedes Loopdurchlaufes speichere bekomme ich ein 4-fach indiziertes Konstrukt welches etwas "unübersichtlich" wird Smile

Jetzt würde ich gerne jedes Mal wenn die Funktion eine solche 3D-Matrix zurück gibt diese unter einem extra Variablen-Namen speichern, so dass ich später die Datensätze besser den Schleifen zuordnen kann, also in der Art:

Code:

for n=1:10
[Ergebnis_von_schleife_n]=Funktion(Inputparameters)
end
 


wobei n im Ergebnisnamen dann automatisch durchnummeriert sein soll. Letztlich hätte ich in meinem Matlab Workspace gerne folgende Variablen:

Ergebnis_von_schleife_1
Ergebnis_von_schleife_2
Ergebnis_von_schleife_3
.....

Gibt es diese Möglichkeit die Variablen automatisch durchnummerieren zu lassen? Kann mir da jemand weiter helfen?

Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 10.07.2014, 17:44     Titel:
  Antworten mit Zitat      
Hallo

solche Fragen über dynamischen Variablen ist zwar über EVAL lösbar, aber nicht empfehlenswert, wäre es nicht besser einen Cell-Array dafür zu verwenden?
so:
Code:

for n=1:10
   Ergebnis_von_schleife{n} = Funktion(Inputparameters)
end

 
Private Nachricht senden Benutzer-Profile anzeigen
 
PeterK
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 23.12.13
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 11.07.2014, 00:34     Titel:
  Antworten mit Zitat      
Hallo,

hmmmm.... also nur wenn es wirklich nicht anders geht... 4D-Arrays sind halt irgendwie so unübersichtlich, vor allem wenn man mehrere davon hat und die Parameter die geändert werden jeweils auch noch unterschiedlich sind Wink

Mein Hintergedanke ist nämlich, dass ich in den Namenszusatz nicht nur die Schleifennummer, sondern auch noch alle wichtigen Parameter schreibe, sonst verliere ich irgendwann mal total den Überblick. Da wäre es halt sehr geschickt, wenn wenn man die einzelnen Ergebnisse gleich schön aufgelistet im Workspace hat und man schon am Namen der Variablen erkennt, was für Daten es den sind Smile

Was wäre den das Problem mit EVAL?

Oder vielleicht könnte ich die Ergebnisse jeweils gleich als Mat-File speichern. Das ist zwar nicht sonderlich elegant und wohl auch nicht schnell, aber würde eventuel auch seinen Zweck erfüllen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.07.2014, 09:05     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Mein Hintergedanke ist nämlich, dass ich in den Namenszusatz nicht nur die Schleifennummer, sondern auch noch alle wichtigen Parameter schreibe, sonst verliere ich irgendwann mal total den Überblick.

Genau das "erreichst" du mit deinem Ansatz letztlich. Solche Informationen können beispielsweise als Felder in einer Struktur aufgenommen werden, aber bitte nicht in die Variablennamen. Sonst endet man schnell mit mehreren 100 Variablen, die alle mit EVAL verarbeitet werden müssen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 11.07.2014, 09:18     Titel:
  Antworten mit Zitat      
Hallo,

das mit den dynamisch erzeugten Variablennamen ist schlecht, da jedes weitere automatisierte Verarbeiten der Daten auch nur aus weiteren Kombinationen von sprintf() und eval() funktioniert. Das wird schnell unübersichtlich und schlecht nachvollziehbar. Im Prinzip geht es aber...
Code:
for n=1:10
    cmd = sprintf('Ergebnis_von_schleife_%d = Funktion(Inputparameters)',n);
    eval(cmd)
end


Das mit dem Speichern als mat-file hingegen halte ich für eine gute Idee.
Code:
for n=1:10
    ergebnis = Funktion(Inputparameters);
    filename = sprintf('schleife_%d.mat',n);
    save(filename, 'ergebnis')
end
% laden von z.b. ergebnis 6
ergebnis = lade_ergebnis(6);

Dazu braucht man dann nur noch eine geeignete Funktion fürs laden, zum Beispiel so:
Code:
function ergebnis = lade_ergebnis(n)
    filename = sprintf('schleife_%d.mat',n);
    load(filename);
end

% oder ohne meckernde warnings
% function ergebnis = lade_ergebnis2(n)
%     filename = sprintf('schleife_%d.mat',n);
%     data = load(filename);
%     ergebnis = data.ergebnis;
% end


Viele Grüße,
Nras.
Private Nachricht senden Benutzer-Profile anzeigen
 
PeterK
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 23.12.13
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 11.07.2014, 15:19     Titel:
  Antworten mit Zitat      
Vielen Dank für eure Antworten! Smile

Ich werde es nun tatsächlich so lösen, dass ich die Ergebinisse jedesmal in ein mat-file speichere und die mat-files entsprechend benenne, so dass ich später noch weiß welche Parameter variiert wurden!
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: 12.07.2014, 17:29     Titel:
  Antworten mit Zitat      
Hallo PeterK,

Bedeutungen in Namen zu speichern ist immer eine schlechte Idee. Eine Trennung von Daten und Code ist flexibeler.

Due kannst die Messbedingungen in einer zusätzlichen Variable speichern und so ganz ausführlich im Mat-file mit abspeichern, anstatt sie in krypt. Abgek. Form im Datei-Namen zu veschlüsseln.

Viele Grüße, Jan
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 - 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.