【问题标题】:Generate a deterministic set of values from non-uniform distributions从非均匀分布生成一组确定的值
【发布时间】:2021-04-20 15:52:32
【问题描述】:

Numpy 有一些例程,例如 np.linspace,可以创建一个由均匀间隔的数字组成的数组。

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

例如,像这样:

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

这里的数字是猜测的,但想法是它们会完美地拟合指定的分布。同样,我也会寻找类似arange_beta 的东西。

【问题讨论】:

    标签: python sample normal-distribution probability-distribution


    【解决方案1】:

    您可能正在寻找的是 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))
    

    【讨论】:

      【解决方案2】:

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

      您只需将 scipy.stat 的 beta.pdf 函数应用于由 arange 定义的 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 分布。
      猜你喜欢
      • 2014-02-04
      • 2011-05-31
      • 2011-04-04
      • 2017-07-16
      • 2020-11-05
      • 2018-02-06
      • 2018-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多