我是matlab的新手。我使用flask部署了一个机器学习模型(使用python开发)。从matlab中,我调用了API并收到了字符串响应。他们的反应是:"[0.8]"。但matlab是显示字符串的大小是1。我只需要0.8这个值。我的代码:
import matlab.net.http.*
import matlab.net.http.field.*
request = RequestMessage( 'POST', ...
[ContentTypeField( 'application/vnd.api+json' ), AcceptField('application/vnd.api+json')], ...
'{"meta": {"Speed_RPM_PU": 0.2}}' );
response = request.send( 'http://127.0.0.1:5000/predict' );
ans=response.Body.Data
length(ans) % equals to 1
% for i = 1:length(ans)
%
% fprintf('%c ',ans(i))
%
% %disp(String(i))
%
% end
, ans = ' [0.8]
如果ans='[0.8]'
,那么length(ans)
将等于5(因为在这个字符数组中有5个字符)。我怀疑你实际上有ans={'[0.8]'}
,即长度为1的单元格数组,其中包含单个字符数组。否则,您正在使用单引号'_'
,表示字符,其中MATLAB实际上显示双引号"_"
,表示字符串,因为长度将是1,如果它也是字符串。字符和字符串不相等。
调用class(ans)
而不是length(ans)
会告诉你哪个是正确的。
在任何情况下都可以使用str2num(ans)
,但如果是单元格,则需要使用str2num(ans{1})
str2num('[0.8]') % = 0.8 (double from char)
str2num("[0.8]") % = 0.8 (double from string)
str2num({'0.8'}) % -> error
a = {'0.8'};
str2num(a{1}) % = 0.8 (double from char element of cell)
str2double
通常优于str2num
,但是你需要删除的方括号字符/字符串或将给南,所以类似
str2double( erase( '[0.8]', {'[',']'} ) ) % = 0.8 (double)
注意ans
是未分配函数输出的默认变量名,考虑使用不同的变量名以避免意外问题。