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

标签 python numpy uniform-distribution

我找不到 Python 中的内置函数来生成给定最小值和最大值的对数均匀分布(R 等价物是 here ),例如:loguni[n, exp(min), exp( max), base] 返回在 exp(min) 和 exp(max) 范围内均匀分布的 n log。

不过我找到的最接近的是 numpy.random.uniform .

最佳答案

来自 http://ecolego.facilia.se/ecolego/show/Log-Uniform%20Distribution :

In a loguniform distribution, the logtransformed random variable is assumed to be uniformly distributed.

因此

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's answer也是正确的。

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

关于python - 如何在 Python 中生成日志均匀分布?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43977717/

相关文章:

python - 为什么在 if __name__ == "__main__"下使用 manage.py 执行脚本会运行两次

python - 以排列值顺序生成多个列表的所有排列

c++ - boost::random经常在不同状态下从同一种子生成相同值

python - numpy(.ma) 数组 : Number of values since last value change?

python - 在对数对数图上绘制最佳拟合直线

python - 如何获得比 numpy.dot 更快的代码用于矩阵乘法?

python - 多个时间序列的 Matplotlib 热图显示随时间的分布

python - numpy 多维索引和函数 'take'

algorithm - 近线性时间内均匀分布的随机拓扑排序

Swift - 播种 arc4random_uniform?还是另类?