[英]Discrepancy of the state of `numpy.random` disappears
同一项目的两个python运行具有不同的设置,但具有相同的随机种子。
该项目包含一个函数,该函数使用numpy.random.uniform
返回几个随机数。
不管python进程中numpy.random
的其他用途如何, numpy.random
中的一系列函数调用都会生成相同的序列,直到某个时刻为止。
在那一点上一次产生不同的结果之后,它们又在一段时间内再次产生相同的序列。
我还没有尝试使用numpy.random.RandomState
,但是这怎么可能呢?
某处使用numpy.random
引起差异并再次解决问题,这仅仅是一个巧合吗?
我很好奇这是否是唯一的可能性,或者还有其他解释。
提前致谢。
添加:我忘了提到当时还没有播种。
在numpy中使用random
模块时,每个随机生成的数字(无论分布/函数如何)都使用RandomState
的相同“全局”实例。 使用numpy.random.seed()
设置种子时,将设置numpy.random.seed()
的“全局”实例的RandomState
。 这与Python中的random
库的原理相同。
我不确定numpy随机函数的具体实现方式,但是我怀疑每个随机函数都会使底层的Mersenne Twister前进多个“步骤”,而不同random
函数之间的步骤数量不一定相同。
因此,如果在不同的运行之间每次调用random
函数的顺序都不相同,那么您可能会看到所生成的随机数序列存在差异,如果Mersenne Twister再次“逐步”排列,则会再次收敛。
您可以通过为所使用的每个函数初始化一个单独的RandomState
实例来解决此问题。 例如:
import numpy as np
seed = 12345
r_uniform = np.random.RandomState(seed)
r_randint = np.random.RandomState(seed)
a_random_uniform_number = r_uniform.uniform()
a_random_int = r_randint.randint(10)
您可能想为每个实例设置不同的种子-这取决于您使用这些伪随机数的目的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.