34 votes

Comment détecter les cellules vides dans une matrice cellulaire ?

Comment détecter les cellules vides dans une matrice cellulaire ? Je sais que la commande pour supprimer la cellule vide est a(1) = [] Mais je ne parviens pas à faire en sorte que MATLAB détecte automatiquement les cellules vides.

Contexte : J'ai pré-alloué un tableau de cellules en utilisant a=cell(1,53) . Ensuite, j'ai utilisé if exist(filename(i)) et textscan pour vérifier la présence d'un fichier, et le lire. Par conséquent, lorsque le filename(i) n'existe pas, une cellule vide en résulte et nous passons au fichier suivant.

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

56voto

Jonas Points 54073

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 i-ième cellule est vide, vous devez utiliser des accolades pour accéder au contenu de la cellule. De même, ==[] évalue à vide, au lieu de true / false vous devez donc utiliser la commande isempty à la place. En bref : a(i)==[] doit être réécrite comme suit isempty(a{i}) .

0voto

private_meta Points 355

Le problème aurait déjà dû être traité ici, vous pouvez essayer cette approche :

http://stackoverflow.com/questions/2624016/replace-empty-cells-with-logical-0s-before-cell2mat-in-matlab

0voto

Mahdi Karami Points 21

Toutes les réponses mentionnées ci-dessus sont incorrectes, car dans mon cas, lorsque je les ai utilisées, elles ont supprimé les cellules vides et tous les éléments de mon tableau de cellules ont été placés en ligne au lieu de préserver leur forme réelle. En fait, après avoir utilisé ce type d'approche, les éléments de votre tableau de cellules ont tendance à être un vecteur de cellules en ligne.

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

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

l'approche :

myCellARRAY(all(cellfun(@isempty,myCellARRAY),2), : ) = [];

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X