python - 这真的会生成随机 float 吗? (Python)

标签 python random

关于Python类(class)的介绍,我正在看用Python生成一个随机 float ,看过一个标准的推荐代码

import random

lower = 5
upper = 10
range_width = upper - lower
x = random.random() * range_width + lower

对于从 5 到但不包括 10 的随机 float 。

在我看来,同样的效果可以通过以下方式实现:

import random

x = random.randrange(5, 10) + random.random()

因为这会给出 5、6、7、8 或 9 的整数,然后加上小数。

我的问题是,第二个代码是否仍会给出完全均匀的概率分布,或者它不会保持第一个版本的完全随机性?

最佳答案

根据documentation那么是的 random() 确实是一个均匀分布。

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.

所以这两个代码示例应该没问题。要缩短您的代码,您同样可以这样做:

random.uniform(5, 10)

请注意,uniform(a, b) 就是 a + (b - a) * random(),与您的第一个示例相同。

第二个示例取决于您使用的 Python 版本。 3.2 之前的 randrange() 可能会产生稍微不均匀的分布。

关于python - 这真的会生成随机 float 吗? (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42867315/

相关文章:

mysql - 查询优化以查找随机样本

c++ - 如何在 C/C++ 中的一个 unsigned char 中生成两个随机 1?

python - 从 Django 表单实例中检索变量

python - Pyserial - RS232 9600,8,N,1 发送和接收数据

python - 为每个 n 个元素创建相同的时间戳

java - 检查随机数是否等于特定数字。 java

python - 多处理池示例(并行)比顺序处理慢。尝试理解Python中的池

Python3-如何调用可变地接受 *args 的函数

javascript - 如何在codewars中添加随机测试用例?

java - 生成 3000 字节的随机字符串