Verfasst am: 15.05.2014, 16:41
Titel: Zeilen nach Überprüfung neu einfügen
Hallo liebe Gemeinde,
ich habe aktuell folgendenes Problem:
In meinem 421x10 Datensatz möchte ich genau dann eine neue ZEILE einfügen, wenn in einer der 2.Spalte einer ZEILE ein NaN steht. Das bedeutet, die neue ZEILE soll nach der ZEILE eingefügt werden, bei der in der 2.Spalte ein NaN steht.
Dazu habe beireits folgendes versucht:
Code:
for k=2:size(data,1)-1 ifisnan(data(k,2))
data=[data(1:k),(data(k,1)+data(k,10))00 data(k,10)0 data(k,7)0000,data(k+1:end)] end end
Irgendwo muss nun ein Fehler sein, da er mir nicht Zeilen einfügt, sondern aus meinem 421x10 Datensatz einen 1x4220 Datensatz macht. Ich komm einfach nicht drauf, wo der Fehler liegt.
Hab auch schon mit folgendem versucht:
Code:
for k=2:size(data,1)-1 ifisnan(data(k,2))
data=[data(1:k,:),(data(k,1)+data(k,10))00 data(k,10)0 data(k,7)0000,data(k+1:end,:)] end end
Verfasst am: 15.05.2014, 20:15
Titel: Re: Zeilen nach Überprüfung neu einfügen
Hallo,
befaß dich bitte zuerst einmal damit, wie du genau auf eine Teilmatrix zugreifst.
Aufbau ist:
Matrix(Zeile, Spalte)
Wenn du eine 421x10 Matrix hast, so greift du auf GENAU eine Zeile so zu:
Matrix(Zeilennummer,
Der Doppelpunkt besagt an dieser stelle: "über alle Spalten".
Wenn du eine Spalte möchtest: Matrix( :, Spaltennummer).
Der Doppelpunkt besagt an dieser stelle: "über alle Zeilen".
Willst du nun zB. aus der zweiten Zeile die Spalten 3-5, so musst du die Zeilennummer UND die gewünschen Spalten angeben:
Matrix(2, 3:5) -> in diesem Fall bedeutet der Doppelpunkt Spalte "3 BIS 5".
Übe das mal an einer kleineren Matrix.
Jetzt schau dir nochmal genau deine Zuweisungen an.
Senraphil hat Folgendes geschrieben:
ich habe aktuell folgendenes Problem:
In meinem 421x10 Datensatz möchte ich genau dann eine neue ZEILE einfügen, wenn in einer der 2.Spalte einer ZEILE ein NaN steht. Das bedeutet, die neue ZEILE soll nach der ZEILE eingefügt werden, bei der in der 2.Spalte ein NaN steht.
Dazu habe beireits folgendes versucht:
Code:
for k=2:size(data,1)-1 ifisnan(data(k,2))
data=[data(1:k),(data(k,1)+data(k,10))00 data(k,10)0 data(k,7)0000,data(k+1:end)] end end
Irgendwo muss nun ein Fehler sein, da er mir nicht Zeilen einfügt, sondern aus meinem 421x10 Datensatz einen 1x4220 Datensatz macht. Ich komm einfach nicht drauf, wo der Fehler liegt.
Das erste data in deinen eckigen Klammern enthält keine Spaltennummer, somit fügt er ALLE Elemente der Matrix hintereinander -> macht also einen Zeilenvektor aus deiner MAtrix
Grundsätzlich musst du nur folgendes tun:
Code:
data = [data(1:k, :); neueZeile; data(k+1:end, :)];
Also ich bedanke mich ja gerne für die Hilfe Martina.
Aber die Art wie du einem das herüber bringst ist teilweise echt beleidigend:
Code:
befaß dich bitte zuerst einmal damit, wie du genau auf eine Teilmatrix zugreifst.
Aufbau ist:
Matrix(Zeile, Spalte)
Wenn du eine 421x10 Matrix hast, so greift du auf GENAU eine Zeile so zu:
Matrix(Zeilennummer,
Der Doppelpunkt besagt an dieser stelle: "über alle Spalten".
Wenn du eine Spalte möchtest: Matrix( :, Spaltennummer).
Der Doppelpunkt besagt an dieser stelle: "über alle Zeilen".
Willst du nun zB. aus der zweiten Zeile die Spalten 3-5, so musst du die Zeilennummer UND die gewünschen Spalten angeben:
Matrix(2, 3:5) -> in diesem Fall bedeutet der Doppelpunkt Spalte "3 BIS 5".
Ich meine ich hab jetzt nicht die große Ahnung von Matlab und arbeite erst ein paar Wochen damit. Trotzdem weiß ich bereits wie eine Matrix aufgebaut ist und finde das ziemlich herablassend von dir, mir das oberlehrerhaft nochmals erklären zu wollen.
Nichts desto trotz hat mir deine Anwort geholfen und ich konnte mein Problem lösen.
Jetzt ergibt sich ein kleines Problem: Er fügt mir nur eine bestimmte Anzahl an neuen Zeilen ein, bis der Datensatz aus insgesamt 560 Zeilen besteht. Das bedeutet, er hört ab Zeile 420 auf, neue Zeilen einzufügen.
Meine Vermutung nun:
Der Ausgangsdatensatz hat 560 Zeilen, den ich anhand eines Kriteriums reduziere.
Anschließend möchte ich eben leere Zeilen einfügen, wenn die if-Bedingung erfüllt ist. Nun vermute ich, dass Matlab nur so lange neue Zeilen einfügt, bis die Größe des ehemaligen Originaldatensatzes wieder erreicht ist.
Wie kann ich das Problem lösen, damit Matlab mir solange neue Zeilen einfügt, wie die if-Bedingung erfüllt ist?
Ich hoffe jemand kann mir weiterhelfen.
Beste Grüße
Senraphil
Einstellungen und Berechtigungen
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
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.