我们有数组 a=range(10)
. 使用 numpy.histogram
:
hist,bins=numpy.histogram(a,bins=(np.max(a)-np.min(a))/1, range=np.min(a),np.max(a)),density=True)
根据numpy教程:
如果density = True,则结果是bin处的概率密度函数的值,进行归一化,使得范围内的积分为1 .
结果是:
array([ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.2])
我尝试使用 scipy.stats
做同样的事情:
mean = np.mean(a)
sigma = np.std(a)
norm.pdf(a, mean, sigma)
但结果却不同:
array([ 0.04070852, 0.06610774, 0.09509936, 0.12118842, 0.13680528,0.13680528, 0.12118842, 0.09509936, 0.06610774, 0.04070852])
我想知道为什么 .
Update :我想提出一个更一般的问题 . 如何在不使用 numpy.histogram
for density=True
的情况下获得数组的概率密度函数?
3 回答
“标准化”并不意味着它将使用正态分布进行转换 . 它只是说bin中的每个值将除以条目的总数,以便总密度等于1 .
出于以下示例原因,您无法比较
numpy.histogram()
和scipy.stats.norm()
:从直方图绘制连续概率函数(PDF) - 用Python解决 . 请参阅此博客以获取详细说明 . (http://howdoudoittheeasiestway.blogspot.com/2017/09/plotting-continuous-probability.html)否则你可以使用下面的代码 .