`numpy.random` 状态的差异消失了
Discrepancy of the state of `numpy.random` disappears
同一项目有两次 python 运行,设置不同,但随机种子相同。
该项目包含 returns 使用 numpy.random.uniform
几个随机数的函数。
不管 numpy.random
在 python 过程中的其他用途,两次运行中的一系列函数调用都会生成相同的序列,直到某个点。
并且在那个时候产生了一次不同的结果之后,他们在一段时间内再次产生了相同的序列。
我还没有尝试使用 numpy.random.RandomState
,但这怎么可能?
使用 numpy.random
的某个地方导致了差异并再次修复它只是巧合吗?
我很好奇这是唯一的可能性还是有其他解释。
提前致谢。
添加:我忘了说当时没有播种。
当您在 numpy 中使用 random
模块时,每个随机生成的数字(不管 distribution/function)都使用 RandomState
的相同 "global" 实例。当您使用 numpy.random.seed()
设置种子时,您设置了 RandomState
的 'global' 实例的种子。这与Python.
中的random
库原理相同
我不清楚numpy随机函数的具体实现,但我怀疑每个随机函数都会让底层的Mersenne Twister前进'steps'个数,步数不一定在不同的 random
函数之间是相同的。
因此,如果 every 调用 random
函数的顺序在不同的运行之间不相同,那么您可能会在生成的随机序列中看到差异数字,如果 Mersenne Twister 'steps' 再次排列,则再次收敛。
您可以通过为您正在使用的每个函数初始化一个单独的 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)
您可能希望为每个实例设置不同的种子 - 这取决于您使用这些伪随机数的目的。
同一项目有两次 python 运行,设置不同,但随机种子相同。
该项目包含 returns 使用 numpy.random.uniform
几个随机数的函数。
不管 numpy.random
在 python 过程中的其他用途,两次运行中的一系列函数调用都会生成相同的序列,直到某个点。
并且在那个时候产生了一次不同的结果之后,他们在一段时间内再次产生了相同的序列。
我还没有尝试使用 numpy.random.RandomState
,但这怎么可能?
使用 numpy.random
的某个地方导致了差异并再次修复它只是巧合吗?
我很好奇这是唯一的可能性还是有其他解释。
提前致谢。
添加:我忘了说当时没有播种。
当您在 numpy 中使用 random
模块时,每个随机生成的数字(不管 distribution/function)都使用 RandomState
的相同 "global" 实例。当您使用 numpy.random.seed()
设置种子时,您设置了 RandomState
的 'global' 实例的种子。这与Python.
random
库原理相同
我不清楚numpy随机函数的具体实现,但我怀疑每个随机函数都会让底层的Mersenne Twister前进'steps'个数,步数不一定在不同的 random
函数之间是相同的。
因此,如果 every 调用 random
函数的顺序在不同的运行之间不相同,那么您可能会在生成的随机序列中看到差异数字,如果 Mersenne Twister 'steps' 再次排列,则再次收敛。
您可以通过为您正在使用的每个函数初始化一个单独的 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)
您可能希望为每个实例设置不同的种子 - 这取决于您使用这些伪随机数的目的。