2

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

一列包含利率,条目以 CHAR(如果它们是十进制数字)或 DOUBLE(如果它们四舍五入为整数)的形式导入。

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

4

2 回答 2

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
于 2013-05-07T09:11:36.837 回答
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

但这是你的意思吗?

于 2013-05-07T11:59:22.973 回答