我有char
格式a = [1.234 ; 2.345; 3.456]
数组,我需要在MATLAB中将其转换为数值数组。我试过str2num(a)
但它似乎只对整数有效,因为它返回一个空向量。以下是数据的实际情况:
对于如何解决这个问题的任何建议表示赞赏!
答案 0 :(得分:2)
如果您的字符数组是以下格式之一:
a = '[1.234; 2.345; 3.456]'; % 1-by-N with brackets, spaces, or semicolons
a = ['1.234'; '2.345'; '3.456']; % M-by-N
然后str2num
可以按照您的意愿运作:
vec = str2num(a)
vec =
1.234000000000000
2.345000000000000
3.456000000000000
如果它不起作用,则可能意味着您的字符数组val
包含无效格式的行或无法正确转换的字符。由于数组有3100行,您可能不希望手动搜索它。突出显示无效行可能位置的一种简单方法是识别除数字,句点或空格之外的字符的位置。以下是如何获得可能需要进一步检查的行列表:
suspiciousRows = find(~all(ismember(val, '0123456789. '), 2));
答案 1 :(得分:0)
函数str2double
适合您的情况。有关详细用法,请参阅this link。
答案 2 :(得分:0)
str2num
可以正常工作但str2num
uses eval
,所以更好的选择是str2double
。但它并不直接适用于像你这样的字符数组。您可以使用cellstr
将该数组转换为单元格,然后应用str2double
。
req = str2double(cellstr(val))
如果您使用MATLAB R2016b或更高版本,另一种方法是将该char数组转换为string array,然后应用str2double
。
req = str2double(string(val))