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

For-Schleife entwickeln

 

Ines Ebner
Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 09.04.20
Wohnort: Jena
Version: ---
     Beitrag Verfasst am: 10.04.2020, 15:22     Titel: For-Schleife entwickeln
  Antworten mit Zitat      
Hallo,

für die meisten hier ist die Frage sicher sehr logisch, ich bin allerdings Anfänger und mir fällt es gerade sehr schwer ein Verständnis für Matlab zu generieren.

Ich will Standardabweichung, Mittelwert und Rmssd einer Matrix über die ersten 50 Zeilen meiner Matrix und über alle Spalten(11) erstellen. Kann mir jemand helfen das zu Bauen, da es bei meiner aktuellen "Schleifen-Formulierung" noch nicht geht. Ich weiß nicht wie es geht.

ich habe bisher folgendes:
Code:





for i = 1:50
   Standardabwkurz= std(M);
   Meankurz= mean(M);
   Rmssd = sqrt(1/(length(M)-1) * (sum( diff(M).^2)))
end
 


ich brauche wohl irgend ein Zwischenspeicher und ein Zähler weiß aber nicht an wie es geht und an welche stelle es eingesetzt wird.

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


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.04.2020, 15:28     Titel:
  Antworten mit Zitat      
Hallo,

am einfachsten dürfte es sein, M zunächst auf die ersten 50 Zeilen zu begrenzen und dann den RMSSD in einer Schleife zu berechnen.

Code:
M = M(1:50,:);
Standardabwkurz= std(M);
Meankurz= mean(M);

Rmssd = zeros(1, size(M,2));
for k = 1:size(M,2) % Schleife über Spalten
   Rmssd(k) = sqrt(1/(length(M(:,k))-1) * (sum( diff(M(:,k).^2)))
end


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Ines Ebner
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 09.04.20
Wohnort: Jena
Version: ---
     Beitrag Verfasst am: 10.04.2020, 15:33     Titel:
  Antworten mit Zitat      
Hallo,

ja das ist super, Dankeschön. Wäre ich nicht drauf gekommen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 09.04.20
Wohnort: Jena
Version: ---
     Beitrag Verfasst am: 10.04.2020, 21:53     Titel:
  Antworten mit Zitat      
Hallo Smile

Ich hab noch eine Frage zum Schleifen- bauen.
Ich möchte jetzt gerne aus einem Ordner nacheinander alle csv-Dateien einlesen (die haben alle etwas um die 100 Zeilen und 11 Spalten) dann möchte ich das jede Datei mein bisher geschriebenes Programm durchläuft und aber von allen Datein dann eine excel abgespeichert wird.

ich habe anderen Beiträgen zum einlesen dazu schon durchgelesen, aber komme noch nicht so richtig voran, vielleicht kann mir jemand helfen.

bisher habe ich:

Code:


clear;
folder = 'Users\inesebner\Desktop\Matlab\CSV\';
flist = dir(folder); % geht schonmal nicht da steht im workspace 0x1 struct

for k=1:length(flist)
   
    if flist(k).isdir
        flistmat = dir([folder flist(k).name filesep '*.csv']);
       
        for m = 1:length(flistmat)
            loadname = [folder flist(k).name filesep flistmat(m).name]);
         
            % hier dazwischen dann mein Programm??


        end
    end
end

 



Danke schonmal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.04.2020, 22:15     Titel:
  Antworten mit Zitat      
Hallo,

Der Pfad sollte wohl mit Laufwerksbuchstaben beginnen, z.B. C:

Die doppelte for-Schleife ist nicht nötig. Seit einigen Releases unterstützt dir , dass man mit ** alle Unterverzeichnisse mit durchsucht. Es reicht also:

Code:
folder = 'C:\Users\inesebner\Desktop\Matlab\CSV\';
flist = dir(fullfile(folder, '**', '.csv'));

for k=1:length(flist)
   
               loadname = fullfile(flist(k).folder, flist(k).name);
         
            % hier dazwischen dann mein Programm??

end


fullfile finde ich in der Handhabung angenehmer als filesep.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Ines Ebner
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 09.04.20
Wohnort: Jena
Version: ---
     Beitrag Verfasst am: 10.04.2020, 22:33     Titel:
  Antworten mit Zitat      
Hallo,

danke schonmal soweit, ich hab mein Pfad jetzt nochmal geändert, ich hatte mein Ordner auf dem Desktop liegen und der war in der Cloud deshalb was das ein Problem jetzt im Speicher.

Wie geht es jetzt weiter? Ich möchte die Dateien dann als eine Matrix haben mit der dann weitergerechnet werden kann. Muss das dann nochmal mit dem Befehl dlmread erfolgen?
Und muss das in der Schleife erfolgen?

Liebe Grüße und Danke schonmal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.04.2020, 23:23     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Muss das dann nochmal mit dem Befehl dlmread erfolgen?

dir gibt nur den Dateinamen, die Dateien müssen dann schon noch eingelesen werden. Aus der Doku: "dlmread is not recommended. Use readmatrix instead." Alternativ readcell oder readtable.

Zitat:
Und muss das in der Schleife erfolgen?

Ja, weil du ja jede der Dateien einlesen willst. Sonst wäre die Schleife auch etwas überflüssig...

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Ines Ebner
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 09.04.20
Wohnort: Jena
Version: ---
     Beitrag Verfasst am: 11.04.2020, 12:49     Titel:
  Antworten mit Zitat      
Hallo,

ich bräuchte nochmal Hilfe. Ich hab heute morgen versucht meine Datein einzulesen und habe verschiedenes probiert, gelesen und ich schaffe es nicht. Ich verstehe es auch gerade nicht.

ich hab folgendes:
Code:


clear;
folder = 'Nordpol:\Benutzer\inesebner\Computer\Matlab\CSV';  
 %ich hab ein macbook bin mir schon nicht sicher ob nach Nordpol dann ein doppelpunkt
   kommt. das Command Window sagt diesbezüglich nichts.... es passiert insgesamt  
   gerade nichts

flist = dir(fullfile(folder, '**', '.csv'));

for k=1:length(flist)
   
    loadname = fullfile(flist(k).folder, flist(k).name);  
    file= fopen(loadname); % ich dachte man könnte das so öffnen und einlesen muss ich
                                         % das in abhängikeit von k machen?
   
    M= readmatrix(file);

   % dann mein bisheriges programm
        M = rmmissing(M);
        M = M(1:50,:);
   
           Standardabwkurz= std(M);
           Meankurz= mean(M);

                   Rmssd = zeros(1, size(M,2));
                   for k = 1:size(M,2)
                       Rmssd(k) = sqrt(1/(length(M(:,k))-1) * (sum( diff(M(:,k).^2))))
                   end
               
            g =[Standardabwkurz;Meankurz;Rmssd]
               
 
             %  hier muss ich dann den befehl schreiben zum speichern  
           
           
           
     fclose(file);


 


Über eure Hilfe bin ich sehr dankbar.
Liebe Grüße,
Ines
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.04.2020, 12:55     Titel:
  Antworten mit Zitat      
Hallo,

schau dir doch im Workspace mal flist an. Werden Dateien gefunden?

Code:
file= fopen(loadname);
...
fclose(fid);

brauchst du nicht, wenn du mit readmatrix arbeitest. Stattdessen direkt:
Code:
M= readmatrix(loadname);


Zitat:
hier muss ich dann den befehl schreiben zum speichern

z.B. writematrix

Gerade wenn der Code (hier mangels Daten) nicht ausführbar ist, ist es wichtig, möglichst genau zu beschreiben, wo das Problem liegt. Insbesondere welche Fehlermeldungen ggf. auftreten.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Ines Ebner
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 09.04.20
Wohnort: Jena
Version: ---
     Beitrag Verfasst am: 11.04.2020, 13:07     Titel:
  Antworten mit Zitat      
Hallo,

flist ist 0x1 struct, da ist wohl ein Problem. Aber ich hab mir öfter den Pfad des Ordners ausgeben lassen in dem die csv Datein liegen.
In dem Ornder befindet sich auch die aktuell m-File Datei mit der gearbeitet wird. Weil beim einzeln einlesen sollten die zusammen in einem Ordner liegen. (dachte ich).

Weiß nicht was ich falsch mache.

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

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.04.2020, 13:41     Titel:
  Antworten mit Zitat      
Hallo,

was gibt denn pwd aus?
Ist bei Mac das Pfadtrennzeichen nicht / statt \ ?

Zitat:
Weil beim einzeln einlesen sollten die zusammen in einem Ordner liegen.

Muss nicht sein. Du gibst ja explizit an, wo nach Dateien gesucht werden soll. Wenn die Dateien aber im momentanen Verzeichnis liegen, kannst du das verwenden:
Code:
flist = dir('*.csv');


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Ines Ebner
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 09.04.20
Wohnort: Jena
Version: ---
     Beitrag Verfasst am: 12.04.2020, 10:05     Titel:
  Antworten mit Zitat      
Hallo,

ich hab es jetzt erstmal so gelöst.

Code:

clear;
currentFolder = pwd;
flist = dir('*.csv');

 


damit konnte ich jetzt erstmal die Datein einlesen.
jetzt muss ich sie "nur" noch writematrix speichern in eine excel datei.

Liebe Grüße und ein schönen Ostersonntag euch allen,
Ines
Private Nachricht senden Benutzer-Profile anzeigen
 
Ines Ebner
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 09.04.20
Wohnort: Jena
Version: ---
     Beitrag Verfasst am: 13.04.2020, 12:53     Titel:
  Antworten mit Zitat      
Hallo,

ich habe nochmal eine Fragen und benötige eure hilfe
Ich habe in einer for- Schleife über die Spalten ein Zeilenvektor als Ergebnis. Jetzt möchte ich gerne das Ergebnis speichern in eine Matrix um dann das mit writematrix in eine xls exportieren zu können.

Code:

  Rmssd(k,:)= zeros(1, size(M,2));  % Zeros array als 1 Zeile mit der länge von size (M,2)
          for k = 1:size(M,2) % Schleife über Spalten
               Rmssd(k) = sqrt(1/(length(M(:,k))-1) * (sum( diff(M(:,k).^2))))
          end

 


ich dachte das würde helfen.
Code:

Rmssd(k,:) = zeros(1, size(M,2));
 


aber ab der fünften Zeile stehen nur noch nullen drinnen.
Was mache ich falsch? Beeinflusst das vorherige Ergebnis dann das Schleifenergebnis? Muss ich nach der schleife den Wert abspeichern?

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

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.04.2020, 14:01     Titel:
  Antworten mit Zitat      
Hallo,

da soll ein Zeilenvektor pro Spalte rauskommen? Momentan kommt jedenfalls eine Zahl raus, und das erscheint mir auch so sinnvoll. Allerdings war in meinem Vorschlag eine Klammer falsch gesetzt: die Differenzen müssen ja quadriert werden, nicht die Differenz der Quadrate genommen werden.
Code:
Rmssd(k) = sqrt(1/(length(M(:,k))-1) * sum( diff(M(:,k)).^2))


Wenn, dann sollte vor der Schleife die gesamte Matrix (also nicht nur eine Zeile) vorbelegt werden. Ich meine aber, dass du dir das so oder so schenken kannst.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Ines Ebner
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 09.04.20
Wohnort: Jena
Version: ---
     Beitrag Verfasst am: 13.04.2020, 14:18     Titel:
  Antworten mit Zitat      
Hallo,


also wenn ich die Datein einzeln durchlaufen lassen, dann funktioniert der Rmssd. Und ich bekomme ein Zeilenvektor über die Spaltenlänge (1x11) und das Ergebnis möchte ich in meiner Schleife mit dem automatischen einlesen meiner 198 Datein dann in eine Matrix speichern. Hier nochmal mein bisheriges Programm.

Code:

clear;
currentFolder = pwd;
flist = dir('*.csv');
filename = 'Variabilitätsmaße Gang.xls';

for k=1:length(flist)
   
    loadname = fullfile(flist(k).folder, flist(k).name);  
    M= readmatrix(loadname);
   
    M = rmmissing(M);
    M = M(1:50,:);
   
   
      Meankurz(k,:)= mean(M);    %hier habe ich durch (k,:) einfach die ergebnise in eine
                                                 %Matrix gespeichert
      Standardabwkurz(k,:)= std(M);

         
              Rmssd = zeros(1, size(M,2));  

          for k = 1:size(M,2) % Schleife über Spalten
               Rmssd(k) = sqrt(1/(length(M(:,k))-1) * sum( diff(M(:,k)).^2))
          end    
                   
end

writematrix(Meankurz,filename, 'Sheet',1);
writematrix(Standardabwkurz,filename, 'Sheet',2);
writematrix(Rmssd,filename, 'Sheet',3);

 



und ich dachte jetzt
Code:


 Rmssd(k,:) = zeros(1, size(M,2));  % ich dachte das geht hier auch mit ( k,: ) aber ich
                                     %bekomme ab der 3 zeile nur noch Nullen  
                       %und wenn ich die Datein einzeln einlese bekomme ich ein Ergebnis

          for k = 1:size(M,2) % Schleife über Spalten
               Rmssd(k) = sqrt(1/(length(M(:,k))-1) * sum( diff(M(:,k)).^2))
          end

 



ich bin gerade ratlos.

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

Gehe zu Seite 1, 2  Weiter

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.