我正在从不同的Excel文件中将大型数据集导入Matlab。我使用[~,~,raw] = xlsread('myfile.xlsx')
来获取单个Matlab单元格的原始输入。
一列由利率组成,条目导入为CHAR(如果是十进制数)或DOUBLE(如果它们四舍五入为整数)。
现在,我想切出那个列并获得一个Matlab不喜欢的数值向量。如果我使用str2num,所有CHAR条目都转换为DOUBLE,但DOUBLES变为NaN。是否有一个功能/解决方案要考虑到某些条目已经是DOUBLE?
答案 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
但这是你的意思吗?