Dear, I have this code:
svmKernel ={'rbf','gaussian', 'linear','2','3','4'};
for k=1:numel(svmKernel)
[p, status] = str2num(svmKernel{k});
if ~status; t = templateSVM('Standardize',true,'KernelFunction',svmKernel{indK});
else; t = templateSVM('Standardize',true,'KernelFunction','polynomial', 'PolynomialOrder', p); end
WHY str2num returns p =
Linear Function:
Parameters: [1×1 struct]
and status = 1 when issuing [p,status] = str2num('linear')?
[p, status] = str2num('linear')
Linear Function:
Parameters: [1×1 struct]
status =
logical
1

댓글 수: 6

Not for me.
>> [p, status] = str2num('linear')
p =
[]
status =
logical
0
IMO you overshadow stock function
Elena Casiraghi
Elena Casiraghi 2019년 8월 23일
Bruno thank you!
But How could I?
Do you have any idea?
type
which str2num
what do you see?
Rik
Rik 2019년 8월 23일
I would reccomend -all:
which str2num -all
That way you will see methods and shadowed functions as well. On my release (R2019a, only IPT and CFT installed) this returns:
>> which str2num -all
C:\Program Files\MATLAB\R2019a\toolbox\matlab\strfun\str2num.m
C:\Program Files\MATLAB\R2019a\toolbox\matlab\strfun\@opaque\str2num.m % opaque method
C:\Program Files\MATLAB\R2019a\toolbox\matlab\bigdata\@tall\str2num.m % tall method
Elena Casiraghi
Elena Casiraghi 2019년 8월 23일
Thanks!
This is a good information!
By the way, This is my result
which str2num
C:\Program Files\MATLAB\R2018a\toolbox\matlab\strfun\str2num.m

댓글을 달려면 로그인하십시오.

 채택된 답변

Stephen23
Stephen23 2019년 8월 23일
편집: Stephen23 2019년 8월 23일

1 개 추천

"str2num strange behaviour"
It is not strange behavior at all: str2num (unfortunately) relies on eval, as the str2num help clearly states "...str2num uses the eval function, which can cause unintended side effects when the input includes a function name." You provided str2num a function name to evaluate... you can easily find out which function it is evaluating:
which linear -all
As the str2num documentation recommends, you could avoid the whole problem simply by using str2double (which could be called before the loop), then using isnan.

댓글 수: 3

Elena Casiraghi
Elena Casiraghi 2019년 8월 23일
Thanks Stephen!
Another solution would be to avoid trying to convert that text data into numbers entirely.
svmKernel = {{'rbf'}, ...
{'gaussian'}, ...
{'linear'}, ...
{'polynomial', 'PolynomialOrder', 2}, ...
{'polynomial', 'PolynomialOrder', 3}, ...
{'polynomial', 'PolynomialOrder', 4}};
for k=1:numel(svmKernel)
t = templateSVM('Standardize',true,'KernelFunction', svmKernel{k}{:});
end
The command svmKernel{k} extracts the contents of each cell inside svmKernel in turn. Since I have cell arrays inside each of those cells, I can turn them into a comma-separated list. This is the technique shown in the "Function Call Arguments" example in the "How to Use the Comma-Separated Lists" item on that documentation page.
Elena Casiraghi
Elena Casiraghi 2019년 8월 24일
Tkanks Stephen!
I didin't know that! :)

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Data Type Conversion에 대해 자세히 알아보기

질문:

2019년 8월 23일

댓글:

2019년 8월 24일

Community Treasure Hunt

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

Start Hunting!

Translated by