在我的Julia 0.5脚本中,每次重新运行脚本时,我都使用srand(1234)从rand()获得相同的结果。但是,我得到了不同的结果。我错了什么?
答案 0 :(得分:0)
正如@Dan Getz在评论中提到的,这可能是因为你有一些代码在你不知道的情况下调用随机函数。
如果使用相同的种子集调用相同的rand()
函数,则会得到与预期相同的结果:
julia> for i in 1:3
srand(1)
println(rand())
end
0.23603334566204692
0.23603334566204692
0.23603334566204692
但是,如果您的脚本中有另一个要调用的调用,可能会或可能不会调用,那么当您进行调查rand()
调用时,您的随机数生成器将处于不同的阶段。这是一个例子来说明这一点:
julia> for i in 1:3
srand(1)
if i == 2
rand()
end
println(rand())
end
0.23603334566204692
0.34651701419196046
0.23603334566204692
请注意,在循环的第二次迭代中,如何进行额外的rand()
调用,以抵消随机数生成器并产生不同的值。
答案 1 :(得分:0)
除了@ niczky12给出的答案之外,我建议您定义自己的发电机并使用它来获得更好的重现性,这样您就可以始终控制"您的"生成器,以及对使用全局函数的其他函数(可能不在您的控件中)的调用不会影响您获得的随机数。
例如,使用种子1234创建:host (.light-gray){
background: red !important;
}
:
MersenneTwister
然后,您只需将此生成器传递给rng = MersenneTwister(1234)
来电:
rand