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 中获得单击的单元格列
如何在 for 循环中添加不同大小的 numpy 数组条目(类似于 Matlab 的单元格数组)?
如何从 Matlab 中的 .mat 文件中仅加载一个单元格的条目?