lhk*_*lhk 7 python linux windows random numpy
该文件说:
兼容性保证除非值不正确,否则使用相同参数的固定种子和对“ RandomState”方法的固定调用序列将始终产生相同的结果,直至舍入错误为止。不正确的值将被修复,并在相关文档字符串中记录进行此修复的NumPy版本。只要以前的行为保持不变,就可以扩展现有参数范围并添加新参数。
没有提及操作系统。
如果我np.random.seed(42)在Windows和Linux上调用,以后生成的随机数会一样吗?不同版本的64位Ubuntu会一样吗?
我假设rng使用系统库,因此代码可能不可移植。如果是这样,是否有解决方法?我知道这可能很丑陋,例如将linux rng系统更改为模仿Windows的内容。但是我已经准备好采用创造性的解决方案。
自numpy v1.17(2019 年中)起更新:
跨平台结果应该相同,但跨 numpy 版本不同。
np.random.seed被描述为“便利的遗留功能”;除非专门np.random.default_rng使用. 虽然 RandomState 模块保证提供一致的结果,但它不会通过算法(或正确性)改进进行更新,并且不鼓励在单元测试和向后兼容性之外使用。np.random.RandomState
请参阅NEP 0019:随机数生成器策略。这实际上是一本不错的读物:)摘要如下:
在过去的十年中,NumPy 对其所有随机数分布的数字流都有严格的向后兼容性政策。与 numpy 中的其他数字组件不同,如果它们保持正确,通常允许在修改结果时返回不同的结果,我们有义务随机数分布在每个版本中始终产生完全相同的数字。我们的流兼容性保证的目标是为跨 numpy 版本的模拟提供精确的可重复性,以促进可重复的研究。然而,这一政策使得用更快或更准确的算法增强任何分布变得非常困难。经过十年的经验和周围科学软件生态系统的改进,我们相信现在有更好的方法来实现这些目标。我们建议放宽严格的流兼容性政策,以消除接受对随机数生成功能的贡献的障碍。
这已经在 numpy 中实现了。截至当前写作(numpy 版本 1.22),numpy.random.default_rng()使用Generator默认的BitGenerator. 但在描述中np.random.Generator,附加了以下指导:
无兼容性保证
Generator 不提供版本兼容性保证。特别是,随着更好的算法的发展,比特流可能会发生变化。
因此,使用np.random.default_rng()将跨平台保留相同版本 numpy 的随机数,但不会跨版本。确保可重复性的最佳实践是保留您的确切环境,例如在 Docker 容器中。除此之外,存储随机生成的数据的结果并在下游工作流程中使用保存的结果可以帮助提高可重复性,尽管这当然不会像 Docker 容器那样让您在工作流程后期免于 API 更改。
| 归档时间: |
|
| 查看次数: |
908 次 |
| 最近记录: |