在Python中将正态分布拟合到加权直方图

时间:2018-03-12 14:55:31

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

我有一个由

生成的加权直方图
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()

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

1 个答案:

答案 0 :(得分:0)

以下步骤对我有用。

  • 获取加权和:

    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)