Как обнаружить пустые ячейки в массиве ячеек? - PullRequest
34 голосов
/ 04 августа 2010

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

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

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

Ответы [ 2 ]

55 голосов
/ 04 августа 2010

Использование CELLFUN

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

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

0 голосов
/ 23 июня 2015

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

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

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

подход:

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