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

Zeilen nach Überprüfung neu einfügen

 

Senraphil
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 16.04.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.05.2014, 16:41     Titel: Zeilen nach Überprüfung neu einfügen
  Antworten mit Zitat      
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
if isnan(data(k,2))
data=[data(1:k),(data(k,1)+data(k,10)) 0 0 data(k,10) 0 data(k,7) 0 0 0 0,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
if isnan(data(k,2))
data=[data(1:k,:),(data(k,1)+data(k,10)) 0 0 data(k,10) 0 data(k,7) 0 0 0 0,data(k+1:end,:)]
end
end


Hier kommt aber der Error horzcat. Damit kann ich leider gar nichts anfangen.
Kann mir bitte jemand helfen und mir sagen wo der Fehler liegt?
Danke.

MfG
Senraphil
Private Nachricht senden Benutzer-Profile anzeigen


Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 15.05.2014, 20:15     Titel: Re: Zeilen nach Überprüfung neu einfügen
  Antworten mit Zitat      
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, Smile
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
if isnan(data(k,2))
data=[data(1:k),(data(k,1)+data(k,10)) 0 0 data(k,10) 0 data(k,7) 0 0 0 0,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, :)];
 



Senraphil hat Folgendes geschrieben:

Code:
for k=2:size(data,1)-1
if isnan(data(k,2))
data=[data(1:k,:),(data(k,1)+data(k,10)) 0 0 data(k,10) 0 data(k,7) 0 0 0 0,data(k+1:end,:)]
end
end


Hier kommt aber der Error horzcat. Damit kann ich leider gar nichts anfangen.
Kann mir bitte jemand helfen und mir sagen wo der Fehler liegt?

Du versucht data (welche 421x10 groß ist), eine deutlich größere MAtrix zuzuweisen, in der dann nicht alle Zeilen gleich lang sind.
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
Senraphil
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 16.04.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.05.2014, 08:17     Titel:
  Antworten mit Zitat      
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".

Übe das mal an einer kleineren Matrix.


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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Senraphil
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 16.04.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.05.2014, 09:04     Titel:
  Antworten mit Zitat      
Hi,

das bereits beschiebene Problem konnte ich eigenlich ganz gut lösen. Dazu habe ich eine Schleife verwendet:
Code:
v=zeros(1,10);
for k=2:size(data,1)-1
    if isnan(data(k,2))
        data=[data(1:k,:);v;data(k+1:end,:)];
    end
end


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
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.