首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >pylab.hist(data,normed=1)。规范化似乎不能正常工作

pylab.hist(data,normed=1)。规范化似乎不能正常工作
EN

Stack Overflow用户
提问于 2011-03-31 17:51:06
回答 7查看 100.9K关注 0票数 45

我正在尝试创建一个带有参数normed=1的直方图

例如:

代码语言:javascript
运行
复制
import pylab

data = ([1,1,2,3,3,3,3,3,4,5.1])    
pylab.hist(data, normed=1)
pylab.show()

我原以为存储箱的总和是1,但是其中一个存储箱比1大。这个归一化结果是什么呢?如何创建具有归一化的直方图,使直方图的积分等于1?

EN

回答 7

Stack Overflow用户

发布于 2013-05-06 21:24:04

请参阅我的另一篇文章,了解如何使直方图中所有柱状图的总和等于1:https://stackoverflow.com/a/16399202/1542814

复制和粘贴:

代码语言:javascript
运行
复制
weights = np.ones_like(myarray)/float(len(myarray))
plt.hist(myarray, weights=weights)

myarray包含您的数据的位置

票数 60
EN

Stack Overflow用户

发布于 2011-03-31 18:01:09

根据documentation normed:如果为True,则结果是面元上的概率密度函数的值,经过归一化后,范围内的积分为1。请注意,除非选择宽度为1的面元,否则直方图值的总和不等于1;它不是概率质量函数。这是来自numpy doc的,但对于pylab应该是相同的。

代码语言:javascript
运行
复制
In []: data= array([1,1,2,3,3,3,3,3,4,5.1])
In []: counts, bins= histogram(data, normed= True)
In []: counts
Out[]: array([ 0.488,  0.,  0.244,  0.,  1.22,  0.,  0.,  0.244,  0.,  0.244])
In []: sum(counts* diff(bins))
Out[]: 0.99999999999999989

因此,只需根据如下文档进行标准化:

代码语言:javascript
运行
复制
In []: counts, bins= histogram(data, normed= False)
In []: counts
Out[]: array([2, 0, 1, 0, 5, 0, 0, 1, 0, 1])
In []: counts_n= counts/ sum(counts* diff(bins))
In []: counts_n
Out[]: array([ 0.488,  0.,  0.244,  0.,  1.22 ,  0.,  0.,  0.244,  0.,  0.244])
票数 24
EN

Stack Overflow用户

发布于 2011-03-31 18:41:03

我认为你把bin heights和bin内容搞混了。您需要添加每个垃圾桶的内容,即所有垃圾桶的高度*宽度。这应该等于1。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5498008

复制
相关文章

相似问题

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