这是“取消种子”随机数生成器的唯一方法吗:
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]
期望的结果:我希望随机数在每个循环中都是随机的。
如果这是唯一的方法,我很高兴导入时间模块,但我认为可能有一种更简单、更强大的方法。
(根据无法获取到当前种子这个帖子 https://stackoverflow.com/questions/32172054/how-can-i-retrieve-the-current-seed-of-numpys-random-number-generator)
你走错了路。而不是试图取消全球 RNG 的种子numpy.random
, use a 独立的RNG https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.RandomState.html#numpy.random.RandomState对于需要重复的部分。这个RNG可以有一个完全独立的状态numpy.random
默认随机数生成器:
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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)