【问题标题】:python random number why isn't it same on all computerspython随机数为什么在所有计算机上都不一样
【发布时间】:2021-12-19 18:34:32
【问题描述】:

一位我不再联系的朋友曾经告诉我以下内容:

使用那个库(python 的随机)你可以选择一个种子 如果你在种子时给它 表示随机生成的数字将始终相同 你在哪台电脑上运行它

所以我尝试对此进行测试,因为这是我需要的,所以在所有计算机上都是相同的,并且每次有人调用它(这很重要,因为我正在研究区块链 NFT,信任在这里很重要)

所以我发现了这个:https://machinelearningmastery.com/how-to-generate-random-numbers-in-python/

在那个链接上,有例子:

from random import seed
from random import random
# seed random number generator
seed(1)
# generate some random numbers
print(random(), random(), random())
# reset the seed
seed(1)
# generate some random numbers
print(random(), random(), random())

在 python 的操场上运行,我明白了

(0.417022004703, 0.720324493442, 0.000114374817345) (0.417022004703, 0.720324493442, 0.000114374817345)

但正如您所见,在该网站上,该帖子的创建者得到了以下信息:

0.13436424411240122 0.8474337369372327 0.763774618976614 0.13436424411240122 0.8474337369372327 0.763774618976614

那么为什么它们在所有计算机上都不相同?我正在使用相同的种子。以及如何确保它们是相同的?

【问题讨论】:

标签: python python-3.x random pip


【解决方案1】:

答案是,即使您标记了 Python-3.x,您实际上使用的是 Python 2,并且随机数算法在 2 和 3 之间变化。

我可以这么说,因为您的 print 语句将值打印为带括号的元组。 Python 3 的打印函数不会发生这种情况。

为了财务目的而依赖随机数算法的特定实现是很奇怪的。如果您真的需要可重复性,那么您应该嵌入自己的算法。有几个不难编码的 RNG。但如果算法需要可预测,为什么不直接使用递增数字呢?如果你不需要随机性,那就不要使用随机性。

【讨论】:

  • 那为什么我在 Python 2 和 Python 3 中得到相同的数字,即使在 3.10 中也是如此?
  • 算法没变,还是MT19937。从种子到状态的映射已经改变。
  • @pjs 那是什么时候发生的,你能分享一个链接吗?
  • @KellyBundy 该链接位于针对该问题的第一条评论中。我不知道它是什么时候发生的,但解决方案是使用 getstate/setstate,它可以跨 MT19937 移植到所有语言和语言版本。
  • @pjs 不是说相反吗?它“当[...]给定相同的种子时将继续产生相同的序列”?
【解决方案2】:

我在 Python 2.3.0(超过 18 岁)和 Python 3.10(最新,仅一个月大)中都获得了帖子作者的价值观。

如果我使用 numpy.random 而不是 Python 的 random,我会得到 您的 值。

所以我怀疑你没有说出你的代码的真相,或者你使用的 "playground of python" 很奇怪。

【讨论】:

  • 肯定是后者。很好的发现。
  • @TimRoberts 我顺便说一句,通过谷歌搜索他们的号码 0.417022004703 发现了这一点,结果他们不是第一个在seed(1) 之后拨打random() 的人:-)。仍然不确定那个游乐场是做什么的,也许它确实使用了一个更古老的 Python 版本,它也产生了这些数字。以后可以试试……
猜你喜欢
  • 2020-11-21
  • 2013-11-21
  • 2018-02-04
  • 2010-09-06
  • 2011-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多