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

ismember

 

denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 16.02.2011, 21:49     Titel:
  Antworten mit Zitat      
Hallo

so:
Code:

M1(:,all(isnan(M1),1))=[]
 
Private Nachricht senden Benutzer-Profile anzeigen


DG407
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 20.05.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.05.2014, 11:03     Titel:
  Antworten mit Zitat      
Hallo,

Ich habe auch zu der Thematik eine Frage, und zwar will ich nicht die Spalte einer Matrix löschen wo ein NaN vorkommt, sondern wo ein bestimmter Wert überschritten wird.

ein Beispiel einer Matrix

Code:

A      = [1 2 3 4 ;
            2 3 2 3;
            1 2 5 1;
            1 1 1 1];
 

in der ersten Zeile steht die Schleifen-Nummer und in den Zeilen darunter verschiedene Werte nun möchte ich die Spalten löschen in denen der Wert 4 überschritten wird. Also in diesem Fall die Spalte 3 (wegen der 5 in Zeile 3)

Kann mir bei diesem Problem jemand weiter helfen?

Vielen Danke
Grüße Dave
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: 25.05.2014, 11:49     Titel:
  Antworten mit Zitat      
Hallo,
Code:

toremove = max(A) > 4;
A(toremove,:) = [];


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
DG407
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 20.05.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.05.2014, 08:48     Titel:
  Antworten mit Zitat      
Hallo,

Super vielen Dank für die schnelle Antwort, hat so weit funktioniert.
nun habe ich aber des weiteren das Problem, dass in der Zeile 1 höhere Werte stehen. Dieses Problem habe ich bisher so gelöst:

Code:

A      = [6 7 8 9 ;
          1 2 1 2;
          2 1 4 1;
          1 1 1 1];
A(:,any(abs(A)>3 & abs(A)<6)) = [];

 


Kann man diesem Befehl auch sagen, dass er nur die Zeilen 2-4 durchsuchen soll?
Meine Matrix später wird etwas komplizierter und da geht es dann wirklich nur um 8 Zeilen von insgesamt 15 und die Werte überschneiden sich auch teilweise, so dass nur die >/< Operatoren nicht ausreichen. In diesem Fall würde es schon nicht mehr funktionieren, wenn die Durchnummerierung in Zeile 1 bei dem Wert 1 beginnt.

Alternativ wäre es auch in meinem Fall eine Möglichkeit über diesen Befehl die Spalten-Nummern, die gelöscht werden sollen in einer neuen Matrix zwischen zu speichern und bei einer zweiten Matrix genau diese Spalten zu löschen. wie würde dieser Lösche-Befehl von mehreren Spalten aussehen?

Grüße Dave
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: 26.05.2014, 09:28     Titel:
  Antworten mit Zitat      
Hallo,

natürlich kann man:

Code:
toremove = max(A(2:end,:)) > 4;
A(toremove,:) = [];


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
DG407
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 20.05.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.05.2014, 10:04     Titel:
  Antworten mit Zitat      
super vielen Dank! genau so habe ich mir das vorgestellt!

Nun habe ich noch eine Frage zu dem Code.
Was genau erledigt das 'max'? und was ist 'toremove' (logical) für ein Wert?
und kann ich auch die Bedingung >4 mit einer <0 kombinieren? oder muss ich das über zwei Schritte machen?

Grüße Dave
Private Nachricht senden Benutzer-Profile anzeigen
 
DG407
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 20.05.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.05.2014, 10:11     Titel:
  Antworten mit Zitat      
Code:

toremove = max(A(2:end,:)) > 3 | min(A(2:end,:))<2;
 


Nun hat sich leider eine weitere Frage aufgetan...
was hat es mit dem max min auf sich? denn ich will ja nicht nur die maximal bzw minimal Werte löschen sondern wirklich alle Werte, die die Grenzen überschreiten!

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: 26.05.2014, 12:39     Titel:
  Antworten mit Zitat      
Hallo,

max berechnet das Maximum, im Falle von Matrizen standardmäßig spaltenweise.
toremove ist ein Variablenname. Die Variable beinhaltet für jede Zeile die Information, ob sie gelöscht werden soll (true) oder nicht (false).
Das Verwenden dieser logischen Variable als Index heißt logical indexing (kann man in der Hilfe nachschlagen).
Und ja, du kannst kombinieren, wie du das im folgenden Beitrag auch gemacht hast.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2

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.