如何从scipy.stats对象获取分发类类型?

时间:2019-11-29 17:54:35

标签: python scipy

我想从分布中计算一些样本的熵。因此,我们可能会有一些分布ab以及一些相应的随机样本。

from scipy.stats import norm, beta

a = norm(0, 1)
a_samples = a.rvs(10)
a_samples

b = beta(1, 10)
b_samples = b.rvs(10)
b_samples

可以计算这些样本的熵,但是您似乎必须手动指定分布类型。

dist = norm
dist.entropy(*dist.fit(a_samples))

dist = beta
dist.entropy(*dist.fit(b_samples))

但是有一种方法可以不必手动指定分发类型吗?换句话说,是否有一种方法可以从ab分布中获得收益?当我查看类类型时,它们是scipy.stats._distn_infrastructure.rv_frozen。查看ab的属性,似乎没有什么可以告诉您它们是哪种分布类型。

因此,理想的解决方案是使您能够从分布对象和样本中获取熵:

def get_entropy(distribution_object, samples):
    dist = #  Get distribution class from distribution_object somehow here !
    return dist.entropy(*dist.fit(samples))

a_entropy = get_entropy(a, a_samples)
b_entropy = get_entropy(b, b_samples)

1 个答案:

答案 0 :(得分:2)

您可以简单地做到:

def get_entropy(obj, samples):
    return obj.dist.entropy(*obj.dist.fit(samples))