我确信此主题之前出现过,但我似乎无法找到真正的解决方案。
如你所知,当指定边缘强加条件时,numpy.histogram是错误的
edges = array, where the array (or list) contains the coordinates of the edges.
在文档中,建议使用“Density”= True。但是,在numpy网站上,这是适当的标准直方图的条件
"Note that the sum of the histogram values will not be equal to 1 unless bins of unity width are chosen"
那么,有没有人知道如何制作清单
values = histogram(list, bins = array (or list))
来自标准化分布?
由于
布莱斯
答案 0 :(得分:2)
它没有错误,它完全应该做的事情;)
如density
参数的文档中所述:
结果是箱处的概率密度函数的值,归一化使得该范围内的积分为1 。注意,除非选择单位宽度的区间,否则直方图值的总和不会等于1; 它不是概率质量函数。
正如您在示例中所看到的那样:
>>> a = np.arange(5)
>>> hist, bin_edges = np.histogram(a, density=True)
>>> hist.sum()
2.4999999999999996
>>> np.sum(hist*np.diff(bin_edges))
1.0
因此,如果您希望density=True
和hist上的总和等于1,则必须创建大小为1的二进制文件。对于正态分布,您可以执行以下操作:
>>> a = np.random.randn(100)
>>> a.std(), a.mean(), a.max() - a.min()
(1.0468524976176077, -0.04129171877871838, 6.049084778833512)
>>> low, high = np.floor(a.min()), np.ceil(a.max())
>>> bins = np.linspace(low, high, high - low + 1)
>>> hist, edges = np.histogram(a, bins=bins, density=True)
>>> hist.sum()
1.0