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

NaN's in einem Cell Array ersetzen

 

Bine85

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.08.2009, 09:56     Titel: NaN's in einem Cell Array ersetzen
  Antworten mit Zitat      
Hallo zusammen,

ich hoffe Ihr könnt mir bei folgendem Problem weiterhelfen:

Ich habe ein 50x1 Cell Array, in dem in jeder Zelle eine 10x10 Matrix (double) mit Daten steckt. In den Daten befinden sich teilweise auch NaN's (Not a Number).

Ich möchte nun die NaN's in den einzelnen Datenmatrizen nicht wie sonst üblich mit einer Null ersetzen sondern mit dem vorherigen Wert. Um das ganze evtl. etwas genauer zu beschreiben:

Wenn man davon ausgeht, dass A mein 50x1 Cell Array ist und Daten1=A{1,1} (also die Daten für die erste Zeile) eine 10x10 Matrix mit Doubles. Wenn nun bspw. in Daten1(14,1) ein NaN steht, dann möchte ich Daten1(14,1) mit Daten1(13,1) ersetzen. Das zusätzliche Problem ist allerdings, dass NaN nur dann durch den Vorwert ersetzt werden soll, wenn alle übrigen Spalten (hier 2-10) in der gleichen Zeile (hier 14) kein NaN aufweisen.

Ich hoffe Ihr könnt mir weiterhelfen!

Viele Grüße

Bine85


derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 25.08.2009, 11:23     Titel:
  Antworten mit Zitat      
Hi,

Code:

A=randn(10);
B=randn(10);
A(1,1)=nan;
A(2,2)=nan;
A(2,8)=nan;
A(3,2)=nan;
C{1}=A;
C{2}=B;

for m=1:size(C,2)
    nans=isnan(C{m});
    one_nan=sum(nans,2)==1;
    i_one=find(one_nan);

    for k=1:size(i_one,1)
        b=find(nans(i_one(k),:));
        if b-1==0
            '????'
        else
        C{m}(i_one(k),b)=C{m}(i_one(k),b-1);
        end
    end
end
 


Musst du nur noch einfügen was du machst wenn das erste Element ein Nan ist.

Viele Grüße,

der Oli
Private Nachricht senden Benutzer-Profile anzeigen
 
Bine85

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.08.2009, 13:23     Titel:
  Antworten mit Zitat      
Hallo Oli,

vielen, vielen Dank für Deine schnelle Antwort!

Ich habe Deine Schleife jetzt mal durchlaufen lassen und es ist genau so wie bei meinen Versuchen: Matlab überschreibt mir die NaN's nicht mit anderen Werten! Wenn ich's "händisch" anweise dann werden die Werte überschrieben, sobald ich das ganze aber in eine Schleife packe funktionert's nicht.

Ich hoffe Du hast doch noch eine Lösung Embarassed

Viele Grüße

Bine85
 
derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 25.08.2009, 13:41     Titel:
  Antworten mit Zitat      
Hi, also bei mir klappt der Code so wie es oben steht. An der Stelle C{1}(3,2) sollte der Wert von C{1}(3,1) stehen. Die anderen nans bleiben weil: - in der zweiten Zeile mehrere nans stehen. - der erste Wert ganz vorn steht und ich nicht weiß was in diesem Fall gemacht werden soll, deswegen die Schleife.

Viele Grüße,

der Oli
Private Nachricht senden Benutzer-Profile anzeigen
 
Bine85

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.08.2009, 15:02     Titel:
  Antworten mit Zitat      
Jetzt hab's auch ich kapiert Cool

Vielen, vielen Dank!
 
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.