Question

Comment détecter les cellules vides dans une matrice de cellules? Je sais que la commande pour supprimer la cellule vide est a(1) = [], mais je ne peux pas sembler obtenir Matlab pour détecter automatiquement les cellules sont vides.

Arrière-plan: Je préallouées un réseau de cellules en utilisant a=cell(1,53). Ensuite, je if exist(filename(i)) et textscan pour vérifier un fichier et le lire dans. En conséquence, lorsque le filename(i) n'existe pas, il en résulte des cellules vides et nous passons sur le fichier suivant.

Quand je suis fini de lire dans tous les fichiers, je voudrais supprimer les cellules vides de a. J'ai essayé if a(i)==[]

Était-ce utile?

La solution

Utilisez CELLFUN

%# find empty cells
emptyCells = cellfun(@isempty,a);
%# remove empty cells
a(emptyCells) = [];

Note: a(i)==[] ne fonctionnera pas. Si vous voulez savoir si la cellule i-e est vide, vous devez utiliser des accolades pour accéder au contenu de la cellule. En outre, ==[] évalue à vide, au lieu de true / false, vous devez donc utiliser la commande isempty à la place. En bref: a(i)==[] devrait être réécrite comme isempty(a{i})

.

Autres conseils

Toutes les réponses ci-dessus mentionnées sont incorrectes, parce que dans mon cas quand je les ai utilisés, ils ont enlevé des cellules vides, puis tous les éléments de mon réseau de cellules situées de manière ligne au lieu de conserver leur forme réelle. En fait, après avoir utilisé ce type d'approche vos éléments de réseau de cellules ont tendance à être un vecteur de cellule de la ligne.

J'ai trouvé cette approche qui fonctionne correctement dans mon cas.

source: https://groups.google.com/ forum / #! sujet / comp.softsys.matlab / p3NX0fI6u90

approche:

myCellARRAY(all(cellfun(@isempty,myCellARRAY),2), : ) = [];
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top