Python Numpy:循环中的随机数

Vla*_*ape 3 python random numpy

我有这样的代码并使用 Jupyter-Notebook

for j in range(timesteps):    
    a_int = np.random.randint(largest_number/2) # int version
Run Code Online (Sandbox Code Playgroud)

我得到随机数,但是当我尝试将部分代码移动到函数时,我开始在每次迭代中收到相同的数字

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()  
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况以及如何解决?我想可能是因为 Jupyter-Notebook 中的进程

Han*_*ave 5

有问题的代码行是

np.random.seed(seed=int(time.time()))
Run Code Online (Sandbox Code Playgroud)

由于您在一个完成得相当快的循环中执行,因此调用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()
Run Code Online (Sandbox Code Playgroud)

请注意种子是如何创建一次然后用于整个循环的,因此每次调用随机整数时,种子都会更改而不会被重置。

请注意,numpy 已经处理了一个伪随机种子。使用它不会获得更多随机结果。手动设置种子的一个常见原因是确保可重复性。您将程序开始时(笔记本顶部)的种子设置为某个固定整数(我在很多教程中看到 42),然后所有计算都来自该种子。如果有人想验证您的结果,算法的随机性不能成为混淆因素。