str2num strange behaviour
3 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Elena Casiraghi
am 23 Aug. 2019
Kommentiert: Elena Casiraghi
am 24 Aug. 2019
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 Kommentare
Akzeptierte Antwort
Stephen23
am 23 Aug. 2019
Bearbeitet: Stephen23
am 23 Aug. 2019
"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 Kommentare
Steven Lord
am 23 Aug. 2019
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.
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Structures finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!