我目前在函数和单元测试中使用随机性。此外,有时函数应该支持joblib
并行。我想知道使用numpy.random.seed
和Generator
有什么问题?
例如,假设我们有Generator模式:
# pseudocode
def do_something_with_seed(rng):
rng = np.random.default_rng(rng)
# you can just call as is
do_something_with_seed(12345)
# I need to generate a seed sequence as I understand, when using parallelism
Parallel(do_something_with_seed(_rng) for _rng in rng.spawn(n_jobs))
字符串
接下来,假设我们使用np.random.seed
模式
# pseudocode
def do_something_without_seed(seed):
np.random.seed(seed)
...
# this requires you to always set the global seed before running this function
do_something_with_global_seed(12345)
# when using parallelism
random_seeds = np.random.randint(np.iinfo(np.int32).max, size=len(seeds))
Parallel(do_something_with_global_seed(seed) for seed in random_seeds)
型
正如我所看到的,性能,功能是相同的,只要你记得做正确的事情。是否有任何差异或原因,我们肯定需要/想要使用Generator
模式?单元测试呢?
1条答案
按热度按时间ie3xauqp1#
从
np.random.seed
的文档中:这是一个方便的遗留函数,用于支持使用单例RandomState的旧代码。最佳实践是使用专用的
Generator
示例,而不是直接在random模块中公开的随机变量生成方法。换句话说,你应该使用
Generator
版本的原因是因为它是Numpy推荐你使用的较新版本。出于向后兼容的原因,旧方法仍然存在。