删除空单元格而不更改行数

Remove empty cells without changing the number of rows

我有一个 6x16 单元格(称为 M),有时最后 4 列中的所有单元格都是空的,如下所示:

[12 200 3 4] [45 24 1 26]...[] [] [] []
...
[47 31 54 40] [85 2 10 256]...[] [] [] []

如果我这样做

M=M(~cellfun('isempty',M));  

然后我得到 72x1 单元格。我想删除空单元格,但单元格应变为 6x12。顺便说一句,在某些情况下,最后 4 列不是空的。在这种情况下,我想保留 6x16。有人可以帮忙吗?

如果你知道最后四列都是空的,就收缩M:

M = M(:,1:end-4);

如果你不知道四总是要排除的数字,你可以试试这个:

nCol = size(M,2);
mask = cell2mat(arrayfun(@(k) nCol - numel([M{k,:}]),1:size(M,1),'UniformOutput',false)');
M    = M(:,1:end-max(mask));

这将 trim 最大空列数。