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

Hilfe bei simpler Abfrage

 

Zbyrcsgn
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 02.08.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.08.2016, 14:47     Titel: Hilfe bei simpler Abfrage
  Antworten mit Zitat      
Hallo Leute

sitze seit einigen Tagen an einem kleinen Problem.
Ich habe viele Cell-Arrays, in welcher die Monatlichen werte einer Solaranlage sich befinden. Durch Systemausfall oder Störungen fehlen leider immer wieder einige Werte.
Nun ist mir aufgefallen das fehlende Werte mals als NaN eingetragen sind und mal als String 'NaN'. Ich würde gerne alles einheitlich haben, so dass die NaN-Werte auch als String stehen.

Hab diesen Code geschrieben um zeilen weise alles durchzuforsten:
Code:
        pdc = time_vdc_idc_pdc_tmod(:,4);
        vdc = time_vdc_idc_pdc_tmod(:,2);
        idc = time_vdc_idc_pdc_tmod(:,3);
        tmod= time_vdc_idc_pdc_tmod(:,5);
       
        for i=1:size(time_vdc_idc_pdc_tmod)
            if isequal(pdc(i),NaN)
                pdc{i} = 'NaN';
            elseif isequal(vdc(i),NaN)
                vdc{i} = 'NaN';
            elseif isequal(idc(i),NaN)
                idc{i} = 'NaN';
            elseif isequal(tmod(i),NaN)
                tmod{i} = 'NaN';
            end
        end


die time_vdc_idc_pdc_tmod ist angehängt
Sitzte schon seit paar Tagen an diesem banelem Problem

Falls jmd eine bessere idee hat, die sich besser in Matlab realisieren lässt und auch schneller ist, dann wäre ich sehr dankbar. Habe 2552 mat-Dateien mit je einer Arraygröße von 5x2977. Das Skript sollte drüberlaufen und die Datei mit ersetzten Werten abspeichern .

Danke und Liebe Grüße

ausschnitt der time_vdc_idc_pdc falls sich jmd nicht die Datei downlaoden möchte:

also die Werte von der 3. Spalte solten so sein wie die von der 4.Spalte

A170_15min_2014_07.mat
 Beschreibung:

Download
 Dateiname:  A170_15min_2014_07.mat
 Dateigröße:  67.02 KB
 Heruntergeladen:  385 mal
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: 02.08.2016, 16:38     Titel:
  Antworten mit Zitat      
Hallo,

Code:
toReplace = cellfun(@(x) isequaln(x, NaN), time_vdc_idc_pdc_tmod);
time_vdc_idc_pdc_tmod(toReplace) = {'NaN'};

Ich würde die Ersetzung allerdings in die andere Richtung machen, weil dann alles Zahlen sind und das effizienter verarbeitet werden kann.

Falls du das beeinflussen kannst, wären Tables sicher eine bessere Art, die Daten abzuspeichern.

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

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 02.08.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.08.2016, 18:10     Titel:
  Antworten mit Zitat      
DANKEEEE Funktioniert spitze
in tables umgewandlet mit
Code:
Dataset = cell2table(time_vdc_idc_pdc_tmod,...
    'VariableNames',{'Time' 'V_DC' 'I_DC' 'P_DC' 'T_MOD'})


Andersrum würde natürlich auch gehen kein Problem, nur wüsste ich nicht wie ich dann eine Abfrage machen könnte, die genau das da macht:
Code:
if Dataset.P_DC == NaN && isnumeric(Dataset.V_DC) && isnumeric(Dataset.I_DC)
      Dataset.P_DC = Dataset.V_DC*Dataset.I_DC;
end


Bin erst seit einem Monat an Matlab dran, lerne hauptsächlich bei learning by doing.


#EDIT:
Super, rumprobiert und es tut Very Happy

Code:
tic
toReplace = cellfun(@(x) isequaln(x, 'NaN'), time_vdc_idc_pdc_tmod);
time_vdc_idc_pdc_tmod(toReplace) = {NaN};


Dataset = cell2table(time_vdc_idc_pdc_tmod,...
    'VariableNames',{'Time' 'V_DC' 'I_DC' 'P_DC' 'T_MOD'});

for i=1:size(time_vdc_idc_pdc_tmod)
   if  isequaln(Dataset.P_DC(i),NaN)
       if isnumeric(Dataset.V_DC(i))
           if isnumeric(Dataset.I_DC(i))
               Dataset.P_DC(i) = Dataset.I_DC(i)*Dataset.V_DC(i);
           end
       end
   end    
end
toc

2sek dauerts ca

fehlt nur noch das abspeichern....
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.