在Scipy Distribution Python 2.7中指定均值和方差

时间:2018-05-29 18:02:32

标签: python-2.7 scipy distribution

我最终需要从某些发行版中随机抽样,所以我需要一个允许我随时改变均值和方差的函数。我正在考虑使用scipy.stats库中的发行版,但是,我很难看到参数“loc”和“scale”如何与我感兴趣的量子相关。我希望能够做类似的事情:

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

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

1 个答案:

答案 0 :(得分:0)

好吧,我没有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))