0

同一项目有两个不同设置的 python 运行,但具有相同的随机种子。

该项目包含一个函数,该函数使用numpy.random.uniform.

无论numpy.randompython 进程中的其他用途如何,两次运行中的一系列函数调用都会生成相同的序列,直到某个点。

并且在该点产生了一次不同的结果之后,它们在一段时间内再次产生相同的序列。

我还没有尝试过使用numpy.random.RandomState,但这怎么可能?

numpy.random某处使用的东西导致了差异并再次修复它只是一个巧合吗?

我很好奇这是唯一的可能性还是有另一种解释。

提前致谢。

ADD:我忘了说当时没有播种。

4

1 回答 1

0

当您random在 numpy 中使用该模块时,每个随机生成的数字(无论分布/功能如何)都使用相同的“全局”实例RandomState。当您使用 设置种子numpy.random.seed()时,您设置了 的“全局”实例的种子RandomStaterandom这与Python 中的库原理相同。

我不确定 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)

您可能希望为每个实例设置不同的种子 - 这将取决于您使用这些伪随机数的目的。

于 2017-09-14T03:52:17.587 回答