Bash脚本控制一个Python脚本("main.py"),该脚本需要一个随机种子来运行。为了获得模拟的几种实现,我想为它们中的每一个都有一个随机随机种子。
我认为初始化(在Bash脚本中)NEXP整数的随机数组,但我认为没有正确地做到这一点。实际上,我得到了一个错误的数组初始化。下面是代码:
NEXP=10
array_seed = [$NEXP]
for j in `seq 0 1 $NEXP`; do
array_seed[$j]=$RANDOM
echo $array_seed[$j]
done
for A in `seq 0 0.1 1`; do #A is a parameter of the simulation
for i in `seq 0 1 $NEXP`; do #10 realiz. of the process for each A
SEED=$array_seed[$i]
./main.py $A $SEED > output-$A-$i.dat
done
done
这里是我得到的
23041[0]
23041[1]
23041[2]
23041[3]
...
问题1(已解决):我做错了什么?以及如何将$NEXP -1在seq中获得索引从0到NEXP-1的数组?我试过用双括号把它放进去,但它不起作用。
答案(Jothan Chanes爵士):
NEXP=10
array_seed = [$NEXP]
for i in `seq 0 1 $(($NEXP-1))`; do
array_seed[$i]=$RANDOM
echo ${array_seed[$i]}
done
问题#2:这是解决仿真独立实现问题的好方法吗?我怎样才能进一步降低模拟/实验之间的相关性?
问题#3:最后,我也应该处理Bash伪随机生成器的种子吗?
谢谢!
使用bash 4.2.45
Q1:应该是可以的,只要bash和python中的随机数生成器不同。
问题是什么?Q3: seq 0 1 $(($NEXP-1))
Q4:通过${array_seed[$i]}引用数组元素(可以在bash手册中找到)
Q5:如果你使用Linux,你可以读"man urandom"