从 Matlab 中的元胞数组中删除 'NaN' 个字符串和 [] 个元胞
Removing 'NaN' strings and [] cells from cell array in Matlab
我有一个元胞数组,给出为
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 行。提前致谢!
在你的 cellarray 中,值 NaN 被定义为字符串而不是 "special" 值 NaN
在这种情况下,您可以使用函数 isempty
和 isfloat
来识别 cellarray 的哪些元素为空或 float 类型:
% 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
查找空单元格,因为输入是一个 cellarray,您必须使用 cellfun
将函数应用于单元格的所有元素数组。
isempty
returns 0
和 1
的 cellarray,其中 1
标识一个空单元格,因此,在将其转换为数组后(使用 functino cell2mat
) 您可以使用函数 any
.
识别带有空单元格的 roww 的索引
在第二步中,使用类似的方法,您可以使用函数 `isfloat 来识别包含浮动值的行。
如果您的 cellarray 中的 NaN
定义为 "values" 而不是字符串,则可以使用相同的方法:
idx=any(cell2mat(cellfun(@isempty,raw,'UniformOutput',false)),2)
raw(idx,:)=[]
idx=any(cell2mat(cellfun(@isnan,raw,'UniformOutput',false)),2)
raw(idx,:)=[]
查找哪一行有'NaN'运行:
idxNan = any(cellfun(@(x) isequal(x,'NaN'),raw),2);
同样,查找哪些行有空单元格运行:
idxEmpty = any(cellfun(@(x) isempty(x),raw),2);
然后您可以使用 'or'
省略不需要的行
raw(idxNan | idxEmpty,:) = [];
将 |
替换为 &
如果那是你的意思
我有一个元胞数组,给出为
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 行。提前致谢!
在你的 cellarray 中,值 NaN 被定义为字符串而不是 "special" 值 NaN
在这种情况下,您可以使用函数 isempty
和 isfloat
来识别 cellarray 的哪些元素为空或 float 类型:
% 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
查找空单元格,因为输入是一个 cellarray,您必须使用 cellfun
将函数应用于单元格的所有元素数组。
isempty
returns 0
和 1
的 cellarray,其中 1
标识一个空单元格,因此,在将其转换为数组后(使用 functino cell2mat
) 您可以使用函数 any
.
在第二步中,使用类似的方法,您可以使用函数 `isfloat 来识别包含浮动值的行。
如果您的 cellarray 中的 NaN
定义为 "values" 而不是字符串,则可以使用相同的方法:
idx=any(cell2mat(cellfun(@isempty,raw,'UniformOutput',false)),2)
raw(idx,:)=[]
idx=any(cell2mat(cellfun(@isnan,raw,'UniformOutput',false)),2)
raw(idx,:)=[]
查找哪一行有'NaN'运行:
idxNan = any(cellfun(@(x) isequal(x,'NaN'),raw),2);
同样,查找哪些行有空单元格运行:
idxEmpty = any(cellfun(@(x) isempty(x),raw),2);
然后您可以使用 'or'
省略不需要的行raw(idxNan | idxEmpty,:) = [];
将 |
替换为 &
如果那是你的意思