Bash中的(伪)随机数组在Python模拟中用作种子



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"

最新更新