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

leere Zellen in Cell-Array löschen ohne Zeilen zu ändern

 

Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.07.2014, 17:23     Titel: leere Zellen in Cell-Array löschen ohne Zeilen zu ändern
  Antworten mit Zitat      
Hallo Forum,

ich müsste aus einem 4x11 Cell-Array alle leeren Zeilen löschen ohne aber die Zeilen zu verändern.

Code:
    del = cellfun('isempty', result);     % Leere Zellen finden
     result(del) = []                      % Leere Zellen löschen

macht nämlich genau letzteres und schreibt mir die mühsam sortierten Zellen in eine Zeile.

Eine andere Methode die ich online gefunden habe
Code:
result(any(isempty(result')),:)=[];

macht noch garnix - habe ich da einen Fehler drinnen?

Noch mal eine andere Problembeschreibung - im Prinzip suche ich einen Befehl, der das manuelle löschen im VariablenEditor mit 'Auswahl alle leeren zellen - delete - shift cells left' immitiert

Danke für eure Hilfe


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.07.2014, 19:14     Titel:
  Antworten mit Zitat      
Hallo,

eine Kombination von beidem sollte helfen:

Code:
c = {1, 2; 3, []; 5, 6}
toremove = any(cellfun(@isempty, c), 2)
c(toremove,:) = [];


Falls das nicht das gewünschte erzielt, bitte nochmal genauer erklären, was du machen möchtest.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.07.2014, 09:34     Titel:
  Antworten mit Zitat      
Danke! Das hat soweit funktioniert - mittlerweile habe ich aber noch ein anderes Problem:

Um bei deinem Beispiel zu bleiben sagen wir ich habe c, c1, c2, c3, c4, .... cn (n kann sich bei jedem Funktionsaufruf ändern, wird aber zuvor bestimmt)
Kann ich den Befehl irgendwie erweitern, dass ein variabler Variablennamen akzeptiert wird?

Danke!
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.07.2014, 10:01     Titel:
  Antworten mit Zitat      
Hallo,

variable Variablennamen sind keine gute Idee, siehe Threads über EVAL bzw. seine Vermeidung.
Eher würde ich die Cell Arrays schachteln, oder eine Struktur verwenden.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.07.2014, 10:58     Titel:
  Antworten mit Zitat      
Mhhh ok.
Das Schachteln der Cells wäre in meinem Gedankengang eigentlich nach dem Löschvorgang gekommen. Falls man beides aber noch leichter in einem Schritt machen kann wäre es natürlich noch besser. Hast du dazu irgendwelche Tipps/Codevorschläge?
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.07.2014, 11:29     Titel:
  Antworten mit Zitat      
Hallo,

statt
c1 = ...
c2 = ...
würde ich verwenden:
Code:
c = cell(1,n);
c{1} = ...
c{2} = ...

Da kann man natürlich auch for-Schleifen verwenden.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.07.2014, 14:58     Titel:
  Antworten mit Zitat      
ok - das ist soweit klar ... ich werde es gleich ausprobieren, sobald ich wieder am PC bin.

Kann ich dann
Code:
toremove = any(cellfun(@isempty, c), 2)
c(toremove,:) = [];

oder ähnliches auf die Hauptstufe der geschachtelten Cell anwenden?
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.07.2014, 15:37     Titel:
  Antworten mit Zitat      
Hallo,

ja - nochmal ein cellfun drumherum.
Wenn dir das syntaktisch zu komplex wird, kannst du natürlich auch eine for-Schleife verwenden.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.08.2014, 15:30     Titel:
  Antworten mit Zitat      
Also - ich hab mein ganzes Prozedere nach deinem Vorschlag mit {1} / {2} / usw. umgestellt und finde die Lösung vorläufig besser als meine vorherige. Schon mal danke dafür!
Allerdings komme ich einfach nicht darauf wie ich jetzt die leeren Zellen entferne.
 
Harald
Forum-Meister

Forum-Meister


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

ich bin mir jetzt nicht sicher, wo du gerade stehst, aber ich würde mir das so vorstellen:

Code:
for I=1:numel(c)

toremove = any(cellfun(@isempty, c{I}), 2)
c{I}(toremove,:) = [];

end


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.08.2014, 13:53     Titel:
  Antworten mit Zitat      
Hallo Harald,

Hat genau gepasst! - hab nur die "Richtung" ändern müssen und jetzt funktioniert endlich alles wie gewollt!

Ein großes Dankeschön an dich - auch wenn es nur an Kleinigkeiten gescheitert ist wäre ich da sicher nicht ohne deine Hilfe draufgekommen!
 
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.