使用带有novalues的cell2mat

时间:2018-02-12 12:01:11

标签: matlab cell

使用函数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

1 个答案:

答案 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};