首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >概率密度函数numpy直方图/枕木统计量

概率密度函数numpy直方图/枕木统计量
EN

Stack Overflow用户
提问于 2015-05-19 13:10:14
回答 3查看 10.7K关注 0票数 4

我们有数组a=range(10)。使用numpy.histogram

代码语言:javascript
复制
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。

结果是:

代码语言:javascript
复制
array([ 0.1,  0.1,  0.1,  0.1,  0.1,  0.1,  0.1,  0.1,  0.2])

我试着用scipy.stats做同样的事情

代码语言:javascript
复制
mean = np.mean(a)
sigma = np.std(a)
norm.pdf(a, mean, sigma)

然而,结果是不同的:

代码语言:javascript
复制
array([ 0.04070852,  0.06610774,  0.09509936,  0.12118842,  0.13680528,0.13680528,  0.12118842,  0.09509936,  0.06610774,  0.04070852])

我想知道为什么。

更新:我想提出一个更一般性的问题。在不使用numpy.histogram的情况下,如何才能得到阵列的概率密度函数?

EN

回答 3

Stack Overflow用户

发布于 2015-05-19 13:38:12

如果是density=True,则结果是在bin处的概率密度函数的值,归一化,使得该范围内的积分为1。

“归一化”并不意味着它将使用正态分布进行转换。它简单地说,垃圾箱中的每个值将除以条目的总数,这样总密度将等于1。

票数 2
EN

Stack Overflow用户

发布于 2015-05-19 13:40:54

由于这个示例的原因,您不能比较numpy.histogram()scipy.stats.norm()

scipy.stats.norm()是一个正常的连续随机变量,而numpy.histogram()处理序列

票数 1
EN

Stack Overflow用户

发布于 2017-09-13 17:02:37

从用Python求解的直方图中绘制连续概率函数(PDF)。有关详细解释,请参阅本博客。(http://howdoudoittheeasiestway.blogspot.com/2017/09/plotting-continuous-probability.html)否则您可以使用下面的代码。

代码语言:javascript
复制
n, bins, patches = plt.hist(A, 40, histtype='bar')
plt.show()
n = n/len(A)
n = np.append(n, 0)
mu = np.mean(n)
sigma = np.std(n)
plt.bar(bins,n, width=(bins[len(bins)-1]-bins[0])/40)
y1= (1/(sigma*np.sqrt(2*np.pi))*np.exp(-(bins - mu)**2 /(2*sigma**2)))*0.03
plt.plot(bins, y1, 'r--', linewidth=2)
plt.show()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30326623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档