2010-08-03 36 views
34

Come posso rilevare celle vuote in un array di celle? So che il comando per rimuovere la cella vuota è a(1) = [], ma non riesco a trovare MATLAB per rilevare automaticamente quali celle sono vuote.Come posso rilevare celle vuote in un array di celle?

Sfondo: Ho preassegnato un array di celle utilizzando a=cell(1,53). Quindi ho usato if exist(filename(i)) e textscan per verificare la presenza di un file e leggerlo. Di conseguenza, quando lo filename(i) non esiste, una cella vuota risulta e passiamo al file successivo.

Quando ho finito di leggere tutti i file, vorrei eliminare le celle vuote di a. Ho provato if a(i)==[]

risposta

53

Usa CELLFUN

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

Nota: a(i)==[] non funzionerà. Se vuoi sapere se la cella i-esima è vuota, devi usare parentesi graffe per accedere al contenuto della cella. Inoltre, ==[] è vuoto, invece di true/false, quindi è preferibile utilizzare il comando isempty. In breve: a(i)==[] deve essere riscritto come isempty(a{i}).

+15

per un leggero miglioramento in uso velocità 'emptyCells = cellfun ('IsEmpty', a);' '... cellfun' ha una' interruttore interno 'dichiarazione che controlla se la stringa è una delle poche funzioni che può fare un aumento di velocità" magico "con ... Questo è descritto qui: http://undocumentedmatlab.com/blog/cellfun-undocumented-performance -boost/ – JudoWill

+0

+1 per specificare come eliminare le celle vuote! questo ti lascia con un array di celle contenente solo le voci non vuote! – Matteo

0

Tutte le risposte sopra indicate non sono corrette, perché nel mio caso, quando le ho utilizzate, hanno rimosso le celle vuote e quindi tutti gli elementi del mio array di celle situati in una riga anziché conservarne la forma effettiva. Infatti, dopo aver usato questo tipo di approccio, gli elementi del tuo array di celle tendono ad essere un vettore di celle di riga.

Ho trovato questo approccio che funziona correttamente nel mio caso.

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

approccio:

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