【问题标题】:Numpy random seed valid for entire jupyter notebookNumpy 随机种子对整个 jupyter 笔记本有效
【发布时间】:2018-12-27 17:19:39
【问题描述】:

我在 Jupyter Lab 笔记本上使用来自 numpy.random 的函数,我正在尝试使用 numpy.random.seed(333) 设置种子。仅当种子设置与代码位于同一笔记本单元格中时,这才能按预期工作。例如,如果我有这样的脚本:

import numpy as np

np.random.seed(44)

ll = [3.2,77,4535,123,4]

print(np.random.choice(ll))
print(np.random.choice(ll))

np.random.choice(ll) 的输出将相同,因为设置了种子:

# python seed.py
4.0 
123.0
# python seed.py
4.0
123.0

现在,如果我尝试在 Jupyter 笔记本上做同样的事情,我会得到不同的结果:

# in [11]
import numpy as np
# even if I set the seed here the other cells don't see it
np.random.seed(333)

# in [12]
np.random.choice([1,23,44,3,2])
23
# gets the same numbers

# in [13]
np.random.choice([1,23,44,3,2])
44
# gets different numbers every time I run this cell again

有没有办法在 Jupyter 实验室笔记本中全局设置 numpy 随机种子?

【问题讨论】:

  • 但是你反复调用randint 所以它会在后续的单元格中给你一个不同的数字,你必须在调用 randint 之前设置种子以获得一致性这没有什么不同如果您在 python 终端中并进行了相同的后续调用
  • 更改了代码以反映我的意思。
  • 你似乎还是不明白,一旦你调用了seed,然后你反复调用choice,除非你重置种子,否则你会得到一个不同的值,我不知道为什么这不清楚
  • 如果您问是否有可能在不明确设置种子的情况下获得相同的结果,我认为这是不可能的
  • 我相信 OP 是说如果你运行种子单元,然后立即在另一个单元中调用 choice(),你会得到一些值 X,但 即使在你重新运行种子单元之后 重新运行 choice() 单元格会给出不同的 Y 值。

标签: python numpy jupyter-notebook


【解决方案1】:

因为您反复调用 randint,它每次都会生成不同的数字。重要的是要注意,seed 不会使函数始终返回相同的数字,而是使相同的 sequence 数字在您重复运行 randint 相同的次数时会产生。因此,每次重新运行 random.randint 时都会得到相同的序列数字,而不是总是产生相同的数字。

如果您每次都想要相同的随机数,则在每次 random.randint 调用之前在该特定单元格中重新播种应该可以工作。否则,您可以期望始终获得相同的数字序列,但不会每次都获得相同的数字。

【讨论】:

  • 很抱歉。我修复了代码以反映“获得相同值”的含义。
  • 我的回答仍然有效。重新运行程序为随机生成器重新播种。重新播种 Jupyter 笔记本应该可以让您重现相同的结果。尝试获得两个选择,重新运行第一个单元格,然后再次生成选择。你应该得到相同的。
  • 这就是我一直在做的事情:在每个笔记本单元格上重新播种相同的种子,但这看起来不是一个好的解决方案。
  • @Ivan 不幸的是,我相信这就是你必须做的。或者,您可以将种子语句放在您尝试使用的单元格中,以便在您每次要运行它时重新设置种子。请记住 - 播种将生成与您重新运行单元格相同的内容序列,但这并不意味着您的输出将始终相同,除非您继续重新播种。
【解决方案2】:

因为您在不同于np.random.seed() 的单元格中运行np.random.choice()。尝试在同一个单元格中运行np.random.seed()np.random.choice(),你会得到相同的数字。

# in [11]
import numpy as np
# even if I set the seed here the other cells don't see it
np.random.seed(333)
np.random.choice([1,23,44,3,2])
2
# gets the same numbers

# in [12]
import numpy as np
# even if I set the seed here the other cells don't see it
np.random.seed(333)
np.random.choice([1,23,44,3,2])
2
# gets the same numbers

【讨论】:

  • 这正是我要解决的问题。
  • 那是公认的答案吗?还是您的意思是这正是您想要避免的?
  • 我认为解释是错误的。它是否在同一个单元格中并不重要,但正如接受的答案中所解释的那样,它被调用的次数很重要。如果您想检查它,只需将import numpy as np np.random.seed(223) print(np.random.choice([1,23,44,3,2])) print(np.random.choice([1,23,44,3,2])) 放入一个单元格中...另请参阅@Ed Chum 和@Sam Carpenter 的cmets
  • @Mywork,是的,但他的问题是“有没有办法在全球范围内设置 numpy 随机种子......?”答案是否定的,每次想要生成相同的序列时都需要调用np.random.seed(333)。所以解决方法是在打印随机数的同一单元格中调用np.random.seed(333)
  • @allenyllee 所以回答这个问题。正如我所说,答案应该是“不,如果你想要相同的号码,无论你在哪个单元格,你需要在每次通话之前都这样做”,然后是你的例子。您的回答/措辞具有误导性……这表明问题出在 jupyter 细胞上(类似于问题具有误导性),但事实并非如此。
猜你喜欢
  • 1970-01-01
  • 2017-10-07
  • 2016-05-26
  • 1970-01-01
  • 2018-09-23
  • 2020-08-26
  • 1970-01-01
  • 1970-01-01
  • 2019-05-10
相关资源
最近更新 更多