删除元胞数组中的空行

deleting empty rows in a cell array

我有一个元胞数组 (10001x21),其中前 3 列的所有行都有数据。从列 4 to 21 中,我在特定行的某些单元格中有数据,而某些行可能完全为空。

我只想保留在 4 to 21 的某些列中有数据的行,并删除在列 (4:21) 中没有任何数据的所有空行。如有任何帮助,我们将不胜感激 case.Thanks.

这是在Matlab环境下

数据是这样的

'1Fb6' 2014 'F'[][][][][][][][][][]
'1Fc6' 2014 'F' [] [] [] [] [] [] [] [] [] []
'1Fd6' 2014 'F' [] [] [] [] [] 'ka1' [] [] [] []
'1Fk6' 2014 'F' [] [] [] [] [] [] [] [] [] []
'1Fy6' 2014 'F' [] [] [] [] [] [] [] [] [] []
'1Fz6' 2014 'F' [] [] 'na1' [] [] [] [] [] [] []
'1Fj6' 2014 'F' [] [] [] [] [] [] [] [] [] []
'1Fm6' 2014 'F' [] [] [] [] [] [] [] [] [] []
'1Fn6' 2014 'F' [] [] [] [] 'bo1' [] [] [] [] []

假设您的元胞数组名为 data,维度为 [rows, columns]。您可以使用以下代码在名为 new_data 的新矩阵中仅保留在列 4:21 中有一些数据的所有行:

new_data = data(~all(cellfun('isempty', data(:, 4:21)), 2), :);

分解:

  • cellfun('isempty', data(:, 4:21)) returns 大小为 [rows, columns-3] 的矩阵。 4:21 列中 data 中的任何空单元格都标记为 1,所有其他单元格都标记为 0。
  • ~all(cellfun(...), 2) returns 大小为 rows x 1 的向量。它采用之前的矩阵并查看每一行是否都是全 1 的元胞数组(换句话说,如果该行完全为空)。如果该行全为 1,则 all 函数 returns 为真。但是,由于NOT运算符(~),所有只有1的行实际上都标记为0,而所有其他行都标记为1。换句话说,标记为1的行是我们希望保留的行。
  • new_data = data(all(...), :) 只是 returns 数据矩阵,删除列 4:21.
  • 中完全为空的任何行