Str2double gives NaN

42 次查看(过去 30 天)
X = ["3.716,3.711,3.719,3.714,3.714,3.711,3.722,3.712,3.715,3.715,3.717,3.721,3.713,3.714,0.000"];
Y = str2double(X);
I am trying to convert the above string to double. However, using above code, the Y value is 'NaN'.
'str2num(X)' gives appropriate/required results.
Y = [3.71600000000000 3.71100000000000 3.71900000000000 3.71400000000000 3.71400000000000 3.71100000000000 3.72200000000000 3.71200000000000 3.71500000000000 3.71500000000000 3.71700000000000 3.72100000000000 3.71300000000000 3.71400000000000 0]
However, 'str2num' is not supported in code generation. Is there any alternative?

采纳的回答

Stephen23
Stephen23 2023-1-30
X = "3.716,3.711,3.719,3.714,3.714,3.711,3.722,3.712,3.715,3.715,3.717,3.721,3.713,3.714,0.000";
str = X{1}; % character vector
idx = str==',';
idy = diff([true,idx,true]);
idb = find(idy<0);
ide = find(idy>0)-1;
num = numel(idb);
tmp = cell(num,1);
for k = 1:num
tmp{k} = str(idb(k):ide(k));
end
vec = str2double(tmp)
vec = 15×1
3.7160 3.7110 3.7190 3.7140 3.7140 3.7110 3.7220 3.7120 3.7150 3.7150
  8 个评论
Stephen23
Stephen23 2023-2-2
编辑:Stephen23 2023-2-2
M = readmatrix('matlab_error_test.csv', 'Range',2, 'Delimiter',{',','"'}, 'ConsecutiveDelimitersRule','join')
M = 13×25
512.0000 0 7.6800 0.0300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -25.0000 3.0000 58.0000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34.0000 3.0000 58.0000 0 0 0 512.0000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -30.0000 18.0000 0 0 0 0 512.0000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -64.0000 20.0000 0 0 0 0 512.0000 0 0 0 0 0 0 0 0 0 0 6.9120 30.9800 61.6990 53.2470 31.4850 7.0000 0 -15.0000 2.0000 0 0 0 0 0 0 3.7710 3.7770 3.7780 3.7800 3.7800 3.7780 3.7500 3.7720 3.7790 3.7810 3.7750 3.7830 3.7810 3.7740 0 31.0000 31.0000 32.0000 31.0000 32.0000 30.0000 30.0000 30.0000 0 0 3.7710 3.7770 3.7790 3.7800 3.7790 3.7790 3.7500 3.7720 3.7790 3.7810 3.7750 3.7830 3.7810 3.7740 0 31.0000 31.0000 32.0000 31.0000 32.0000 31.0000 30.0000 30.0000 0 0 3.7710 3.7770 3.7780 3.7810 3.7790 3.7780 3.7500 3.7730 3.7790 3.7810 3.7750 3.7830 3.7810 3.7740 0 31.0000 31.0000 32.0000 31.0000 32.0000 30.0000 30.0000 30.0000 0 0 3.7710 3.7770 3.7780 3.7810 3.7790 3.7790 3.7500 3.7720 3.7790 3.7810 3.7750 3.7830 3.7810 3.7740 0 31.0000 31.0000 32.0000 31.0000 32.0000 30.0000 30.0000 30.0000 0
X = M(:,2:16)
X = 13×15
0 7.6800 0.0300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6.9120 30.9800 61.6990 53.2470 31.4850 3.7710 3.7770 3.7780 3.7800 3.7800 3.7780 3.7500 3.7720 3.7790 3.7810 3.7750 3.7830 3.7810 3.7740 0 3.7710 3.7770 3.7790 3.7800 3.7790 3.7790 3.7500 3.7720 3.7790 3.7810 3.7750 3.7830 3.7810 3.7740 0 3.7710 3.7770 3.7780 3.7810 3.7790 3.7780 3.7500 3.7730 3.7790 3.7810 3.7750 3.7830 3.7810 3.7740 0 3.7710 3.7770 3.7780 3.7810 3.7790 3.7790 3.7500 3.7720 3.7790 3.7810 3.7750 3.7830 3.7810 3.7740 0
Praveen Kumar
Praveen Kumar 2023-2-2
Thank you very much. Understood!

请先登录,再进行评论。

更多回答(2 个)

Askic V
Askic V 2023-1-30
Try this:
X = "3.716,3.711,3.719,3.714,3.714,3.711,3.722,3.712,3.715,3.715,3.717,3.721,3.713,3.714,0.000";
newStr = split(X,',')
Y = str2double(newStr)
  1 个评论
Praveen Kumar
Praveen Kumar 2023-1-30
Thanks for the quick response. Even though the code works, 'split' is not supported in C/C++ code generation.

请先登录,再进行评论。


Askic V
Askic V 2023-1-30
编辑:Askic V 2023-1-30
I would also like to suggest this solution:
X = "3.716,3.711,3.719,3.714,3.714,3.711,3.722,3.712,3.715,3.715,3.717,3.721,3.713,3.714,0.200";
f = strfind(X, ","); % find indices of delimiter
Y = zeros(1, numel(f)+1); % initialize output array
X_char = convertStringsToChars(X);
j = 1;
for i = 1:numel(f)
start = j;
Y(i) = str2double(X_char(j:f(i)-1));
j = f(i)+1;
end
Y(end) = str2double(X_char(f(i)+1:end)); % add last element
Y
Y = 1×15
3.7160 3.7110 3.7190 3.7140 3.7140 3.7110 3.7220 3.7120 3.7150 3.7150 3.7170 3.7210 3.7130 3.7140 0.2000

类别

Help CenterFile Exchange 中查找有关 Cell Arrays 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by