我想从分布中计算一些样本的熵。因此,我们可能会有一些分布a
和b
以及一些相应的随机样本。
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))
但是有一种方法可以不必手动指定分发类型吗?换句话说,是否有一种方法可以从a
和b
分布中获得收益?当我查看类类型时,它们是scipy.stats._distn_infrastructure.rv_frozen
。查看a
或b
的属性,似乎没有什么可以告诉您它们是哪种分布类型。
因此,理想的解决方案是使您能够从分布对象和样本中获取熵:
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)
答案 0 :(得分:2)
您可以简单地做到:
def get_entropy(obj, samples):
return obj.dist.entropy(*obj.dist.fit(samples))