首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用多个变量迭代命令?

如何使用多个变量迭代命令?
EN

Unix & Linux用户
提问于 2020-05-27 03:44:54
回答 1查看 75关注 0票数 0

我需要运行svm并测试不同的参数来生成模型和输出文件。

命令行的示例(-t、-g、-j和-c是我的参数;t总是2;g/j/c,要用不同的值进行测试):

代码语言:javascript
复制
svm_learn -t 2 -g ? -j ? -c ? inputfile1 model1 > OUT1

我想测试参数g/j/c (所有可能的组合):

代码语言:javascript
复制
g=(0.1, 0.01, 0.001, 0.0001, 0.00001, 1, 10)
c=(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 25, 50, 100)
j=(1, 2, 3)

如何创建一个循环来测试所有这些不同的参数/组合?

我尝试了这个,但我只得到了6个组合(0.0001-4/0.001-3/0.01-2/0.1-1/10-6/1-5):

代码语言:javascript
复制
#!/bin/sh
var1="0.1 0.01 0.001 0.0001 1 10"
var2="1 2 3 4 5 6 7 8 9 10 15 25 50 100"

set -- $var2
for i in $var1
do
    svm_learn -t 2 -g $i -c $1 trainingset1 model1-${i}-${1} > OUT1-${i}-${1}
    shift
done
EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2020-05-27 04:21:18

使用嵌套循环:

代码语言:javascript
复制
gs=(0.1 0.01 0.001 0.0001 0.00001 1 10)
cs=(1 2 3 4 5 6 7 8 9 10 15 25 50 100)
js=(1 2 3)


for g in "${gs[@]}"
do
  for c in "${cs[@]}"
  do
    for j in "${js[@]}"
    do 
      svm_learn -t 2 -g "$g" -j "$j" -c "$c" ...
    done
  done
done

甚至只是:

代码语言:javascript
复制
for g in 0.1 0.01 0.001 0.0001 0.00001 1 10
do
  for c in 1 2 3 4 5 6 7 8 9 10 15 25 50 100
  do
    for j in 1 2 3
    do 
      svm_learn -t 2 -g "$g" -j "$j" -c "$c" ...
    done
  done
done
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/589190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档