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

Löschen von Zeilen und Spalten einer Matrix mit Bedingung

 

oadriano
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 19.04.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.04.2021, 19:25     Titel: Löschen von Zeilen und Spalten einer Matrix mit Bedingung
  Antworten mit Zitat      
Guten Tag,
ich konnte schon mehrmals auf die Hilfe in diesem Forum zurückgreifen. Nun habe ich ein Problem, welches mich schon mehrere Tage beschäftigt.

Ich habe folgende Matrix:
Code:
A=  -1     0     0     0     0     0     0
     1    -1     0     0     0     0     0
     0     1    -1     0     0     0     0
     0     0     1     0     0     0     0
     0     0     0    -1     0     0     0
     0     0     0     1    -1     0     0
     0     0     0     0     1    -1     0
     0     0     0     0     0     1    -1
     0     0     0     0     0     0     1



Mein Ziel ist folgenes: Wenn eine Zeile genau zwei Einträge außer Null enthält, soll diese Zeile gelöscht werden. Es entstehen Nuller-Spalten, diese sollen auch gelöscht werden. Ich habe es versucht, aber es erscheint die Fehlermeldung, dass das Array überschritten wird. Nach jeder Iteration soll an einer anderen Stelle im Code was passieren, meine if Bedingung überschreitet aber das Array.

Hat jemand eine Lösung? Folgendes sollte das Ergebnis sein:
Code:
    -1     0
     1     0
     0     -1
     0     1
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.04.2021, 20:16     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Wenn eine Zeile genau zwei Einträge außer Null enthält, soll diese Zeile gelöscht werden.

Code:
A( sum(A~=0, 2) == 2, :) = [];

Dann entsteht

A =
-1 0 0 0 0 0 0
0 0 1 0 0 0 0
0 0 0 -1 0 0 0
0 0 0 0 0 0 1

Wenn ich da aber die Nullspalten entferne, entsteht eine Diagonalmatrix und nicht die von dir genannte...

Wenn du schon was versucht hast, poste bitte generell den Code. Oft ist nur eine Kleinigkeit das Problem, und dann kann es viel leichter sein, dir den Fehler zu zeigen als von vorne anzufangen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
oadriano
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 19.04.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.04.2021, 20:27     Titel:
  Antworten mit Zitat      
Vielen Dank für die Antwort! Es funktioniert, aber ich hatte einen Gedankenfehler. Ziel ist nicht die Diagonalmatrix, sondern die neue Matrix in der Frage. Es reicht nicht die Nullerspalten zu verschieben.
Zum Code kann ich wirklich nur das posten, was du eben beigetragen hast. Sollte eine Zeile gelöscht werden, muss an einem anderen Teil im Code was passieren, deswegen wollte ich es mit if implementieren Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.04.2021, 20:33     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Sollte eine Zeile gelöscht werden, muss an einem anderen Teil im Code was passieren

Und was? Du meintest ja, dass du einen Gedankenfehler hattest. Aber was soll denn stattdessen passieren?

Zitat:
deswegen wollte ich es mit if implementieren

Die Information reicht leider nicht, um dir weiterhelfen zu können...

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
oadriano
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 19.04.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.04.2021, 20:42     Titel:
  Antworten mit Zitat      
Ich meine, wenn eine Zeile gelöscht wird, muss die Information gespeichert werden, welche Zeile gelöscht wurde. Danach muss eine Methode gefunden werden, die Matrix in Form

-1 0
1 0
0 -1
0 1

zu bringen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.04.2021, 21:21     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Danach muss eine Methode gefunden werden, die Matrix in Form
-1 0
1 0
0 -1
0 1
zu bringen.

Und wie soll das gehen?
Die Methode muss m.E. schon der Anwender vorgeben. MATLAB kann sie nur umsetzen.

Ich wüsste jetzt nicht, wie aus der ursprünglichen 9x7-Matrix eine 4x2-Matrix werden soll. Klar, ich kann jetzt einen Code schreiben, der nach Lust und Laune irgendwas weglässt, um bei dem Ergebnis anzukommen - nur wird das dann halt allgemein nicht funktionieren und somit wenig bringen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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 - 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.