gpt4 book ai didi

python - 临时修复后恢复为随机种子的最佳方法?

转载 作者:太空狗 更新时间:2023-10-30 01:56:29 30 4
gpt4 key购买 nike

这是“取消种子”随机数生成器的唯一方法吗:

np.random.seed(int(time.time()))

如果您有一些代码希望在一个循环中可重复(例如测试),而其他代码您希望在每个循环中都是随机的,那么如何在设置后将种子“重置”为随机数生成器?

下面的代码说明了这个问题:

import numpy as np

def test():
np.random.seed(2)
print("Repeatable test:", [np.random.randint(10) for i in range(3)])

for i in range(4):
print("Random number:", np.random.randint(10))
test()

Random number: 8
Repeatable test: [8, 8, 6]
Random number: 2
Repeatable test: [8, 8, 6]
Random number: 2
Repeatable test: [8, 8, 6]
Random number: 2
Repeatable test: [8, 8, 6]

期望的结果:我希望随机数在每个循环中都是随机的。

如果这是唯一的方法,我很乐意导入时间模块,但我认为可能有更简单、更可靠的方法。

(根据this post无法得到当前种子)

最佳答案

你走错了路。不要试图取消 numpy.random 使用的全局 RNG,而是使用 separate RNG对于需要可重复的部分。此 RNG 可以具有完全独立于 numpy.random 默认 RNG 的状态:

def test():
rng = numpy.random.RandomState(2)
print("Repeatable test:", [rng.randint(10) for i in range(3)])

虽然在技术上可以保存和恢复全局 numpy.random RNG 的状态,但这是一个非常专业的操作,很少是一个好主意。这可能很有用,例如,如果您正在调试一段代码并且希望在向后跳转代码后“倒回”随机状态,尽管您需要提前保存状态,并且它不会倒回任何其他随机数生成器:

# Don't abuse this.
state = numpy.random.get_state()
do_stuff()
numpy.random.set_state(state)

关于python - 临时修复后恢复为随机种子的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52544935/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com