如何获得浮动范围之间的随机数?


414

randrange(start, stop)只接受整数参数。那么,如何在两个浮点值之间获得一个随机数呢?


2
如果您想使用numpy,np.random.uniform(start, stop)或者np.random.uniform(start, stop, samples)需要多个样本。否则,下面的答案是最好的。
sachinruk

Answers:


650

使用random.uniform(a,b)

>>> random.uniform(1.5, 1.9)
1.8733202628557872

4
理论上可以产生1.5和1.9吗?还是只会产生1.50〜1和1.89〜?
Musixauce3000 '16

14
@ Musixauce3000简短答案:是的。更长的答案:如果您查看文档说明,Returns a random floating point number N such that a <= N <= b for a <= b and b <= N <= a for b < a即输出N可以等于输入ab。在这种情况下1.51.9

是否有另一种方法可以执行此操作而不使用该.uniform功能,而是使用.randomor或randrange
DerryckDX

1
@DerryckDX 1.5 + random.random() * (1.9 - 1.5)应该执行此操作,即使根据规范,此操作也永远不会完全返回1.9(即使在理论上也是如此)。
Yonatan N

@ Musixauce3000似乎uniform(a, b)实现为,a + (b-a) * random()根据舍入 github.com/python/cpython/blob/…
Pavel

74

random.uniform(a, b)似乎是您要寻找的。从文档:

返回一个随机浮点数N,使得a <= N <= b表示a <= b,b <= N <= a表示b <a。

这里


47

如果您想生成一个随机浮点数,该浮点数的右边是N个数字,则可以执行以下操作:

round(random.uniform(1,2), N)

第二个参数是小数位数。


我不知道为什么没有更多的投票,其他人没有四舍五入机制。
TheTechRobo36414519

2

最常见的是,您将使用:

import random
random.uniform(a, b) # range [a, b) or [a, b] depending on floating-point rounding

如果需要,Python可提供其他发行版

如果已经numpy导入,则可以使用其等效项:

import numpy as np
np.random.uniform(a, b) # range [a, b)

同样,如果需要其他发行版,请numpy提供与python相同的发行版,以及许多其他发行版

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.