【发布时间】:2023-03-22 18:36:01
【问题描述】:
Numpy documentation on np.random.permutation 建议所有新代码使用随机生成器包中的np.random.default_rng()。我在文档中看到,Random Generator 包已经标准化了围绕 BitGenerator 生成各种随机分布,而不是使用我隐约熟悉的 Mersenne Twister。
我看到了一个缺点,过去只需一行代码即可完成简单的排列:
np.random.permutation(10)
现在变成了两行代码,这么简单的任务感觉有点别扭:
rng = np.random.default_rng()
rng.permutation(10)
- 为什么这种新方法比以前的方法有所改进?
- 为什么不像
np.random.permutation这样的现有方法只包装这个新的首选方法? - 假设它不会被大量调用,是否有充分的理由不将这种新方法用作单行
np.random.default_rng().permutation(10)? - 是否有将现有代码切换到此方法的参数?
【问题讨论】:
-
我不能给出一个有根据的答案,但我想这个想法是(类似于 C++ 所做的?)将生成器与采样器分开,并强制人们明确指定生成器。另请参阅the release comments。
-
我认为您希望在脚本开始时创建一次
default_rng,然后将其与perumutation、randint等重复使用。一次性随机调用我不会在使用新包上付出任何额外的努力。我在回答 SO 问题时没有使用它。添加新功能时,通常使用新的调用和接口添加它们比替换旧的更安全。破坏现有代码的风险较小。
标签: python numpy numpy-random