从非均匀分布生成一组确定的值
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))
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))