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

Bestimmte Zeilen einer Matrix löschen

 

-dave-

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.08.2008, 16:11     Titel: Bestimmte Zeilen einer Matrix löschen
  Antworten mit Zitat      
Hi,

ich habe eine Matrix und möchte die Zeilen, deren inhalt sich nicht ganzzahlig durch eine vorgegeben Zahl teilen lässt, aus der Matrix herauslöschen.
Nun habe ich das Problem, dass ich nicht weiß ich das machen könnte.
Wäre super wenn mir jemand weiterhelfen könnte.

MfG David


steffi
Forum-Century

Forum-Century



Beiträge: 149
Anmeldedatum: 07.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.08.2008, 16:45     Titel:
  Antworten mit Zitat      
Über die Funktion

Code:
kannst du herausfinden, ob x ganzzahlig durch y teilbar ist. Nämlich dann, wenn das Ergebnis 0 ist.

Vielleicht kommst du hiermit schon mal weiter!
_________________

Wenn ich bei der Arbeit mit Computern eins gelernt habe dann das ich einem Computer nur soweit traue wie ich ihn werfen kann.
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 18.08.2008, 16:58     Titel:
  Antworten mit Zitat      
Hallo David,

dafür brauchst Du zwei Funktionen: mod, um zu entscheiden, ob die Matrixelemente durch die Zahl teilbar sind, und any um die Zeilenindizes zu bestimmen, wo irgendein Element nicht durch die Zahl teilbar ist. Mit [] kann man Zeilen löschen:

Code:
% Eine Beispielmatrix
z=magic(4);z(1:2,:)=z(1:2,:)*2
% Die Zahl, bezüglich derer Teilbarkeit geprüft werden soll
Deine_Zahl = 2;
% Welche Elemente von z sind durch Deine_Zahl teilbar? Eine 0 zeigt Teilbarkeit an.
M = mod(z,Deine_Zahl)
% Welche Zeilen von M enthalten "nonzeros", also Elemente ungleich 0?
% (Die 2 gibt an, dass nicht Spalten sondern Zeilen gesucht sind.)
A=any(M,2)
% Löschen dieser Zeilen
z(A,:)=[]
 


Oder kurz:
Code:
z=magic(4);z(1:2,:)=z(1:2,:)*2
Deine_Zahl = 2;
z(any(mod(z,Deine_Zahl),2),:)=[]


Herzliche Grüße
Bijick

@steffi: das hat sich jetzt grad überschnitten, sorry.
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
steffi
Forum-Century

Forum-Century



Beiträge: 149
Anmeldedatum: 07.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.08.2008, 17:21     Titel:
  Antworten mit Zitat      
@Bijick

Kein Problem! Nur wollte ich erstmal zum Denken anregen und nicht alles preisgeben Laughing
_________________

Wenn ich bei der Arbeit mit Computern eins gelernt habe dann das ich einem Computer nur soweit traue wie ich ihn werfen kann.
Private Nachricht senden Benutzer-Profile anzeigen
 
Martin
Admin

Admin



Beiträge: 651
Anmeldedatum: 16.06.07
Wohnort: Bietigheim-Bissingen
Version: ---
     Beitrag Verfasst am: 18.08.2008, 17:28     Titel:
  Antworten mit Zitat      
Herzlichen Glückwunsch steffi Smile
Du hast den 10.000 Beitrag auf goMatlab.de geschrieben. Very Happy

_________________

Der kleine goMatlab.de-Knigge - Eine kleine Liste von wichtigen Regeln, die jeder beachten sollte
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.08.2008, 08:37     Titel:
  Antworten mit Zitat      
Erstmal vielen Dank für die schnelle Antwort!

Fast genau so hab ich mir das vorgestellt. Ne kleinigkeit passt noch nicht, und zwar werden ja alle Elemente auf die Teilbarkeit geprüft. In meinem Anwendungsfall dürfen aber nur die Elemente der ersten Spalte auf die Teilbarkeit geprüft werden.
Gelöscht wird jedoch wie bisher die ganze Zeile.
Wie kann ich das noch mit einbauen?

David

Bijick hat Folgendes geschrieben:
Hallo David,

dafür brauchst Du zwei Funktionen: mod, um zu entscheiden, ob die Matrixelemente durch die Zahl teilbar sind, und any um die Zeilenindizes zu bestimmen, wo irgendein Element nicht durch die Zahl teilbar ist. Mit [] kann man Zeilen löschen:

Code:
% Eine Beispielmatrix
z=magic(4);z(1:2,:)=z(1:2,:)*2
% Die Zahl, bezüglich derer Teilbarkeit geprüft werden soll
Deine_Zahl = 2;
% Welche Elemente von z sind durch Deine_Zahl teilbar? Eine 0 zeigt Teilbarkeit an.
M = mod(z,Deine_Zahl)
% Welche Zeilen von M enthalten "nonzeros", also Elemente ungleich 0?
% (Die 2 gibt an, dass nicht Spalten sondern Zeilen gesucht sind.)
A=any(M,2)
% Löschen dieser Zeilen
z(A,:)=[]
 


Oder kurz:
Code:
z=magic(4);z(1:2,:)=z(1:2,:)*2
Deine_Zahl = 2;
z(any(mod(z,Deine_Zahl),2),:)=[]


Herzliche Grüße
Bijick

@steffi: das hat sich jetzt grad überschnitten, sorry.
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 19.08.2008, 08:43     Titel:
  Antworten mit Zitat      
Moin,

kannst du mal ein einfaches Beispiel (3x3-Matrix) geben, an welchem du verdeutlichst, was genau du machen willst?! Ich werde aus deiner Aussage grad nicht schlau...

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
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.08.2008, 09:01     Titel:
  Antworten mit Zitat      
also hier ein Auszug meiner Matrix:

0.000620 604.13 -217.30 143.00 1.00 //soll gelöscht werden
0.001000 604.13 -217.30 143.00 1.00
0.002000 604.13 -217.30 143.00 1.00
0.003000 604.13 -217.30 143.00 1.00
0.004000 604.13 -217.30 143.00 1.00
0.004675 604.13 -217.30 143.00 1.00 //soll gelöscht werden
0.005000 604.13 -217.30 143.00 1.00
0.006000 604.13 -217.30 143.00 1.00
0.007000 604.13 -217.30 143.00 1.00
0.008000 604.13 -217.30 143.00 1.00
0.009000 604.13 -217.30 143.00 1.00
0.010000 604.13 -217.30 143.00 1.00
0.011000 604.13 -217.30 143.00 1.00
0.012000 604.13 -217.30 143.00 1.00
0.012990 804.24 -217.20 143.00 1.00 //soll gelöscht werden
0.013000 804.24 -217.20 143.00 1.00
0.014000 804.24 -217.20 143.00 1.00
0.015000 804.24 -217.20 143.00 1.00
0.016000 804.24 -217.20 143.00 1.00
0.017000 804.24 -217.20 143.00 1.00
0.018000 804.24 -217.20 143.00 1.00
0.019000 804.24 -217.20 143.00 1.00
0.020000 804.24 -217.20 143.00 1.00
0.021000 804.24 -217.20 143.00 1.00
0.021305 1004.35 -217.10 143.00 1.00 //soll gelöscht werden


Es sollen nun alle Zeilen gelöscht werden, deren Wert in der ersten Spalte nicht in den 0,001 Abstand passt.
Hab die Zeilen mal mit "//soll gelöscht werden" gekennzeichnet.

David


steve hat Folgendes geschrieben:
Moin,


kannst du mal ein einfaches Beispiel (3x3-Matrix) geben, an welchem du verdeutlichst, was genau du machen willst?! Ich werde aus deiner Aussage grad nicht schlau...

Gruß
Alex
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 19.08.2008, 09:21     Titel:
  Antworten mit Zitat      
Du musst nur den Code anpassen:
Code:
% Eine Beispielmatrix
z=magic(4);z(1:2,:)=z(1:2,:)*2
% Die Zahl, bezüglich derer Teilbarkeit geprüft werden soll
Deine_Zahl = 2;
% Welche Elemente von der ersten Spalte in z sind durch Deine_Zahl teilbar? Eine 0 zeigt Teilbarkeit an.
M = mod(z(:,1),Deine_Zahl)
% Welche Zeilen von M enthalten "nonzeros", also Elemente ungleich 0?
% (Die 2 gibt an, dass nicht Spalten sondern Zeilen gesucht sind.)
A=any(M,2)
% Löschen dieser Zeilen
z(A,:)=[]

Oder kurz:
Code:
z=magic(4);z(1:2,:)=z(1:2,:)*2
Deine_Zahl = 2;
z(any(mod(z(:,1),Deine_Zahl),2),:)=[]


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
 
steffi
Forum-Century

Forum-Century



Beiträge: 149
Anmeldedatum: 07.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.08.2008, 09:23     Titel:
  Antworten mit Zitat      
Hallo,

dann kannst du doch analog die Zeilen finden, deren erstes Element nicht durch deine Zahl teilbar ist und eben diese Zeilen löschen

Code:
Z=... %Deine Matrix
z=0.001;
nicht_teilbar=(mod(Z(:,1),z));
loeschen=nicht_teilbar~=0
 

_________________

Wenn ich bei der Arbeit mit Computern eins gelernt habe dann das ich einem Computer nur soweit traue wie ich ihn werfen kann.
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.08.2008, 09:38     Titel:
  Antworten mit Zitat      
Genau das hab ich gesucht!

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.