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

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

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

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

Ответ 1

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

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

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

Ответ 2

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

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

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

подход:

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