Str2double gives NaN

37 visualizaciones (últimos 30 días)
Praveen Kumar
Praveen Kumar el 30 de En. de 2023
Editada: Stephen23 el 2 de Feb. de 2023
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?

Respuesta aceptada

Stephen23
Stephen23 el 30 de En. de 2023
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 comentarios
Stephen23
Stephen23 el 2 de Feb. de 2023
Editada: Stephen23 el 2 de Feb. de 2023
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 el 2 de Feb. de 2023
Thank you very much. Understood!

Iniciar sesión para comentar.

Más respuestas (2)

Askic V
Askic V el 30 de En. de 2023
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 comentario
Praveen Kumar
Praveen Kumar el 30 de En. de 2023
Thanks for the quick response. Even though the code works, 'split' is not supported in C/C++ code generation.

Iniciar sesión para comentar.


Askic V
Askic V el 30 de En. de 2023
Editada: Askic V el 30 de En. de 2023
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

Categorías

Más información sobre Cell Arrays en Help Center y File Exchange.

Etiquetas

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by