在MATLAB中删除2个n个细胞阵列中的空细胞



我有一个带有两个列和几行的细胞。当我使用

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

它去除空单元格,并创建一个单元格数组现在的前两个行现在在一行中。我要他们仍然分为两行。我该怎么做?

要清楚:

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

其中subdata_1和2是进一步的单元格数组。因此,单元格数组data将包含两个列和几行,每个单元格是另一个单元格数组。一些行将是空的[]当我删除这些空细胞时,data将不再包含两个列和几行,但只有1列。我该如何保留 N x 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]

最新更新