如何以编程方式获取 scipy 中的参数名称和值

How to programatically get parameter names and values in scipy

有什么方法可以获取分布的参数吗?我知道几乎每个发行版都有 "loc" 和 "scale" 但它们之间存在差异,例如 alpha 有 "a",beta 有 "a" ,"b".

我想做的是以编程方式打印(在拟合分布之后)参数、值的键值对。

但我不想为每个可能的分发编写打印例程。

inspect使用 _pdf 方法似乎有效:

import inspect

# keys
[p for p in inspect.signature(stats.beta._pdf).parameters if not p=='x']
# ['a', 'b']

# keys and values
dist = stats.alpha(a=1)
inspect.signature(stats.alpha._pdf).bind('x', *dist.args, **dist.kwds).arguments
# OrderedDict([('x', 'x'), ('a', 1)])
# 'x' probably doesn't count as a parameter

最后我做的是:

parameter_names = [p for p in inspect.signature(distribution._pdf).parameters if not p=='x'] + ["loc","scale"]
parameters = distribution.fit(pd_series)
distribution_parameters_dictionary =dict(zip(parameter_names,parameters))

其中 pd_series 是正在拟合的 pandas 系列数据。