使用SyncRNG在R和Python之间生成相同的随机数时,如何解决溢出错误

2024-10-05 14:25:53 发布

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

我试图用Python重现R代码,我必须用两种语言生成相同的随机数。我知道,使用相同的种子不足以获得相同的随机数,在这个平台上阅读关于这个主题的一个答案时,我发现存在:SyncRNG库,它在R和Python之间生成相同的随机数。只要我发现在Python 3.7.3上,我可以通过SyncRNG生成一个数字,一切看起来都很好,因为只要您使用for循环迭代该过程,就会出现以下错误:

溢出错误:Python int太大,无法转换为C long

正如我刚才提到的:

>>> from SyncRNG import SyncRNG
>>> s = SyncRNG(seed=123)
>>> r = s.rand()
>>> r
0.016173338983207965

正如我们所看到的,它是有效的。方法“.rand()”生成0到1之间的随机数。 但如果我尝试迭代:

>>> from SyncRNG import SyncRNG
>>> s = SyncRNG(seed=123)
>>> b = []
>>> for i in range(5):
        temp = s.rand()
        b.append(temp)

我明白了:

OverflowError: Python int too large to convert to C long

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "<pyshell#41>", line 2, in <module>
    temp = s.rand()
  File "C:\Users\Stefano\AppData\Local\Programs\Python\Python37\lib\site-packages\SyncRNG\__init__.py", line 27, in rand
    return self.randi() * 2.3283064365387e-10
  File "C:\Users\Stefano\AppData\Local\Programs\Python\Python37\lib\site-packages\SyncRNG\__init__.py", line 22, in randi
    tmp = syncrng.rand(self.state)
SystemError: <built-in function rand> returned a result with an error set

因此,我谦虚地问,是否有人能够解决这个问题。如果我丢失了关于这个主题的旧答案,很抱歉,请在答案部分链接它们。 谢谢大家!


Tags: 答案infromimport主题for错误line
1条回答
网友
1楼 · 发布于 2024-10-05 14:25:53

这不是一个解决方案,而是一个变通方法。溢出错误在我的系统上无法重现。解决办法:

from SyncRNG import SyncRNG
s = SyncRNG(seed=123)
ct = 0
b = []
while ct < 5:
    try:
        temp = s.rand()
        b.append(temp)
        ct += 1
    except OverflowError:
        pass

由于每个循环上的try/except,性能将受到影响

相关问题 更多 >