[英]Creating same random number sequence in Python, NumPy and 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,這是一個演示,numpy數組data
與R中的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"]
我意識到這是一個古老的問題,但是最近我偶然發現了同樣的問題,並創建了一個對其他人有用的解決方案。
我用C語言編寫了一個隨機數生成器,並將其鏈接到R和Python。 這樣,由於隨機數是使用相同的C代碼生成的,因此保證了兩種語言中的隨機數相同。
該程序稱為SyncRNG,可以在以下位置找到: https : //github.com/GjjvdBurg/SyncRNG 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.