如何在浮点数范围内获取一个随机数?

666
random.randrange(start, stop) 只接受整数参数。那么,我该如何在两个浮点数之间获取一个随机数呢?

9
如果您需要使用NumPy,可以使用np.random.uniform(start, stop)np.random.uniform(start, stop, samples)(如果您需要多个样本)。否则,以下答案是最佳的。 - sachinruk
是否可以生成介于 [0,2*pi) 之间的均匀随机数? - Rajesh Swarnkar
7个回答

978

使用random.uniform(a, b)函数:

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

9
这在理论上能产生1.5和1.9吗?或者只能产生1.501和1.89 - Musixauce3000
34
简短回答:是的。较长回答:如果你查看文档,它声明“返回一个随机浮点数N,使得a <= N <= b当a <= b并且b <= N <= a当b < a”。换句话说,输出的N可以等于输入的a和b。在这种情况下,a是1.5,b是1.9。 - Dan
有没有其他方法可以不使用.uniform函数,而是使用.randomrandrange来完成这个任务? - EnigmaTech
1
@DerryckDX 1.5 + random.random() * (1.9 - 1.5) 应该可以,尽管根据规范,这即使在理论上也永远不会返回恰好 1.9 - Yonatan N
2
@Musixauce3000,看起来uniform(a, b)是通过a + (b-a) * random()实现的,并返回a random number in the range [a, b) or [a, b] depending on rounding。https://github.com/python/cpython/blob/963eb0f4738456455b9bef7eb531b46805415208/Lib/random.py#L415 - Pavel
请查看此处的完整文档和示例:https://pynative.com/python-get-random-float-numbers/ - Iliya Mirzaei

144

如果你想生成一个保留N位小数的随机浮点数,可以这样做:

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

第二个参数是小数点后的位数。


88

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

返回一个随机浮点数N,满足 a <= N <= b ,如果 a <= b,则满足 b <= N <= a。

请参见这里


如果我想生成一个数字,其方位角范围为0到2 * Pi弧度,不包括2 * pi,即在数学上的范围为[0,2pi),该怎么办? - Rajesh Swarnkar
@RajeshSwarnkar random.random() * 2*math.pi,根据文档所述,随机函数_"返回介于0.0 <= X < 1.0之间的下一个随机浮点数"_。 - Magnus Teekivi

15

根据我处理Python的经验,我只能说随机函数有助于生成随机浮点数。以以下示例为例;

import random

# Random float number between range 15.5 to 80.5
print(random.uniform(15.5, 80.5))

# between 10 and 100
print(random.uniform(10, 100))
The random.uniform() function returns a random floating-point number between a given range in Python

这两组代码可以生成随机浮点数。您可以尝试实验它以获得您想要的结果。


14

最常见的用法是:

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 相同的分布,以及许多其他的分布


1
使用此代码以获得在 n 到 m 范围内的随机浮点数:
import random
random.uniform(n,m)  

如果您想获取一个小数点后 x 位的随机浮点数,可以使用以下代码:
import random
round(random.uniform(n, m), x)

0
为了完整起见:如果你使用numpy,你也可以在一个随机数生成器的实例上调用uniform方法(这是numpy处理随机数时的首选方式)。
import numpy as np

seed = 42
low = 0.12
high = 3.45

rng = np.random.default_rng(seed)
rng.uniform(low, high)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接