我最终需要从某些发行版中随机抽样,所以我需要一个允许我随时改变均值和方差的函数。我正在考虑使用scipy.stats库中的发行版,但是,我很难看到参数“loc”和“scale”如何与我感兴趣的量子相关。我希望能够做类似的事情:
x = numpy.linspace(0,5,1000)
y = scipy.stats.maxwell(x, mean, variance)
但是loc和scale似乎是函数采用的唯一其他参数。 任何人都可以指定这些数量必须具有的平均值和方差之间的关系,或者建议使用更好的库吗?
答案 0 :(得分:0)
好吧,我没有python 2.7,所以回答是python 3.6,但它应该可以工作,毕竟它是一个scipy。
基本上,您必须从给定的scale
和loc
中提取μ
和σ
个参数。这里有两个简单的功能,加上一些采样来证明我们正在获得正确的值。基本上,第一条印刷线是你想要的,第三条线是取样的结果,应该大致相同。第二行是scale
,loc
来自μ
和σ
。玩数字,看看它是怎么回事
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))