it-roy-ru.com

Как обнаружить пустые ячейки в массиве ячеек?

Как обнаружить пустые ячейки в массиве ячеек? Я знаю, что команда для удаления пустой ячейки - это a(1) = [], но я не могу заставить MATLAB автоматически определять, какие ячейки пусты. 

Справочная информация: Я предварительно выделил массив ячеек, используя a=cell(1,53). Затем я использовал if exist(filename(i)) и текстовое сканирование для проверки файла и считал его. В результате, когда filename(i) не существует, возникает пустая ячейка, и мы переходим к следующему файлу. 

Когда я закончу читать все файлы, я хотел бы удалить пустые ячейки a. Я пробовал if a(i)==[]

34
N.C. Rolly

Используйте CELLFUN

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

Примечание: a(i)==[] не будет работать. Если вы хотите узнать, пуста ли i-я ячейка, вы должны использовать фигурные скобки для доступа к содержимому ячейки. Кроме того, ==[] оценивается как пустое вместо true/false, поэтому вы должны использовать команду isempty вместо этого. Вкратце: a(i)==[] следует переписать как isempty(a{i}).

55
Jonas

Все вышеупомянутые ответы неверны, потому что в моем случае, когда я их использовал, они удаляли пустые ячейки, а затем все элементы моего массива ячеек, расположенные в ряд, вместо того, чтобы сохранять их фактическую форму. Фактически, после такого подхода ваши элементы массива ячеек имеют тенденцию быть вектором ячеек строки.

Я нашел этот подход, который работает правильно в моем случае.

источник: https://groups.google.com/forum/#!topic/comp.softsys.matlab/p3NX0fI6u90

подход:

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