gpt4 book ai didi

python random.randint 与 random.choice : different outcomes usingsame values

转载 作者:行者123 更新时间:2023-11-28 22:19:59 25 4
gpt4 key购买 nike

我要求我的学生编写一个 Python 程序,其中将一对 6 面骰子掷 100 次的结果存储在一个列表中,然后绘制成直方图。

我一直认为 random.choice(1,2,3,4,5,6) 不如 random.randint(1,6),直到我注意到使用 random.choice 的学生的直方图更好地反射(reflect)了预期结果。例如,在几乎所有使用 random.randint(1,6) 的学生的直方图中,掷出 12 (6+6) 的概率异常高。有谁知道发生了什么事?

最佳答案

From the documentation :

Almost all module functions depend on the basic function random(), which generates a random float uniformly in the semi-open range [0.0, 1.0). Python uses the Mersenne Twister as the core generator. It produces 53-bit precision floats and has a period of 2**19937-1. The underlying implementation in C is both fast and threadsafe. The Mersenne Twister is one of the most extensively tested random number generators in existence. However, being completely deterministic, it is not suitable for all purposes, and is completely unsuitable for cryptographic purposes.

所以结果应该没有任何真正的区别。但是,我不同意 random.choice() 不如 randint(),事实上,随机选择在生成随机数方面实际上更快。当您查看源代码时:

def randint(self, a, b):
return self.randrange(a, b+1)

def randrange(self, start, stop=None, step=1, _int=int, _maxwidth=1L<<BPF):
istart = _int(start)
if istart != start:
# not executed
if stop is None:
# not executed

istop = _int(stop)
if istop != stop:
# not executed
width = istop - istart
if step == 1 and width > 0:
if width >= _maxwidth:
# not executed
return _int(istart + _int(self.random()*width))

对于choice():

def choice(self, seq):
return seq[int(self.random() * len(seq))]

您可以看到 randint() 有使用 randrange() 的额外开销

编辑 正如@abarnert 在评论中指出的那样,这里几乎没有性能差异,randint(1,6) 是一个清晰且表示掷骰子的直观方式

我都运行了 10000 卷,没有看到任何倾斜,所以您的输入样本可能太小了:

enter image description here

下面是一个骰子掷两次的分布,也很均匀:

enter image description here

我从这两个有用的答案中借用了一些内容:Performance of choice vs randint Is Pythons random.randint statistically random? , 有助于进一步阅读。

关于python random.randint 与 random.choice : different outcomes usingsame values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49243597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com