我们有一个数组
根据numpy教程: 如果density=True,结果是在bin中的概率密度函数值,归一化后该范围内的积分为1。 结果是:
我尝试使用
然而,结果是不同的:
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])
我想知道为什么。
更新:我想提出一个更一般的问题。我们如何在不使用numpy.histogram
的情况下获得数组的概率密度函数,以实现density=True
?
hist, bins = numpy.histogram(*args) then hist = hist.astype(float)/sum(hist)
。这将确保满足概率密度函数的条件。 - jtitusj