达成共识

2024-06-16 08:35:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在调查是否有可能有两套软件就产生的伪随机数序列达成一致。我对理解所有可能的分歧点很感兴趣,就像我对找到一种让他们同意的方法一样。你知道吗

为什么?我在一家数据商店工作,它使用许多不同的软件包(Stata、R、Python、SAS,可能还有其他软件包)。最近有人对用另一种语言复制过程来QCing输出感兴趣。对于任何涉及随机数的过程,如果我们能够提供一系列的步骤(“设置此选项”等),使两个包能够达成一致,那将是很有帮助的。如果这是不可行的,我想能够清楚地指出哪里是失败点。你知道吗

一个简单的例子:

R和Python的默认随机数生成器都是Mersenne Twister。我把它们放在同一个种子上,试着从中取样,同时观察PRNG的“状态”。两种价值观都不认同。你知道吗

R(3.2.3,64位):

set.seed(20160201)
.Random.seed
sample(c(1, 2, 3, 4, 5))

Python(3.5.1,64位):

import random

random.seed(20160201)
random.getstate()
random.sample([1, 2, 3, 4, 5], 5)

Tags: 数据sample方法语言软件过程序列random
1条回答
网友
1楼 · 发布于 2024-06-16 08:35:55

老问题,但可能对一些未来的读者有用:正如在评论中提到的,最好的办法是自己实现这个,并为不同的环境提供接口,这样对于给定的种子,返回相同的结果。为什么这是必要的?你以“抽样”为例。其中包括几个步骤。你知道吗

  1. 播种是一个不平凡的过程。例如,R一直到further scramble提供的种子。因此,除非用户工具使用相同的方法,否则即使用户提供相同的值,它们最终也会得到不同的种子。

  2. 实际的RNG:即使在这两种情况下可能会使用梅森捻线机,它真的是相同的版本使用?R使用32位的MT。也许Python使用64位的版本?

  3. 大多数RNG给您一个无符号整数(现在通常是32或64位)。但是你需要一些随机数的分布,例如,对于抽样,你需要给定范围内的随机整数。有many methods从RNG生成的整数到采样所需的整数。在R的情况下,您甚至不能访问RNG的输出值。最基本的函数是R_unif,它在[0,1]中返回一个double。同样,如何生成这样的double是not universally agreed on。如果你需要其他的分布函数(正态分布,指数分布,…),你会发现很多不同的算法。

总的来说,有很多地方(细微的)差异可以潜移默化。你知道吗

相关问题 更多 >