gpt4 book ai didi

python - 使 PRNG 跨软件一致

转载 作者:太空狗 更新时间:2023-10-29 21:58:16 24 4
gpt4 key购买 nike

我正在研究是否可以让两组软件就生成的伪随机数序列达成一致。我有兴趣了解所有可能的分歧点,因为我有兴趣真正找到一种方法让他们达成一致。

为什么?我在一家使用许多不同软件包(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)

最佳答案

老问题,但可能对 future 的某些读者有用:正如评论中提到的,最好的办法是自己实现它并为不同的环境提供接口(interface),以便对于给定的种子返回相同的结果。为什么这是必要的?您以“采样”为例。涉及多个步骤。

  1. 播种是一个非常重要的过程。例如 R 达到 further scramble。提供的种子。因此,除非您的用户工具使用相同的方法,否则即使用户提供相同的值,它们也会以不同的种子结束。

  2. 实际的 RNG:尽管在这两种情况下都可能使用 Mersenne-Twister,但使用的真的是同一个版本吗? R 使用 32 位 MT。也许 Python 使用 64 位版本?

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

总体而言,(细微的)差异可能会渗透到许多地方。

关于python - 使 PRNG 跨软件一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35139808/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com