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

Berechnung eines cell arrays

 

Manni86
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 15.01.16
Wohnort: ---
Version: R2015b
     Beitrag Verfasst am: 15.01.2016, 12:29     Titel: Berechnung eines cell arrays
  Antworten mit Zitat      
Hallo,
Ich bin noch Neuling hier im Forum.
Meine Herausforderung liegt in der Analyse mehrerer .dat files. Sie bestehen je aus 16 Spalten und 630000 zeilen, also 630000 x 16 Datensätzen.

mit:
Code:
nl=630000; nheader=8; ncol=16;
files=dir([filesdir1 '/*.dat']);
filenames={files.name};
for k=1:numel(filenames)
    fid = fopen(fullfile(filesdir2,filenames{k}),'r');
    formatSpec=repmat('%f',1,ncol);
    daten{k} = textscan(fid,formatSpec,nl,'HeaderLines',nheader);
    fclose(fid);
end


ausgelesen, erhalte ich einen cell array.
Ziel ist es jeden Datensatz auszuwerten. Hierfür muß ich diese glätten und einer if-Anweisung unterziehen.

Meine bisheriger Quelltext bereitet meinem Rechner enorm viel Arbeit im Gegensatz zu einem Origin file:

Code:
newdata=cell(nl,numel(daten{1,1}),numel(daten));
for i=1:numel(daten)
    for k=1:numel(daten{1,i})
        for l=1:nl
            A(:,k)=smooth(daten{1,i}{1,k},4,'moving');
            newdata{l,k,i}=A(l,k);
        end
        for l=1:nl
            if newdata{l,k,i}<=max(A(:,k))*0.5;
               newdata{l,k,i}=100;
            else
               newdata{l,k,i}=0;
            end
        end
    end
end


Warum? Und wie kann meine Rechnung optimieren?

Selbst wenn ich das außerhalb des cell array für eine dat.-Datei rechnen lasse:
Code:
for k=1:numel(daten{1,1})
    A(:,k)=smooth(daten{1,1}{1,k},4,'moving');
    %newdata{l,k,i}=A(l,k);
end
%%
for k=1:numel(daten{1,1})
    for l=1:nl
        if A(l,k)<=max(A(:,k))*0.5;
           B(l,k)=100;
        else
           B(l,k)=0;
        end        
    end
end

rechnet dieser stundenlang.

Könnt Ihr mir bitte helfen? Die Alternative ist Origin und das Rechnen damit ist ein kraus.

Vorab Danke für Eure Unterstützung.
Viele Grüße
Manni
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.01.2016, 13:56     Titel: Re: Berechnung eines cell arrays
  Antworten mit Zitat      
Hallo Manni86,

Der Profiler zeigt Dir, in welchen Programmzeilen die meiste Rechenzeit benötigt wird. Dies ist immer das erste Tool, das man bei Effizienz-Problemen verwendet.

Ist das Array A pre-alloziert? Sollte es 630000 Spalten haben (das wird mit aus der Beschreibung nicht klar), würde Matlab SUM(1:630000) mal ein neues Array allozieren müssen und die Werte des alten kopieren. Wenn man stattdessen gleich A per zeros mit der entgültigen Größe erstellt, vermeidet man das resourcen-fressenden Wachstum.

Code:
       for l=1:nl
            A(:,k)=smooth(daten{1,i}{1,k},4,'moving');
            newdata{l,k,i}=A(l,k);
        end

Hier wird nl-mal das gleiche berechnet. Besser:
Code:
         A(:,k) = smooth(daten{1,i}{1,k},4,'moving');
        for l=1:nl
            newdata{l,k,i}=A(l,k);
        end

Auch in der nächsten Schleife wird "max(A(:,k))*0.5" immer wieder neu berechnet. Ziehe es also besser vor die Schleife und speichere das Ergebnis in einer temporären Variable.

Gruß, 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.