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

2024-06-13 15:12:05 发布

您现在位置:Python中文网/ 问答频道 /正文

Numpy有一些例程,如np.linspace,用于创建等距数字数组

有没有类似的方法来生成遵循特定分布(如正态分布或贝塔分布)的非等距数字?我知道有很多函数可以创建一个随机样本,但我正在寻找一组符合分布的确定值

例如,像这样:

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

这里的数字是猜测出来的,但其想法是,它们将非常适合指定的分布。同样,我也会寻找类似arange_beta的东西


Tags: 方法函数numpynp数字数组mean例程
2条回答

根据我的理解,你需要计算贝塔函数的概率分布函数

只需在arange定义的numpy数组上应用scipy.stat的beta.pdf函数即可实现这一点。下面给出了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和/或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))

相关问题 更多 >