我有这样的代码并使用 Jupyter-Notebook
for j in range(timesteps):
a_int = np.random.randint(largest_number/2) # int version
我得到了随机数,但是当我尝试将部分代码移动到函数中时,我开始在每次迭代中收到相同的数字
def create_train_data():
np.random.seed(seed=int(time.time()))
a_int = np.random.randint(largest_number/2) # int version
return a
for j in range(timesteps):
c = create_train_data()
为什么会发生这种情况以及如何解决?我想可能是因为 Jupyter-Notebook 中的进程所致
最佳答案
有问题的代码行是
np.random.seed(seed=int(time.time()))
由于您在一个完成得相当快的循环中执行,因此及时调用 int()
会将整个循环的随机种子数量减少到相同的数量。如果您确实想手动设置种子,以下是更可靠的方法。
def create_train_data():
a_int = np.random.randint(largest_number/2) # int version
return a
np.random.seed(seed=int(time.time()))
for j in range(timesteps):
c = create_train_data()
请注意种子是如何创建一次然后用于整个循环的,以便每次调用随机整数时种子都会更改而不会重置。
请注意,numpy 已经处理了伪随机种子。使用它并不会获得更多随机结果。手动设置种子的一个常见原因是为了确保再现性。您在程序开始时(笔记本顶部)将种子设置为某个固定整数(我在很多教程中看到 42),然后所有计算都从该种子开始。如果有人想验证您的结果,算法的随机性不能成为混杂因素。
关于Python Numpy : Random number in a loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52390665/