jkr*_*ish 12 python numpy uniform-distribution neuraxle
我找不到Python中的内置函数来生成一个给定最小值和最大值的日志均匀分布(R等价于此处),如:loguni [n,exp(min),exp(max),base]返回n log,均匀分布在exp(min)和exp(max)范围内.
我发现的最接近的是numpy.random.uniform.
Sco*_*nte 15
来自http://ecolego.facilia.se/ecolego/show/Log-Uniform%20Distribution:
在loguniform分布中,假设logtransformed随机变量是均匀分布的.
从而
logU(a, b) ~ exp(U(log(a), log(b))
Run Code Online (Sandbox Code Playgroud)
因此,我们可以使用以下方法创建对数均匀分布numpy:
def loguniform(low=0, high=1, size=None):
return np.exp(np.random.uniform(low, high, size))
Run Code Online (Sandbox Code Playgroud)
如果您想选择不同的基数,我们可以定义一个新函数,如下所示:
def lognuniform(low=0, high=1, size=None, base=np.e):
return np.power(base, np.random.uniform(low, high, size))
Run Code Online (Sandbox Code Playgroud)
Sco*_*ott 14
SciPy v1.4 包含一个loguniform随机变量:https : //docs.scipy.org/doc/scipy/reference/generated/scipy.stats.loguniform.html
以下是如何使用它:
from scipy.stats import loguniform
rvs = loguniform.rvs(1e-2, 1e0, size=1000)
Run Code Online (Sandbox Code Playgroud)
这将创建均匀分布在 0.01 和 1 之间的随机变量。 通过可视化对数缩放直方图可以最好地展示这一点:
无论基数如何,这种“日志缩放”都有效;loguniform.rvs(2**-2, 2**0, size=1000)也产生对数均匀随机变量。更多细节在loguniform的文档中。
小智 8
我相信这scipy.stats.reciprocal是你想要的分布。
从文档:
倒数的概率密度函数为:
Run Code Online (Sandbox Code Playgroud)f(x, a, b) = \frac{1}{x \log(b/a)}对于 a <= x <= b 和 a, b > 0
相互取
a和b作为形状参数。