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 leeren spalten einer Matrix

 

sbfly
Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 23.12.08
Wohnort: ibk
Version: ---
     Beitrag Verfasst am: 10.03.2009, 15:36     Titel: Löschen von leeren spalten einer Matrix
  Antworten mit Zitat      
HI

ICh versuche gerade bei einer Matrix alle zielen heraus zu schneiden, ( in meiner Matrix gibt es mehrere Spalten die mit Nullen gefüllt sind.

Ich habe das so versucht

Code:
b= size(Sig);
b= b(2,2);

for i = 1 : b

    if Sig(:,i) ==0
        Sig(:,i) = []
    end

end


Irgendwas ist daran aber noch falsch ich muss dies immer mehrmals ausführen bis es funktioniert bzw. alle Nullen Entfernt hat
Kann mir da jemand helfen oder nee bessere Methode mit nennen

Gruß

Flo

Edit by Bijick: Code-Formatierung ergänzt. Bitte in Zukunft selbst machen (Code-Button mittig über dem Eingabefenster). Danke Smile
Private Nachricht senden Benutzer-Profile anzeigen


Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.03.2009, 16:05     Titel:
  Antworten mit Zitat      
Hier ein kleines Beispiel.
In B werden die Nullzeilen gelöscht, in C die Nullspalten:
Code:
A=magic(10);
k=1+round(9*rand(5,1));

B=A;
C=A;
B(k,:)=0
C(:,k)=0

B(~any(B,2),:)=[]
C(:,~any(C))=[]
 
Andband
Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 10.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.03.2009, 23:43     Titel:
  Antworten mit Zitat      
hehe das geht wirklich - lustig - aber warum geht das eigentlich? Smile

wenn ich nur:

Code:

eingebe, bekomme ich ja einen vektor geliefert, der in jeder Zeile in der nur Nuller stehen eine 1 als Eintrag und ansonsten Nuller beinhaltet

also würde doch beim eigentlichen löschvorgang nur immer:
Code:

B(0,:)=[]
 

bzw.
Code:

B(1,:)=[]
 


ausgeführt werden...

wo ist mein denkfehler?
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: 11.03.2009, 12:41     Titel:
  Antworten mit Zitat      
Hallo Andband,

Du kennst wahrscheinlich die logische Indizierung noch nicht (Suche in der Matlab-Hilfe nach "Using Logicals in Array Indexing").

Man kann in Matrizen nicht nur die konkreten Elemente ansprechen mit

Code:
B([1 3 4],:)


sondern auch mithilfe von logischen Vektoren oder Matrizen

Code:
B(logical([1 0 1 1 0 0 0 0 0 0]),:)


Beide Code-Zeilen fischen die 1., 3. und 4. Zeile aus der Matrix. Wichtig ist im zweiten Beispiel, dass der Datentyp des Vektors logical ist, denn ein Element B(0,:) existiert ja gar nicht.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Andband
Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 10.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.03.2009, 23:54     Titel:
  Antworten mit Zitat      
ah cool - alles klar, dieser Vektor ist also von einem besonderen Datentyp, deshalb klappts - nice Smile
Das es kein
Code:
hab ich auch schon vermutet Very Happy

Danke schön
Private Nachricht senden Benutzer-Profile anzeigen
 
Germanus
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 15.12.09
Wohnort: ---
Version: 7.8.0 (R2009b), Linux
     Beitrag Verfasst am: 19.01.2011, 21:01     Titel:
  Antworten mit Zitat      
Hallo,

kann mir jemand verraten, wie das obige Beispiel
Code:

C(:,~any(C))=[]
 

auf ein Array der Dimension 3 angewandt wird?

Also wie lösche ich die Null-Spalten und Null-Ebenen?

Vielen Dank fuer die Hilfe
MFG, Germanus
Private Nachricht senden Benutzer-Profile anzeigen
 
slinshady
Forum-Century

Forum-Century


Beiträge: 115
Anmeldedatum: 12.01.16
Wohnort: ---
Version: R2012b+
     Beitrag Verfasst am: 02.12.2017, 16:31     Titel:
  Antworten mit Zitat      
Germanus hat Folgendes geschrieben:
Hallo,

kann mir jemand verraten, wie das obige Beispiel
Code:

C(:,~any(C))=[]
 

auf ein Array der Dimension 3 angewandt wird?

Also wie lösche ich die Null-Spalten und Null-Ebenen?

Vielen Dank fuer die Hilfe
MFG, Germanus


ich vermute du musst es mit einem if machen. falls du eine nullspalte, zeile findest in in die anderen beiden schauen, ob da noch was ist und dann erst löschen.
wäre jetzt meine erste Idee.
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.