【问题标题】:(Pseudo-)random array in Bash used as seed in Python simulationsBash 中的(伪)随机数组在 Python 模拟中用作种子
【发布时间】:2013-06-07 09:28:11
【问题描述】:

Bash 脚本控制需要随机种子才能运行的 Python 脚本(“main.py”)。 为了获得模拟的几种实现,我想为它们中的每一个设置一个 random 随机种子。

我想初始化(在 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 的数组?我试过用双括号表示它不起作用。

答案(由约翰·查恩斯爵士):

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 伪随机生成器的种子?

谢谢!

【问题讨论】:

  • 关于问题 #3,bash $RANDOM 不是很准确(shkshzsh 等也适用)...任何有效的播种方法。对于这种特殊用途,它可能就足够了,但如果可用,您最好使用/dev/[u]random,或者为严肃的模拟/建模提供更高质量的 PRNG/CRNG 的其他程序/库。

标签: python arrays bash random


【解决方案1】:

使用 bash 4.2.45 为我工作

Q1:应该没问题,只要 bash 和 python 中的随机数生成器不同。

Q2:问题是什么?

Q3:seq 0 1 $(($NEXP-1))

Q4:通过 ${array_seed[$i]} 引用数组元素(可以在 bash 手册中找到)。

Q5:如果您使用 Linux,您可以阅读“man urandom”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-14
    • 1970-01-01
    • 2020-12-15
    • 2020-02-16
    • 1970-01-01
    • 2020-02-06
    相关资源
    最近更新 更多