使用函数cell2mat
会在有NoValues时出错:
All contents of the input cell array must be of the same data type.
问题是,在我的cellarrays中,NoValues未标记为NaN
,而是标记为#NV
。我的想法是将所有#NV
更改为NaN
。但是使用strrep(mycell,'#NV','NaN')
会向我显示错误Cell elements must be character arrays.
我可以遍历每个cellarray并替换#NV
,但也许有一种更简洁的方法可以从我的double
数据中获取cell
数据。
以下是我的cellarray(275449x1 cell
)的样子:
'#NV'
'#NV'
0,719302186342827
'#NV'
'#NV'
0,414725728197998
1
1
0,448286010744169
如果没有任何#NV
该功能正常运行并给我一个275449x1 double
答案 0 :(得分:2)
使用cellfun
将函数应用于每个单元格。
c{1}='#NV';
c{2}=0.719302186342827;
fun=@(mycell)strrep(mycell,'#NV','NaN')
c2=cellfun(fun,c,'UniformOutput',false);
ans =
1×2单元阵列
'NaN' [0.7193]
然而,这可能不是你想要的,因为'NaN'现在是一个字符串,但你想要的是NaN
的数字类型,它是不是一个字符串。
我会轻易地循环:
for ii = 1:size(c,1)
if strcmp(c{ii},'#NV')
c{ii} = NaN;
end
end
或者,正如Adriaan建议的那样,只是:
c(strcmp(c,'#NV'))={NaN};