如何在Python中生成日志均匀分布?


问题内容

我在Python中找不到内置函数来生成给定最小值和最大值(R等效于此处)的对数均匀分布,类似:loguni
[n,exp(min),exp(max),base]返回n log在exp(min)和exp(max)范围内均匀分布的对数。

我发现最接近的是numpy.random.uniform


问题答案:

http://ecolego.facilia.se/ecolego/show/Log-
Uni​​form%20Distribution

在对数均匀分布中,假设对数转换后的随机变量是均匀分布的。

从而

logU(a, b) ~ exp(U(log(a), log(b))

因此,我们可以使用以下命令创建对数均匀分布numpy

def loguniform(low=0, high=1, size=None):
    return np.exp(np.random.uniform(low, high, size))

如果您想选择其他基准,我们可以定义一个新函数,如下所示:

def lognuniform(low=0, high=1, size=None, base=np.e):
    return np.power(base, np.random.uniform(low, high, size))

编辑:@joaoFaria的答案也是正确的。

def loguniform(low=0, high=1, size=None):
    return scipy.stats.reciprocal(np.exp(low), np.exp(high)).rvs(size)