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

Automatisch bestimmte Zeilen einer Matrix löschen?

 

mbone5
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 05.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.05.2008, 21:46     Titel: Automatisch bestimmte Zeilen einer Matrix löschen?
  Antworten mit Zitat      
Vielleicht kann mir hier geholfen werden?

Ich habe einen Datensatz der die Form einer 100x4 Matrix hat.
Da der Datensatz leider nicht komplett ist wurden fehlende Daten mit NaN ersetzt. Ich würde jetzt gern alle Zeilen in denen so ein NaN vorkommt automatisch löschen lassen, sodass ich danach eine Matrix nur mit richtigen Werten habe (ohne NaN)?

Vielen Dank schon mal für eure Hilfe,

Gruß mbone
Private Nachricht senden Benutzer-Profile anzeigen


nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.320
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 05.05.2008, 22:18     Titel:
  Antworten mit Zitat      
Hi,

dazu hatte ich schon irgendwo mal ein Beispiel gepostet.

Code:
clear all;
clc;

X=[ 1 4 5;
    3 NaN 7;
    3 4 1]
X(any(isnan(X)),:) = [];
X

_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
mbone5
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 05.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.05.2008, 23:13     Titel:
  Antworten mit Zitat      
Erst einmal vielen Dank für die schnelle Antwort,
aber wenn ich das mache werden komischerweise nur die ersten vier Zeilen meiner 100x4 Matrix gelöscht und ich erhalte eine 96x4 Matrix und habe immernoch einige Zeilen in denen das NaN mindestens einmal vorkommt.

Daten(any(isnan(Daten)),Smile = []; (so habe ich es eingegeben)

"Daten" ist meine 100x4 Matrix!
Private Nachricht senden Benutzer-Profile anzeigen
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.320
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 05.05.2008, 23:22     Titel:
  Antworten mit Zitat      
Ich hätte mir mein Beispiel besser nochmal angeguckt.
Es muss heißen
Code:
X(any(isnan(X),2),:) = [];

Erklärung
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
mbone5
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 05.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.05.2008, 23:45     Titel:
  Antworten mit Zitat      
WOW!!!! Jetzt hat es geklappt!!! Wirklich, tausend Dank!!!!!!!


Viele Grüße

mbone
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.05.2008, 15:12     Titel:
  Antworten mit Zitat      
Und wenn ich in einer spalte mit format "cell" habe?

isnan funktioniert anscheinend mit "cell" nicht... ( laut Fehlermeldung...)
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.320
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 14.05.2008, 15:25     Titel:
  Antworten mit Zitat      
Dann musst Du das wahrscheinlich von Hand mit einer Schleife machen.
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 14.05.2008, 15:44     Titel:
  Antworten mit Zitat      
Schau dir mal diese Diskussion an, vielleicht ist dort etwas für dich mit dabei: http://www.gomatlab.de/cell-auf-inh.....light,cell+l%F6schen.html
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Jep

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.05.2008, 14:03     Titel:
  Antworten mit Zitat      
nschlange hat Folgendes geschrieben:
Dann musst Du das wahrscheinlich von Hand mit einer Schleife machen.


und wie geht das? Very Happy
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.320
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 18.05.2008, 15:11     Titel:
  Antworten mit Zitat      
Ich kann bis jetzt drei Ideen anbieten, NaN's aus einer cell zu löschen.
Wer hat andere Vorschläge?

Code:
clear all;
clc;

C1={NaN,1,2;
   2, NaN,4}

C2=C1;        
C3=C1;

%% 1. Moeglichkeit
[m,n]=size(C1);
for zeile=1:m
    for spalte=1:n
        if isnan(C1{zeile,spalte})
            C1(zeile,spalte)={[]};
        end
    end
end
C1

%% 2. Moeglichkeit
C2(isnan([C2{:}]))={[]}

%% 3. Moeglichkeit
pruefe=@(c) isnan(c);
idx=cellfun(pruefe,C3);
C3(idx)={[]}
 

_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 19.05.2008, 08:25     Titel:
  Antworten mit Zitat      
Moin,

am besten wir machen es so, dass solche Vorschläge in die Skripte/Tutorials-Ecke gepackt werden, damit man zukünftig nur noch drauf verweisen muss, oder?!

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
mr.kalaschnikow
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 26.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.07.2010, 23:34     Titel:
  Antworten mit Zitat      
Entschuldigt, dass ich diesen alten Thread nochmal hervorhole, aber ich habe in einem ähnlichen Gebiet ein Problem.

Ich möchte die NaN-Felder nicht löschen, sondern interpolieren, indem ich den Durchschnitt des vorangegangen Feldes und des nachfolgenden Feldes bilde. Komme ich da mit der angebotenen Syntax zur Löschung weiter bei meinem Problem? Sprich, kann ich da irgendwie die Felder davor und danach refernzieren?

Danke schonmal für eure Hilfe.

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

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.07.2010, 08:30     Titel:
  Antworten mit Zitat      
Hallo,

[r, c] = find(isnan(A));
A(r, c) = (A(r+1, c) + A(r-1,c))/2;

Achtung: das macht Probleme, wenn in der ersten oder letzten Zeile NaN steht, weil es drüber bzw. drunter keinen mehr gibt. Außerdem gibt es Probleme bei aufeinanderfolgenden NaN. Da müsste man sich also noch etwas einfallen lassen - z.B. mit interp1 arbeiten.
http://www.mathworks.com/access/hel.....sis/f0-10104.html#f0-8511
Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
mr.kalaschnikow
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 26.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2010, 17:58     Titel:
  Antworten mit Zitat      
Hallo Harald,


Vielen Dank für die Tipps. Habe ein exzellentes, kleines Programm gefunden, dass per interp1 die NaNs aus meinem Datensatz interpoliert. Vielleicht hilfreich für den einen oder anderen....

http://www.mathworks.com/matlabcent.....leexchange/8225-naninterp

Viele Grüße
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.