Matlab:带有混合字符/双条目的单元格列 - 如何制作所有数字?

时间:2013-05-07 09:01:35

标签: matlab types

我正在从不同的Excel文件中将大型数据集导入Matlab。我使用[~,~,raw] = xlsread('myfile.xlsx')来获取单个Matlab单元格的原始输入。

一列由利率组成,条目导入为CHAR(如果是十进制数)或DOUBLE(如果它们四舍五入为整数)。

现在,我想切出那个列并获得一个Matlab不喜欢的数值向量。如果我使用str2num,所有CHAR条目都转换为DOUBLE,但DOUBLES变为NaN。是否有一个功能/解决方案要考虑到某些条目已经是DOUBLE?

2 个答案:

答案 0 :(得分:1)

您可以将其用于现有代码,而不是创建一个全新的功能,但这应该适合您。这些函数虽然没有矢量化,但由于它是一个单元格向量,我认为这不是一个问题

function number = str2numThatHandelsNumericInputs(obj)

    if isnumeric(obj)
        number = obj;
    else
        number = str2num(obj);
    end

end

或者Eitan指出了更好的功能:

function num = str2numThatHandelsNumericInputs(num)        
    if ischar(num)
        num = str2num(num); 
    end
end

答案 1 :(得分:1)

我想我不太明白你的问题,因为我知道你有这样的事情:

raw = {...
    '1.2345'   , NaN
    3          , inf
    4          , @cos
    '567.1232' , { struct }
};

在这种情况下,您可以使用str2double

>> inds = cellfun('isclass', raw(:,1), 'char');     % indices to non-numeric data
>> raw(inds,1) = num2cell(str2double(raw(inds,1))); % convert in-place
>> [raw{:,1}].'                                     % extract numeric array

ans =

    1.2345
    3.0000
    4.0000
  567.1232

但这是你的意思吗?