ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

在Python,NumPy和R中创建相同的随机数序列

2019-09-23 19:58:04  阅读:244  来源: 互联网

标签:python arrays r numpy random


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,并且工作人员回答说某些任务需要设置特定种子并提交答案.

有关:

> Comparing Matlab and Numpy code that uses random number generation由此看来,底层的NumPy和Matlab实现是相似的.
> python vs octave random generator:这个问题确实非常接近预期的答案.需要在默认状态生成器周围使用某种包装器.

解决方法:

使用rpy2在python中调用r,这是一个演示,numpy数组数据与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"]

标签:python,arrays,r,numpy,random
来源: https://codeday.me/bug/20190923/1815609.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有