发布于 2015-04-07 03:39:00
这是个老问题。
Paul Gilbert在20世纪90年代末处理了同样的问题(!!)当试图断言R中的模拟(当时是新来的)时,结果与S(当时的现任者)的结果相同。
他的解决方案,仍然是黄金方法AFAICT:重新实现在新的代码在两种语言,这是唯一的办法,以确保相同的种子,状态,.还有其他影响它的东西。
发布于 2015-04-12 14:23:35
按照@Khashaa提出的RCall建议,很明显,您可以设置种子并从R获得随机数。
julia> using RCall
julia> RCall.reval("set.seed(3)")
RCall.NilSxp(16777344,Ptr{Void} @0x0a4b6330)
julia> a = zeros(Float64,20);
julia> unsafe_copy!(pointer(a), RCall.reval("runif(20)").pv, 20)
Ptr{Float64} @0x972f4860
julia> map(x -> @printf("%20.15f\n", x), a);
0.168041526339948
0.807516399072483
0.384942351374775
0.327734317164868
0.602100674761459
0.604394054040313
0.124633444240317
0.294600924244151
0.577609919011593
0.630979274399579
0.512015897547826
0.505023914156482
0.534035353455693
0.557249435689300
0.867919487645850
0.829708693316206
0.111449153395370
0.703688358888030
0.897488264366984
0.279732553754002来自R
> options(digits=15)
> set.seed(3)
> runif(20)
[1] 0.168041526339948 0.807516399072483 0.384942351374775 0.327734317164868
[5] 0.602100674761459 0.604394054040313 0.124633444240317 0.294600924244151
[9] 0.577609919011593 0.630979274399579 0.512015897547826 0.505023914156482
[13] 0.534035353455693 0.557249435689300 0.867919487645850 0.829708693316206
[17] 0.111449153395370 0.703688358888030 0.897488264366984 0.279732553754002** 编辑 **
根据@ColinTBowers的建议,这里有一种从Julia访问Julia随机数的更简单/更简洁的方法。
julia> using RCall
julia> reval("set.seed(3)");
julia> a = rcopy("runif(20)");
julia> map(x -> @printf("%20.15f\n", x), a);
0.168041526339948
0.807516399072483
0.384942351374775
0.327734317164868
0.602100674761459
0.604394054040313
0.124633444240317
0.294600924244151
0.577609919011593
0.630979274399579
0.512015897547826
0.505023914156482
0.534035353455693
0.557249435689300
0.867919487645850
0.829708693316206
0.111449153395370
0.703688358888030
0.897488264366984
0.279732553754002发布于 2015-04-07 06:17:01
请参见:
?set.seed"Mersenne-Twister":松本和西村(1998年)。一个周期为2^19937 -1的扭曲的GFSR,在623个连续的维度上(在整个周期内)等分布。“种子”是一个624维的32位整数集合,加上该集合中的当前位置。
您可能会看到是否可以从两种语言链接到相同的C代码。如果要查看列表/向量,请键入:
.Random.seedhttps://stackoverflow.com/questions/29482411
复制相似问题