关于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/