首页 > 解决方案 > 从 Matlab 中的单元格数组中删除 'NaN' 字符串和 [] 单元格

问题描述

我有一个单元格数组,给出为

raw = {100 3.2 38 1;
       100 3.7 38 1;
       100 'NaN' 'NaN' 1;
       100 3.8 38 [];
       'NaN' 'NaN' 'NaN' 'NaN';
       'NaN' 'NaN' 'NaN' []; 
        100 3.8 38 1};

如何删除具有至少一个“NaN”字符串和空单元格 [] 的行?因此,在这种情况下,我想从上述单元阵列中删除第 3、第 4、第 5 和第 6 行。提前致谢!

标签: stringmatlabcellnanempty-list

解决方案


在您的单元格数组中,值 NaN 被定义为字符串而不是“特殊”值NaN

在这种情况下,您可以使用函数isemptyisfloat确定单元数组的哪些元素为空或浮点类型:

% Remove rows with empty cells
idx=any(cell2mat(cellfun(@isempty,raw,'UniformOutput',false)),2)
raw(idx,:)=[]

% Remove rows with 'NaN'
idx=all(cell2mat(cellfun(@isfloat,raw,'UniformOutput',false)),2)
raw(~idx,:)=[]

在第一步中,您使用函数查找空单元格isempty,因为输入是一个单元格数组,您必须使用该函数将函数cellfun应用于单元格数组的所有元素。

isempty返回一个 cellarray ,0where1标识1一个空单元格,因此,在将其转换为数组(使用 functino cell2mat)后,您可以使用 function 标识带有空单元格的 roww 的索引any

在第二步中,使用类似的方法,您可以使用函数 `isfloat.

NaN如果您的单元格数组中的 被定义为“值”而不是字符串,则可以使用相同的方法:

idx=any(cell2mat(cellfun(@isempty,raw,'UniformOutput',false)),2)
raw(idx,:)=[]
idx=any(cell2mat(cellfun(@isnan,raw,'UniformOutput',false)),2)
raw(idx,:)=[]

推荐阅读