在MATLAB中删除2,n单元格数组中的空单元格

时间:2017-03-15 11:35:08

标签: matlab cell

我有一个有两列和几行的cellarray。 当我使用

data = data(~cellfun('isempty', data)) 

删除空单元格并创建一个单元格数组 前两行现在都在一行中。我想要他们 仍然是两排。我怎么能这样做?

更清楚:

data{i, 1} = subdata_1
data{i, 2} = subdata_2 

其中subdata_1和2是其他单元格数组。 所以单元格数组data将包含两列和几行, 其中每个细胞是另一个细胞阵列。有些行为空[] 当我删除这些空单元格时,data将不再包含 两列和几行,但只有一列。我怎么能保持 N x 2数据单元阵列的结构?

1 个答案:

答案 0 :(得分:2)

当您从一行中只删除一列时,结果将是一个向量而不是2 x N数组,因为MATLAB无法确定维度。

a = [1, 2, 3; 4 5 6].';
size(a)
%   3   2

a = a(a ~= 4);
size(a)
%   5   1

您要做的是删除整行。现在确定哪些行取决于您期望的行为。

因此,如果我们设置一些示例数据:

data = {1, 2, []; [], 3, []}.';
%   [1]    []
%   [2]   [3]
%    []    []

如果要删除任何具有空单元格的行

result = data(~any(cellfun('isempty', data), 2), :);
%   [2]   [3]

如果要删除包含所有空单元格的行

result = data(~all(cellfun('isempty', data), 2), :);
%   [1]    []
%   [2]   [3]
相关问题