同时播种 Numpy 和多个 Scipy 分布的正确方法
Proper Method to Seed Numpy and Multiple Scipy Distributions Concurrently
目前,我正在编写一个大型模拟,它使用来自 numpy
和 scipy.stats
的多个分布的随机变量,并且分布也应该是独立的。为了寻求确保可重复性的方法,我幸运地偶然发现了 Abhinav 的回复 here,他们在其中提供了一个惊人的例子。然而,值得注意的是,它仅从 scipy
播种单个分布,而我的代码有多个 scipy
分布。有没有办法一次为所有 scipy
发行版播种(同时仍然为 numpy
发行版播种)?如果不是一次全部,是否可以对所有连续分布进行播种? (单独为每个分布播种似乎效率低下)。非常感谢!
编辑:可以在下面找到一个最小的可重现示例(它类似于 Abhinav 的示例):
from numpy.random import Generator, PCG64
from scipy.stats import binom, norm
n, p, size, seed = 10, 0.5, 10, 12345
numpy_randomGen = Generator(PCG64(seed))
scipy_randomGen = binom
scipy_randomGen2 = norm
numpy_randomGen = Generator(PCG64(seed))
# this is the part I want to simplify, as I have many distributions from scipy
# maybe there is a convention that simplifies it?
scipy_randomGen.random_state=numpy_randomGen
scipy_randomGen2.random_state=numpy_randomGen
print(scipy_randomGen.rvs(n, p, size=size))
print(scipy_randomGen2.rvs(size=size))
print(numpy_randomGen.binomial(n, p, size))
不确定你在找什么。您仍然需要分别为每个发行版播种。因此,没有比在
中为每个 rvs 调用提供 random_state arg 更简单的事情了
.rvs(n, p, size=size, random_state=...)
此处的 random_state 参数可以是生成器或整数种子(但在后一种情况下,它构建了一个旧式的 RandomState 对象并在后台为它播种。
目前,我正在编写一个大型模拟,它使用来自 numpy
和 scipy.stats
的多个分布的随机变量,并且分布也应该是独立的。为了寻求确保可重复性的方法,我幸运地偶然发现了 Abhinav 的回复 here,他们在其中提供了一个惊人的例子。然而,值得注意的是,它仅从 scipy
播种单个分布,而我的代码有多个 scipy
分布。有没有办法一次为所有 scipy
发行版播种(同时仍然为 numpy
发行版播种)?如果不是一次全部,是否可以对所有连续分布进行播种? (单独为每个分布播种似乎效率低下)。非常感谢!
编辑:可以在下面找到一个最小的可重现示例(它类似于 Abhinav 的示例):
from numpy.random import Generator, PCG64
from scipy.stats import binom, norm
n, p, size, seed = 10, 0.5, 10, 12345
numpy_randomGen = Generator(PCG64(seed))
scipy_randomGen = binom
scipy_randomGen2 = norm
numpy_randomGen = Generator(PCG64(seed))
# this is the part I want to simplify, as I have many distributions from scipy
# maybe there is a convention that simplifies it?
scipy_randomGen.random_state=numpy_randomGen
scipy_randomGen2.random_state=numpy_randomGen
print(scipy_randomGen.rvs(n, p, size=size))
print(scipy_randomGen2.rvs(size=size))
print(numpy_randomGen.binomial(n, p, size))
不确定你在找什么。您仍然需要分别为每个发行版播种。因此,没有比在
中为每个 rvs 调用提供 random_state arg 更简单的事情了.rvs(n, p, size=size, random_state=...)
此处的 random_state 参数可以是生成器或整数种子(但在后一种情况下,它构建了一个旧式的 RandomState 对象并在后台为它播种。