从非均匀分布生成一组确定的值

Generate a deterministic set of values from non-uniform distributions

Numpy 有一些例程,例如 np.linspace,可以创建一个均匀分布的数字数组。

是否有类似的方法来生成遵循特定分布(如正态分布或 Beta 分布)的非均匀间隔数字?我知道有很多函数可以创建随机样本,但我正在寻找适合分布的确定性值集。

例如,像这样:

arange_normal(n=10, mean=10, std=1)
[1, 5, 8, 9, 10, 10, 11, 12, 15, 19] 

此处的数字是猜测的,但想法是它们将完美适合指定的分布。同样,我也会寻找类似 arange_beta.

的东西

据我了解,您想计算 beta 函数的概率分布函数。

您只需将 scipy.stat 的 beta.pdf 函数应用于由排列定义的 numpy 数组即可。下面给出了 alpha = beta = 0.5 的示例:

from scipy.stats import beta
import numpy as np

def arange_beta(start, stop, step):
    x = np.arange(start, stop, step)
    return beta.pdf(x, a=0.5, b=0.5)

您可能正在寻找的是 beta 分布的分位数。您可以使用 SciPy 的 scipy.stats.beta.ppf 方法获取它们。以下代码打印 20 个均匀分布的分位数:

import numpy as np
import scipy as sp
print(sp.stats.beta.ppf(np.linspace(0,1,20),a=0.5,b=0.5))

请注意,其他分布(例如正态分布)覆盖实数线的一半或两半,因此它们在 0 and/or 1 处的值可能是无穷大。在这种情况下,您必须为 linspace 选择一个稍微小一点的域,例如这个例子:

import numpy as np
import scipy as sp
print(sp.stats.norm.ppf(np.linspace(0.001,0.999,20),loc=0,scale=1))