【问题标题】:Specifying the Mean and Variance in a Scipy Distribution Python 2.7在 Scipy 分布 Python 2.7 中指定均值和方差
【发布时间】:2018-11-08 11:05:42
【问题描述】:

我最终需要从某个分布中随机抽样,所以我需要一个可以让我轻松更改均值和方差的分布。我正在考虑使用 scipy.stats 库中的分布,但是,我很难看到参数“loc”和“scale”如何与我感兴趣的数量相关。我希望能够做类似的事情:

x = numpy.linspace(0,5,1000)
y = scipy.stats.maxwell(x, mean, variance)

但是 loc 和 scale 似乎是函数需要的唯一其他参数。 任何人都可以指定这些数量必须与均值和方差之间的关系,或者建议使用更好的库吗?

【问题讨论】:

    标签: python-2.7 scipy distribution


    【解决方案1】:

    好吧,我没有 python 2.7,所以答案是 python 3.6,但它应该可以工作,毕竟它是一个 scipy。

    基本上,您必须从给定的μσ 中提取scaleloc 参数。这里有两个简单的函数可以做到这一点,加上一些样本来证明我们得到了正确的值。基本上,第一行是你想要的,第三行是采样的结果,应该大致相同。第二行是scalelocμσ 计算得出。玩弄数字,看看进展如何

    import numpy as np
    from scipy.stats import maxwell
    
    def get_scale_from_sigma(sigma):
        """Compute scale from sigma based upon http://mathworld.wolfram.com/MaxwellDistribution.html"""
        a2 = np.pi*sigma / (3.0*np.pi - 8.0)
        return np.sqrt(a2)
    
    def get_loc_from_mu_sigma(mu, sigma):
        """Compute loc from mu/sigma based upon http://mathworld.wolfram.com/MaxwellDistribution.html"""
        scale = get_scale_from_sigma(sigma)
        loc = mu - 2.0 * scale * np.sqrt(2.0 / np.pi)
        return loc
    
    sigma = 1.0
    mu    = 2.0 * get_scale_from_sigma(sigma) * np.sqrt(2.0 / np.pi) # + 3.0 as shift, for exampl
    print(mu, sigma)
    
    scale = get_scale_from_sigma(sigma)
    loc   = get_loc_from_mu_sigma(mu, sigma)
    
    print(scale, loc)
    
    q = maxwell.rvs(size=10000, scale = scale, loc = loc)
    print(np.mean(q), np.std(q))
    

    【讨论】:

      猜你喜欢
      • 2015-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-16
      • 2017-05-30
      • 2013-11-05
      • 2014-05-16
      • 2018-03-30
      相关资源
      最近更新 更多