如何使用列表为scipy.stats分发设置参数

时间:2016-11-15 23:36:32

标签: python scipy statistics

我正在使用包fitter来适应Python中numpy数据数组的连续分发。 fitter.fitted_param返回不同长度的tupples字典,其中包含每个分布的最佳拟合参数。这些参数与用于在scipy.stats中设置这些分布的参数相同。我想使用这些元组直接用scipy.stats设置参数,但我不知道如何这样做。有什么想法吗?

示例:

>from fitter import Fitter
>import numpy as np
>data = np.random.random((1000,1))
>f = Fitter(data,distributions = ['norm','gamma'])
>f.fit()
>param = f.fitted_param['gamma']
>param
out:(20759.430545279687, -41.012521759919224, 0.0019996776498165851)

如果我现在想创建一个新的伽玛分布,以生成上面a中指定的locscaleparam相同的伽玛分布随机值,需要写:

>from scipy import stats
>rv = stats.gamma(a=param[0],loc=param[1],scale=param[2])
>rv.rvs(100)

如何直接设置alocscale而无需明确输入?我希望能够使用任意数量的参数快速拟合任何分布,并生成遵循该分布的随机值。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

如果参数列表<distribution>(*param)的顺序正确,您可以执行param

如果不是,你必须将你的参数放在字典中,并将其称为<distribution>(**param)的关键字参数,例如:

param = {"a": 20759, "scale": 0.001, "loc": -41}
stats.gamma(**param)

修改:此处提供更多信息:*args and **kwargs?