python - 是否可以让 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()
。是这样吗?如果是,那为什么?以及如何确保在不同的调用中生成相同的随机数?
解决方案
我猜你对随机种子的工作方式感到困惑。每次设置种子时,随机生成器都会从使用该种子的点重新启动。
例如,假设种子=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 ]])
推荐阅读
- flutter - 我的 PetitParser 映射函数中缺少空格
- java - JMS 连接在连接后关闭并每 30 秒重试一次
- mysql - MySQL-如何使用 Group By 获取值
- c# - WCF 和自定义身份验证(用户名/密码)
- css - 为什么 react-bootstrap 的 Progressbar 不起作用?
- apache-kafka - 如何使用 JMX 获取 kafka 代理状态
- ios - 如何在可本地化的文件字符串中命名键
- javascript - 使用单击功能从数组中删除项目
- mongodb - 使用 NestJS 和 Mongo 获取相关数据
- ansible - 使用 ansible 同步模块在两个远程主机之间同步文件