将单元格转换为双精度数

9
>> C = [{1} {2} ; {'@CF'} {2}] 
C = 

[  1]    [2]
'@CF'    [2]


>> whos C
  Name      Size            Bytes  Class    Attributes

  C         2x2               478  cell  

我该如何将 C 转换为 double,以便实现以下功能:
>> C
C = 
1    2
NaN  2

我尝试了 str2double(C)。它返回:

   NaN   NaN
   NaN   NaN
3个回答

12
C = [{1} {2} ; {'@CF'} {2}]

C = 

    [  1]    [2]
    '@CF'    [2]

D = cellfun(@isnumeric,C);
C(~D)={nan}

C = 

    [  1]    [2]
    [NaN]    [2]

cell2mat(C)

ans =

     1     2
   NaN     2

6
使用cellfun查询isnumeric非数字值。与逻辑索引一起使用,提取数字值。请保留HTML标记。
C = [{1} {2} ; {'@CF'} {2}];
isnum = cellfun(@isnumeric,C);
result = NaN(size(C));
result(isnum) = [C{isnum}];

一种更简短的编码方式是,C(cellfun(@ischar, C) = {NaN}; C = cell2mat(C); - user1532230
1
@user1532230:不,它们差不多。我甚至怀疑cell2mat比我的简单数组写入和读取代码需要更多时间。 - Gunther Struyf

1

嗯,你在这里混合了数据类型,所以没有非常直接的方法来处理它。

我能想到的最简单的方法是,如果你知道你想要的数据在哪里,那就直接使用cell2mat

例如:cell2mat(C(1,1))会返回一个双精度的1。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接