Matlab:具有混合字符/双条目的单元格列 - 如何使所有数字化?

Posted

技术标签:

【中文标题】Matlab:具有混合字符/双条目的单元格列 - 如何使所有数字化?【英文标题】:Matlab: Cell column with mixed char/double entries - how to make all numerical? 【发布时间】:2013-05-07 09:01:34 【问题描述】:

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

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

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

【问题讨论】:

试试isnumeric? mathworks.com/help/matlab/ref/isnumeric.html,您目前是使用cellfun 还是循环应用str2num 你能举一个你所拥有的原始数据的小例子吗?特别是您要转换的列? 【参考方案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

【讨论】:

【参考方案2】:

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

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

但这是你的意思吗?

【讨论】:

以上是关于Matlab:具有混合字符/双条目的单元格列 - 如何使所有数字化?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 DevExpress XtraGrid 中获得单击的单元格列

从 Google 电子表格解析 JSON

如何在 for 循环中添加不同大小的 numpy 数组条目(类似于 Matlab 的单元格数组)?

如何从 Matlab 中的 .mat 文件中仅加载一个单元格的条目?

如何在 Matlab 中将字符串单元格数组转换为 int 和 NaN?

从另一个工作表的单元格列替换第一行中的标题名称