2010-08-03 22 views
34

¿Cómo puedo detectar celdas vacías en una matriz de celdas? Sé que el comando para eliminar la celda vacía es a(1) = [], pero parece que no puedo hacer que MATLAB detecte automáticamente qué celdas están vacías.¿Cómo puedo detectar celdas vacías en una matriz de celdas?

Antecedentes: preasigné una matriz de células con a=cell(1,53). Luego usé if exist(filename(i)) y textscan para buscar un archivo y leerlo. Como resultado, cuando el filename(i) no existe, se genera una celda vacía y pasamos al siguiente archivo.

Cuando termine de leer en todos los archivos, me gustaría eliminar las celdas vacías de a. Probé if a(i)==[]

Respuesta

53

Uso CELLFUN

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

Nota: a(i)==[] no va a funcionar. Si desea saber si la celda i-ésima está vacía, debe usar corchetes para acceder al contenido de la celda. Además, ==[] evalúa como vacío, en lugar de true/false, por lo que debe usar el comando isempty. En resumen: a(i)==[] debe reescribirse como isempty(a{i}).

+15

para una ligera mejora en el uso de velocidad 'emptyCells = cellfun ('IsEmpty', a);' ... 'cellfun' tiene un interruptor interno' 'declaración que comprueba si la cadena es una de las funciones que puede hacer un incremento de velocidad" mágica "con ... Esto se describe aquí: http://undocumentedmatlab.com/blog/cellfun-undocumented-performance -boost/ – JudoWill

+0

+1 para especificar cómo eliminar las celdas vacías. Esto te deja con una matriz de celdas que contiene solo las entradas no vacías. – Matteo

0

Todas las respuestas mencionadas son incorrectas, porque en mi caso cuando las usé, eliminaron las celdas vacías y luego todos los elementos de mi matriz de celdas situados en forma de fila en lugar de conservar su forma real. De hecho, después de usar este tipo de enfoque, los elementos del conjunto de celdas tienden a ser un vector de celda fila.

He encontrado este enfoque que funciona correctamente en mi caso.

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

enfoque:

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