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

loop durch variablen von mat files

 

mimatopo
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 19.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.04.2015, 10:05     Titel: loop durch variablen von mat files
  Antworten mit Zitat      
Hallo zusammen,
ich habe mat files mit vielen variablen darin. Hier ein (vereinfachtes) Beispiel:

Code:

x1=(1:3)';
y1=(4:10)';
z1=(8:15)';
save mat_1.mat;
clear all;

x2=(4:9)';
y2=(1:5)';
z2=(3:8)';
save mat_2.mat;
clear all;

x3=(1:6)';
y3=(3:8)';
z3=(3:7)';
save mat_3.mat;
clear all;


Nun möchte ich aus diesen mat files nach folgendem Muster über einen loop neue vectoren generieren:
x1 aus mat_1.mat soll in der ersten Spalte des neuen vectors stehen, darunter folgt dann x2 aus mat_2.mat als auch x3 aus mat_3.mat. Der Name des neuen Vectors kann x1 sein (die namen meiner variablen sind länger...) und kann von variable x1 z.b übernommen werden.
Innsgesamt habe ich 4 mat files mit jeweils 70 variablen drinnen...

Vielen Dank für die Hilfe !!!
Private Nachricht senden Benutzer-Profile anzeigen


Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.04.2015, 16:32     Titel:
  Antworten mit Zitat      
Hallo mimatopo,
Namen durchzunummerieren ist schlecht, da Du damit nicht sinnvoll z.B. in Schleifen weiterarbeiten kannst. Du kannst bei load ein Rückgabeargument angeben, so dass die ganze Datei in ein struct geladen wird, das Du mit fieldnames auch durchlaufen kannst.
Private Nachricht senden Benutzer-Profile anzeigen
 
mimatopo
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 19.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.04.2015, 11:08     Titel:
  Antworten mit Zitat      
Danke für den Hinweis !!

Ich bin einen Schritt weiter, hänge aber leider wieder:

Wenn ich folgende Datenstruktur habe:

Code:
S = struct('Nummer1', [1 2]', 'Nummer2',[3 4 5]', 'Nummer3', [6 7 2 1]');
save S.mat
S1 = struct('Nummer1', [4 3]', 'Nummer2',[7 9 3 4]', 'Nummer3', [4 7]');
save S1.mat


Kann ich mir über fieldnames eine Datei mit den entsprechneden Bezeichnungen generieren:

Code:


Da ich die struct files abspeichere zähle ich diese in meinem Ordner für eine for Bedingung mit :

Code:
filelist=dir('*.mat');
numfiles=length(filelist);


Ich schaffe es aber nicht die Werte in die entsprechenden Spalten bei 'regions' zu schreiben...

Diese kann ich zwar mittels

Code:
for SName = fieldnames(S)'
    stuff = S.(SName{1})
   
end


abrufen, komm aber nicht weiter. Danach müßte ich noch eine 2. for Bedingung legen um alle .mat files im Ordner zu durchlaufen!

Vielleicht hat hier noch jemand eine Idee...

Danke, mimatopo
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.04.2015, 20:27     Titel:
  Antworten mit Zitat      
Und wo ist jetzt das Problem, eine zweite for-Schleife um die erste zu schreiben?
Geht aber auch ohne:
Code:
for idx=1:numfiles
   stuff(idx) = load(filelist{idx});
end
Private Nachricht senden Benutzer-Profile anzeigen
 
mimatopo
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 19.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.04.2015, 10:24     Titel:
  Antworten mit Zitat      
Danke nochmals!

Das Problem ist:
über fieldnames generierte ich 'regions' welches alle meine Parameter auflistet. In der for-Schleife bekomme ich unter Sname die verschiedenen 'regions' und stuff beinhaltet die entsprechenden numerischen Werte.
Ich schaffe es nicht diese Werte in das 'regions' file zu schreiben...

Danke!
Private Nachricht senden Benutzer-Profile anzeigen
 
Seban
Forum-Meister

Forum-Meister


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

Im Code wird, denke ich, ersichtlich wie man in cells (regions) schreiben kann. Zudem habe ich die Schleife angepasst, durch verwenden von Zählvariablen kann man mMn leichter/verständlicher auf die Felder zugreifen.

Code:
% Beispieldaten
S = struct('Nummer1', [1 2]', 'Nummer2',[3 4 5]', 'Nummer3', [6 7 2 1]');
save S.mat
S1 = struct('Nummer1', [4 3]', 'Nummer2',[7 9 3 4]', 'Nummer3', [4 7]');
save S1.mat

% Daten aus .mat einlesen
filelist=dir('*.mat');
numfiles=length(filelist);
for ii = 1:numfiles
    S_read = load(filelist(ii).name);
end

% Feldnamen ermitteln
fn = fieldnames(S_read);
SName = fieldnames(S_read.S)';
numregions = size(SName, 2);

% Daten in cell speichern
regions = cell(numfiles+1, numregions);  % pre-allocate
regions(1,:) = SName;
for jj = 1:numfiles
    for ii = 1:numregions
        regions{jj+1, ii} = S_read.(fn{jj}).(SName{ii});
    end
end


Grüße,
Seban
_________________

Richtig fragen
Debugging
Private Nachricht senden Benutzer-Profile anzeigen
 
mimatopo
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 19.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.04.2015, 15:18     Titel:
  Antworten mit Zitat      
vielen Dank! So kann ich es gut implementieren und die Zählvariablen erleichtern mir vieles Smile
mimatopo!
Private Nachricht senden Benutzer-Profile anzeigen
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 17.04.2015, 23:51     Titel:
  Antworten mit Zitat      
Gern geschehen Smile

Vielleicht hast du es schon bemerkt, so kann man beliebige Dateinamen für die mat-Files verarbeiten:

Statt
Code:
SName = fieldnames(S_read.S)';

folgendes
Code:
SName = fieldnames(S_read.(fn{1}))';


Grüße
_________________

Richtig fragen
Debugging
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.