1

我确信这个话题以前出现过,但我似乎找不到真正的解决方案。

如您所知,当指定边缘强加条件时,numpy.histogram 是错误的

edges = array, where the array (or list) contains the coordinates of the edges.

在文档中,建议使用“密度”= 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))

从归一化分布?

谢谢

布莱斯

4

1 回答 1

4

它不是错误的,它完全按照它应该做的;)

如参数文档中所述density

结果是 bin 处的概率密度函数的值,归一化,使得范围内的积分为 1。请注意,除非选择了统一宽度的 bin,否则直方图值的总和将不等于 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 的 bin。对于正态分布,您可以执行以下操作:

>>> 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
于 2013-08-06T17:12:21.467 回答