Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python random.setstate(),seed()-是否保证在不同的实现中得到相同的结果?_Python_Random_Python 3.x_Python 2.x - Fatal编程技术网

python random.setstate(),seed()-是否保证在不同的实现中得到相同的结果?

python random.setstate(),seed()-是否保证在不同的实现中得到相同的结果?,python,random,python-3.x,python-2.x,Python,Random,Python 3.x,Python 2.x,是否可以保证使用random.setstate()或random.seed()初始化的随机生成器的pyhon2/python3脚本将在不同版本和平台上产生相同的伪随机序列?(例如,Mac上的python 3.1与Linux 64位上的python 3.2相同) 问题是关于这两个方面的:python2和python3,假设python3脚本将在python3解释器上运行,反之亦然。python2.3及以上版本使用Mersenne Twister生成器,它独立于系统随机函数(作为Python的C扩展

是否可以保证使用
random.setstate()
random.seed()
初始化的随机生成器的pyhon2/python3脚本将在不同版本和平台上产生相同的伪随机序列?(例如,Mac上的python 3.1与Linux 64位上的python 3.2相同)


问题是关于这两个方面的:python2和python3,假设python3脚本将在python3解释器上运行,反之亦然。

python2.3及以上版本使用Mersenne Twister生成器,它独立于系统随机函数(作为Python的C扩展模块实现)。对于使用Mersenne Twister的任何版本,在不同版本和平台上的结果应该是相同的

以前,您可以使用
WichmannHill
生成器保证向后兼容性,但不幸的是,它似乎已在Python3.x中删除

如果您确实需要保证兼容性,请按照
Random
文档的建议编写自己的
Random
子类(或使用稳定的外部实现,例如):

如果您想使用自己设计的另一个基本生成器,还可以将类Random子类化:在这种情况下,重写Random()、seed()、getstate()、setstate()和jumpahead()方法。或者,新的生成器可以提供getrandbits()方法—这允许randrange()在任意大的范围内生成选择

您可以使用该模块,该模块具有独立于Python平台的一致实现。它支持Python 2.4、2.5、2.6、2.7、3.1和3.2。它有9种不同的算法

下面是一个例子:

>>> import simplerandom.iterators as sri
>>> rng = sri.MWC1(12345)
>>> next(rng)
498186671L
>>> next(rng)
888940288L
>>> next(rng)
345072384L
只要你用同样的值播种,你就会得到同样的结果:

>>> rng = sri.MWC1(12345)
>>> next(rng)
498186671L
>>> rng = sri.MWC1(98765)
>>> next(rng)
3546724783L

它没有说明python3.x和python3.y在哪里=y将产生相同的结果如果文档没有声明结果保证在python版本中是相同的,那么这不是API的一部分,依赖它是不正确的。或者,至少,我是这么想的。尽管如此,提到算法的事实可能会让你提出问题。