2017-09-04 81 views
-1

我有一个char数组格式a = [1.234 ; 2.345; 3.456],我需要将它转换为MATLAB中的数值数组。我试过str2num(a),但它似乎只对整数有效,因为它返回一个空向量。以下是该数据实际上是这样的:在matlab中将整数字符转换为数值数组

enter image description here

就如何解决这一问题的任何建议都感激!

+0

你不应该添加一个截图作为你的变量的例子,而是在这里复制它的简短版本。 – Irreducible

+0

奇怪的是,'str2num(a)'应该可以工作。你能举一个例子来说明你如何创建这样一个数组?您也可以尝试'cellstr(a)',将其转换为单元阵列 - 也许它会工作。 – Adiel

回答

0

功能str2double将适用于您的情况。详细用法请参考this link

+0

我有一个3100x18'char',它用'str2double'返回一个1x1'NaN' – Uttara

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, '. '), 2)); 
0

str2num会的工作,因为它是但str2num uses eval,所以一个更好的选择是str2double。但它不直接适用于像你这样的char数组。您可以使用cellstr将该阵列转换为单元格,然后应用str2double

req = str2double(cellstr(val)) 

,如果你有MATLAB R2016b或更高版本的另一种方法是到字符数组转换为string array,然后应用str2double

req = str2double(string(val))