Nip*_*tra 17 python arrays random numpy r
Python,NumPy和R都使用相同的算法(Mersenne Twister)来生成随机数序列.因此,从理论上讲,设置相同的种子应该在所有3中产生相同的随机数序列.事实并非如此.我认为3个实现使用不同的参数导致这种行为.
R >set.seed(1) >runif(5) [1] 0.2655087 0.3721239 0.5728534 0.9082078 0.2016819
Python In [3]: random.seed(1) In [4]: [random.random() for x in range(5)] Out[4]: [0.13436424411240122, 0.8474337369372327, 0.763774618976614, 0.2550690257394217, 0.49543508709194095]
NumPy
In [23]: import numpy as np
In [24]: np.random.seed(1)
In [25]: np.random.rand(5)
Out[25]:
array([ 4.17022005e-01, 7.20324493e-01, 1.14374817e-04,
3.02332573e-01, 1.46755891e-01])
有没有办法,NumPy和Python实现可以产生相同的随机数序列?正如一些评论和答案指出的那样,可以使用rpy.我特别想要的是微调Python和NumPy中相应调用中的参数以获得序列.
背景:关注来自使用R的EDX课程.在其中一个论坛中,有人询问是否可以使用Python,并且工作人员回答说某些任务需要设置特定种子并提交答案.
有关:
用来rpy2在python中调用r,这是一个demo,numpy数组在R中data共享内存x:
import rpy2.robjects as robjects
data = robjects.r("""
set.seed(1)
x <- runif(5)
""")
print np.array(data)
data[1] = 1.0
print robjects.r["x"]
Run Code Online (Sandbox Code Playgroud)
我意识到这是一个老问题,但我最近偶然发现了同样的问题,并创建了一个对其他人有用的解决方案.
我在C中编写了一个随机数生成器,并将它链接到R和Python.这样,两种语言中的随机数保证相同,因为它们是使用相同的C代码生成的.
该程序名为SyncRNG,可在此处找到:https://github.com/GjjvdBurg/SyncRNG.
| 归档时间: |
|
| 查看次数: |
4660 次 |
| 最近记录: |