首页 > 解决方案 > 是否可以让 numpy 从不同调用的分布中生成相同的随机数?

问题描述

我有两个单独的文件在同一台机器上运行,但在不同的 vscode 实例中。两个文件都以不同的方式执行相同的逻辑操作,但生成不同的输出。我并排调试了两个以检查不同步骤中各种变量的值。我意识到生成的随机数在它们中都是不同的,即使在它们中都设置了种子。我快速检查了 python 终端中的行为:

>>> import numpy as np
>>> np.random.seed = 4
>>> np.random.uniform(-1, 1, size=(1,5))
array([[-0.10854165, -0.42618061,  0.00569403, -0.80871141, -0.3836921 ]])
>>> np.random.uniform(-1, 1, size=(1,5))
array([[-0.70291615,  0.59154014, -0.83395552,  0.51728728, -0.03152187]])
>>> np.random.uniform(-1, 1, size=(1,5))
array([[ 0.351498  ,  0.2164184 ,  0.87155382,  0.13872203, -0.30487752]])
>>> np.random.uniform(-1, 1, size=(1,5))
array([[-0.20548157,  0.32959061, -0.87700352, -0.48807404,  0.78473707]])

似乎设置np.random.seed并不能保证在不同的调用中生成相同的随机数np.random.uniform()。是这样吗?如果是,那为什么?以及如何确保在不同的调用中生成相同的随机数?

标签: pythonnumpy

解决方案


我猜你对随机种子的工作方式感到困惑。每次设置种子时,随机生成器都会从使用该种子的点重新启动。

例如,假设种子=4,随机生成器正在生成这个序列:X1,X2,X3,....。每次将种子设置为 4 时,第一个元素将是 X1,第二个元素始终是 X2。如果您希望始终获得 X1,您所要做的就是调用其余的种子,即放在np.random.seed = 4随机生成之前。

换句话说,你可以试试这个修改后的代码版本,它总是给你相同的数字:

import numpy as np
>>> np.random.seed = 4
>>> np.random.uniform(-1, 1, size=(1,5))
array([[-0.10854165, -0.42618061,  0.00569403, -0.80871141, -0.3836921 ]])
>>> np.random.seed = 4
>>> np.random.uniform(-1, 1, size=(1,5))
array([[-0.10854165, -0.42618061,  0.00569403, -0.80871141, -0.3836921 ]])
>>> np.random.seed = 4
>>> np.random.uniform(-1, 1, size=(1,5))
array([[-0.10854165, -0.42618061,  0.00569403, -0.80871141, -0.3836921 ]])

推荐阅读