|
|
Teile einer Cell unter bestimmten Bedienungen löschen |
|
Giralsol1986 |

Forum-Newbie
|
 |
Beiträge: 6
|
 |
|
 |
Anmeldedatum: 08.12.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.11.2014, 17:01
Titel: Teile einer Cell unter bestimmten Bedienungen löschen
|
 |
|
 |
|
Hallo,
ich habe einiges im Forum zum löschen von Teilen in Cell-Arrays gelesen (arrayfun usw.).
Was ich aber bisher nicht hinbekommen habe, sind Teile des Cell arrays zu löschen, wenn eine bestimmte Bedingung eintrifft:
Werte ist meine cell. Ich möchte dass wenn ein einzelner Eintrag in der Cell weniger als fünf Zeilen hat, gelöscht wird, ansonsten soll er einfach beibehalten werden.
Werte schaut folgendermaßen aus:
werte =
[ 56x2 double]
[ 118x2 double]
[ 33x2 double]
[ 181x2 double]
[ 315x2 double]
[ 436x2 double]
[ 57x2 double]
[ 3x2 double]
[ 200x2 double]
[ 52x2 double]
[ 2x2 double]
[ 160x2 double]
[1913x2 double]
[1903x2 double]
[ 2x2 double]
[ 51x2 double]
[ 115x2 double]
[ 42x2 double]
[ 118x2 double]
[ 278x2 double]
[ 391x2 double]
[ 2x2 double]
[ 68x2 double]
[3815x2 double]
[ 4x2 double]
und alle die kleiner als 5x2 double sind, sollen raus.
Allerdings bekomme ich folgender Fehlermeldung, die sich mir nicht erklärt:
Index exceeds matrix dimensions.
Matlab generiert mir eine neue Cell ohne die entsprechenden Einträge, aber dann kommt eine Fehlermeldung. Ich denke, das problem ist, das die Cell innerhalb der Schleife kleiner wird und dann i nicht mehr bis zum Ende laufen kann. Kann man das irgendwie abfangen?
Danke für jede Hilfe oder Idee!
|
|
|
|
|
Yvonne |

Forum-Anfänger
|
 |
Beiträge: 16
|
 |
|
 |
Anmeldedatum: 31.07.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2014b
|
 |
|
|
 |
|
Verfasst am: 12.11.2014, 17:55
Titel:
|
 |
Hallo,
Dein Code ist an und für sich korrect.
Aber wenn Du in der for-Schleife Zellen des Cell Arrays löschst, wärend der Index weiter anwächst, kann es sein das das Cell Array iregndwann kürzer ist als der Index den Du versuchst aufzurufen. Daher erhältst Du die Fehlermeldung "Index exceeds matrix dimensions."
Mein Vorschlag:
Anstelle der for-Schleife kannst Du aber auch cellfun verwenden:
LG, Yvonne
|
|
|
Giralsol1986 |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 6
|
 |
|
 |
Anmeldedatum: 08.12.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 13.11.2014, 11:06
Titel:
|
 |
Ok, das hatte ich mir schon gedacht. Ich habe es jetzt so gelöst:
for i = 1:length(werte); % bei length gibt er mir die korrekte Länge aus
if length(werte{i})<5;
werte{i}= [];
end
end
werte(cellfun(@isempty,werte)) = []
Die Stellen kleiner fünf, werden erst leergemacht, dann wird es nicht kürzer und ganz am Ende schmeiße ich die leeren Stellen dann raus mit cellfun.
Ich wusste nicht, dass ich am Ende die fortschleife ganz weglassen kann und es mit cellfun funktioniert. Danke für den Tipp.
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|