当您random在 numpy 中使用该模块时,每个随机生成的数字(无论分布/功能如何)都使用相同的“全局”实例RandomState。当您使用 设置种子numpy.random.seed()时,您设置了 的“全局”实例的种子RandomState。random这与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)
您可能希望为每个实例设置不同的种子 - 这将取决于您使用这些伪随机数的目的。