我试图用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
因此,我谦虚地问,是否有人能够解决这个问题。如果我丢失了关于这个主题的旧答案,很抱歉,请在答案部分链接它们。 谢谢大家!
这不是一个解决方案,而是一个变通方法。溢出错误在我的系统上无法重现。解决办法:
由于每个循环上的try/except,性能将受到影响
相关问题 更多 >
编程相关推荐