如何迭代字符串向量并在 matlab 中使用 switch case?
How to iterate over a vector of strings and use switch case in matlab?
我是 matlab 的新手(几分钟前!)。我有一个字符串向量:
methods = {'adaptiveMixtureDiscriminantAnalysis',
'gamSpline',
'genaralizedPartialLeastSquares'
'penalizedMultinomialRegression',
'quadraticDiscriminantAnalysis'}
我正在使用 switch-case
结构如下:
for training_method = methods
switch training_method
case 'adaptiveMixtureDiscriminantAnalysis'
evalR('signal_and_conf <- adaptiveMixtureDiscriminantAnalysis(train_predictors, train_labels, test_predictors)');
case 'gamSpline'
evalR('signal_and_conf <- gamSpline(train_predictors, train_labels, test_predictors)');
case 'genaralizedPartialLeastSquares'
evalR('signal_and_conf <- genaralizedPartialLeastSquares(train_predictors, train_labels, test_predictors)');
case 'penalizedMultinomialRegression'
evalR('signal_and_conf <- penalizedMultinomialRegression(train_predictors, train_labels, test_predictors)');
case 'quadraticDiscriminantAnalysis'
evalR('signal_and_conf <- quadraticDiscriminantAnalysis(train_predictors, train_labels, test_predictors)');
case 'majorityVoting'
evalR('signal_and_conf <- majorityVoting(train_predictors, train_labels, test_predictors)');
otherwise
disp('No such model is available!')
end
end
但它给了我一个错误 SWITCH expression must be a scalar or string constant.
我也尝试过将 cellstr()
用于 training_method
并在 switch 构造中使用 [training_method]
但仍然没有成功。
更新:
我所要做的就是在 switch 语句中将 training_method
更改为 char(training_method)
并且它起作用了。不过,我仍然对 cell
和 char
数据类型感到困惑。
for
循环中的每个元素 training_method
都是单个元素的元胞数组。您只能将 switch
与实际字符数组或整数文字一起使用,因此您需要通过执行 training_method{1}
或 char(training_method)
来解压缩单元格,如您在更新中所述。
因此,执行以下任一操作:
for training_method = methods
switch training_method{1}
....
或:
for training_method = methods
switch char(training_method) %// Already done by you
....
我是 matlab 的新手(几分钟前!)。我有一个字符串向量:
methods = {'adaptiveMixtureDiscriminantAnalysis',
'gamSpline',
'genaralizedPartialLeastSquares'
'penalizedMultinomialRegression',
'quadraticDiscriminantAnalysis'}
我正在使用 switch-case
结构如下:
for training_method = methods
switch training_method
case 'adaptiveMixtureDiscriminantAnalysis'
evalR('signal_and_conf <- adaptiveMixtureDiscriminantAnalysis(train_predictors, train_labels, test_predictors)');
case 'gamSpline'
evalR('signal_and_conf <- gamSpline(train_predictors, train_labels, test_predictors)');
case 'genaralizedPartialLeastSquares'
evalR('signal_and_conf <- genaralizedPartialLeastSquares(train_predictors, train_labels, test_predictors)');
case 'penalizedMultinomialRegression'
evalR('signal_and_conf <- penalizedMultinomialRegression(train_predictors, train_labels, test_predictors)');
case 'quadraticDiscriminantAnalysis'
evalR('signal_and_conf <- quadraticDiscriminantAnalysis(train_predictors, train_labels, test_predictors)');
case 'majorityVoting'
evalR('signal_and_conf <- majorityVoting(train_predictors, train_labels, test_predictors)');
otherwise
disp('No such model is available!')
end
end
但它给了我一个错误 SWITCH expression must be a scalar or string constant.
我也尝试过将 cellstr()
用于 training_method
并在 switch 构造中使用 [training_method]
但仍然没有成功。
更新:
我所要做的就是在 switch 语句中将 training_method
更改为 char(training_method)
并且它起作用了。不过,我仍然对 cell
和 char
数据类型感到困惑。
for
循环中的每个元素 training_method
都是单个元素的元胞数组。您只能将 switch
与实际字符数组或整数文字一起使用,因此您需要通过执行 training_method{1}
或 char(training_method)
来解压缩单元格,如您在更新中所述。
因此,执行以下任一操作:
for training_method = methods
switch training_method{1}
....
或:
for training_method = methods
switch char(training_method) %// Already done by you
....