【问题标题】:Fitting normal distribution to weighted histogram in Python在Python中将正态分布拟合到加权直方图
【发布时间】:2018-08-20 15:37:12
【问题描述】:

我有一个由

生成的加权直方图
import numpy as np
import matplotlib.pyplot as plt

data = np.loadtxt('count_rate_data.txt')
hist_bin = [118,121,124,127,130,133,136,139,142,145,148,151,154,157,160,163,166,169,172,175,178,181,184,187,189]
weights=np.ones_like(data)/float(len(data))

plt.hist(data, hist_bin, weights=weights)
plt.grid()

plt.show()

我想拟合加权到相同程度的正态分布。我怎么做?我知道如何将正态分布拟合到未加权的直方图。但我不确定如何将正常直方图拟合到加权直方图。

【问题讨论】:

  • 那么你将如何拟合未加权的直方图? (曲线拟合、计算均值和方差、取矩等)我想这将取决于如何拟合加权的。
  • 从下面的 cmets 对该问题的答案可以看出,这将取决于适合的目的。所以没有澄清这也太宽泛了。

标签: python-3.x matplotlib scipy histogram normal-distribution


【解决方案1】:

以下步骤对我有用。

  • 获取加权和:

    sums, bins = np.histogram(data, hist_bin, weights=weights)
    
  • 从中进行连续分布:

    hist_dist = scipy.stats.rv_histogram((sums, bins))
    
  • 从此分布中创建一个随机样本:

    weighted_data = hist_dist.rvs(size=100000)
    
  • 并适合您选择的另一种分布,例如正常分布:

    mean, stdev = scipy.stats.norm.fit(weighted_data)    
    

【讨论】:

    猜你喜欢
    • 2014-01-30
    • 2016-04-25
    • 1970-01-01
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多